例如,在这里计算数学运算:
for (int i = 0; i < 100; ++i)
{
for (int j = 0; j < 50; ++j)
{
X[i*xcol+j] = Y[i] * Z[j];
}
}
我们是否应该将诸如 ++i
、i*xcol+j
等操作计入我们的总 gflops 中(在您指出这里明显的错误之前,让我们忘记暂时对触发器进行严格定义)计数还是我们只需要计数Y[i]*Z[j]
?我之所以问这个问题是因为我读了一些论文,其中他们只将最后一个算作 gflops/数学运算。
最佳答案
当你为我做一份工作时,我所关心的就是数我想要的东西。我不在乎计算你的开销。在本例中,目标是将每个 Y 乘以每个 Z。所以问题是,你每秒可以给我多少次乘法?
我不在乎您是否必须进行许多数组索引计算,或者是否找到了解决它们的方法。例如,假设有一天你总共进行了 20,000 次算术运算才能得到 5,000 次乘法,这花了你一秒钟的时间(对于现代计算机来说太慢了)。对我来说,那是每秒 5,000 次失败。第二天,你想出了一个更好的方法来编写你的代码,只需要你进行 10,000 次算术运算就可以得到我的 5,000 次乘法,而且只需要你半秒钟。即每秒 10,000 次失败。
显然,我宁愿在半秒内完成 5,000 次操作。这些是唯一重要的操作。
关于c++ - 当我们计算Gflop时,我们需要考虑索引计算吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13898404/