Matlab中同时涉及单、双矩阵时的内存和速度问题
如果A是n乘n的双矩阵,B是n乘n的单矩阵(n很大),我们需要计算A*B。我知道得到的矩阵是单矩阵的类型。我担心的是 1) Matlab是否会隐式地创建一个临时的单一矩阵来存储a的值?或者,这种混合类型的计算会占用更大的内存吗 2) 这种混合型计算比同型计算慢吗?或者,这种混合类型的计算会降低程序的速度吗Matlab中同时涉及单、双矩阵时的内存和速度问题,matlab,casting,Matlab,Casting,如果A是n乘n的双矩阵,B是n乘n的单矩阵(n很大),我们需要计算A*B。我知道得到的矩阵是单矩阵的类型。我担心的是 1) Matlab是否会隐式地创建一个临时的单一矩阵来存储a的值?或者,这种混合类型的计算会占用更大的内存吗 2) 这种混合型计算比同型计算慢吗?或者,这种混合类型的计算会降低程序的速度吗 我们是否应该尝试显式地使用homo类型数据进行计算?我相信如果我们知道Matlab是如何工作的,我们可以更准确地预测代码的行为。这一定很有帮助。我同意Ander的观点,并继续计时,以验证关于偏
我们是否应该尝试显式地使用homo类型数据进行计算?我相信如果我们知道Matlab是如何工作的,我们可以更准确地预测代码的行为。这一定很有帮助。我同意Ander的观点,并继续计时,以验证关于偏好(单精度或双精度)的任何主张。以下是两种方法的基准测试示例:
N = 1e3;
A1 = single(rand(N,N));
A2 = double(rand(N,N));
B = double(rand(N,N));
现在我们可以开始计时这两种方法。我通常重复多次相同的计算(这里我重复100次):
因此,当A是单精度(A1)时,它的速度是单精度(A1)的两倍 你可以试着计时。@AnderBiguri是的,我能做到。但我的测试必须是特殊的,并且有很多限制。我问这个问题的原因是我想知道是否有人知道Matlab的内部机制。如果我们知道Matlab是如何工作的,它会更加准确和有用。如果我们没有其他选择,我会说是的。但我仍然更愿意知道准确预测代码行为的内部机制:-(我以前做过其他问题的测试,测试结果确实时不时变化很大。
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.