code-saturne / code-saturne/code_saturne

SIGSEGV in cs_sles_solve_ccc_fv when CS_CUDA_ALLOC_DEVICE_UVM is not set (v9.1.0)

Abierto
#164 2 comentarios 0 reacciones 0 asignados Ver en GitHub
Lenguaje dominante
C++
Estrellas
307
Forks
102
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

## Description

`cs_sles_solve_ccc_fv` allocates its extended solver buffers using `CS_ALLOC_DEVICE` (device-only memory). Those buffers are subsequently passed to the CPU-side convergence check, which dereferences them on the host and causes a SIGSEGV.

Setting `CS_CUDA_ALLOC_DEVICE_UVM=1` before launching the solver works around the crash: it remaps `cs_alloc_mode_device` to `CS_ALLOC_HOST_DEVICE_SHARED` at initialisation time (see `cs_base_cuda.cu:777`), making the buffers accessible from both host and device.

## Steps to reproduce

1. Build code_saturne v9.1.0 with CUDA support.
2. Run any case that exercises the CUDA sparse linear solver (`cs_sles_solve_ccc_fv`) without setting `CS_CUDA_ALLOC_DEVICE_UVM`.
3. Observe SIGSEGV during the convergence check after the first solver call.

## Workaround

```bash
export CS_CUDA_ALLOC_DEVICE_UVM=1
```

Set this before invoking the solver. It prevents the crash by ensuring solver buffers are in unified/shared memory.

## Expected behaviour

`cs_sles_solve_ccc_fv` should either allocate convergence-check buffers in host-accessible memory directly, or the convergence check should use a device-to-host copy rather than a direct host dereference.

## Environment

- code_saturne version: 9.1.0
- CUDA version: 13.1
- GPU architecture: sm_75
- OS: Ubuntu (x86_64)

Guía de contribución

Abrir la guía de contribución

Línea de trabajo

Comienza en cs_sles_solve_ccc_fv e inspecciona cómo sus búferes extendidos del solver llegan a la comprobación de convergencia del lado de la CPU. Compara el comportamiento de asignación con cs_base_cuda.cu:777 y reproduce una compilación CUDA sin CS_CUDA_ALLOC_DEVICE_UVM. Se considera terminado cuando el solver ya no falla con un segmentation fault sin el workaround, mientras que el workaround existente de Unified Memory sigue siendo válido.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
cpp
Área
hpc
Tipo de issue
Error
Dificultad
4/5
Tiempo estimado
3-5 días
Estado de actividad
Tranquilo
Claridad
Bastante claro
Aptitud para principiantes
48/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.