4 Haziran 2018 Pazartesi

OpenMP

Giriş
Bu kütüphaneyi kullanmak için şu satır dahil edilir.
#include <omp.h>
Birçok C++ derleyicisi kendi OpenMP gerçekleştirimini sağlıyor. Intel, GCC bunlar arasında
Visual Studio 2012'de şöyle yapılır.
Project > Properties sağ tıklanır. Configuration Properties > C/C++ > Language altında "Open MP Support" = Yes yapılır. Bu ayar ile derleyiciye "/openmp" seçeneği belirtilir.

Pragmalar
Flush
Şöyle yaparız.
bool foo = false;
#pragma omp flush (foo)
Paralel Kod
OpenMP parallel yazısına taşıdım.

Critical
OpenMP Critical yazısına taşıdım

Master
Şöyle yaparız. omp single ile karşılaştırılabilir.
#pragma omp master
{
  ...
}
Paralel For
OpenMP parallel for yazısına taşıdım.

Parallel For + Schedule
Tam ne işe yaradığını anlamadım.

dynamic seçeneği için şöyle yaparız.
#pragma omp parallel for schedule(dynamic)
for(int i=0; i<n; i++){
  ...
}
runtime seçenepi için şöyle yaparız.
#pragma omp parallel for private(i) schedule(runtime)
for ( i=0; i<n; ++i ) {
{ 
  ...
}
Parallel For + nowait
Her paralel for döngüsü sonunda thread'lerin birbirini beklediği görünmez bir bariyer bulunur. Eğer bu olmasın istersek şöyle yaparız.
#pragma omp parallel
{

  #pragma omp for nowait
  for(int i=0; i<100; i++) {
    ...
  }
  #pragma omp for nowait
  for(int i=0; i<100; i++) {
    ...
  }
}
Paralel For + private ve shared değişkenler
Şöyle yapılabilir.
unsigned int i,j;

#pragma omp parallel for private (j) shared(i) 
for (i=0;i<NX;i++)
{
...
}
Metodlar
Süre Ölçümü
şöyle yapılabilir.
double tbeg = omp_get_wtime();
...
double time = omp_get_wtime() - tbeg;
cout<<"finish in "<<time<<" seconds"<<endl;



Hiç yorum yok:

Yorum Gönder