用于数值积分和求解微分方程的 CUDA 和 Python

计算科学 Python 一体化 微分方程 库达
2021-12-18 08:49:52

谁能推荐一些允许在 Python 中使用 CUDA 进行数值积分和/或求解微分方程的库?

我的目标是求解大型(约 1000 个方程)耦合非线性常微分方程,我想使用 CUDA。

2个回答

Julia 的DifferentialEquations.jl都与GPU 兼容。如果您使数组基于 GPU 的数组,则求解器将重新编译为全部在 GPU 上(无数据传输)。例如:

using OrdinaryDiffEq, CUDA, LinearAlgebra
u0 = cu(rand(1000))
A  = cu(randn(1000,1000))
f(du,u,p,t)  = mul!(du,A,u)
prob = ODEProblem(f,u0,(0.0f0,1.0f0)) # Float32 is better on GPUs!
sol = solve(prob,Tsit5())

都是基于GPU的。您可以通过diffeqpy从 Python 中使用它。目前没有太多好的语法将 GPU 使用暴露给 Python,但您可以使用以下方法来做同样的事情:

import diffeqpy
diffeqpy.install()
from diffeqpy import de

sol = Main.eval("""
    using CUDA, LinearAlgebra
    u0 = cu(rand(1000))
    A  = cu(randn(1000,1000))
    f(du,u,p,t)  = mul!(du,A,u)
    prob = ODEProblem(f,u0,(0.0f0,1.0f0)) # Float32 is better on GPUs!
    sol = solve(prob,Tsit5())
    Array(sol) # Return an array
""")

请注意,这需要在您的 Julia 安装中安装 CUDA。

我看到人们使用

但是,我没有看到其中任何一个提供微分方程功能。

环顾四周,我发现了 CudaPyInt并且它使用了 PyCuda