Matrix 为什么简单的矩阵乘法在Julia中占用了这么多垃圾收集器时间?

Matrix 为什么简单的矩阵乘法在Julia中占用了这么多垃圾收集器时间?,matrix,julia,multiplication,Matrix,Julia,Multiplication,我有两个大的ish矩阵D(4096x40)和W(40x2800) 当我使用@time R=D*W时,会给出以下统计信息: 38.449856 seconds (1.40 G allocations: 20.932 GiB, 55.88% gc time) 55.88%的gc时间令我震惊。一定有更好的方法来做这个简单的矩阵计算。对于这个Julia新手有什么想法吗?问题是您也在测量编译。如果您以前运行过任何其他矩阵乘法,您将看到一个结果,速度将提高10倍,只需很少的分配您需要提供有关如何生成D和W

我有两个大的ish矩阵D(4096x40)和W(40x2800)

当我使用
@time R=D*W
时,会给出以下统计信息:

38.449856 seconds (1.40 G allocations: 20.932 GiB, 55.88% gc time)

55.88%的gc时间令我震惊。一定有更好的方法来做这个简单的矩阵计算。对于这个Julia新手有什么想法吗?

问题是您也在测量编译。如果您以前运行过任何其他矩阵乘法,您将看到一个结果,速度将提高10倍,只需很少的分配

您需要提供有关如何生成
D
W
(或至少是它们的类型)的更多信息

这就是我得到的:

julia> D = rand(4096, 40); W = rand(40, 2800);

julia> @time R = D * W;
  0.081237 seconds (7 allocations: 87.500 MiB, 6.74% gc time)

我没有想到这是一个类型问题。在我的代码中,D矩阵是
Array{Float64,2}
,W矩阵是
Array{Real,2}

从实到浮的转换产生以下结果:

  0.024569 seconds (6 allocations: 87.500 MiB, 36.84% gc time)

好多了

在这种情况下,编译时间不会导致30秒的开销。不,这绝对不是类型问题。这是另外一回事,也许您在第一次尝试时测量了编译时间和分配。将浮点值与实值相乘应该没问题……尽管40秒相当艰难;)你能复制它吗?哦,是的,这更有意义。你遇到了两个问题。第一次调度,第二次,通用乘法,而不是BLAS乘法