Thanks to visit codestin.com
Credit goes to github.com

Skip to content

[Bug] Sparse-dense matmul returns zero for F-contiguous dense input (float64) #9850

Description

@MauriceDHanisch

[Bug] Sparse-dense matmul returns zero for F-contiguous dense input (float64)

I've found a silent failure in Cupy's sparse-dense multiplication. When multiplying a large F-contiguous dense matrix with a CSR matrix in float64, the result is exactly zero, even though both inputs are non-zero.

Environment

  • Cupy: 14.0.1 (cupy-cuda12x)
  • CUDA: 12.x
  • GPU: RTX 4090
  • OS: Linux

Reproduction

This script reproduces the bug. It uses a dense matrix of shape (1380300, 377) and a 377x377 CSR matrix.

import cupy as cp
import cupyx.scipy.sparse as cpx_sparse
import numpy as np
import scipy.sparse as sp

def reproduce():
    n_grid = 1380300
    n_ao = 377
    sparsity = 0.05
    
    # Sparse CSR (float64)
    dm = sp.random(n_ao, n_ao, density=sparsity, format='csr', dtype=np.float64)
    dm_gpu = cpx_sparse.csr_matrix(dm)
    
    # Dense F-contiguous (float64)
    ao_gpu = cp.random.rand(n_grid, n_ao, dtype=np.float64)
    ao_gpu_F = cp.asfortranarray(ao_gpu)
    
    print(f"DM sum: {cp.sum(cp.abs(dm_gpu.data)):.6e}")
    print(f"AO sum: {cp.sum(cp.abs(ao_gpu_F)):.6e}")

    # This returns exactly 0.0
    res = ao_gpu_F @ dm_gpu
    print(f"Result sum: {cp.sum(cp.abs(res)):.6e}")
    
    assert cp.sum(cp.abs(res)) > 0, \"Error: matmul returned zero\"

if __name__ == \"__main__\":
    reproduce()

Observations

  • Result sum: 0.000000e+00

Metadata

Metadata

Assignees

Labels

cat:bugBugsst:awaiting-member(deprecated) Awaiting response from CuPy dev team

Type

No type

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions