想知道为什么像这样将 for 循环分成两个线程会使我的性能降低近一倍?我在双核处理器上运行。
正常循环(1.78 秒):
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 秒):
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);
}