LLVM と IR
CompilerLLVM
2022-11-8 10:00 JST

LLVM をちょっと調べている。IR は標準の IR 以外にも MLIR などがあるようだ。

MLIR というのがあるのね

MLIR という機械学習を匂わせる IR がある。でも ML はMulti-Level だったりする。LLVM のオリジナルの IR じゃだめなのか?ClangIR とか Circuit IR とかいろんな IR が乱立していて収集つかん(自分的に)。

SPIR というのもある

LLVM の IR じゃ何かが足りないのか? Khronos から SPIR(Standard Portable Intermediate Representation)「Standard Portable Intermediate Representationは、KhronosGroupによる並列計算とグラフィックスの中間言語です。これは、VulkanグラフィックAPIやOpenCLコンピューティングAPIを含む複数の実行環境で使用され、シェーダーまたはカーネルを表します。」とのことだ。

そしてその後継に「SPIR-V」というのも発表されている。なんでも V をつければいいというものではない。英語の Wikipedia をみると 2015 からスタートしているので、それなりに歴史がある。

そして AddressSpace

LLVM には AddressSpace という概念があって、それは Embedded C から取ってきているとおっしゃっている。OpenCL にはジェネリックアドレス空間なるものがある。ジェネリックって何?どうやら"デフォルト"アドレス空間みたいね。

gcc は内部的に Named Adress Spaces を使うことが出来るらしい。

ついでに AMD の歴史

後藤さんによると AMD は PS4 で GCN(Graphics Core Next)を採用。それ以前は VLIW で SIMD という構成だったらしい。VLIW だとコードを埋めるのが大変だよね(たぶん)。で、SIMT にすると楽になりそう。ということで、AMD は GCN から SIMT になっております。

ところが、どうやら RDNA3 では(もっと前からかも)SIMD になっている模様(未確認)。NVIDIA は Ampere で SIMT の PC を個別に持てるようにしたので、これでほとんど昔のスパコンになった。でも、これって複雑じゃない?待ち合わせとかも大変。多分使いこなせないよ。というか変なことしちゃうと、ロックで性能でないと思う。意外と AMD の SIMD はこれからは正解なんじゃないかと思っている。今後の GPGPU の動向に注目していこう。

リンク集