0

大量的内存访问会导致多线程速度变慢吗?因为我使用 pthread 来多线程一个很棒的函数谁使用了大量的内存访问。如果我用 1 个线程调用我的函数,我有更多的时间 CPU。并且使用CPU的比例在50%到70%之间。

4

2 回答 2

1

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

如果您正在寻找更高的性能,您可能需要考虑TCMalloc,它可以通过多线程分配显着更好地扩展。

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

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

于 2013-07-30T16:21:59.617 回答
1

不要猜测;措施。

你没有说你正在使用什么操作系统,但考虑到 pthreads 我会猜测 Linux。使用 Valgrind 之类的工具callgrindcachegrind分析您的程序在哪里花费时间。LTTng也可以帮助你。也许perf也是。

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

于 2013-07-30T16:25:39.850 回答