Linuxマシンでgccを使用してopenMPでCで作業しています。openmp の並列 for ループでは、静的に割り当てられた配列をプライベートとして宣言できます。コードフラグメントを考えてみましょう:
int a[10];
#pragma omp parallel for shared(none) firstprivate(a)
for(i=0;i<4;i++){
そして、すべてが期待どおりに機能します。しかし、代わりに動的に割り当てると、
int * a = (int *) malloc(10*sizeof(int));
#pragma omp parallel for shared(none) firstprivate(a)
a の値 (少なくとも a[1...9]) は保護されていませんが、共有されているかのように機能します。これは、pragma コマンドでは、プライベートにする必要がある配列 a の大きさを omp に伝えるものがないため、理解できます。この情報をopenmpに渡すにはどうすればよいですか? 動的に割り当てられた配列全体をプライベートとして宣言するにはどうすればよいですか?