我有一个很大的数组,迭代并完成我的工作需要大约50毫秒。 我正在开发的应用程序将运行tegra3或其他快速CPU。 我把我的工作划分为四个线程,使用pthread,我已经采取了 我的数组的宽度除以系统中找到的总核心数,我在每个线程中迭代1/4数组,一切正常,但现在需要80毫秒才能完成工作。 知道为什么多线程方法比单线程慢吗?如果我将cpu计数降低到1,则所有内容都会恢复50ms。
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计数将上面代码的循环划分为四个部分。 vertex_points是一个带位置的向量。
所以它看起来像
for(int y=start;y<end;y++)
并且每个线程的开始/结束都不同
答案 0 :(得分:2)
线程启动时间通常是毫秒级 - 这就是你正在吃的时间。
考虑到这一点,50毫秒不是我担心的那种延迟。如果我们说话5秒钟,那将是一个很好的候选人。
如果需要经常执行循环,请考虑使用早期旋转并保持休眠的线程的解决方案,等待工作。那会跑得更快。
另外,CPU真的是4核吗?诚实的核心或超线程?