Android NDK pthread multicore

时间:2012-07-14 14:37:50

标签: android pthreads android-ndk tegra

我有一个很大的数组,迭代并完成我的工作需要大约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++)

并且每个线程的开始/结束都不同

1 个答案:

答案 0 :(得分:2)

线程启动时间通常是毫秒级 - 这就是你正在吃的时间。

考虑到这一点,50毫秒不是我担心的那种延迟。如果我们说话5秒钟,那将是一个很好的候选人。

如果需要经常执行循环,请考虑使用早期旋转并保持休眠的线程的解决方案,等待工作。那会跑得更快。

另外,CPU真的是4核吗?诚实的核心或超线程?