스레드 수를 4로 설정했습니다.for 루프를 실행하는 스레드가 혼합되어 표시되지 않는 이유는 무엇입니까
다음 코드에서는 순차 형식 동작을 봅니다. 모든 스레드가 임의의 방법으로 ID를 인쇄하는 것을보고 싶습니다. 이것은 pthread 구현이 어떻게 동작 하는지를 보여줍니다. 섹션에서
#include <omp.h>
#include <stdio.h>
#include <stdlib.h>
#define CHUNKSIZE 5
#define N 1000
int main (int argc, char *argv[])
{
int nthreads, tid, i, chunk;
float a[N], b[N], c[N];
/* Some initializations */
for (i=0; i < N; i++)
a[i] = b[i] = i * 1.0;
chunk = CHUNKSIZE;
#pragma omp parallel for schedule(static,10) shared(a,b,c) private(i,tid)
for (i=0; i<N; i++)
{
tid = omp_get_thread_num();
c[i] = a[i] + b[i];
printf("Thread %d: c[%d]= %f\n",tid,i,c[i]);
}
}
출력 :
Thread 2: c[949]= 1898.000000
Thread 2: c[980]= 1960.000000
Thread 2: c[981]= 1962.000000
Thread 2: c[982]= 1964.000000
Thread 2: c[983]= 1966.000000
Thread 2: c[984]= 1968.000000
Thread 2: c[985]= 1970.000000
Thread 2: c[986]= 1972.000000
Thread 2: c[987]= 1974.000000
Thread 2: c[988]= 1976.000000
Thread 2: c[989]= 1978.000000
Thread 0: c[1]= 2.000000
Thread 0: c[2]= 4.000000
Thread 0: c[3]= 6.000000
Thread 0: c[4]= 8.000000
Thread 0: c[5]= 10.000000
Thread 0: c[6]= 12.000000
Thread 0: c[7]= 14.000000
Thread 0: c[8]= 16.000000
Thread 0: c[9]= 18.000000
Thread 0: c[40]= 80.000000
Thread 0: c[41]= 82.000000
Thread 0: c[42]= 84.000000
Thread 0: c[43]= 86.000000
Thread 0: c[44]= 88.000000
Thread 0: c[45]= 90.000000
Thread 0: c[46]= 92.000000
Thread 0: c[47]= 94.000000
Thread 0: c[48]= 96.000000
Thread 0: c[49]= 98.000000
Thread 0: c[80]= 160.000000
Thread 0: c[81]= 162.000000
Thread 0: c[82]= 164.000000
Thread 0: c[83]= 166.000000
Thread 0: c[84]= 168.000000
Thread 0: c[85]= 170.000000
Thread 0: c[86]= 172.000000
Thread 0: c[87]= 174.000000
Thread 0: c[88]= 176.000000
Thread 0: c[89]= 178.000000
Thread 0: c[120]= 240.000000
Thread 0: c[121]= 242.000000
Thread 0: c[122]= 244.000000
Thread 0: c[123]= 246.000000
인터리브되고 있습니다. 그러나 당신이 기대하는 세밀 함이 아닙니다. 내 컴퓨터에는 다른 스레드가 나타나기 전에 100 줄 정도가 있습니다. – Mysticial