バーラCUDA ― AMD GPU 向けに設計されたオープンソースの CUDA コンパイラー

2026/02/18 5:35

バーラCUDA ― AMD GPU 向けに設計されたオープンソースの CUDA コンパイラー

RSS: https://news.ycombinator.com/rss

要約

日本語訳:

(以下は原文を日本語に翻訳したものです)


BarraCUDA – AMD GPU 用の LLVM‑free CUDA コンパイラ

BarraCUDA は、約15,000行の C で書かれたオープンソースの C99 ベースの CUDA コンパイラです。AMD RDNA 3(GFX1100)GPU を対象とし、LLVM やその他外部ビルドツールに依存せずに ELF .hsaco バイナリを生成します – ただ単に

make
で構築できます。

アーキテクチャ

パイプラインは完全に文書化されています:

preprocessor → lexer → recursive‑descent parser → semantic analysis → SSA BIR → mem2reg promotion → instruction selection → register allocation → binary encoding → ELF emission

ホットパスには再帰や動的メモリが含まれず、コンパイラはデバッグ用に AST (
--ast
) または IR (
--ir
) をダンプできます。また、完全な C 前処理器、エラー回復、ソース位置追跡、および構造体の値渡し処理も実装されています。

サポートされる CUDA 機能

  • グローバル/デバイス/ホスト修飾子;スレッド/ブロック組み込み
  • 完全な C 制御フロー(if/else、ループ、switch/case、goto)と短絡論理
  • 基本的なテンプレート、演算子オーバーロード、複数の戻りパス、
    continue
    break
  • __shared__
    メモリ(LDS 配分)、
    __syncthreads()
    、アトミック、ワープ内蔵関数(
    __shfl_sync
    バリアント)、ベクトル型(float2–4, int2–4)、half 精度、
    __launch_bounds__
    、協調グループ
  • __shared__
    メモリ、アトミック操作、および上記のキーポイントに列挙されているその他の CUDA プリミティブ

現在の制限事項

符号なし型(bare unsigned types)、複合代入(

+=
,
-=
など)、const 修飾子、
__constant__
メモリ、2‑D シェアードメモリ配列、整数リテラル接尾辞、
__device__
関数内のパラメータ再代入、テクスチャ/サーフェイス、動的並列処理、多重翻訳単位、およびホストコード生成はまだサポートされていません。

テストスイート

テストハーネスには 14 ファイルが含まれ、35 を超えるカーネル(約1,700 BIR 命令、約27 KB マシンコード)があります。アトミック操作、ワープ演算、バリア、テンプレート、協調グループ、および複雑な「キッチンシンク」AI 生成カーネルを実行します。

ロードマップ

  • 近期:パーサーの強化とギャップ埋め。
  • 中期:命令スケジューリング、レジスタ割り当て、定数フォールディング、ループ不変動作移動、占有率チューニング。
  • 長期:新しいアーキテクチャのサポート(Tenstorrent RISC‑V AI アクセラレーター、Intel Arc Xe、RISC‑V Vector)。

エンコーディングに関する注意点

  • AMDGPU 命令プレフィックスは直感的でない:SOP1 (
    0xBE800000
    )、SOPC (
    0xBF000000
    )。
  • VOP3 命令は VDST ビットを使用して宛先選択を行う。
  • Null SADDR 値は
    0xffffffff
    とエンコードされる。
  • RDNA 3 カーネルはデフォルトで Wave32(Wave64 ではない)を使用。

ライセンスとコミュニティ

BarraCUDA は Apache 2.0 の下でリリースされています。問題や議論は GitHub またはメール(zanehambly@gmail.com)で報告できます。この軽量で LLVM‑free なツールチェーンは、AMD GPU および新興アクセラレーターエコシステム向けに開発する学術機関や小規模チームに魅力的かもしれません。


本文

BarraCUDA

AMD GPU を対象にしたオープンソースの CUDA コンパイラで、今後さらに多くのアーキテクチャを追加予定です。C99 で 15,000 行程度のコードから構成され、LLVM に依存していません。

.cu
ファイルを直接 GFX11 機械語へコンパイルし、AMD GPU が実行可能な ELF
.hsaco
バイナリを出力します。

これは NVIDIA のウォールガーデンを眺め、「そんなに難しいものなの?」と考えた結果です。答えは「実際にはかなり難しい」ですが、私はそれでも挑戦しました。
※ 現在の Tenstorrent 実装を試したい場合は、そのブランチをクローンしてください。


何ができるか

CUDA C ソースコード(

nvcc
に渡す
.cu
ファイルと同じ)を AMD RDNA 3 (gfx1100) 用のバイナリにコンパイルします。LLVM は使わず、HIP 翻訳層も不要です。字句解析器、構文解析器(再帰下降)、IR、そして 1,700 行程度の手書き命令選択ロジックだけで実現しています。

┌───────────────────────────────────────┐
│             BarraCUDA Pipeline        │
├───────────────────────────────────────┤
│ Source (.cu)                          │
│   ↓                                   │
│ Preprocessor → #include, #define, …   │
│   ↓                                   │
│ Lexer → Tokens                        │
│   ↓                                   │
│ Parser (Recursive Descent) → AST      │
│   ↓                                   │
│ Semantic Analysis → Type checking, …  │
│   ↓                                   │
│ BIR (BarraCUDA IR) → SSA form, …     │
│   ↓                                   │
│ mem2reg → Promotes allocas to SSA regs│
│   ↓                                   │
│ Instruction Selection → AMDGPU ops    │
│   ↓                                   │
│ Register Allocation → VGPR/SGPR       │
│   ↓                                   │
│ Binary Encoding → GFX11 instruction  │
│   ↓                                   │
│ ELF Emission → .hsaco                 │
│   ↓                                   │
│ Your kernel runs on your silicon      │
└───────────────────────────────────────┘

すべてのエンコーディングは

llvm-objdump
で検証され、デコード失敗はありません。LLVM を使ってコンパイルしたわけではありませんが、チェック用に使用しました。


ビルド方法

# C99 コードです。gcc でビルドできます。
make

CMake や autoconf は不要です。ビルド手順は 47 ステップではなく、簡潔です。もし失敗したら、GCC が壊れている可能性があります。

必要条件

  • C99 コンパイラ(gcc, clang 等)
  • (任意)挑戦心

LLVM は 不要 です。BarraCUDA は独自に命令をエンコードします。


使用方法

# AMD GPU バイナリへコンパイル
./barracuda --amdgpu-bin kernel.cu -o kernel.hsaco

# IR をダンプ(デバッグや好奇心のため)
./barracuda --ir kernel.cu

# ただ AST を解析して表示
./barracuda --ast kernel.cu

# セマンティック分析を実行
./barracuda --sema kernel.cu

対応機能

以下の CUDA 機能が GFX11 マシンコードとして正しく動作します。

コア言語CUDA 機能
__global__
,
__device__
,
__host__
修飾子
__shared__
メモリ(LDS)
ビルトイン:
threadIdx
,
blockIdx
__syncthreads()
s_barrier
構造体、列挙型、typedef、名前空間原子的操作 (
atomicAdd
,
atomicSub
など)
ポインタ、配列、ポインタ算術ワープ内命令 (
__shfl_sync
等)
制御フロー: if/else, for, while, do-while, switch/case, goto/labelワーヴ投票 (
__ballot_sync
等)
Short-circuit
&&
/ `
三項演算子半精度:
__half
, 変換
テンプレート(基本的なインスタンス化)
__launch_bounds__
の解析、VGPR 上限
複数の戻り経路, continue, breakコーポレーティブグループ (
cooperative_groups::this_thread_block()
)
演算子オーバーロード

コンパイラ機能

  • 完全な C 前処理器:
    #include
    ,
    #define/#undef
    , 関数型マクロ, 条件付きディレクティブ,
    #pragma
    ,
    #error
  • エラー回復(複数エラーを報告しても停止しない)
  • IR ダンプ時のソース位置追跡
  • 構造体の値渡し

__global__ void vector_add(float *c, float *a, float *b, int n) {
    int idx = threadIdx.x + blockIdx.x * blockDim.x;
    if (idx < n)
        c[idx] = a[idx] + b[idx];
}
$ ./barracuda --amdgpu-bin vector_add.cu -o vector_add.hsaco
wrote vector_add.hsaco (528 bytes code, 1 kernels)

LLVM は不要です。


アーキテクチャ

ファイル行数内容
lexer.c
747CUDA C ソースの字句解析
preproc.c
1 370前処理(マクロ, インクルード, 条件付き)
parser.c
1 500再帰下降パーサ → AST
sema.c
1 725型チェック, スコープ解決, オーバーロード解析
bir.c + bir_lower.c
3 032SSA IR と AST→BIR ライティング
bir_mem2reg.c
965スタックアロケを SSA レジスタへ昇格
bir_print.c
579ソース位置付きの美しい IR プリント
amdgpu_isel.c
1 788命令選択:BIR → AMDGPU マシンオペ
amdgpu_emit.c
1 735レジスタ割り当て + GFX11 バイナリエンコード + ELF 出力
main.c
317CLI ドライバ
合計15 117

データ構造はすべて固定サイズ配列で、ホットパスでは malloc を使わず、再帰もなく、ループはすべて境界付きです。


現状対応できない項目

  • 単独の
    unsigned
    unsigned int
    または
    int
    を使用)
  • 代入演算子 (
    +=
    ,
    -=
    ,
    >>=
    など)
  • const
    修飾子
  • __constant__
    メモリ
  • 2D シェアードメモリ配列 (
    __shared__ float a[16][16]
    ) – 1D にフラット化
  • 整数リテラルサフィックス (
    0xFFu
    ,
    1ULL
    )
  • __device__
    関数内でのパラメータ再代入(ローカル変数を使用)
  • テクスチャとサーフェス
  • 動的並列性(デバイス側カーネル起動)
  • 複数トランスレーションユニット
  • ホストコード生成(デバイスコードのみコンパイル)

これらはアーキテクチャ上の障害ではなく、まだ実装に手が回っていないだけです。


テストスイート

14 ファイル、35+ カーネル、約1,700 BIR 命令、約27 000 バイトのマシンコード:

  • vector_add.cu
    – GPU 計算の「Hello World」
  • cuda_features.cu
    – アトミック, ワープオペ, バリア, goto, switch, short-circuit
  • test_tier12.cu
    – ベクトル, シェアードメモリ, 演算子オーバーロード
  • notgpt.cu
    – AI 生成 CUDA(テイル SGEMM, 減算, ヒストグラム等)
  • stress.cu
    – N-body, ネスト制御フロー, ビット操作, 構造体値渡し
  • canonical.cu
    – NVIDIA サンプルから改変したパターン
  • test_errors.cu
    – 故意の構文エラーで回復機能を確認
  • test_launch_bounds.cu
    __launch_bounds__
    と VGPR 上限
  • test_coop_groups.cu
    – コーポレーティブグループ低減

また、前処理テスト, テンプレートテスト, unsigned 整数テストも含む。


ロードマップ

短期(ハーデニング)

既知のギャップ(代入演算子, 単独 unsigned, 整数リテラルサフィックス,

const
, パラメータ再代入)を修正。実際の
.cu
ファイルをそのままコンパイルできるようにすることが目標です。

中期(最適化)

  • 命令スケジューリング(メモリ遅延隠蔽)
  • より良いレジスタ割り当て(現在は線形スキャン、グラフカラーを検討)
  • 定数フォールディングとデッドコード除去
  • ループ不変コード移動
  • レジスタ圧力に基づく占有率調整

長期(多アーキテクチャ対応)

IR (BIR) はターゲット非依存です。新しいターゲットを追加するには、

isel
emit
のペアを書くだけで済みます。

候補:

  • Tenstorrent – RISC‑V AI アクセラレータ(タイルベース、SIMT ではない)
  • Intel Arc – Xe アーキテクチャ
  • RISC‑V ベクトル拡張 – CUDA をソフトコアで動かす

GFX11 エンコーディングノート(勇敢な方へ)

独自 AMDGPU バックエンドを書こうとしているなら、以下の点が午後を台無しにします:

  • SOP1 プレフィックスは
    0xBE800000
    (ドキュメントとは異なる)
  • SOPC プレフィックスは
    0xBF000000
  • VOP3 VDST はビット
    [7:0]
    に位置し、
    [15:8]
    ではない
  • Null SADDR:グローバルメモリ用は
    0x7C
    、スクラッチは
    0xFC
  • RDNA 3 のデフォルトは Wave32(Wave64 ではない)
  • ISA マニュアルは 500 ページに及び、二度矛盾

amdgpu_emit.c
はそのページを読み解く証です。


お問い合わせ

バグが見つかったら? AMDGPU 命令エンコーディングについて議論したい? GPU 計算で共感し合いたいなら:

zanehambly@gmail.com

議論したいことがあれば issue を立ててください。無理にではありません。私はあなたの母親ではありません。

ニュージーランド在住です。ここはすでに明日で、GPU は他所と同じくらい混乱しています。


ライセンス

Apache 2.0 – 何でも好きに使ってください。このコンパイラが本番環境で使用されたらぜひ教えてください(主に「面白いものを作った」という LinkedIn の更新のため)。

同じ日のほかのニュース

一覧に戻る →

2026/02/18 2:48

**Claude Sonnet 4.6**(クロード・ソネット 4.6)

## Japanese Translation: **Claude Sonnet 4.6** は Anthropic の最新かつ最も優れた Sonnet モデルで、現在すべての Claude プラン(Free と Pro)でデフォルトとなっています。価格は Sonnet 4.5 と同じままで、1 兆トークンあたり $3 / $15 です。このモデルは 1,000,000 トークンのコンテキストウィンドウ(ベータ版)、適応/拡張思考、コンテキスト圧縮、自動ウェブ検索フィルタリング、拡張ツール例、および Excel の MCP コネクタサポートを導入しています。 初期ユーザーは、Sonnet 4.5 に対してコードの正確性、一貫性、指示追従、全体的なパフォーマンスで大幅に優れていると報告しています。特に Opus 4.5 を約 70%(59%)上回る性能を発揮しています。OSWorld、Vending‑Bench Arena、OfficeQA、Financial Services Benchmark、保険ワークフローなどのベンチマークでは、複雑なスプレッドシートや多段階ウェブフォームでほぼ人間レベルの結果が得られ、Sonnet 4.6 は Opus 4.6 と同等またはそれに近い性能を示しつつ、コストも低く抑えられています。安全性評価では大きな不整合問題は確認されず、プロンプトインジェクション耐性は Opus 4.6 と同等です。 製品アップデートには、フロントエンド設計とコード修正の改善(例:楽天 AI 用の最高 iOS コード)や保険ベンチマークで 94% の精度率が含まれます。Claude Code、API、および主要クラウドプラットフォーム全体で拡張された可用性により、Sonnet 4.6 はスプレッドシート自動化、保険ワークフロー、複雑なウェブ操作などのタスクにおいて、コード精度の向上、安全な対話、および低い導入コストを提供し、多くの産業で生産性ツールを再構築する可能性があります。

2026/02/18 2:06

ありがとうございます、HNさん。おかげさまで約3万3千人もの命を救うことができました。

## Japanese Translation: ## Summary: Watsi.org は Show HN の立ち上げから始まり、Hacker News からの大量トラフィックに急速に引き寄せられ、寄付が急増し、世界中で手術ケアのために 2,000 万ドル以上を調達しました。このプラットフォームは、Hacker News の “pg” が Watsi を Y Combinator 最初の非営利団体として指摘したことで早期の信頼性を獲得し、創設者がユーザーと深く関わり、自らサイトをコーディングし、効率・透明性・継続的改善に注力するようになりました。消費財とは異なり、非営利団体は寄付への熱意曲線が弱く、ケア要請は爆発的に増加した一方で寄付額は線形にしか成長せず、バーンアウトと取締役会主導の持続可能な成長への転換を招きました。結果として Watsi の戦略は今や積極的拡大ではなく、安定した段階的スケーリングを重視し、長期的な実現可能性を目指しています。このモデルはテックコミュニティが非営利団体を持続可能に支援できる方法を示しており、将来の YC 非営利プロジェクトや広範なチャリティ・テック分野への影響力を持つ設計図となります。 ## Summary Skeleton **What the text is mainly trying to say (main message)** Watsi.org は Show HN で始まり、Hacker News のトラフィックにより急速に成長し、現在は手術のために 2,000 万ドル以上を調達した持続可能な非営利団体として運営されています。 **Evidence / reasoning (why this is said)** - Show HN を通じて立ち上げ → 大量トラフィックが発生。 - Hacker News の “pg” が最初の大きなチェックを行い、Watsi を YC 最初の非営利団体として認識。 - 創設者はユーザーと時間を共有し、自らコードを書き、効率・透明性・革新を優先。 **Related cases / background (context, past events, surrounding info)** - 非営利団体のプロダクト‑マーケットフィットは消費財とは異なり、寄付への熱意が弱い。 - 寄付額は線形に成長した一方でケア要請は爆発的に増加し、バーンアウトと取締役会による持続可能な成長への転換を招く。 **What may happen next (future developments / projections written in the text)** 戦略は急速な拡大ではなく、ゆっくりとした安定的で持続可能な軌道へシフトしており、継続的に段階的スケーリングと長期的実現性への焦点が期待される。 **What impacts this could have (users / companies / industry)** ユーザーは手術のための信頼できる資金調達を享受し、寄付者は資金の透明な使用を見ることができます。このモデルはテックコミュニティが非営利団体を持続可能に支援する方法を示しており、将来の YC 非営利プロジェクトや広範なチャリティ・テック分野への影響力を高める。

2026/02/18 4:24

**HN ストーリー:AsteroidOS 2.0 – みんなが聞かなくても、私たちはリリースしました**

## 日本語訳: **改訂概要** AsteroidOS 2.0は2026年2月17日にリリースされ、ファームウェアの機能セットとデバイスサポートを拡張し、将来の開発計画を概説しています。主要な新機能にはAlways‑on‑Displayモード、滑らかなUIアニメーション、電池寿命の向上、およびAndroid用に更新されたAsteroidOS Syncクライアントを動力付けるモジュラーBluetoothライブラリが含まれます。Gadgetbridge(v0.73.0)は同じライブラリをサポートし、Amazfish(SailfishOS/Linux)とTelescope(Ubuntu Touch)が同期エコシステムに追加されました。このリリースはウォッチの互換性を30デバイスに拡大し、Fossil Gen 4–6、Huawei Watch/Watch 2、LG Watch W7、Moto 360 2015、OPPO Watch、Polar M600、さまざまなTicwatchモデルをカバーします。また、Casio WSD‑F10/F20、LG Watch Urbane 2、Moto 360 1st gen、Samsung Gear 2/Liveの5つの実験的ウォッチが追加され、Sony Smartwatch 3は降格されました。 新しいUI改良にはランチャースタイルオプションとカスタマイズ可能なクイック設定が含まれます。コミュニティへの貢献も強調されており、Weblateを通じて20以上の言語に翻訳され、ウォッチフェイス作成ガイドが公開されました。また、moWerk、MagneFire、Dodoradio、Berosetなどの顕著な貢献者が認められています。インフラストラクチャーの更新には、FAQやウォッチギャラリーを備えた拡張ウェブサイト、MediaWikiへのドキュメント移行、公式サブレディットの立ち上げ、およびコミュニティ通信をMatrixとLibera.chatへシフトすることが含まれます。新しいコミュニティリポジトリは事前コンパイルされたパッケージ、ウォッチフェイス、ゲーム、およびエミュレーターをホストし、毎晩のリリースはより頻繁になりましたが、すべてのイメージを再構築するには約1週間かかります。 将来の計画には、統合フィットネスアプリ、設定経由でのWi‑Fiセットアップ、ウォッチフェイス作成とファームウェアフラッシュ用のWebベースツール、アプリストア、および1.0リリースサイクルから安定した頻繁なリリースを目指すクォーシー1.1ナイトリー型モデルへの移行が含まれます。ユーザーは公式ウェブサイトからAsteroidOS 2.0をダウンロードし、提供された手順でインストールし、GitHubのIssueやWeblate翻訳を通じて貢献するよう奨励されています

バーラCUDA ― AMD GPU 向けに設計されたオープンソースの CUDA コンパイラー | そっか~ニュース