作者oopFoo (3d)
看板Soft_Job
标题Re: [讨论] 多线程软件设计用书
时间Thu Jan 4 07:23:42 2024
※ 引述《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。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 219.70.128.119 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1704324226.A.754.html
1F:推 nicetw20xx: 先谢谢大大分享~~~~~ 01/04 09:05
2F:推 devilkool: 好 01/04 09:13
3F:推 Hsins: 推! 01/04 13:54
4F:推 NCTU5566: 谢谢哥 01/04 17:15
5F:推 hobnob: 推分享! 01/04 17:29
6F:嘘 final01: 哥的观念有点问题...必须等高人指出问题XD 01/04 18:49
7F:推 a82611141: 推 tbb 01/04 20:44
8F:推 haydou: 推 01/05 01:10
9F:推 WTS2accuracy: 有请造轮子大师开示 01/05 20:00
10F:推 Suleika: share memory by communicating/serializability 01/06 11:33
11F:推 paul123: 推 Intel tbb 01/06 16:56
12F:推 Litfal: 真的,上锁就先输一半,parallelism有很大一部分都在想怎 01/07 10:21
13F:→ Litfal: 麽省锁 01/07 10:21
14F:→ netburst: 真 01/07 13:01
15F:推 labbat: 初学者先锁再说啊,会锁懂锁知道哪些api隐含锁才可以避锁 01/07 13:18
16F:→ oopFoo: 现在都流行GC/Ref Count语言,管理记忆体很难。Lock一样 01/08 07:15
17F:→ oopFoo: 很难做的对。先学会如何Partition Tasks才重要,然後JS的 01/08 07:17
18F:→ oopFoo: Atomics类的api设计,直接lock真的太低阶也太容易出错。 01/08 07:19
19F:→ oopFoo: Lock出错,超难debug,超挫折的。需要很系统很有耐性处理 01/08 07:23
20F:→ oopFoo: Lock就交给专家吧。真喜欢Concurrency,先试试OpenMPI这种 01/08 07:28
21F:→ oopFoo: Message Passing的API也是很好的选择 01/08 07:30
22F:推 leviliang: 印象中OpenMP针对单一节点多核心的平行化 01/08 19:02
23F:→ leviliang: 而MPI针对多节点资料的传递与平行化计算 01/08 19:02
24F:→ leviliang: 两者使用的地方不一样 01/08 19:02
25F:→ leviliang: 虽可以混成 hybrid parallelization 01/08 19:02
26F:→ leviliang: 但还是别搞混了 01/08 19:02
27F:→ oopFoo: OpenMP是shared-memory所以只能一个节点。OpenMPI是Msg 01/08 21:13
28F:→ oopFoo: Passing。所以各种情况都可用,单节点多核心也适合。 01/08 21:15