天狗会議録
Posts Pages About

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を行う。データフロー方程式(割愛)を解いて次の述語を求める。

計算が終わったら、

  1. NLatest(n)klsKNLatest(n)_{kls_K} である n の入口と XLatest(n)klsKXLatest(n)_{kls_K} である n の出口に klsKkls_K を挿入
  2. XFusible(n,klsK,klsK2)XFusible(n, kls_K, kls_{K2}) である nKKK2K2 を融合

Forward Kernel Fusion

次にForward Kernel Fusionを行う。データフロー方程式(割愛)を解いて次の述語を求める。

計算が終わったら、

  1. NInsert(n)klsKNInsert(n)_{kls_K} である n の入口と XInsert(n)klsKXInsert(n)_{kls_K} である n の出口に klsKkls_K を挿入
  2. XFusible(n,klsK,klsK2)XFusible(n, kls_K, kls_{K2}) である nKKK2K2 を融合

Impression

お世話になった助教の博論。ACMのあのサイトから他の論文と同様にアクセスできるというのは、それだけで凄い権威を感じる。

非常に読みやすい。多くの論文が「わざわざ言わなくても察してくれるだろう」と略記や省略をしがちであるのに対して、この論文ではせいぜい図示するときに略記がある程度である。

カーネル融合すべきものだけを融合すべきという課題が残っているらしい。どうやら私はこの課題の一部に取り組むらしい。

戻る