c - 多线程与使用大量 CPU 的多处理

标签 c windows multithreading multiprocessing cpu-usage

我有 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/

相关文章:

c - C 应用程序如何在运行时在 Linux 环境中更新自身

windows - MDM Windows 10 移动安装业务应用程序

java - Java 线程什么时候处于 Activity 状态?

java - 计算循环和 fcfs 作业时间

c - C 中的字符串参数是动态分配的吗?

c++ - OpenCL 缓冲区分配和映射最佳实践

c - 让我确保我理解 C pthread 互斥体

c - _setmaxstdio 最大打开文件数仅为 2048?

java - Spring 安全 java.lang.IllegalArgumentException : Non-hex character in input

java - 在多个线程中更新 AtomicInteger 变量时未获得预期结果