本サイトは、Cell トータルソリューションカンパニー -フィックスターズの技術者有志が運営するサイトです。

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つの部分和を求めます。

画像:FIGURE-02-18.png

図 2.18 部分和の計算

 (2) 求められた4つの部分和をスカラデータとして参照し、合計値を計算します。部分和の参照には、第2.2節で説明したようにポインタのキャストを利用します。

画像:FIGURE-02-19.png

図 2.19 部分和の合計


第2.5節」へ戻る 第2章目次 演習問題 (2-1) の解答」へ進む
チュートリアル目次
表示
個人用ツール
Open Source Projects
ツールボックス