我有一个c代码处理全局数组中的大量数据(80MB,U16)。为了减少所花费的时间,我使用了pthreads库。该过程将每个元素乘以常量。使用2个线程,处理需要50ms。使用三个线程时,需要120毫秒(大约)。我也试过增加堆栈内存,但它不起作用。
代码中没有rand()函数或内存的动态分配。只需在2或3个线程中调用一个简单的函数。
我想知道如果线程数增加,限制性能的因素是什么? 另外,请建议我如何进一步优化执行时间。
P.S:我的系统有8GB RAM,Intel i3处理器。在Windows上运行(如果有帮助的话)答案 0 :(得分:1)
让我们假设你做了一个最佳实现(根据问题,这可能很难)。
您将这些块分开,没有重叠并将它们送入线程。
到目前为止一切顺利。
首先,创建和终止(并且可能正在管理)一个线程需要花费时间,这会增加所需的计算时间。这可能会产生开销,从而损害您的利益。
但我认为更重要的可能是你有一个i3处理器,其中很多只有2个内核,并且根据是否激活了超线程,你还有2个逻辑内核。对于这样的系统,你不能从2个以上的线程中受益(如果它们可以使用所有资源),thrid线程可能会妨碍其他两个线程,从而创建更长的运行时间。
答案 1 :(得分:0)
最常见的原因是基准测试不正确......
除此之外,您必须意识到创建/删除线程是一项资源密集型操作。这需要时间,需要记忆。
意味着更多线程不一定能更快地完成整个程序的执行,而是能够更快地执行特定任务。因此,必须根据具体情况考虑在应用程序中使用线程。