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