據我所知,這個程序應該得到加速2或更多時運行2線程。而不是我連續得到幾乎相同。似乎沒有得到加速,我應該在打開MP
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 ns
- 並聯:630000000 ns
你的程序應該做什麼?通過使用2個線程,你不應該得到超過2倍的加速,順便說一句。 –
'posiciones'通常有多長時間?如果你要利用多個線程,它應該非常大。 –
向我們展示如何衡量執行時間。 – jepio