本サイトは、マルチコア トータルソリューションカンパニー -フィックスターズの技術者有志が運営するサイトです。
2.6 演習問題 (2-1) 合計値計算プログラム
出典: PS3 Linux Information Site / Cell/B.E.のパワーを体験しよう
演習問題 (2-1) では、第2.3節で学習した内容について出題します。
【問題】
出題プログラム (2-1) は、1から1024までの合計値を求めるプログラムです。このプログラムをSIMD演算を用いて計算するように書き換えなさい。
このプログラムは、for文を用いて、int型の変数iをインクリメントしながら変数sumに加算することで合計値を計算します。
【出題プログラム (2-1)】
1 #include <stdio.h>
2
3 #define MAX_NUM (1024)
4
5 int main(int argc, char **argv)
6 {
7 int i;
8 int sum = 0;
9
10 for (i = 1; i <= MAX_NUM; i++) {
11 sum += i;
12 }
13
14 printf("sum: %d\n", sum);
15
16 return 0;
17 }
⇒出題プログラム (2-1) のソースコードはこちらから
【解答方針】
この問題では、加算データをどのように分割してSIMD演算で扱うかがポイントになります。int型データを扱う場合、SIMD演算では4つの値をまとめて計算することができます。そこで、加算データを4つに分割して、それぞれの部分和を求めます。最後に、各部分和を加算して合計値を算出します。
以下のポイントに従って、解答プログラムを作成するとよいでしょう。
(1) 加算データ1から1024までを分割して、SIMD演算を用いて4つの部分和を求めます。
(2) 求められた4つの部分和をスカラデータとして参照し、合計値を計算します。部分和の参照には、第2.2節で説明したようにポインタのキャストを利用します。
![]() |
| 「第2.5節」へ戻る | 「第2章目次」 | 「演習問題 (2-1) の解答」へ進む |
| 「チュートリアル目次」 |


