LEEUNITYAssets / Content / 博客.asset
层级
⌄ Lee / Homepage
INSPECTOR
Type
Content
Name
博客
lee@mtftm.com ↗GitHub ↗
N016GPGPU / ZVFHMIN REPORT

技术 / 日本語

RISC-V Zvfh(min) 拡張サポート調査報告書(LLVM CodeGen段階)

本記事は元々 xlinsist/llvm-project Issue 2 に掲載され、原作者は私自身です。元リポジトリのライセンス Apache License 2.0 に従っています。この内容をもとに、再編集して当ブ…

更新
2026.07.18
阅读
4 分钟
语言
日本語

著作権声明

本記事は元々 xlinsist/llvm-project Issue #2 に掲載され、原作者は私自身です。元リポジトリのライセンス Apache License 2.0 に従っています。この内容をもとに、再編集して当ブログで公開します。

概要

調査目標

  • ventus-llvmにZvfh(min)拡張サポートを追加する

開発背景

  • Ventus 向けに半精度16ビットhalf浮動小数点データ型のサポート追加
  • プロジェクトの目標は、half型の段階的なサポートであり、スカラ(Zhinx(min))とベクトル(Zvfh(min))を含みます。
  • Zhinx(min)拡張は基本的に動作し、現在PRのレビューおよび修正中です

ニーズ分析

  • half型はより低い精度と範囲を持ち、メモリ消費が少なくスループットが高いです

公式Zvfh(min)パッチまとめ

  • パッチ先:D151414
  • 対象ファイル:
    • RISCVISAInfo.cpp
    • RISCVFeatures.td
    • RISCVISelLowering.cpp
    • RISCVInstrInfoVPseudos.td
    • RISCVInstrInfoVSDPatterns.td
    • RISCVInstrInfoVVLPatterns.td
    • RISCVSubtarget.h
    • **.ll
  • 主な変更点:
    • zvfhminの登録
    • f16用の型・命令の合法化処理を追加
    • f16に対するvfwcvt.f.f.v vfncvt.f.f.w命令の処理
    • 現在のデバイスがf16ベクトル命令に対応しているか判定
    • f16関連のSDNodeと機械命令のマッピング追加
    • テストケースの追加

変更ファイル

ファイルパス 変更内容
llvm/lib/Support/RISCVISAInfo.cpp zvfhmin命令セット拡張を拡張テーブルに登録
llvm/lib/Target/RISCV/RISCV.td zvfhmin機能を追加し、依存zve32f [FeatureStdExtZve32f] をマッチ
llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td & RISCVInstrInfoVSDPatterns.td Zvfh(min)命令とパターンの追加
llvm/lib/Target/RISCV/RISCVISelLowering.cpp MVT::f16型と操作サポートを導入し、Zvfhminが有効な場合のみMVT::f16ベクトル型を許可
llvm/test/CodeGen/RISCV/VentusGPGPU/half.ll テストケースの追加

テストケース

種類 目的
命令生成 半精度命令が正しく生成されるか検証 float.llhalf.ll に書き換え
型変換 halfとfloat32の変換 vfwcvt.f.f.v, vfncvt.f.f.w

補足

Zvfhminは変換(vfwcvt.f.f.v f16=>f32, vfncvt.f.f.w f32=>16)のみサポートし、半精度ベクトル算術演算は直接サポートしません。 算術演算にはzvfhが必要です。