19 Aralık 2018 Çarşamba

OpenMP parallel for - Döngüyü Paralelleştirir

Giriş
Şu satırı dahil ederiz.
#include <omp.h>
#parallel ve #parallel for Fakı Nedir
#pragma omp parallel blok içindeki aynı kodu N tane thread tarafından çalıştırır. Şeklen şöyledir

#pragma omp parallel for döngüyü N tane thread'e böler. Şeklen şöyledir. Burada chunk olarak 1 veriliyor. Dolayısıyla her thread 1 tane eleman işleyip, 4 tane eleman atlıyor.



#parallel for
N'e kadar olan döngü şöyle paralelleştirilir. Her thread döngünün belli bir kısmını çalıştırır. Örneğin ilk thread 1-100 , ikinci thread 101 - 200 arası vs. gibi.
#pragma omp parallel for
for(int i = 0; i < N; i++)
{
    ...
}
#parallel for ile C++11
Eğer v random access iterator sağlıyorsa şöyle yaparız.
#pragma omp parallel for
for (it = v.begin(); it < v.end(); it++)
{
   ...
}
#parallel for ile thread sayısı
Şöyle yaparız.
#pragma omp parallel for num_threads(2)
for (i = 0; i < N; i++) 
{
  ...
}   
#parallel for içinde critical
Şöyle yaparız.
#pragma omp parallel for
for (int i = 20; i < 1000; i++) 
{
  ...
  #pragma omp critical
  {
    ...
  }

}
#parallel for içinde atomic
Şöyle yaparız.
int iteration = 0;
#pragma omp parallel for 
for (int i = 0; i < num_voxels; i++)
{
  ...
  #pragma omp atomic
  iteration++;
  ...  

}

Hiç yorum yok:

Yorum Gönder