Да предположим, че имам масив с индекси 0..n-1. Има ли начин да изберете кои клетки да обработва всяка нишка? напр. нишка 0 ще обработва клетки 0 и 5, нишка 1 ще обработва клетки 1 и 6 и т.н.
OpenMP - за присвояване на нишка на цикъл
Отговори (2)
Можете дори да бъдете по-ясни:
#pragma omp parallel
{
int nth = omp_get_num_threads();
int ith = omp_get_thread_num();
for (int i=ith; i<n; i+=nth)
{
// handle cell i.
}
}
това трябва да прави точно това, което искате: нишката ith обработва клетка ith, ith+nth, ith+2*nth, ith+3*nth и т.н.
person
nat chouf
schedule
02.12.2012
Благодаря, точно това търсех.
- person Shmoopy; 03.12.2012
Погледнахте ли клаузата на графика за паралела за?
#pragma omp for schedule(static, 1)
трябва да внедрите това, което искате, можете да експериментирате с клаузата за график, като използвате следния прост код:
#include<stdio.h>
#include<omp.h>
int main(){
int i,th_id;
#pragma omp parallel for schedule(static,1)
for ( i = 0 ; i < 10 ; ++i){
th_id = omp_get_thread_num();
printf("Thread %d is on %d\n",th_id,i);
}
}
person
igon
schedule
01.12.2012
for(off = 0; off < 5; ++off) { for(i = off; i < size; i += 5) { ... }}
? (Ако приемем, че имате правописна грешка и означава, че нишка 1 третира 1, 6 и т.н.) - person Daniel Fischer   schedule 02.12.2012