ページ 11

OpenMPについて

Posted: 2012年6月09日(土) 00:03
by pblc
OpenMPについて質問なのですが、スレッド数を2に設定したとすると

コード:

int main(void)
{
	int i, a[100];
#pragma omp parallel
	{
#pragma omp for 
		for(i=0;i<100;i++){
			a[i]=0;
		}
	}
}
というプログラムでは、スレッドの片方が0<=i<50を実行し、もう片方が50<=i<100を実行する(?)と思うのですが、

コード:

int main(void) {
	
	int i,j;
	double ary_1[n][n], ary_2[n][n];
	
#pragma omp parallel
	{
#pragma omp for private(j)
		for(i=0; i<n; i++){
			for(j=0; j<n; j++){
				ary_1[i][j] = 0;
				ary_2[i][j] = 0;
			}
		}
	}
}
または、

コード:

int main(void) {
	
	int i,j,k;
	double ary_1[n][n], ary_2[n][n], ary_r[n][n];
	
#pragma omp parallel
	{
#pragma omp for private(j,k)
		for(i=0; i<n; i++){
			for(j=0; j<n; j++){
				for(k=0; k<n; k++){
					ary_r[i][j] = ary_1[i][k] * ary_2[k][j];
				}
			}
		}
	}
}
というプログラムでは、各スレッドはi,j,kをどのような順序で実行しているのでしょうか?

Re: OpenMPについて

Posted: 2012年6月10日(日) 19:47
by pblc
すみません、自己解決しました。
前半はi,jの場合は0<=i<50と50<=i<100に分けて、jは局所変数としてそれぞれのiで0から99まで回して、
後半もやはり同じようにiの部分だけ並列化するみたいです
お騒がせしました