[英]Multithreading slower than singlethread in function with substantial memory access
那很多內存訪問會導致慢速多線程嗎? 因為我使用pthread來多線程一個使用大量內存訪問的強大功能。 如果我用1個線程調用我的函數,那么我的CPU時間會更長。 使用CPU的比例在50%到70%之間。
除此之外(因為您似乎在談論內存訪問而不是分配),如果您並行分配內存,則默認的malloc
性能較差。
如果您正在尋求更高的性能,您可能需要考慮使用多線程分配可以更好地擴展的TCMalloc 。
通常,在線程之間保持共享內存同步是一個噩夢,如果可能的話應該避免。 通過采用消息傳遞范例來查看是否可以避免緩存失效(這可能不適用於您的用例)。
使用共享只讀內存傳遞消息是降低緩存流量的良好折衷方案。
不要猜; 測量。
你沒有說你正在使用什么操作系統,但鑒於pthreads我會猜測Linux。 使用Valgrind的callgrind
和cachegrind
等工具來分析程序花費時間的位置。 LTTng
也可以幫助你。 也許perf
也。
是的,如果你的程序最大化你的內存帶寬,或者顛覆你的緩存,那么多線程肯定會降低性能。 如果線程試圖共享任何資源,則尤其如此。 但是,你不會知道你不看。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.