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 の動向に注目していこう。