增加C++程序CPU的使用
Increasing C++ Program CPU Use
我有一个用C++编写的程序,它每秒运行多个for循环,而不使用任何会让它等待的东西。它始终使用2-10%的CPU。有没有办法在不使程序变得更复杂的情况下,迫使它使用更多的CPU并进行更多的计算?此外,我在Windows计算机上使用C::B进行编译。从本质上讲,我在问是否有一种方法可以通过增加CPU的使用来加快我的程序,如果有,如何。
这取决于它为什么只使用10%的CPU。如果这是因为你使用的是多CPU机器,而你的程序只使用一个CPU,那么不,你必须在代码中引入并发性才能使用额外的马力。
如果它受到其他因素的限制(例如,将数据复制到磁盘和从磁盘复制数据),那么你不需要关注CPU,你需要关注瓶颈是什么。最有可能的是,限制器将是从磁盘读取,你可以通过使用更好的缓存机制来改进这一点。
假设您的应用程序具有电源(PROCESS_SET_INFORMATION
访问权限),则可以使用SetPriorityClass
来提高优先级(当然,这通常会损害所有其他进程)。
你可以选择ABOVE_NORMAL_PRIORITY_CLASS
(先试试这个)、HIGH_PRIORITY_CLASS
(小心这个)或REALTIME_PRIORITY_CLASS
(我强烈建议你可能不应该尝试这个)。
如果你尝试更高的优先级,但它的时钟仍然很低,那么这可能是因为你没有CPU限制(例如,如果你正在将数据写入输出文件)。如果是这样的话,您可能必须找到一种让自己被CPU绑定的方法。
请记住,这样做可能没有必要(甚至不可取)。如果你以比其他线程更高的优先级运行,并且仍然没有占用大量CPU,那可能是因为Windows(很可能,正确地)决定你不需要它。
要求系统提供额外资源实际上不是程序的权利或责任。这是操作系统的工作,作为资源调度程序。
如果有必要使用比操作系统认为合适的更多的CPU时间,您应该使用依赖于平台的API向操作系统请求。在这种情况下,这似乎与SetPriorityClass
或SetThreadPriority
类似。
创建线程&给予线程更高的优先级可能是一种方式。
如果使用C++,请考虑使用"英特尔线程构建块"。你可以在这里找到一些例子。
一些评测器可以很好地指示代码中的瓶颈所在。例如,CodeAnalyst(仅适用于AMD芯片)具有每个周期的指令比率。我相信情报分析人员是相似的。
不过,正如Billy O'Neal所说,如果你在8核处理器上运行,那么在10%的cpu上运行是正确的。如果这是你的问题,那么Windows msvc++有一个用于标准算法的并行模式(并行模式库)。如果用c++的方式编写循环,这可以免费提供并行化(确保循环是线程安全的仍然是您的责任)。我没有使用过msvc版本,但gnu::__parallel_for_each
等可以很好地工作。
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 在模拟器中使用并集来模拟CPU寄存器有多合适
- 编写一个函数以使用 n 百分比的 CPU 使用率
- 如何禁用 CPU 的无序执行
- CPU 瓶颈;处理具有许多非静态对象的 3D 场景渲染的简单方法
- 分别测量每个线程上花费的 CPU 时间(C++)
- 什么时候最好在子进程中使用 CPU 或 I/O 密集型代码 [ C++ ]
- 在程序运行时监视 VxWorks 中的任务 CPU 利用率
- 对于等待以 std::future wait() 返回的函数的 CPU 使用率或检查标志在循环中休眠一段时间哪个更好?
- 您选择的 CPU 不支持 x86-64 指令集
- 如何降低应用程序的 CPU 使用率?
- 对于 CPU 无法原子操作的类型,std::atomic 有什么意义?
- 如何区分CPU和内存瓶颈?
- 如何以编程方式获取任务管理器进程CPU使用率(不是PerfMon API)
- CPU 如何提供memory_order_acquire保证?
- 一段时间后 CPU 使用率高
- C/C++memcpu基准测试:测量CPU和墙时间
- 高CPU使用率,在API桌面复制中获取帧之间具有不同的超时间隔
- 超过CPU时间限制:当MPI_Sent一个非常大的int*时
- Tensorflow如何默认使用CPU核心