【发布时间】:2013-10-02 22:15:34
【问题描述】:
在测试以下代码时(注意第二个片段中的 *NaN)
tic
x = zeros(1,5000000);
for i=1:10
selector = x > 1;
end
toc
tic
x = zeros(1,5000000)*NaN;
for i=1:10
selector = x > 1;
end
toc
关于 Matlab 修订
- R2012a 64 位
- R2013a 32 位
我观察到以下奇怪的行为
R2012a 64 位
Elapsed time is 0.056266 seconds.
Elapsed time is 0.059677 seconds.
R2013a 32 位
Elapsed time is 0.070116 seconds.
Elapsed time is 3.995697 seconds.
因此,在 R2013a 32 位的情况下,存在 NaN 值会大大增加运行时间。谁能给我一个提示,这可能是从哪里来的?
最好的问候, 托马斯
【问题讨论】:
-
请注意,2013a 64 位的行为与 2012a 类似,因此这不是版本之间的回归。
-
感谢您测试@MattB。 - 所以这就是架构。对了忘了说:我的测试都是Windows 7。
-
怪罪于通常的嫌疑人(JIT 编译器)?
-
要获得更多详细信息,您可以分别使用 tic/toc 分配 (
x = zeros(1,5000000))、乘以NaN和*来查看它真正花费了您的时间。跨度> -
我怀疑这不是 JIT 编译器,而是 BLAS 或 LAPACK 版本。我记得当 MATLAB 使用 ATLAS 而不是 Intel 库时,NaN 处理是一个问题。不同版本的英特尔 MKL 可能会以不同方式处理此问题。
version('-blas')和version('-lapack')在每个平台上说什么?
标签: performance matlab comparison nan