1

想知道为什么像这样将 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);
}
4

1 回答 1

1

我想到了。我正在使用全局变量(i、j、k、x、y、z 等)来迭代循环。我没有在示例中显示这一点,所以您不会知道。这显然增加了很多开销。现在它与每个线程的局部变量一起正常工作。

于 2013-10-29T02:48:21.323 回答