Насколько я знаю, эта программа должна получить ускорение в 2 или более раза при запуске с двумя потоками. Вместо этого я получаю почти то же самое, что и серийно.Не похоже, чтобы ускорить работу в openMP
static void proc_paralelo (int n, char *vprimos, int nthr) {
omp_set_num_threads(nthr);
int i, j, prim, posiciones;
int raiz_n = sqrt(n);
for (i=1;i < raiz_n; i++)
{
if (vprimos[i]==0)
{
prim=i+1;
posiciones=ceil((float)(n-(i+prim))/(float)prim);
#pragma omp parallel for private(j) schedule (static, posiciones/omp_get_num_threads())
for (j=0; j<posiciones; j++){
vprimos[i+prim+(j*prim)]=1;}
}
}
}
Количество потоков я использую 2 (сердечники моего процессора), и размером n
является 20000000.
Времен я получаю:
- серийно : 650000000 нс
- параллельно: 630000000 нс
Что должна делать ваша программа? Вы не должны получать ускорение более двух раз, используя 2 потока, кстати. –
Сколько времени занимает 'posiciones', как правило? Если вы собираетесь использовать несколько потоков, он должен быть довольно большим. –
Покажите нам, как вы измеряете время выполнения. – jepio