想知道为什么将一个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