AccelerateHS / AccelerateHS/accelerate-fft

Thread-unsafe cuFFT plan cache usage

Abierto
#12 0 comentarios 0 reacciones 0 asignados Ver en GitHub
Lenguaje dominante
Haskell
Estrellas
11
Forks
9
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

Fortunately plans are cached by `accelerate-fft` however there is only one plan per shape and data-type and no mutual exclusion for concurrent usage of that plan which poses a thread-safety issue when multiple separate threads try to use the same plan, assign it a corresponding CUDA stream, and then execute said plan. Execution could feasibly look like:
```
p = ... cached plan #1 ...
thread 1: FFT.setStream p s1
thread 2: FFT.setStream p s2
thread 1: FFT.execC2C p (fftMode mode) d_in d_out
thread 2: FFT.execC2C p (fftMode mode) d_in d_out
```

Solutions include:
1. Make redundant copies of cuFFT plans as concurrent demand is observed.
2. Enforce mutual exclusion on plans during `cuFFT` call.

The former is vastly preferred to the latter.

Additionally, the [cuFFT documentation](https://docs.nvidia.com/cuda/cufft/#thread-safety) makes clear that concurrent usage of plans is fundamentally thread-unsafe.

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.