) 스레드 ID를 기반으로 각 스레드가 자체 변수 세트를 갖는 병렬 (예 : 정적/동적/안내) for-loop를 실행하려고합니다. 병렬 pragma 내에서 선언 된 변수는 private이지만, for 루프의 모든 반복에서 변수를 다시 선언하고 싶지는 않습니다.C에서 스케쥴링을위한 OpenMP 병렬 (
내 특정 상황에서, 좌표를 생성하는 집합이 pi를 근사화하는 원의 내부 또는 외부에있을 때마다 계산됩니다. 각각의 스레드에서 이러한 좌표를 생성하기 위해 erand48 (int [3] seed)를 사용하고 각 스레드에 'seed'에 대한 다른 값 집합을 제공함으로써 더 다양한 숫자를 사용하여 근사 (및 또한이 시뮬레이션에 대한 요구 사항).
long long int global_result = 0;
int tID = omp_get_thread_num();
int[3] seed;
seed[0] = (((tid*tid + 15) * 3)/7);
seed[1] = ((((tid + tid) * 44)/3) + 2);
seed[2] = tid;
int this_result = 0;
# pragma omp parallel for num_threads(thread_count) schedule(runtime)
for(i = 0; i < chunksize; i++){
x = erand48(seed);
y = erand48(seed);
((x*x+y*y)>=1)?(this_result++):;
}
# pragma omp critical{
global_result+= this_result;
}
이것은 내가하려는 일을 나타낼 수있는 최선의 방법입니다. 'this_result', 'tid'및 'seed'의 값을 개인 범위로 지정하고 싶습니다.
해당 할당. 차라리 시리즈를 계산할 것입니다. 그래도 내 문제는 해결됩니다. –
내부 pragma에는 'parallel'이 없어야합니다. –
당신은 물론 맞습니다! 두뇌 방귀 입력 코드를 웹 "편집기"에 입력하십시오 :-) –