Giriş
Bu kütüphaneyi kullanmak için şu satır dahil edilir.
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.
OpenMP parallel yazısına taşıdım.
Critical
Parallel For + Schedule
Tam ne işe yaradığını anlamadım.
dynamic seçeneği için şöyle yaparız.
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.
Şöyle yapılabilir.
Süre Ölçümü
şöyle yapılabilir.
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 KodOpenMP parallel yazısına taşıdım.
Critical
OpenMP Critical yazısına taşıdım
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 + nowaitHer 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++)
{
...
}
MetodlarSü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