paralelPragma OMP paralel OpenMP ile C++ olarak
#pragma omp parallel for
for(int i=0; i<N; i++) {
...
}
ve
#pragma omp parallel
for(int i=0; i<N; i++) {
...
}
arasında herhangi bir fark var mı?
Teşekkürler!
paralelPragma OMP paralel OpenMP ile C++ olarak
#pragma omp parallel for
for(int i=0; i<N; i++) {
...
}
ve
#pragma omp parallel
for(int i=0; i<N; i++) {
...
}
arasında herhangi bir fark var mı?
Teşekkürler!
#pragma omp parallel
for(int i=0; i<N; i++) {
...
}
Bu kod, paralel bir bölge oluşturur ve her bir iş parçacığı, döngüde olanı yürütür. Diğer bir deyişle, döngüyü ayıran ve tüm yinelemeleri sadece bir kez tamamlayan N iş parçacığı yerine tam döngü N kere yaparsınız.
Sen yapabilirsiniz:
#pragma omp parallel
{
#pragma omp for
for(int i=0; i < N; ++i)
{
}
#pragma omp for
for(int i=0; i < N; ++i)
{
}
}
Bu yaratacak bir paralel bölgesini (aka bir çatal/pahalı olan katılmak ve bu nedenle her döngü için yapmak istemiyorum) ve çoklu döngüler çalıştırmak bu bölgeye paralel. Paralel bir bölgeniz varsa, #pragma omp parrallel for
'un aksine #pragma omp for
'u kullandığınızdan emin olun çünkü ikincisi, N iş parçacığınızın her birinin döngü yapmak için N daha fazla iş parçacığı oluşturduğunu gösterir.
Görüyorum; ihtiyacım olan buydu. Böylece ilk seçenek (#pragma omp parallel') toplamda Nthreads * N yinelemelerini yürütecek ve formun herhangi bir ifadesi vec [i] = result; –
@ FranciscoJ.R.Ruiz bu doğru. Eğer bu soruya cevap verirseniz, cevap olarak işaretlemekten çekinmeyin :) – RyanP
Elbette! Çok teşekkürler. –
İkinci durumda, her iş parçacığı aynı işe (tüm döngü için) sahiptir. İlk durum, iş parçacıkları arasındaki çalışmayı paylaşır, böylece her bir iş parçacığı, 't' iş parçacığının sayısı olan 'N/t' yineleme yapar. –