多线程比具有大量内存访问功能的单线程慢

时间:2013-07-30 15:49:47

标签: c pthreads

很多内存访问是否会导致慢速多线程?因为我使用pthread来多线程一个使用大量内存访问的强大功能。如果我用1个线程调用我的函数,那么我的CPU时间会更长。使用CPU的比例在50%到70%之间。

2 个答案:

答案 0 :(得分:1)

除此之外(因为您似乎在讨论内存访问而不是分配),如果您并行分配内存,则默认malloc的性能会很差。

如果您正在寻求更高的性能,您可能需要考虑使用多线程分配更好地扩展的TCMalloc

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

使用共享只读内存进行消息传递是降低缓存流量的一个很好的折衷方案。

答案 1 :(得分:1)

不要猜;测量

你没有说你正在使用什么操作系统,但鉴于pthreads我会猜测Linux。使用Valgrind的callgrindcachegrind等工具来分析您的计划花费时间的位置。 LTTng也可以帮到你。也许perf也是。

是的,如果您的程序最大化了内存带宽或者使缓存崩溃,那么多线程肯定会降低性能。如果线程试图共享任何资源,则尤其如此。但是,你不会知道你不看。