【发布时间】:2018-09-17 10:19:09
【问题描述】:
我的 Julia 代码中的以下部分扼杀了我的所有性能:
for j = 1:size(phi,3)
for i = 1:size(phi,2)
phi[:,i,j] += dt*convolutionmagnitude*
weightMatrix*phi[:,i,j]
end
end
即phi 是一个三张量,对于每个 i、j,我们希望通过矩阵向量积(乘以一些标量)来更新第一个维度。 weightMatrix 是大小为 size(phi,1) by size(phi,1) 的矩阵(将来可能会稀疏)。一切都发生在floats。
Julia 分配了大量内存,即使一切都应该正常运行(至少我期望如此)。我已经阅读了 julia 文档并找到了view,但无法使用它。我怎样才能加速这个计算?
【问题讨论】:
-
如果您提供一个自包含的最小工作示例,则更容易提供帮助。这意味着您应该添加输入数据并提供一个代码示例,您可以简单地将其复制粘贴到终端中,然后它会立即运行。
-
作为一个现在不清楚的例子:为什么
dt*convolutionmagnitude没有合并到weightMatrix中?并且:weightMatrix的大小是多少?获得这些问题的答案可能会使您的代码速度提高一个或几个数量级! -
@DNF,感谢您的提示。我以后一定会考虑的!对于第二部分:因为
dt和convolutionmagnitude可能会因时间步长而异,而weightMatrix是固定的。 -
如果你现在已经考虑过了,可能会比你已经得到的答案提高性能:) 例如,如果
weightMatrix的大小总是3x3,或者其他一些小的固定数字,您可以使用 StaticArrays 显着加快速度。 -
可悲的是,它更多的是在 100-200 乘以 100-200 的范围内,据我了解,StaticArrays 不是最佳选择
标签: performance julia matrix-multiplication