2016-06-16 14 views
5

Ich versuche, diese for-Schleife parallelisiert zu machen, indem ich Openmp benutze, ich erkannte, dass dort Reduktion in dieser Schleife, so fügte ich hinzu "#pragma omp parallel für Reduktion (+, ftab)", aber es hat nicht funktioniert und es gab mir Dieser Fehler: Fehler: Benutzerdefinierte Reduktion wurde für 'ftab' nicht gefunden.wie diese For-Schleife mit Reduktion zu parallelisieren?

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

Antwort

3

Die Operation, die Sie tun möchten, ist prefix sum. Es kann parallel gemacht werden. Ein einfacher Weg ist, thrust::inclusive_scan mit OpenMP oder TBB-Backend zu verwenden.

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

oder

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

Sie können auch selbst umzusetzen wie in the Wikipedia page verwiesen.