Skip to content

2026年10月13日 · ネイティブ性能 · 停止中

Kotoba ネイティブ性能:Embench の進捗(2026年10月13日更新)

最新mainの統合とRound 85・全19本の比較を確認しました。「Kotobaの実行時間 ÷ C」の幾何平均は2.954倍です。採用済みと未採用を区別して候補を保存し、高速化作業は停止中です。C以上という目標は未達です。

Kotobaへ移植したプログラムを、上流Embenchの速度測定ドライバと計算式で測った探索的な結果です。認定された公式Kotoba Embenchスコア、リリース版の性能値、他の環境での速度を示すものではありません。

現在の作業結果:停止中・目標は未達

10月13日に承認済みの予算条件で高速化作業を停止しました。この公開更新と引き継ぎ整備によってゴールは再開しません。mainのPR #1295以降、新たに採用した候補はありません。採用済みmainの最新全19本比較は「Kotobaの実行時間 ÷ C」が2.954倍で、全体ではCが速く、目標は未達です。

採用済み:従来の検証済みコンパイラ一式、汎用の境界付きバイトルックアップ(PR #1293)、認証済みスカラー呼び出し2回をまたぐディスクリプタ再利用(PR #1295)はmainへ統合済みです。以前の採用分には、masked XOR、非公開関数のリテラル幅特化、呼び出し結果の比較、スタック値の再利用、2による符号付き除算、成功済み境界チェックの再利用があります。この要約よりも、ソースと生成画像のハッシュが製品の識別根拠です。5%未満を一律に見送る基準はありません。

未採用:汎用2引数の燃料キャッシュ候補7版は、復元可能なソース差分・ハッシュ・検証状況とともに保存しました。以前の広いディスクリプタ根拠再利用と条件分岐の継続経路の候補も、従来の保存資料を維持しています。これらの結果は採用済みmainの全19本比較には含めていません。

未採用候補の個別測定:ON/OFFであり、Cとの比較ではありません

下表はJoseph上の別々の画像を測った探索的な比較です。OFF/ON/OFF/ONの固定順序、各枠ウォームアップ1回と合格標本1回、測定前後の生CPUアイドルと推定背景アイドル各70%以上、CPU条件だけ最大3回の再試行で最初の合格標本を採用しました。数値は「候補の実行時間 ÷ 採用済み版の実行時間」です。1.00が同速、大きいほど遅く、C比較や全19本のスコア、統計的に確立した効果ではありません。

v3はsglibが2組とも速く、中央値で約3.96%短縮しましたが、picojpegは結果が混在し中央値で約1.68%増えました。v4ではsglibの改善を確認できず、v6はsglibが2組とも遅く中央値で約3.86%増えました。v5は全39画像が採用済み版と同一になったため速度測定を省きました。異なる試行の改善率を足し合わせた全体改善は主張していません。

探索的な2組の比較。sglibはsglib-combined。いずれも未採用です。
候補 picojpeg ON/OFF sglib ON/OFF
v3 1.016823 0.960373
v4 1.002800 1.003660
v6 1.000930 1.038582

最新の保存候補v7:検証が進んだが、未採用

v7は燃料の再読み込みを挟む呼び出し結果の比較で、正確な条件のもと不要なコピーを除去する候補です。汎用の陽性ケースで1命令が減り、燃料10段階・80組の結果、fuel、全17カウンタが一致しました。ネイティブ自己ビルドは3世代で収束しました。安定版の39画像とコンテナはv3およびv7初期世代と完全一致し、元の95+76+312=483観測は画像・ソース・公開入口の完全一致で引き継ぎます。v7で新たに483回実行したという意味ではありません。

自己ビルドの命令・参照先・リテラル・公開入口の対応、燃料キャッシュと一時レジスタの制御フロー、121箇所のコンテキスト再読み込みの除去、74のコンパイラ関数単位のコンテキスト読み取りを確認しました。これはソース・物理命令・動作の検証です。正式なpolicy・公開インターフェース・ソースの検査、追加の汎用境界・拒否ケース、元の全19本の新しいC比較と採用判断が残っています。v7の新しい全体スコア、リリース、採用は主張していません。

固定したv3ソースを基準とする6本の差分、7候補の一覧、検証スクリプト、引き継ぎ資料を保存しました。生成画像、完全な生出力、失敗した試行、監査の全記録は元のローカル専用ワークスペースに保持しています。公開ソース差分の保存は、生データすべてがリモートで取得できるという主張ではありません。

最新main統合とRound 85(2026年10月13日)

PR #1295を74b082f534d6326a5d5df9a0f415be1425b85aa6としてmainへ統合しました。全19件のCIが成功し、リモートmainの履歴、変更21ファイル、16モジュールのソース、ネイティブコンパイラ成果物を読み返して確認しました。

完全な認証条件を満たすスカラー呼び出しが2回続いたとき、確認済みベクトル記述子を再利用します。各読み出しで数え直し、追跡スロットへの書き込みで無効化します。元の添字チェックとtrapは維持し、ベンチマーク名で採用条件を分岐させません。picojpegの2画像は、以前の固定標本で1.8930%短い時間を観測した画像と完全一致し、他37画像は前のmainとバイト一致しています。この個別の探索的観測は、全体の改善率ではありません。

ネイティブ自己ビルド3世代、生成39画像、元の結果・fuel・状態483観測、汎用54組、参照変換52件、ポリシー拒否34件が通過しました。5%未満を一律に見送る基準はありません。

新しいRound 85は、全40試行を保存し、Kotoba・Cとも19本すべてが採用条件を満たしました。正規化した「Kotobaの実行時間 ÷ C」は2.9542453261184902(2.954倍)です。ドライバ幾何スコアは移植版Kotobaが12729.292501173408、元のCが37605.452876386684でした。

前回Round 84の比は2.876720502080424でした。今回の単回測定では比が大きく、全体の改善を確認できていません。安定した回帰を確立した結果でもありません。全体ではCが速く、C以上という目標は未達で、高速化作業は停止中です。CPUの測定前後の生アイドル値と推定背景アイドル値は各70%以上を必要とし、CPU条件だけ最大3回まで再試行し、最速値ではなく最初の合格標本を使います。Round 84・83の記録は下記に履歴として残しています。

Round 85:全19本の比較

正規化したKotobaの実行時間 ÷ C。1より大きいほどCが速い値です。移植版の探索的比較で、認定された公式Embenchスコアではありません。
Benchmark Kotoba time / C
picojpeg 5.875×
statemate 4.629×
slre 4.468×
sglib-combined 3.728×
huffbench 3.580×
depthconv 3.507×
wikisort 3.492×
nettle-sha256 3.408×
nsichneu 3.259×
edn 3.196×
xgboost 3.042×
qrduino 2.991×
nettle-aes 2.946×
matmult-int 2.840×
tarfind 2.403×
ud 2.213×
md5sum 2.116×
aha-mont64 1.642×
crc32 0.875×

履歴:作業再開とRound 84全体比較

下記の一時停止時点の記録の後、作業を再開しました。Round 83の表と日付付き停止履歴は残し、再開後のコンパイラやRound 84の結果とは区別します。C以上という目標は未達です。

汎用の有界バイト参照変換により、対象となる純粋なスカラーしきい値木を置き換えました。64ビット入力、元のfuel・trap・処理内容を維持し、39ネイティブ画像と483比較を検証しました。Round 84時点のmainへの合成でも、検証済み39画像すべてのバイト一致を確認しました。

各ベンチマークの固定OFF/ON計4標本では、PicoJPEGの実行時間が2.0851%、QRduinoが0.7699%短い値でした。探索的な2組の観測で、不確かさの推定はなく、両者を加算した値や全体の改善率ではありません。5%の一律足切りは設けず、正しさと回帰確認を必要とします。

mainへのPR #1293を9bdff08f95effda253a08b2eed190efe98af55fcとして統合し、リモートmainの履歴・ソース・ネイティブ画像の対応を確認しました。独立レビュー済みRound 84は、全41試行を残し、Kotoba・新しいC測定とも19本すべてが採用条件を満たしました。正規化した実行時間のKotoba/C比は2.876720502080424(2.877倍)で、全体ではCの方が速い結果です。ドライバ幾何スコアは移植版Kotobaが12916.907866571351、元のCが37158.333683249715でした。単回の探索的比較で、Round 83からの改善を統計的に確立したものではありません。移植版Kotobaの探索的測定であり、認定された公式Embenchスコアではありません。

Round 84の19本比較

正規化したKotoba/C実行時間比。全19組採用。Round 83の履歴表は下記に保持。
Benchmark Kotoba time / C
picojpeg 5.792×
statemate 4.623×
slre 4.397×
sglib-combined 3.684×
wikisort 3.434×
huffbench 3.312×
depthconv 3.293×
edn 3.228×
nsichneu 3.223×
nettle-sha256 3.215×
xgboost 2.977×
nettle-aes 2.914×
matmult-int 2.887×
qrduino 2.836×
tarfind 2.390×
ud 2.185×
md5sum 2.011×
aha-mont64 1.518×
crc32 0.852×

数値の読み方

1.000倍が同速です。1.000より大きい場合はKotobaの実行時間が長く、Cの方が速いという意味です。1.000より小さい場合はKotobaの方が速いことを表します。総合値は19本の幾何平均で、算術平均ではありません。この測定ではCRC32の値が1未満でした。

2026年10月12日・Round 83。反復数を正規化した実行時間の比。小さいほどKotobaが速い。
ベンチマーク Kotobaの実行時間/C
picojpeg 6.092×
statemate 4.706×
slre 4.439×
sglib-combined 3.743×
huffbench 3.531×
wikisort 3.418×
nettle-sha256 3.409×
depthconv 3.380×
nsichneu 3.312×
edn 3.253×
qrduino 2.994×
nettle-aes 2.973×
xgboost 2.924×
matmult-int 2.859×
tarfind 2.395×
ud 2.243×
md5sum 2.037×
aha-mont64 1.576×
crc32 0.845×

ここまでに確認したこと

Round 83の停止時点では、採用済みネイティブコンパイラのソースは fc49cb2ee6fea1a41a5abbc8ed5b52aaa9f19471 でした。当時は専用作業ブランチでのローカル採用で、mainへの統合やリリースは未実施でした。掲載値は配布済みCLIの性能値ではありません。

元の19ベンチマークと95プロファイルケースを維持しています。39ネイティブ画像と483組の比較で、燃料境界・相互作用を含め、元の結果・状態・資源計数を検証しました。コンパイラのセルフホストと追加の汎用テストも確認しています。動作一致だけで高速化が確認されたとは扱いません。

測定方法と解釈の範囲

同じmacOS arm64ホストで両者を計測しました。C側はApple clang 17.0.0です。Embenchのリビジョン09c2ed8c3b7008c95d08b038de4a3f6dc103ed70の速度測定ドライバと計算式を変更せず使っています。C実行ファイルは以前固定したものを使い、実行時間は今回新たに測定しました。

KotobaのGSFは8192、CのGSFは32768です。各側の反復量をドライバで正規化した相対速度スコアから、37345.764989 ÷ 12718.199531 = 2.936403 を求めています。これらのスコアはこのホストの値で、MHzあたりのスコアではありません。

CLOCK_MONOTONIC_RAWで処理本体を計時し、1回のウォームアップ、リセット、結果検証は計時の外に置いています。本体内でのデータ表現用メモリ確保は計時に含めています。各ベンチマーク・各言語で採用したサンプルは1つです。計測前・計測中の生CPUアイドル率と、計測中のバックグラウンドCPUアイドル率に70%以上を要求しています。CPU条件だけによる再試行の記録も保持し、最速値ではなく最初に条件を満たした値を採用しています。

単一サイクルの探索的な測定で、統計的な確実性は示していません。移植版Kotobaと元のCではデータ表現や実行経路が異なります。公式ドライバと式を使っても、認定された公式Kotobaスコアにはなりません。過去の部分測定は今回の総合値に混ぜていません。

ローカル採用済みの改善

マスク付きXOR、定数幅を持つ非公開関数呼び出し、呼び出し結果から比較への転送、別領域への書き込み後のスタック値再利用、符号付き2除算、成功済みベクトル境界チェックの再利用などを積み上げました。各変更では必要な正しさとABIの検証を維持しています。

改善率の最低基準は設けていません。小さい改善も積み上げて採用します。以前のpicojpeg変更では約0.085%の短縮を観測した候補もローカル採用しています。ただし少数回の観測で、統計的に確定した改善率ではありません。別々の測定で得た変更ごとの割合を足して総合改善率にはしません。

停止時点で残した候補

ディスクリプタ境界チェックの根拠を再利用する候補と、条件分岐の継続経路でベクトル情報を再利用する候補は、それぞれ採用済み版に対する39画像・483組の動作検証を通過しています。追加の汎用・意味的テスト、速度測定、採用判断が残っており、どちらも未採用です。上の測定表には含めていません。

停止時点では、statemate用の性能測定ファイルは転送・同一性確認まで済み、測定本体は未起動でした。当時のバイト表引き候補はソース試作までで、コンパイラ実行と実行時の検証は未実施でした。

当時は最適化エージェントとC以上というゴールを一時停止し、証拠・専用作業ブランチ・未完了候補を保存しました。その後、上記のとおり作業を再開しました。目標は未達です。

測定データと出典