最終更新: mikk_ni3_92 2008年05月30日(金) 16:45:37履歴
現在地 >> メニュー >> OpenMP >> OMP::2重ループ
以下の操作を行え。
[1].2次元配列を用意し、そこに九九の答えを格納する。
[2].2重ループを並列化し、そのループをまわる。→ 担当したスレッドの値で答えを上書きする。
[3].2重ループの内側の変数が共有変数の時とローカル変数の時での違いを確認する
[例]
data[3][5]はスレッド2が参照した
↓
data[3][5]に入っている値「15」を「2」で上書き
#include <cstdio>
#include <iostream>
#include <omp.h>
using namespace std;
#define NUM 9
int data[NUM][NUM];
int main()
{
for(int j = 0;j < NUM;++j)
{
for(int i = 0; i< NUM;++i)
{
data[i][j]= (i+1)*(j+1);
}
}
cout << "--------- init data --------------\n";
for(int j = 0;j < NUM;++j)
{
for(int i = 0; i< NUM;++i)
{
cout << data[i][j] << " ";
}
cout << endl;
}
cout << "--------- parallel after --------------\n";
int y;
int x;
#pragma omp parallel for private (x) num_threads(4)
for(y = 0; y < NUM; ++y)
{
for(x = 0; x < NUM;++x)
{
data[x][y] = omp_get_thread_num();
}
}
for(int j = 0;j < NUM;++j)
{
for(int i = 0; i< NUM;++i)
{
cout << data[i][j] << " ";
}
cout << endl;
}
return 0;
}
以下の操作を行え。
[1].2次元配列を用意し、そこに九九の答えを格納する。
[2].2重ループを並列化し、そのループをまわる。→ 担当したスレッドの値で答えを上書きする。
[3].2重ループの内側の変数が共有変数の時とローカル変数の時での違いを確認する
[例]
data[3][5]はスレッド2が参照した
↓
data[3][5]に入っている値「15」を「2」で上書き
#include <cstdio>
#include <iostream>
#include <omp.h>
using namespace std;
#define NUM 9
int data[NUM][NUM];
int main()
{
for(int j = 0;j < NUM;++j)
{
for(int i = 0; i< NUM;++i)
{
data[i][j]= (i+1)*(j+1);
}
}
cout << "--------- init data --------------\n";
for(int j = 0;j < NUM;++j)
{
for(int i = 0; i< NUM;++i)
{
cout << data[i][j] << " ";
}
cout << endl;
}
cout << "--------- parallel after --------------\n";
int y;
int x;
#pragma omp parallel for private (x) num_threads(4)
for(y = 0; y < NUM; ++y)
{
for(x = 0; x < NUM;++x)
{
data[x][y] = omp_get_thread_num();
}
}
for(int j = 0;j < NUM;++j)
{
for(int i = 0; i< NUM;++i)
{
cout << data[i][j] << " ";
}
cout << endl;
}
return 0;
}