簡體   English   中英

多線程比具有大量內存訪問功能的單線程慢

[英]Multithreading slower than singlethread in function with substantial memory access

那很多內存訪問會導致慢速多線程嗎? 因為我使用pthread來多線程一個使用大量內存訪問的強大功能。 如果我用1個線程調用我的函數,那么我的CPU時間會更長。 使用CPU的比例在50%到70%之間。

除此之外(因為您似乎在談論內存訪問而不是分配),如果您並行分配內存,則默認的malloc性能較差。

如果您正在尋求更高的性能,您可能需要考慮使用多線程分配可以更好地擴展的TCMalloc

通常,在線程之間保持共享內存同步是一個噩夢,如果可能的話應該避免。 通過采用消息傳遞范例來查看是否可以避免緩存失效(這可能不適用於您的用例)。

使用共享只讀內存傳遞消息是降低緩存流量的良好折衷方案。

不要猜; 測量。

你沒有說你正在使用什么操作系統,但鑒於pthreads我會猜測Linux。 使用Valgrind的callgrindcachegrind等工具來分析程序花費時間的位置。 LTTng也可以幫助你。 也許perf也。

是的,如果你的程序最大化你的內存帶寬,或者顛覆你的緩存,那么多線程肯定會降低性能。 如果線程試圖共享任何資源,則尤其如此。 但是,你不會知道你不看。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM