ITADN

Missing sparse array methods for `CuSparseMatrixCOO`

#3055Opengdalle 创建于 2026-03-16
bug
G
gdallecommented
**Describe the bug** Some methods of [`GPUArrays`](https://github.com/JuliaGPU/GPUArrays.jl?tab=readme-ov-file#sparse-array-support-optional) related to sparse arrays are missing for `CuSparseMatrixCOO`, whereas they exist for `CuSparseMatrixCSC` and `CuSparseMatrixCSR`. **To reproduce** The Minimal Working Example (MWE) for this bug: ```julia using CUDA, CUDA.CUSPARSE using GPUArrays using SparseArrays GPUArrays.sparse_array_type(CuSparseMatrixCSC(spzeros(1, 1))) == CuSparseMatrixCSC # true, correct behavior GPUArrays.sparse_array_type(CuSparseMatrixCOO(spzeros(1, 1))) == CuSparseMatrixCOO # false, missing implem ``` <details><summary>Manifest.toml</summary> <p> ``` Status `~/.julia/environments/v1.11/Manifest.toml` [47edcb42] ADTypes v1.21.0 [621f4979] AbstractFFTs v1.5.0 [1520ce14] AbstractTrees v0.4.5 ⌃ [79e6a3ab] Adapt v4.4.0 [35492f91] AdaptivePredicates v1.2.0 [66dad0bd] AliasTables v1.1.3 [27a7e980] Animations v0.4.2 ⌃ [4fba245c] ArrayInterface v7.22.0 [a9b6321e] Atomix v1.1.2 [67c07d97] Automa v1.1.0 [13072b0f] AxisAlgorithms v1.1.0 [39de3d68] AxisArrays v0.4.8 [ab4f0b2a] BFloat16s v0.6.1 [18cc8868] BaseDirs v1.3.2 [d1d4a3ce] BitFlags v0.1.9 [e1450e63] BufferedStreams v1.2.2 [fa961155] CEnum v0.5.0 [2a0fbf3d] CPUSummary v0.2.7 [96374032] CRlibm v1.0.2 ⌃ [336ed68f] CSV v0.10.15 ⌃ [052768ef] CUDA v5.9.6 [1af6417a] CUDA_Runtime_Discovery v1.0.0 [d360d2e6] ChainRulesCore v1.26.0 [944b1d66] CodecZlib v0.7.8 [a2cac450] ColorBrewer v0.4.2 [35d6a980] ColorSchemes v3.31.0 [3da002f7] ColorTypes v0.12.1 [c3611d14] ColorVectorSpace v0.11.0 [5ae59095] Colors v0.13.1 [bbf7d656] CommonSubexpressions v0.3.1 [f70d9fcc] CommonWorldInvalidations v1.0.0 [34da2185] Compat v4.18.1 ⌃ [95dc2771] ComputePipeline v0.1.6 [2569d6c7] ConcreteStructs v0.2.3 ⌃ [f0e56b4a] ConcurrentUtilities v2.5.0 [8f4d0f93] Conda v1.10.3 [187b0558] ConstructionBase v1.6.0 [d38c429a] Contour v0.6.3 [adafc99b] CpuId v0.3.1 [a8cc5b0e] Crayons v4.1.1 [9a962f9c] DataAPI v1.16.0 [a93c6f00] DataFrames v1.8.1 [864edb3b] DataStructures v0.19.3 [e2d170a0] DataValueInterfaces v1.0.0 [927a84f5] DelaunayTriangulation v1.6.6 [8bb1440f] DelimitedFiles v1.9.1 [163ba53b] DiffResults v1.1.0 [b552c78f] DiffRules v1.15.1 [8d63f2c5] DispatchDoctor v0.4.28 [31c24e10] Distributions v0.25.123 [ffbed154] DocStringExtensions v0.9.5 ⌃ [4e289a0a] EnumX v1.0.6 ⌃ [7da242da] Enzyme v0.13.129 [f151be2c] EnzymeCore v0.8.18 [429591f6] ExactPredicates v2.2.9 [460bff9d] ExceptionUnwrapping v0.1.11 [e2ba6199] ExprTools v0.1.10 ⌃ [21656369] ExpressionExplorer v1.1.3 [411431e0] Extents v0.1.6 [c87230d0] FFMPEG v0.4.5 [b86e33f2] FFTA v0.3.1 [9aa1b823] FastClosures v0.3.2 [5789e2e9] FileIO v1.18.0 [8fc22ac5] FilePaths v0.9.0 [48062228] FilePathsBase v0.9.24 [1a297f60] FillArrays v1.16.0 [53c48c17] FixedPointNumbers v0.8.5 [1fa38f19] Format v1.3.7 [f6369f11] ForwardDiff v1.3.2 [b38be410] FreeType v4.1.1 [663a7486] FreeTypeAbstraction v0.10.8 [d9f16b24] Functors v0.5.2 [0c68f7d7] GPUArrays v11.4.1 [46192b85] GPUArraysCore v0.2.0 [61eb1bfa] GPUCompiler v1.8.2 [096a3bc2] GPUToolbox v1.0.0 ⌃ [28b8d3ca] GR v0.73.22 [5c1252a2] GeometryBasics v0.5.10 [3955a311] GridLayoutBase v0.11.2 [42e2da0e] Grisu v1.0.2 ⌃ [cd3eb016] HTTP v1.10.19 [076d061b] HashArrayMappedTries v0.2.0 [34004b35] HypergeometricFunctions v0.3.28 ⌃ [7073ff75] IJulia v1.34.1 [615f187c] IfElse v0.1.1 [2803e5a7] ImageAxes v0.6.12 [c817782e] ImageBase v0.1.7 [a09fc81d] ImageCore v0.10.5 [82e4d734] ImageIO v0.6.9 [bc367c6b] ImageMetadata v0.9.10 [9b13fd28] IndirectArrays v1.0.0 [d25df0c9] Inflate v0.1.5 [842dd82b] InlineStrings v1.4.5 [18e54dd8] IntegerMathUtils v0.1.3 [a98d9a8b] Interpolations v0.16.2 [d1acc4aa] IntervalArithmetic v1.0.2 [8197267c] IntervalSets v0.7.13 [3587e190] InverseFunctions v0.1.17 [41ab1584] InvertedIndices v1.3.1 [92d709cd] IrrationalConstants v0.2.6 [f1662d9f] Isoband v0.1.1 [c8e1da08] IterTools v1.10.0 [82899510] IteratorInterfaceExtensions v1.0.0 [1019f520] JLFzf v0.1.11 [692b3bcd] JLLWrappers v1.7.1 [682c06a0] JSON v1.4.0 [0f8b85d8] JSON3 v1.14.3 [b835a17e] JpegTurbo v0.1.6 ⌃ [63c18a36] KernelAbstractions v0.9.39 [5ab0869b] KernelDensity v0.6.11 [929cbde3] LLVM v9.4.6 [8b046642] LLVMLoopInfo v1.0.0 [b964fa9f] LaTeXStrings v1.4.0 [23fbe1c1] Latexify v0.16.10 [8cdb02fc] LazyModules v0.3.1 [2ab3a3ac] LogExpFunctions v0.3.29 [e6f89c97] LoggingExtras v1.2.0 [b2108857] Lux v1.31.3 [bb33d45b] LuxCore v1.5.3 [82251201] LuxLib v1.15.4 [7e8f7934] MLDataDevices v1.17.4 [1914dd2f] MacroTools v0.5.16 ⌃ [ee78f7c6] Makie v0.24.8 [dbb5928d] MappedArrays v0.4.3 [0a4f8689] MathTeXEngine v0.6.7 ⌃ [739be429] MbedTLS v1.1.9 [442fdcdd] Measures v0.3.3 [e1d29d7a] Missings v1.2.0 [e94cdb99] MosaicViews v0.3.4 [46d2c3a1] MuladdMacro v0.2.4 [872c559c] NNlib v0.9.33 [5da4648a] NVTX v1.0.3 [77ba4419] NaNMath v1.1.3 [f09324ee] Netpbm v1.1.1 [d8793406] ObjectFile v0.5.0 [510215fc] Observables v0.5.5 [6fe1bfb0] OffsetArrays v1.17.0 [52e1d378] OpenEXR v0.3.3 [4d8831e6] OpenSSL v1.6.1 [3bd65402] Optimisers v0.4.7 [bac558e1] OrderedCollections v1.8.1 [90014a1f] PDMats v0.11.37 [f57f5aa1] PNGFiles v0.4.4 [19eb6ba3] Packing v0.5.1 [5432bcbf] PaddedViews v0.5.12 [69de0a69] Parsers v2.8.3 [eebad327] PkgVersion v0.3.3 [ccf2f8ad] PlotThemes v3.3.0 [995b91a9] PlotUtils v1.4.4 ⌃ [91a5bcdd] Plots v1.41.5 [647866c9] PolygonOps v0.1.2 [2dfb63ee] PooledArrays v1.4.3 ⌅ [aea7be01] PrecompileTools v1.2.1 ⌃ [21216c6a] Preferences v1.5.1 ⌃ [08abe8d2] PrettyTables v3.1.2 [27ebfcd6] Primes v0.5.7 [92933f4c] ProgressMeter v1.11.0 ⌃ [3349acd9] ProtoBuf v1.2.0 ⌃ [43287f4e] PtrArrays v1.3.0 [4b34888f] QOI v1.0.2 [1fd47b50] QuadGK v2.11.2 [74087812] Random123 v1.7.1 [e6cf234a] RandomNumbers v1.6.0 [b3c3ace0] RangeArrays v0.3.2 [c84ed2f1] Ratios v0.4.5 ⌃ [3c362404] Reactant v0.2.213 ⌃ [a3311ec8] ReactantCore v0.1.16 [3cdcf5f2] RecipesBase v1.3.4 [01d81517] RecipesPipeline v0.6.12 [189a3867] Reexport v1.2.2 [05181044] RelocatableFolders v1.0.1 [ae029012] Requires v1.3.1 [79098fc4] Rmath v0.9.0 [5eaf0fd0] RoundingEmulator v0.2.1 [fdea26ae] SIMD v3.7.2 [431bcebd] SciMLPublic v1.0.1 ⌃ [7e506255] ScopedValues v1.5.0 [6c6a2e73] Scratch v1.3.0 [91c51154] SentinelArrays v1.4.9 [efcf1570] Setfield v1.1.2 [65257c39] ShaderAbstractions v0.5.0 [992d4aef] Showoff v1.0.3 [73760f76] SignedDistanceFields v0.4.1 [777ac1f9] SimpleBufferStream v1.2.0 [699a6c99] SimpleTraits v0.9.5 [45858cf5] Sixel v0.1.5 [a2af1166] SortingAlgorithms v1.2.2 ⌃ [276daf66] SpecialFunctions v2.6.1 [860ef19b] StableRNGs v1.0.4 [cae243ae] StackViews v0.1.2 [aedffcd0] Static v1.3.1 ⌃ [90137ffa] StaticArrays v1.9.16 [1e83bf80] StaticArraysCore v1.4.4 [10745b16] Statistics v1.11.1 [82ae8749] StatsAPI v1.8.0 [2913bbd2] StatsBase v0.34.10 [4c63d2b9] StatsFuns v1.5.2 ⌃ [892a3eda] StringManipulation v0.4.2 [09ab397b] StructArrays v0.7.2 [53d494c1] StructIO v0.3.1 [856f2bd8] StructTypes v1.11.0 ⌃ [ec057cc2] StructUtils v2.6.2 [3783bdb8] TableTraits v1.0.1 [bd369af6] Tables v1.12.1 [62fd8b95] TensorCore v0.1.1 ⌃ [731e570b] TiffImages v0.11.6 [e689c965] Tracy v0.1.6 [3bb67fe8] TranscodingStreams v0.11.3 [981d1d27] TriplotBase v0.1.0 [5c2747f8] URIs v1.6.1 [1cfade01] UnicodeFun v0.4.1 [1986cc42] Unitful v1.28.0 [013be700] UnsafeAtomics v0.3.0 [41fe7b60] Unzip v0.2.0 [81def892] VersionParsing v1.3.0 [ea10d353] WeakRefStrings v1.4.2 [e3aaa7dc] WebP v0.1.3 [d49dbf32] WeightInitializers v1.3.1 [efce3f68] WoodburyMatrices v1.1.0 [76eceee3] WorkerUtilities v1.6.1 [c2297ded] ZMQ v1.5.1 [6e34b625] Bzip2_jll v1.0.9+0 [4e9b3aee] CRlibm_jll v1.0.1+0 ⌃ [d1e2174e] CUDA_Compiler_jll v0.4.1+1 ⌃ [4ee394cb] CUDA_Driver_jll v13.1.0+2 ⌅ [76a88914] CUDA_Runtime_jll v0.19.2+0 ⌃ [83423d85] Cairo_jll v1.18.5+0 [ee1fde0b] Dbus_jll v1.16.2+0 [5ae413db] EarCut_jll v2.2.4+0 ⌅ [7cc45869] Enzyme_jll v0.0.249+0 [2702e6a9] EpollShim_jll v0.0.20230411+1 [2e619515] Expat_jll v2.7.3+0 ⌃ [b22a6f82] FFMPEG_jll v8.0.1+0 [a3f928ae] Fontconfig_jll v2.17.1+0 [d7e528f0] FreeType2_jll v2.13.4+0 [559328eb] FriBidi_jll v1.0.17+0 [0656b61e] GLFW_jll v3.4.1+0 ⌅ [d2c73de3] GR_jll v0.73.22+0 [b0724c58] GettextRuntime_jll v0.22.4+0 [61579ee1] Ghostscript_jll v9.55.1+0 [59f7168a] Giflib_jll v5.2.3+0 ⌃ [7746bdde] Glib_jll v2.86.2+0 [3b182d85] Graphite2_jll v1.3.15+0 [2e76f6c2] HarfBuzz_jll v8.5.1+0 [905a6f67] Imath_jll v3.2.2+0 [aacddb02] JpegTurbo_jll v3.1.4+0 [9c1d0b0a] JuliaNVTXCallbacks_jll v0.2.1+0 [c1c5ebd0] LAME_jll v3.100.3+0 [88015f11] LERC_jll v4.0.1+0 [dad2f222] LLVMExtra_jll v0.0.38+0 [1d63c593] LLVMOpenMP_jll v18.1.8+0 [dd4b983a] LZO_jll v2.10.3+0 [ad6e5548] LibTracyClient_jll v0.13.1+0 ⌅ [e9f186c6] Libffi_jll v3.4.7+0 [7e76a0d4] Libglvnd_jll v1.7.1+1 [94ce4f54] Libiconv_jll v1.18.0+0 [4b2f31a3] Libmount_jll v2.41.3+0 [89763e89] Libtiff_jll v4.7.2+0 [38a345b3] Libuuid_jll v2.41.3+0 [e98f9f5b] NVTX_jll v3.2.2+0 [e7412a2a] Ogg_jll v1.3.6+0 [6cdc7f73] OpenBLASConsistentFPCSR_jll v0.3.30+0 [18a262bb] OpenEXR_jll v3.4.4+0 [458c3c95] OpenSSL_jll v3.5.5+0 [efe28fd5] OpenSpecFun_jll v0.5.6+0 [91d4177d] Opus_jll v1.6.1+0 [36c8627f] Pango_jll v1.57.0+0 ⌅ [30392449] Pixman_jll v0.44.2+0 ⌅ [c0090381] Qt6Base_jll v6.8.2+2 ⌅ [629bc702] Qt6Declarative_jll v6.8.2+1 ⌅ [ce943373] Qt6ShaderTools_jll v6.8.2+1 ⌃ [e99dba38] Qt6Wayland_jll v6.8.2+2 ⌅ [0192cb87] Reactant_jll v0.0.315+0 [f50d1b31] Rmath_jll v0.5.1+0 [a44049a8] Vulkan_Loader_jll v1.3.243+0 [a2964d1f] Wayland_jll v1.24.0+0 [ffd25f8a] XZ_jll v5.8.2+0 [f67eecfb] Xorg_libICE_jll v1.1.2+0 [c834827a] Xorg_libSM_jll v1.2.6+0 ⌃ [4f6342f7] Xorg_libX11_jll v1.8.12+0 [0c0b7dd1] Xorg_libXau_jll v1.0.13+0 [935fb764] Xorg_libXcursor_jll v1.2.4+0 [a3789734] Xorg_libXdmcp_jll v1.1.6+0 ⌃ [1082639a] Xorg_libXext_jll v1.3.7+0 [d091e8ba] Xorg_libXfixes_jll v6.0.2+0 [a51aa0fd] Xorg_libXi_jll v1.8.3+0 ⌃ [d1454406] Xorg_libXinerama_jll v1.1.6+0 ⌃ [ec84b674] Xorg_libXrandr_jll v1.5.5+0 [ea2f1a96] Xorg_libXrender_jll v0.9.12+0 [a65dc6b1] Xorg_libpciaccess_jll v0.18.1+0 [c7cfdc94] Xorg_libxcb_jll v1.17.1+0 ⌃ [cc61e674] Xorg_libxkbfile_jll v1.1.3+0 [e920d4aa] Xorg_xcb_util_cursor_jll v0.1.6+0 [12413925] Xorg_xcb_util_image_jll v0.4.1+0 [2def613f] Xorg_xcb_util_jll v0.4.1+0 [975044d2] Xorg_xcb_util_keysyms_jll v0.4.1+0 [0d47668e] Xorg_xcb_util_renderutil_jll v0.3.10+0 [c22f9ab0] Xorg_xcb_util_wm_jll v0.4.2+0 [35661453] Xorg_xkbcomp_jll v1.4.7+0 [33bec58e] Xorg_xkeyboard_config_jll v2.44.0+0 [c5fb5394] Xorg_xtrans_jll v1.6.0+0 [8f1865be] ZeroMQ_jll v4.3.6+0 [3161d3a3] Zstd_jll v1.5.7+1 [1e29f10c] demumble_jll v1.3.0+0 [35ca27e7] eudev_jll v3.2.14+0 [214eeab7] fzf_jll v0.61.1+0 [9a68df92] isoband_jll v0.2.3+0 [a4ae2306] libaom_jll v3.13.1+0 [0ac62f75] libass_jll v0.17.4+0 [1183f4f0] libdecor_jll v0.2.2+0 [8e53e030] libdrm_jll v2.4.125+1 [2db6ffa8] libevdev_jll v1.13.4+0 [f638f0a6] libfdk_aac_jll v2.0.4+0 [36db933b] libinput_jll v1.28.1+0 ⌃ [b53b4c65] libpng_jll v1.6.54+0 [075b6546] libsixel_jll v1.10.5+0 [a9144af2] libsodium_jll v1.0.21+0 [9a156e7d] libva_jll v2.23.0+0 [f27f6e37] libvorbis_jll v1.3.8+0 [c5f90fcd] libwebp_jll v1.6.0+0 [009596ad] mtdev_jll v1.1.7+0 ⌅ [1270edf5] x264_jll v10164.0.1+0 [dfaa095f] x265_jll v4.1.0+0 [d8fb68d0] xkbcommon_jll v1.13.0+0 [0dad84c5] ArgTools v1.1.2 [56f22d72] Artifacts v1.11.0 [2a0f44e3] Base64 v1.11.0 [8bf52ea8] CRC32c v1.11.0 [ade2ca70] Dates v1.11.0 [8ba89e20] Distributed v1.11.0 [f43a241f] Downloads v1.6.0 [7b1f6079] FileWatching v1.11.0 [9fa8497b] Future v1.11.0 [b77e0a4c] InteractiveUtils v1.11.0 [4af54fe1] LazyArtifacts v1.11.0 [b27032c2] LibCURL v0.6.4 [76f85450] LibGit2 v1.11.0 [8f399da3] Libdl v1.11.0 [37e2e46d] LinearAlgebra v1.11.0 [56ddb016] Logging v1.11.0 [d6f4376e] Markdown v1.11.0 [a63ad114] Mmap v1.11.0 [ca575930] NetworkOptions v1.2.0 [44cfe95a] Pkg v1.11.0 [de0858da] Printf v1.11.0 [3fa0cd96] REPL v1.11.0 [9a3f8284] Random v1.11.0 [ea8e919c] SHA v0.7.0 [9e88b42a] Serialization v1.11.0 [1a1011a3] SharedArrays v1.11.0 [6462fe0b] Sockets v1.11.0 [2f01184e] SparseArrays v1.11.0 [f489334b] StyledStrings v1.11.0 [4607b0f0] SuiteSparse [fa267f1f] TOML v1.0.3 [a4e569a6] Tar v1.10.0 [8dfed614] Test v1.11.0 [cf7118a7] UUIDs v1.11.0 [4ec0a83e] Unicode v1.11.0 [e66e0078] CompilerSupportLibraries_jll v1.1.1+0 [deac9b47] LibCURL_jll v8.6.0+0 [e37daf67] LibGit2_jll v1.7.2+0 [29816b5a] LibSSH2_jll v1.11.0+1 [c8ffd9c3] MbedTLS_jll v2.28.6+0 [14a3606d] MozillaCACerts_jll v2023.12.12 [4536629a] OpenBLAS_jll v0.3.27+1 [05823500] OpenLibm_jll v0.8.5+0 [efcefdf7] PCRE2_jll v10.42.0+1 [bea87d4a] SuiteSparse_jll v7.7.0+0 [83775a58] Zlib_jll v1.2.13+1 [8e850b90] libblastrampoline_jll v5.11.0+0 [8e850ede] nghttp2_jll v1.59.0+0 [3f19e933] p7zip_jll v17.4.0+2 ``` </p> </details> **Expected behavior** The following methods should be implemented: ```julia GPUArrays.sparse_array_type(sa::CuSparseMatrixCOO) = CuSparseMatrixCOO GPUArrays.sparse_array_type(::Type{<:CuSparseMatrixCSR}) = CuSparseMatrixCOO GPUArrays.csc_type(sa::CuSparseMatrixCOO) = CuSparseMatrixCSC GPUArrays.csr_type(sa::CuSparseMatrixCOO) = CuSparseMatrixCSR GPUArrays.coo_type(sa::CuSparseMatrixCOO) = CuSparseMatrixCOO ``` The appropriate location for them is https://github.com/JuliaGPU/CUDA.jl/blob/153f819e49a18e9be8726af548a15ee8f69ba750/lib/cusparse/array.jl#L108-L126 **Version info** Details on Julia: ``` # please post the output of: versioninfo() Julia Version 1.11.5 Commit 760b2e5b739 (2025-04-14 06:53 UTC) Build Info: Official https://julialang.org/ release Platform Info: OS: Linux (x86_64-linux-gnu) CPU: 2 × Intel(R) Xeon(R) CPU @ 2.00GHz WORD_SIZE: 64 LLVM: libLLVM-16.0.6 (ORCJIT, skylake-avx512) Threads: 2 default, 0 interactive, 1 GC (on 2 virtual cores) Environment: LD_LIBRARY_PATH = /usr/lib64-nvidia JULIA_NUM_THREADS = auto ``` Details on CUDA: ``` # please post the output of: CUDA.versioninfo() CUDA toolchain: - runtime 12.8, local installation - driver 580.82.7 for 13.1 - compiler 12.9 CUDA libraries: - CUBLAS: 12.8.4 - CURAND: 10.3.9 - CUFFT: 11.3.3 - CUSOLVER: 11.7.3 - CUSPARSE: 12.5.8 - CUPTI: 2025.1.1 (API 12.8.0) - NVML: 13.0.0+580.82.7 Julia packages: - CUDA: 5.9.6 - GPUArrays: 11.4.1 - GPUCompiler: 1.8.2 - KernelAbstractions: 0.9.39 - CUDA_Driver_jll: 13.1.0+2 - CUDA_Compiler_jll: 0.4.1+1 - CUDA_Runtime_jll: 0.19.2+0 - CUDA_Runtime_Discovery: 1.0.0 Toolchain: - Julia: 1.11.5 - LLVM: 16.0.6 Preferences: - CUDA_Runtime_jll.version: 12.8.1 - CUDA_Runtime_jll.local: true 1 device: 0: Tesla T4 (sm_75, 14.560 GiB / 15.000 GiB available) ``` **Additional context** Tested on a Colab notebook (hence the weird deps).
0 条评论