performance - 在 Julia 中分解一个没有任何内存分配的矩阵

标签 performance memory julia allocation

Julia 支持矩阵的就地分解(对于某些分解)。
我想知道是否还可以消除函数内部的任何内存分配。

例如,有没有办法在没有隐藏内存分配的情况下对矩阵应用 Cholesky 分解?

最佳答案

非分配 LAPACK 函数在 Julia 中有绑定(bind)。它们记录在 Julia Documentation - Linear Algebra - LAPACK Functions 中.


Cholesky 分解 cholesky!(A) 会覆盖 A 并分配固定的少量内存,而 cholesky(A) 会分配更大的数额。在这里,分配(字节)确实随着 A 的大小呈二次方增长。

let n = 1000; M = rand(n,n); B = transpose(M)*M
    cholesky(B)
    @time cholesky(B)
    # 0.023478 seconds (5 allocations: 7.630 MiB)
end

对比

let n = 1000; M = rand(n,n); B = transpose(M)*M
    cholesky!(copy(B))
    @time cholesky!(B)
    # 0.021360 seconds (3 allocations: 80 bytes)
end

Oscar Smith 指出,性能差异很小。

关于performance - 在 Julia 中分解一个没有任何内存分配的矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72309988/

相关文章:

c++ - 当内存分配函数用作条件语句时会发生什么

julia - 如何在 Julia 中实现 SingleLinkedList

mysql - 提高MySql EAV查询性能

Objective-C 类别性能

java - 两个 AVL 树的替代方案

java - 增加堆大小

android - Android 上如何确定设备内存不足

arrays - 创建 1x1 Julia 数组

Julia:如何使用 JuMP 引入二进制整数来解决混合整数优化问题?

c# - 声明变量是否已经占用内存