我有 C 代码,我希望它能像在 Windows 上一样快速运行
此代码在数字范围内运行,并且对于每个数字,执行大量的 CPU 工作。
每个数字都独立于其他数字。
因为我希望它速度最快,所以我想在我的所有 CPU 核心上运行它。
我现在所做的是,例如我需要在 0-1000 范围内运行,并且我有 10 个核心,我为我的 C 代码创建 10 个进程,并将它们之间的工作分开。
进程 1 在 0-100 范围内运行,进程 2 在 100-200 范围内运行,依此类推。
Os 知道将每个进程分离到不同的核心(因为每个进程使用大量 cpu),所以当我查看任务管理器时,我的所有核心都是 100% 使用率。
这样每个进程运行大约5个小时(因此分配时间可以忽略不计)
如果我为每个核心创建线程(而不是为每个核心创建进程),我知道操作系统会知道将线程与核心分开,这样会更快吗?
也许进程有不同的调度程序或其他东西,所以线程会运行得更快。
也许很多进程会减慢操作系统的速度,而 1 个进程中有很多线程
最佳答案
If I will create thread for each core(not process for each core) , I know that os will know to seperate thread to cores, is that will be faster?
操作系统知道如何以有效的方式将线程分配给核心 - 但是,操作系统也知道如何以有效的方式将进程分配给核心,因此您不太可能仅仅通过从多进程模块到多线程模型。也就是说,您已经获得了您希望获得的好处。
对于这样的问题,您可能最好寻找优化处理循环的方法(例如,也许您可以使用 SSE 指令,或者找到更有效的算法?)
关于c - 多线程与使用大量 CPU 的多处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53198329/