私はコードをもっている:
#include <stdio.h>
#include <omp.h>
static void func()
{
char t[30];
sprintf(t,"%d %d\n",omp_get_num_threads(),omp_get_thread_num());
write(1,t,strlen(t));
write(1,"checkpoint 1\n",13);
#pragma omp barrier
write(1,"checkpoint 2\n",13);
#pragma omp barrier
write(1,"checkpoint 3\n",13);
#pragma omp barrier
write(1,"checkpoint 4\n",13);
}
int main()
{
int i;
#pragma omp parallel for
for(i=0;i<2;i++)
{
func();
}
}
そして出力:
8 1
8 0
checkpoint 1
checkpoint 1
checkpoint 2
checkpoint 2
[here my program blocks].
2 を 8 に変更すると、機能します。しかし、for ループに 2 が必要です。
ループの前に omp_set_num_threads(2) を使用せずにコードを機能させる方法は? (これを入れても動作します)