术语“CPU限制”和“I/O限制”是什么意思?
当前回答
这很直观:
如果一个程序在CPU更快的情况下运行得更快,那么它就受到了CPU的限制,也就是说,它的大部分时间都在简单地使用CPU(进行计算)。计算π的新数字的程序通常是cpu限制的,它只是处理数字。
如果一个程序能够在I/O子系统更快的情况下运行得更快,那么它就是I/O约束的。具体的I/O系统是不同的;我通常把它与磁盘联系在一起,当然,一般来说,网络或通信也很常见。在一个大文件中查找一些数据的程序可能会成为I/O限制,因为瓶颈是从磁盘读取数据(实际上,这个例子在今天可能有点过时,从ssd读取数百MB/s)。
其他回答
CPU限制是指程序被CPU或中央处理器所限制,而I/O限制是指程序被I/O或输入/输出所限制,例如读写磁盘、网络等。
一般来说,在优化计算机程序时,人们试图找出瓶颈并消除它。知道您的程序受CPU限制是有帮助的,这样就不会不必要地优化其他东西。
[我所说的“瓶颈”是指使你的程序运行得比原本要慢的东西。]
I/O限制是指完成计算所需的时间主要由等待输入/输出操作完成的时间决定的一种情况。
这与受CPU限制的任务相反。当请求数据的速度比消耗数据的速度慢时,或者换句话说,花费在请求数据上的时间比处理数据的时间多时,就会出现这种情况。
当一个应用程序在执行期间的算术/逻辑/浮点(A/L/FP)性能大部分接近处理器的理论峰值性能(数据由制造商提供,由处理器的特性决定:核数、频率、寄存器、alu、fpu等)时,它就被cpu绑定了。
peek性能在实际应用中是很难实现的,并不是说不可能。大多数应用程序在不同的执行过程中访问内存,处理器在几个周期内不会执行A/L/FP操作。由于内存和处理器之间存在距离,这被称为冯·诺依曼限制。
If you want to be near the CPU peak-performance a strategy could be to try to reuse most of the data in the cache memory in order to avoid requiring data from the main memory. An algorithm that exploits this feature is the matrix-matrix multiplication (if both matrices can be stored in the cache memory). This happens because if the matrices are size n x n then you need to do about 2 n^3 operations using only 2 n^2 FP numbers of data. On the other hand matrix addition, for example, is a less CPU-bound or a more memory-bound application than the matrix multiplication since it requires only n^2 FLOPs with the same data.
下图显示了在Intel i5-9300H中使用简单的矩阵加法和矩阵乘法算法获得的FLOPs:
注意,正如预期的那样,矩阵乘法的性能要大于矩阵加法。可以通过运行这个存储库中的test/gemm和test/matadd来重现这些结果。
我建议你也去看看J. Dongarra关于这个效果的视频。
当你的程序正在等待I/O(即。磁盘读/写或网络读/写等),即使程序停止,CPU也可以自由地执行其他任务。程序的速度主要取决于IO发生的速度,如果你想加快速度,就需要加快I/O。
如果你的程序正在运行大量的程序指令而不等待I/O,那么它就被称为CPU限制。加速CPU将使程序运行得更快。
在任何一种情况下,加速程序的关键可能不是加快硬件,而是优化程序以减少所需的IO或CPU数量,或者让它在执行CPU密集型操作的同时执行I/O。
另一种表达相同想法的方式是:
如果加速CPU并没有加速你的程序,它可能是I/O受限的。 如果加速I/O(例如使用更快的磁盘)没有帮助,那么您的程序可能是CPU受限的。
(我使用“可能是”是因为你需要考虑其他资源。内存就是一个例子。)