Julia使用矩阵除法A/B时出现StackOverflowError问题及解决方法
Julia矩阵除法运算StackOverflowError问题说明与解决方案
问题复现
触发该报错的运算场景可复现如下:
- 运行720维矩阵除法代码,直接触发报错
rand(2,720)/rand(720,720)
报错信息:ERROR: StackOverflowError:
2. 调整维度参数为120后运行,可正常得到运算结果
rand(2,120)/rand(120,120)
运行结果示例:
2×120 Matrix{Float64}: -3.98568 4.0549 4.30112 0.767333 5.25419 1.03845 5.14592 0.236119 -1.46789 -1.83912 3.9814 1.09028 3.04451 0.618902 -4.33044 … -5.36532 0.0215027 -9.72819 1.14866 -4.12121 2.24605 4.32528 -4.59007 -2.28853 -3.28813 1.13299 -1.2411 0.378753 -2.89095 2.27448 2.22753 1.13359 3.01714 0.929562 2.67707 1.18504 -1.02976 -0.569199 2.62177 0.517625 1.10433 0.294882 -2.43448 -2.79622 0.483641 -5.94725 0.903424 -1.92138 1.80968 3.08397 -1.97155 -1.31307 -0.971027 0.624244 -0.159086 0.249652
- 调整维度参数为130后运行,再次触发StackOverflowError报错
rand(2,130)/rand(130,130)
报错信息同场景1。
解决方案
在执行矩阵除法运算前,先运行如下代码即可解决报错问题:
BLAS.set_num_threads(1)
注意:该方案会强制BLAS使用单线程运算,可能存在一定的性能损失,目前尚未完成对应的性能测试验证。
内容的提问来源于stack exchange,提问作者Yu Liu
相关产品推荐
相关产品推荐

