AccelerateHS / AccelerateHS/accelerate-fft

Thread-unsafe cuFFT plan cache usage

オープン
#12 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る
主要言語
Haskell
スター
11
フォーク
9
PR マージ指標
30日以内にマージされた PR はありません

説明

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.

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

評価

この issue はまだ評価されていません。

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。