You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Julia中使用CUDA无法创建简单CuSparseMatrixCOO求助

问题描述

尝试使用CUSPARSE库构建COO矩阵,参考官方文档及CUDA.jl的函数参数定义,创建时传入行索引、列索引、元素值及矩阵维度,运行以下代码时触发越界错误:

using CUDA, SparseArrays

K_rows = [0, 1, 1, 2]
K_cols = [0, 0, 2, 1]
K_vals = [10.0, 20.0, 30.0, 40.0]
a = CUDA.CUSPARSE.CuSparseMatrixCOO{Float64,Int64}(
        CuArray(K_rows), CuArray(K_cols), CuArray(K_vals),
         (3,3)
)
display(a)

错误信息:

ERROR: LoadError: BoundsError: attempt to access 4-element CuArray{Float64, 1, CUDA.DeviceMemory} at index [[4294967297, 8589934596, 1, 1]] 

当前Julia版本为1.11.1,请问忽略了什么细节?


问题原因与解决方法
  • 索引格式不匹配:CUDA.jl的CuSparseMatrixCOO要求行、列索引使用**1-based(从1开始)**格式,你传入的是0-based(从0开始)的索引值。CUSPARSE底层虽支持0-based,但CUDA.jl的构造接口默认处理1-based索引,0-based值会被错误解析为超大溢出数值(比如0会转成4294967297),进而触发越界错误。

  • 修复代码:将行、列索引转换为1-based格式:

using CUDA, SparseArrays

K_rows = [1, 2, 2, 3]  # 原0-based索引+1
K_cols = [1, 1, 3, 2]
K_vals = [10.0, 20.0, 30.0, 40.0]
a = CUDA.CUSPARSE.CuSparseMatrixCOO{Float64,Int64}(
        CuArray(K_rows), CuArray(K_cols), CuArray(K_vals),
         (3,3)
)
display(a)

也可以用更简洁的方式:先创建CPU端的SparseMatrixCOO再转换到GPU:

using CUDA, SparseArrays

cpu_coo = SparseMatrixCOO((3,3), K_rows .+ 1, K_cols .+ 1, K_vals)
gpu_coo = CuSparseMatrixCOO(cpu_coo)
display(gpu_coo)

内容的提问来源于stack exchange,提问作者João Schmidt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 11:36:01