萌えハッカーニュースリーダー

2025/03/24 10:31 What it takes to add a new back end to Futhark

出典: https://futhark-lang.org/blog/2025-03-04-adding-a-new-backend.html
hakase
博士

ロボ子、Futharkコンパイラに新しいバックエンドを追加する方法についてのブログ記事案が出てるのじゃ。

roboko
ロボ子

Futharkコンパイラですか。バックエンドを追加するというのは、具体的にどういうことでしょうか?

hakase
博士

`futhark foo bar.fut`コマンドで`bar.fut`に基づいて何らかの出力を生成することじゃな。簡単なものから、全く新しいハードウェア向けのバックエンドまで、色々あるみたいじゃぞ。

roboko
ロボ子

なるほど。記事では、その難易度や必要な作業の種類について触れるのですね。

hakase
博士

そうじゃ。コンパイラのアーキテクチャは、フロントエンド、ミドルエンド、バックエンドの3つの主要部分で構成されていて、それぞれ役割が違うのじゃ。

roboko
ロボ子

フロントエンドはFutharkのソースコードを解析して、コア中間表現(IR)に変換するのですね。ミドルエンドは何をするのですか?

hakase
博士

ミドルエンドは、IR形式で表現されたプログラムを最適化するのじゃ。バックエンドは、そのIR表現からCなどの低レベル表現に変換するのじゃ。

roboko
ロボ子

IRにも色々種類があるみたいですね。`SOACS`というのは?

hakase
博士

`SOACS`は並列処理を表現するIR方言の一種じゃ。コンパイラは単一のIRではなく、異なる目的で使用されるIR方言のファミリーを持っておるのじゃ。

roboko
ロボ子

Futharkコンパイラでは、バックエンドは「アクション」と呼ばれるのですね。`FutharkM`モナド内で実行されるというのは、どういう意味でしょうか?

hakase
博士

`FutharkM`はIO効果をサポートするモナドじゃ。例えば、`futhark c`のアクションはCコードを生成し、ファイルを作成し、Cコンパイラを実行するのじゃ。

roboko
ロボ子

命令型コード生成には、共有インフラストラクチャを利用して車輪の再発明を避けているとありますね。Impという中間表現を使うのですね。

hakase
博士

そうじゃ。Impは拡張可能な言語で、関数型IRからImpへの変換はImpGenモジュールで行われるのじゃ。ImpからCやPythonへの変換は機械的なプロセスじゃ。

roboko
ロボ子

バックエンド作成のアドバイスとして、ターゲット言語のレベルに応じて、使用するIRを選択することが重要だと。

hakase
博士

その通りじゃ!新しいGPUバックエンドを作るなら、`gpu.h`抽象化レイヤーを実装すると良いみたいじゃな。C言語のようなものを生成するなら、既存のImp生成機構を使うのが簡単じゃ。

roboko
ロボ子

ドキュメントが十分に整備されていないため、開発者に連絡することを推奨しているのですね。

hakase
博士

そうじゃ。技術的な課題よりも、ドキュメント不足の方が問題みたいじゃな。新しいバックエンドを追加する時は、積極的に開発者に助けを求めるのが良いのじゃ。

roboko
ロボ子

わかりました。私もいつかFutharkのバックエンド開発に挑戦してみたいです。

hakase
博士

おお!それは楽しみじゃ!でも、その前にロボ子、お掃除ロボットのバックエンドを作ってみるのはどうじゃ?

roboko
ロボ子

え、私がお掃除ロボットに…?

hakase
博士

冗談じゃ!ロボ子が掃除機になったら、私が困るからの!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search