Re: [討論] 多線程軟件設計用書

作者: oopFoo (3d)   2024-01-04 07:23:42
※ 引述《musashi023 (太陽魚)》之銘言:
: 嗨蓋斯
: 最近下班在研究Qt multithreading, 對於把CPU性能榨乾覺得蠻有成就感的
: 就搞了一本 C++ Concurrency in Action 來翻翻
除非特別需要,不要自己打造輪子。現在最普及使用的是OpenMP,資源多,會的人也多。
https://www.openmp.org/resources/openmp-books/
都是好書可以讀。尤其"High Performance Parallel Runtimes"可以讓你了解基礎,也知道parallel programming is HARD。
我自己喜歡的是Intel TBB(Threading Building Blocks),語法比較適合我的用法。
Intel ISPC也是我喜歡的東東,不過這就有點偏門了。
: 前陣子面試
: 剛剛好跟他們主管聊到,怎麼讓多線程上鎖的成本最小化,覺得蠻酷的
: 雖然明白這本來就是多線程程序設計的重點
: 想知道有沒有專門在聊這個的書
上鎖就輸了,如果你的鎖複雜,更容易出錯。
如何重新解構資料結構去避開鎖,如何排列記憶體是Parallel Programming的重點。false sharing,很常碰到,data thrashing也是頭痛問題。
以上都是shared-memory model的問題,但要最高效能無法避免的。
這也是為什麼Erlang, goLang,這種message passing盡量避開shared-memory的問題,流行起來。Recommended。
作者: nicetw20xx (哇愛台灣)   2024-01-04 09:05:00
先謝謝大大分享~~~~~
作者: devilkool (對貓毛過敏的貓控)   2024-01-04 09:13:00
作者: Hsins (翔)   2024-01-04 13:54:00
推!
作者: NCTU5566 (交大彭于晏)   2024-01-04 17:15:00
謝謝哥
作者: hobnob (hobnob)   2024-01-04 17:29:00
推分享!
作者: final01 (牛頓運動定律)   2024-01-04 18:49:00
哥的觀念有點問題...必須等高人指出問題XD
作者: a82611141   2024-01-04 20:44:00
推 tbb
作者: haydou (haydou)   2024-01-05 01:10:00
作者: WTS2accuracy (宝鐘海賊団の一味)   2024-01-05 20:00:00
有請造輪子大師開示
作者: Suleika (Suleika)   2024-01-06 11:33:00
share memory by communicating/serializability
作者: paul123 (COOOOOOL)   2024-01-06 16:56:00
推 Intel tbb
作者: Litfal (Litfal)   2024-01-07 10:21:00
真的,上鎖就先輸一半,parallelism有很大一部分都在想怎麼省鎖
作者: netburst (133 134 592)   2024-01-07 13:01:00
作者: labbat (labbat)   2024-01-07 13:18:00
初學者先鎖再說啊,會鎖懂鎖知道哪些api隱含鎖才可以避鎖
作者: oopFoo (3d)   2024-01-08 07:15:00
現在都流行GC/Ref Count語言,管理記憶體很難。Lock一樣很難做的對。先學會如何Partition Tasks才重要,然後JS的Atomics類的api設計,直接lock真的太低階也太容易出錯。Lock出錯,超難debug,超挫折的。需要很系統很有耐性處理Lock就交給專家吧。真喜歡Concurrency,先試試OpenMPI這種Message Passing的API也是很好的選擇
作者: leviliang (levi)   2024-01-08 19:02:00
印象中OpenMP針對單一節點多核心的平行化而MPI針對多節點資料的傳遞與平行化計算兩者使用的地方不一樣雖可以混成 hybrid parallelization但還是別搞混了
作者: oopFoo (3d)   2024-01-08 21:13:00
OpenMP是shared-memory所以只能一個節點。OpenMPI是MsgPassing。所以各種情況都可用,單節點多核心也適合。

Links booklink

Contact Us: admin [ a t ] ucptt.com