Automated Kernel Fusion for GPU Based on Code
2024年10月22日読了
Credit
Junji Fukuhara and Munehiro Takimoto. 2022. Automated Kernel Fusion for GPU Based on Code Motion. In Proceedings of the 23rd ACM SIGPLAN/SIGBED International Conference on Languages, Compilers, and Tools for Embedded Systems (LCTES ’22), June 14, 2022, San Diego, CA, USA. ACM, New York, NY, USA,11 pages. https://doi.org/10.1145/3519941.3535078
This work is licensed under a Creative Commons Attribution 4.0 International License.
Summary
コードを移動することで従来より多くのカーネル融合を行う手法(KFCM)を提唱する。
GPUプログラムにおいて、メモリアクセスはボトルネックとなる。これはカーネル融合によって改善される。しかし、カーネル呼出しが隣り合っていなければならないというのは、融合の機会が少ない。そのため、コード移動を行い、積極的に融合の機会を作る。
Note
カーネル融合によってカーネル数が減り、起動オーバーヘッドが減る。 カーネル融合によってデータの共有がしやすくなり、つまりメモリ読書が減る。
Backward Kernel Fusion
まずBackward Kernel Fusionを行う。データフロー方程式(割愛)を解いて次の述語を求める。
- :
n
は を持つ - :
n
は に対する変更ステートメントを持っていないかつ 以外のいかなるカーネル起動ステートメントを持っていない - :
n
の入口は に関して下方向安全 - :
n
の出口は に関して下方向安全 - : が
n
の出口において融合可能。つまり を持つn
が である - :
n
の入口は に関して下方向安全であり、それ以降のいかなるノードにも を移動できない - :
n
の出口は に関して下方向安全であり、n
で はkillされる - :
n
の入口まで をdelay可能 - :
n
の出口まで をdelay可能 - : は
n
の入口にdelay可能であり、それ以上delayできない - : は
n
の出口にdelay可能であり、それ以上delayできない
計算が終わったら、
- である
n
の入口と であるn
の出口に を挿入 - である
n
で と を融合
Forward Kernel Fusion
次にForward Kernel Fusionを行う。データフロー方程式(割愛)を解いて次の述語を求める。
- :
n
の入口において がsink可能 - :
n
の出口において がsink可能 - : が
n
の入口において融合可能。つまり を持つn
が である - : は
n
の入口にsink可能であり、それ以上sinkできない - : は
n
の出口にsink可能であり、それ以上sinkできない
計算が終わったら、
- である
n
の入口と であるn
の出口に を挿入 - である
n
で と を融合
Impression
お世話になった助教の博論。ACMのあのサイトから他の論文と同様にアクセスできるというのは、それだけで凄い権威を感じる。
非常に読みやすい。多くの論文が「わざわざ言わなくても察してくれるだろう」と略記や省略をしがちであるのに対して、この論文ではせいぜい図示するときに略記がある程度である。
カーネル融合すべきものだけを融合すべきという課題が残っているらしい。どうやら私はこの課題の一部に取り組むらしい。
■