現在地 >> メニュー >> 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;
}

目次

― その他 ―

Wiki内検索

計測中...(07.10.8〜)

Save The World






▲よろしければ広告のクリックもお願いします


▲ランキングに参加しました

管理人/副管理人のみ編集できます