【发布时间】:2019-11-11 11:13:52
【问题描述】:
我计算了 Fortran 的 MATMUL 函数在不同乘法大小(32 × 32、64 × 64...)下所花费的时间,我对结果有疑问。
这些是结果:
SIZE ----- TIME IN SECONDS
32 ----- 0,000071
64 ----- 0,000032
128 ----- 0,001889
256 ----- 0,010866
512 ----- 0,043
1024 ----- 0,336
2048 ----- 2,878
4096 ----- 51,932
8192 ----- 405,921856
我想时间应该增加 8 倍(m * 2 * n * 2 * k * 2)。我不知道它是否应该是这样的。如果是这样,谁能说出为什么不是这样?
此外,我们看到增加了 18 倍,乘以 2048 a 4096. 谁能告诉我为什么?
我用 Fortran 的 CALL CPU_TIME() 和 Fortran 的 CALL DATE_AND_TIME() 测量了时间,两者都给出了非常相似的结果。
我的处理器是具有 4 核的 AMD Phenom (tm) II X4 945 处理器
【问题讨论】:
-
编译器名称、版本和编译选项?数组的数据类型?内存大小?由于缓存不足,您可能会遇到内存流量延迟。一些编译器可以选择使用经过特别优化的 MATMUL,它可以提供帮助(尤其是多核)。如上所述,您的问题忽略了许多可能产生影响的因素。