Matlab中同时涉及单矩阵和双矩阵时的内存和速度问题

3
如果A是一个n乘以n的双精度矩阵,B是一个n乘以n的单精度矩阵(n很大),我们想要计算A乘以B。我知道结果矩阵的类型是单精度。我的担心是:
1)Matlab会隐式地创建一个临时的单精度矩阵来存储A的值吗?或者说这种混合类型的计算会导致更大的内存使用?
2)这种混合类型的计算比同类型的计算慢吗?或者说这种混合类型的计算会减慢程序的运行速度吗?
我们应该尝试使用同类型的数据进行显式运算吗?我相信如果我们知道Matlab的工作原理,我们就能更准确地预测代码的行为。这一定有帮助。

你可以尝试计时。 - Ander Biguri
1
@AnderBiguri 是的,我可以做到。但是我的测试必须是特殊的,并且有许多限制。我在这里问的原因是我想知道Matlab的内部机制是否有人知道。如果我们知道Matlab的真正工作方式,那么它会更准确和有帮助。 - Hua
1个回答

1
我赞同Ander的观点,建议通过时间验证任何关于何种精度更好(单精度还是双精度)的说法。以下是比较这两种方法的基准测试示例:
   N = 1e3;
   A1 = single(rand(N,N));
   A2 = double(rand(N,N));
   B = double(rand(N,N));

现在我们可以开始计时这两种方法。我通常会重复进行相同的计算(这里我进行了100次):
    tic; for ii = 1: 100 ; C1 = A1 * B; end; toc % mixed single and double
    Elapsed time is 0.600353 seconds.
    tic; for ii = 1: 100 ; C2 = A2 * B; end; toc % both doubles
    Elapsed time is 1.500283 seconds.

所以看起来当A是单精度(A1)时,速度会快两倍。

如果没有其他选择,我会说是的。但我仍然更喜欢了解内部机制以准确预测代码的行为:-(之前我对其他问题进行了测试,测试结果确实有很大的变化。 - Hua

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接