C 多线程在功能上比单线程慢,内存访问量大

C 多线程在功能上比单线程慢,内存访问量大,c,pthreads,C,Pthreads,大量的内存访问会导致多线程速度变慢吗?因为我使用pthread来多线程处理一个使用大量内存访问的伟大函数。如果我用一个线程调用我的函数,我的CPU时间会比这个大。使用CPU的比例在50%到70%之间。撇开不谈(因为您似乎在谈论内存访问而不是分配),如果并行分配内存,默认的malloc性能很差 如果您正在寻找更高的性能,您可能需要考虑多线程分配的情况下,哪个尺度更好。 一般来说,在线程之间保持共享内存的同步是一个噩梦,如果可能的话,应该尽量避免。看看是否可以通过采用消息传递范例来避免缓存失效(这对

大量的内存访问会导致多线程速度变慢吗?因为我使用pthread来多线程处理一个使用大量内存访问的伟大函数。如果我用一个线程调用我的函数,我的CPU时间会比这个大。使用CPU的比例在50%到70%之间。

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

如果您正在寻找更高的性能,您可能需要考虑多线程分配的情况下,哪个尺度更好。 一般来说,在线程之间保持共享内存的同步是一个噩梦,如果可能的话,应该尽量避免。看看是否可以通过采用消息传递范例来避免缓存失效(这对于您的用例来说可能是不可能的)

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

不要猜测;量

你不会说你在使用什么操作系统,但考虑到pthreads,我会猜测Linux。使用Valgrind的
callgrind
cachegrind
等工具来分析程序在哪里花费时间
LTTng
也可以帮助您。也可能
perf


是的,如果您的程序正在最大限度地利用内存带宽,或者正在刷新缓存,那么多线程处理肯定会降低性能。如果线程试图共享任何资源,则尤其如此。但是,如果你不看,你将不知道。

可能是的,因为线程之间的上下文切换时间,总是给线程足够的工作,并行编程中的设计非常重要不是每个代码都是并行的。。。帕拉尔。。。可穿的。这完全取决于您在内部实际执行的操作。请在此处阅读有关内存抖动的内容:“如果线程之间存在过多的串扰,是的,多线程处理可能会更慢,在某种程度上,代码必须“同步”不同进程或线程之间的内存。一般来说,制定高效的并行代码需要计划,而不仅仅是分解为顺序处理而编写的算法在单个核上运行线程-如果性能优于在多个核上运行线程,这表明存在缓存反弹问题。如果不是,则不表示任何内容:)