金子邦彦研究室3次元,地図Cell/B.E.プロセッサでの OpenMP の使い方

Cell/B.E.プロセッサでの OpenMP の使い方

Cell/B.E.プロセッサの c++ で openmpを利用するサンプルプログラムとコンパイル方法と実行結果.

使用した機材は,IBM 社の CELL/B.E. で, コンパイラは IBM 社の XLC

ソースコードtest.cpp

----------------------------------------------------------------------------
#include 
#include 
#include 

int main(int argc, char *argv[])
{
     printf("start\n");
omp_set_num_threads(omp_get_num_procs()); //forループのスレッド数設定
 printf("thread%d\n", omp_get_num_threads()); //現在のスレッド数
 printf("cpu%d\n", omp_get_num_procs()); //利用可能なcpu数


#pragma omp parallel for //for文を並列に行うopenmpの記述
for(int i=0;i<100;i++){
printf("%d %d %d %d\n",i,omp_get_num_procs(),
 omp_get_num_threads( ),omp_get_thread_num()+1);
}
     printf("end\n");
     return 0;
}
----------------------------------------------------------------------------

コンパイル方法(3通り)

実行結果の例

以下に「ppu+spu」の場合の実行結果の例を載せる. ppuだけとspuだけの場合は利用可能cpuが「1」となり、forループ中の表示は「i 1 1 1」となる.

----------------------------------------------------------------------------
start
thread1
cpu16
93 16 16 1
18 16 16 13
94 16 16 1
19 16 16 13
20 16 16 13
86 16 16 2
54 16 16 7
87 16 16 2
21 16 16 13
88 16 16 2
42 16 16 9
89 16 16 2
43 16 16 9
90 16 16 2
44 16 16 9
91 16 16 2
45 16 16 9
92 16 16 2
46 16 16 9
60 16 16 6
48 16 16 8
12 16 16 14
22 16 16 13
36 16 16 10
55 16 16 7
49 16 16 8
56 16 16 7
50 16 16 8
47 16 16 9
66 16 16 5
13 16 16 14
72 16 16 4
14 16 16 14
73 16 16 4
15 16 16 14
74 16 16 4
16 16 16 14
23 16 16 13
17 16 16 14
79 16 16 3
95 16 16 1
80 16 16 3
37 16 16 10
24 16 16 12
0 16 16 16
51 16 16 8
67 16 16 5
52 16 16 8
75 16 16 4
76 16 16 4
1 16 16 16
96 16 16 1
6 16 16 15
97 16 16 1
7 16 16 15
8 16 16 15
9 16 16 15
10 16 16 15
11 16 16 15
57 16 16 7
38 16 16 10
25 16 16 12
39 16 16 10
30 16 16 11
40 16 16 10
31 16 16 11
32 16 16 11
33 16 16 11
34 16 16 11
35 16 16 11
98 16 16 1
58 16 16 7
81 16 16 3
59 16 16 7
26 16 16 12
27 16 16 12
28 16 16 12
29 16 16 12
53 16 16 8
77 16 16 4
61 16 16 6
62 16 16 6
63 16 16 6
64 16 16 6
65 16 16 6
68 16 16 5
82 16 16 3
78 16 16 4
83 16 16 3
69 16 16 5
70 16 16 5
71 16 16 5
99 16 16 1
84 16 16 3
85 16 16 3
41 16 16 10
2 16 16 16
3 16 16 16
4 16 16 16
5 16 16 16
end
----------------------------------------------------------------------------