外行请问多线程如何设置线程数

2020-11-19 10:18:28 +08:00
 132hong

背景:在写论文,需要处理较大的矩阵,因此想通过分块矩阵用多线程分别计算。
对于如何设置线程数,看到一篇博客: https://www.cnblogs.com/javalyy/p/10930330.html,上面提到:
最佳线程数目 = ((线程等待时间+线程 CPU 时间)/线程 CPU 时间 )* CPU 数目
博主举例:我们的服务器 CPU 核数为 4 核,一个任务线程 cpu 耗时为 20ms,线程等待(网络 IO 、磁盘 IO )耗时 80ms,那最佳线程数目:( 80 + 20 )/20 * 4 = 20 。也就是设置 20 个线程数最佳。

问题:我去搜索无法搜到想要的内容,请问使用 C#如何查看我电脑的 线程等待时间、线程 CPU 时间呢?可以用哪个方法获取,或者提供一个关键字我去搜索。
说明:使用几个线程其实无所谓,主要是要有个理论依据。

2611 次点击
所在节点    程序员
19 条回复
GoLand
2020-11-19 10:24:09 +08:00
这东西没有很精确的值,一般默认设成核数,你要是想压榨算力,可以慢慢调,加几个减几个然后测试,调到性能最佳点就是你这个“程序”的最佳线程数。
ysc3839
2020-11-19 10:27:33 +08:00
这种 CPU 运算的情况,线程是一直在运行的,没有等待 IO,所以“线程等待时间”是 0 。
no1xsyzy
2020-11-19 10:31:18 +08:00
CPU 密集型运算没有等待时间
压榨每一滴算力需要实测,因为上述也只是非常粗略的估计,何况实际情况下还会产生别的问题(比如缓存命中率的问题)。
lower
2020-11-19 10:34:14 +08:00
结束和开始时的时间相减
132hong
2020-11-19 10:39:35 +08:00
@GoLand #1
@ysc3839 #2
@no1xsyzy #3
@lower #4
感谢解答,我还是自己编一个数字吧,要有个理论依据[狗头]
renmu123
2020-11-19 10:42:31 +08:00
CPU 密集型一般就设置成 cpu 核数
rihkddd
2020-11-19 10:50:12 +08:00
如果单纯的想快,最好用已经写好的矩阵计算库,不止并行会影响计算速度,例如缓存命中,算法,指令优化带来的提升都会很大。
如果你论文研究的就是矩阵计算,应该对上述问题都有了解,简单来说矩阵计算基本上没有 IO 。
imn1
2020-11-19 11:04:22 +08:00
C#是写 GUI 么,还是 CLI ?
GUI 加个控件可选呗,默认=CPU 数
wangritian
2020-11-19 14:11:17 +08:00
如果矩阵是整体加载到内存后再分块计算,也就是线程中没有磁盘 IO,那设置成 CPU 逻辑核心数就好了
如果你的矩阵分块保存成了多个文件,线程内有读取文件操作,就需要按公式定
paoqi2048
2020-11-19 14:34:01 +08:00
先设置成 processor 数量,后面根据测试情况调整
wysnylc
2020-11-19 15:10:33 +08:00
用二分法慢慢调
操作步骤为:设置 200 记录运行时间;设置 100 记录运行时间,设置 300 记录运行时间.如果 100 时间最少则设置 50 和 150,依次类推不到 10 次就可以定位到个位数
132hong
2020-11-19 18:42:25 +08:00
@wangritian
@paoqi2048
感谢回答
@wysnylc 话说没有一个比较标准的计算公式什么的嘛
mingl0280
2020-11-19 19:26:31 +08:00
@132hong 这东西哪有计算标准,都是看 CPU 性能的
hdfg159
2020-11-19 22:03:51 +08:00
这个没有标准的公式吧,自己看看任务主 IO 还是主 CPU,然后自己调,然后测试跑一下看看处理效率比。
lxilu
2020-11-19 23:17:30 +08:00
较大是多大,百万乘百万?
laminux29
2020-11-19 23:28:05 +08:00
公开一个小技巧,这个问题其实有一款图形化模拟器,名字叫:Factorio 。什么并行串行单核多核分布式缓存瓶颈等问题,在这款模拟器里都能实现图形化展示。
laminux29
2020-11-19 23:29:06 +08:00
你把这款模拟器从头到尾玩一遍,就相当于从单核单机时代,到现在分布式时代,全部走了一遍。以后再遇到这种问题,脑子里就容易有设计思路与处理画面了。
stormysky
2020-11-20 11:32:09 +08:00
@laminux29 这不是个游戏吗
Chinsung
2020-11-20 17:50:31 +08:00
等待时间这些,linux 上可以通过命令和工具查看,windows 不清楚。
不过我感觉 CPU 密集型,2*CPU 到 CPU+1 去慢慢试就好了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/726996

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX