想知道爲什麼將一個for循環分成兩個這樣的線程會使我的性能下降幾乎減少一倍?我正在使用雙核處理器。多線程for循環在C
正常循環(1.78 S):
int var;
for (i = 0; i < n; i++)
for (j=0; j < p; j++){
var = 0;
for (k=0; k < m; k++)
var = i + k;
}
分環路(2.53 S):
pthread_create(&tid[0], NULL, A, NULL);
pthread_create(&tid[1], NULL, B, NULL);
for (i=0; i < 2; i++) pthread_join(tid[i],NULL) == 0;
...
void * A(void *arg)
{
int i, j, k, var;
for (i = 0; i < n/2; i++)
for (j=0; j < p; j++)
{
var = 0;
for (k=0; k < m; k++)
var = i + k;
}
pthread_exit(NULL);
}
void * B(void *arg)
{
int i, j, k, var;
for (i = n/2; i < n; i++)
for (j=0; j < p; j++)
{
var = 0;
for (k=0; k < m; k++)
var = i + k;
}
pthread_exit(NULL);
}
它可能與內存訪問有關嗎?我試圖從循環中刪除內存訪問,然後回去測試我的單線程和雙線程循環,看看是否有速度增加,然後加回內存讀取和基準,然後加回寫入和基準?我沒有這方面的經驗;這只是我將如何處理故障排除。 –
實際上,我首先想知道它是否使用了兩個內核 - 您正在運行哪些操作系統,是否在單個進程內分割內核,在什麼條件下等等。 –
「相同的性能」意味着它在兩秒內運行?或半個小時?要麼? – Macattack