2016-06-16 58 views
5

Openmp kullanarak bu for-loop'u paralel hale getirmeye çalışıyorum, bu döngüde küçülme olduğunu fark ettim, böylece "#pragma omp parallel azaltma (+, ftab)", ama işe yaramadı ve bana verdi. Bu hata: hatası: 'ftab' için kullanıcı tanımlı azaltma bulunamadı.Bu for döngüsü azaltma kullanarak nasıl paralelleştirilir?

#pragma omp parallel for reduction(+:ftab) 
    for (i = 1; i <= 65536; i++) ftab[i] += ftab[i-1]; 

cevap

3

Yapmak istediğiniz işlem prefix sum dur. Paralel olarak yapılabilir. Basit bir yol, OpenPP veya TBB arka ucu ile thrust::inclusive_scan kullanmaktır.

thrust::inclusive_scan(thrust::omp::par, ftab, ftab + 65536, fab); 

veya

thrust::inclusive_scan(thrust::tbb::par, ftab, ftab + 65536, fab); 

the Wikipedia page başvurulan olarak da kendiniz uygulayabilir.