如果我执行用C编写的计算,比如矩阵 – 矩阵加法或矩阵 – 矩阵乘法,其中工作在for循环中完成,每次迭代都会发生相同数量和类型的算术运算,具体的值可能是输入数据会影响计算的速度吗?例如,如果矩阵元素是32位整数,其值介于0和127之间,那么它们的表示仅在每四个相应字节中的一个中变化,那么运行速度比在0和INT_MAX之间变化的速度要快(假设为发生未定义的行为)?
如果我不得不猜测我会说不,因为无论该值是小还是非常大,因为它被定义为32位整数,它将被屏蔽以适应相同数量的存储空间,因此小而大值将最终在内存中具有相同的字节数.我正确地考虑了这个吗?单/双精度浮点数是不同的?
最佳答案 变量中包含的数据不会影响它只是存储空间的性能.如果必须以某种方式操作此存储空间中的数据,则可能会遇到一些性能问题.以下是需要考虑的一些因素可能会影响与此相关的性能.
>取决于CPU的硬件架构(即HW FPU与SW浮点实现,流水线与非流水线等……)在不同的数据集上执行CPU密集型数学运算(即除法,平方根等)会影响表现.
>可能影响性能的另一种情况是该变量驻留在内存中.变量字节是否以一种只需一个指令周期来访问数据的方式对齐?或者它是否未对齐,因此需要额外的指令周期来检索所有数据.通常在这些情况下,编译器将具有特殊关键字甚至是编译指示,可以强制变量对齐以进行优化.
最好的祝福!