如果A是n×n双矩阵,B是n×n单矩阵(n很大),我们想要计算A * B.我知道结果矩阵是单一的类型。我担心的是
1)Matlab会隐式创建一个时间单矩阵来存储A的值吗?或者,这种混合型计算是否需要更大的内存使用量?
2)这种混合型计算是否比同型计算慢?或者,这种混合型计算是否会减慢程序的速度?
我们应该尝试明确地使用同型数据进行计算吗?我相信如果我们知道Matlab是如何工作的,我们就可以更准确地预测代码的行为。这一定很有帮助。
答案 0 :(得分: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)时,速度是原来的两倍。