是否有很多内存访问会导致多线程缓慢?因为我使用pthread来多线程读取使用大量内存访问的功能。如果我用1个线程调用我的函数,我有更多时间CPU。使用CPU的比例在50%到70%之间。在大量内存访问的情况下,多线程的处理速度比单线程缓慢
0
A
回答
1
不要猜测;测量。
你不说你使用的是什么操作系统,但是给定pthreads我会猜测Linux。使用Valgrind的callgrind
和cachegrind
等工具来分析程序花费的时间。 LTTng
也可以帮助你。也许perf
也。
是的,如果你的程序是杏你的内存带宽,或者颠簸缓存,那么多线程肯定能降低性能。如果线程试图共享任何资源,则尤其如此。但是,你不会知道你是否看不到。
1
除了(因为你似乎在谈论内存访问,而不是分配),默认的malloc
有表现不佳,如果你在并行分配内存。
如果您正在寻找更高的性能,你可能要考虑TCMalloc与多线程分配显著更好的扩展。
通常,保持共享内存在线程之间同步是一场噩梦,如果可能的话应该尽量避免。通过采用消息传递范例来查看是否可以避免缓存失效(这可能不适用于您的用例)。
消息传递与共享只读内存是降低缓存流量的良好折衷方案。
相关问题
- 1. Python多处理速度比单线程慢
- 2. C++多线程缓慢处理
- 3. 多线程减慢程序的速度
- 4. C++ Pthreads - 多线程比单线程慢
- 5. Java ForkJoin多线程比单线程慢
- 6. 多线程GEMM比单线程慢吗?
- 7. 多线程比单线程慢
- 8. 多线程程序运行速度慢于单线程
- 9. 为什么在我的情况下多线程比顺序编程慢?
- 10. C++线程应用程序比非线程运行速度慢
- 11. Python中的多处理比单线程慢
- 12. 多线程队列操作不比单线程速度更快
- 13. 多线程减慢整体字典访问速度?
- 14. 多线程速度问题
- 15. java如何处理多线程?比进程更多的线程
- 16. 多线程的内存访问
- 17. C++多线程执行速度减慢
- 18. Python处理大量线程?
- 19. C++:线程池比单线程慢吗?
- 20. Linux上的线程局部变量访问速度有多快
- 21. Python多重处理比Windows上的多线程稍微慢
- 22. 慢速queryAggreate Aerospike多线程
- 23. 超时高速缓存线程池的单个线程
- 24. 高效的多线程共享访问内存缓冲区
- 25. 如何在不使多线程的情况下使速度更快?
- 26. Java线程调度:比处理器更忙的等待线程?
- 27. 多线程处理问题
- 28. 线程访问同一缓存行的
- 29. 多线程堆内存访问
- 30. 比线程处理更多的连接
是可能的,因为线程间的上下文切换时间,一直到线程给予足够的工作,设计并行编程是非常重要的 –
并不是每一个代码是parallelliz ... parall ...螺。这一切都取决于你实际上在做什么。 – Nbr44
阅读关于内存抖动这里:“[什么是”缓存友好“的代码?](http://stackoverflow.com/a/16699282/335858)” – dasblinkenlight