使用多个处理器加速程序

Rob*_*ean 5 c c++ parallel-processing performance

我发现有时将一个循环划分为两个或更多循环会更快

for (i=0; i<AMT; i++) {
    a[i] += c[i];
    b[i] += d[i];
}
     ||
     \/
for (i=0; i<AMT; i++) {
    //a[i] += c[i];
    b[i] += d[i];
}
for (i=0; i<AMT; i++) {
    a[i] += c[i];
    //b[i] += d[i];
}
Run Code Online (Sandbox Code Playgroud)

在我的桌面上,win7,AMD Phenom(tm)x6 1055T,双循环版本运行速度更快,时间缩短了约1/3.

但如果我正在处理任务,

for (i=0; i<AMT; i++) {
    b[i] = rand()%100;
    c[i] = rand()%100;
}
Run Code Online (Sandbox Code Playgroud)

将b和c的赋值分成两个循环并不比一个循环快.

我认为操作系统使用一些规则来确定某些代码是否可以由多个处理器运行.

我想问一下我的猜测是否正确,如果我是对的,那么多个处理器将自动(没有线程编程)用于加速我的程序的规则或场合是什么?

Bec*_*hir 2

优化由编译器完成(http://en.wikipedia.org/wiki/Loop_optimization)。如果您使用的是 GCC,请查看此页面http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html以获取可用优化规则的列表。

另一方面,请注意您正在使用 rand() 函数,该函数会消耗大量 CPU 时间。