我有一个大数组,迭代并完成我的工作大约需要 50 毫秒。我正在开发的应用程序将在 tegra3 或其他快速 CPU 上运行。我已经使用 pthread 将我的工作划分为四个线程,我获取了数组的宽度,将其除以系统中发现的总核心数,并且我在每个线程中迭代数组的 1/4,一切都很好,但是它现在需要 80 毫秒来完成这项工作。知道为什么多线程方法比单线程慢吗?如果我将 cpu 计数降低到 1,一切都会回到 50 毫秒。
for(int y = 0; y<height;y++)
{
for(int x = 0; x<width; x++)
{
int index = (y*width)+x;
int sourceIndex = source->getIndex(vertex_points[index].position[0]/ww, vertex_points[index].position[1]/hh);
vertex_points[index].position[0]+=source->x[sourceIndex]*ww;
vertex_points[index].position[1]+=source->y[sourceIndex]*hh;
}
};
我首先根据 cpu 计数将上述代码的 for 循环分为四个部分。vertex_points 是一个带有位置的向量。
所以看起来像
for(int y=start;y<end;y++)
并且开始/结束在每个线程上有所不同