2013-07-30 52 views
0

是否有很多内存访问会导致多线程缓慢?因为我使用pthread来多线程读取使用大量内存访问的功能。如果我用1个线程调用我的函数,我有更多时间CPU。使用CPU的比例在50%到70%之间。在大量内存访问的情况下,多线程的处理速度比单线程缓慢

+1

是可能的,因为线程间的上下文切换时间,一直到线程给予足够的工作,设计并行编程是非常重要的 –

+0

并不是每一个代码是parallelliz ... parall ...螺。这一切都取决于你实际上在做什么。 – Nbr44

+0

阅读关于内存抖动这里:“[什么是”缓存友好“的代码?](http://stackoverflow.com/a/16699282/335858)” – dasblinkenlight

回答

1

不要猜测;测量。

你不说你使用的是什么操作系统,但是给定pthreads我会猜测Linux。使用Valgrind的callgrindcachegrind等工具来分析程序花费的时间。 LTTng也可以帮助你。也许perf也。

是的,如果你的程序是杏你的内存带宽,或者颠簸缓存,那么多线程肯定能降低性能。如果线程试图共享任何资源,则尤其如此。但是,你不会知道你是否看不到。

1

除了(因为你似乎在谈论内存访问,而不是分配),默认的malloc有表现不佳,如果你在并行分配内存。

如果您正在寻找更高的性能,你可能要考虑TCMalloc与多线程分配显著更好的扩展。

通常,保持共享内存在线程之间同步是一场噩梦,如果可能的话应该尽量避免。通过采用消息传递范例来查看是否可以避免缓存失效(这可能不适用于您的用例)。

消息传递与共享只读内存是降低缓存流量的良好折衷方案。