1
我需要使用的OpenMP編程用2^15大小的mpz_t陣列平行於以下代碼:使用OpenMP和mpz_t的malloc使段錯誤
#pragma omp parallel for private(j,temp3)
for(j=Real;j<LL;j++)//l
{
for(__int64_t k=0;k<=((j/(Real*1.0))/(log(sieve[i])/log(2.0)));k++)//l5
{
if((((j/(Real*1.0)-k*(log(sieve[i])/log(2.0)))<LL))&&(((j/(Real*1.0)-k*(log(sieve[i])/log(2.0)))>0)))// can log() use __int64_t?
mpz_add(temp3[j],temp3[j],temp2[(int)floor((j-k*Real*(log(sieve[i])/log(2.0))))]);
}
mpz_add_ui(temp3[j],temp3[j],(int)floor(((j/(Real*1.0))/(log(sieve[i])/log(2.0)))));
}
我初始陣列TEMP3像這樣:
mpz_t temp3[LL];
,它會導致分割fault.So我試着寫這樣的:
mpz_t *temp3=(mpz_t *)malloc(sizeof(mpz_t)*LL);
也造成分割故障,並且malloc操作不成功。 如何解決?謝謝!
你永遠不會調用'mpz_init'?你爲什麼讓temp3是私人的? –
我叫mpz_init。 temp3 []可以並行獲得正確的值而不設置私有? – user3346400
'private'的意思是:「爲每個線程複製它」。在這種情況下製作副本意味着什麼? –