知識マップ: C#/C++/Java/Goの実行速度を公平に比較する方法

記事「C#/C++/Java/Goの実行速度を公平に比較する方法」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。

この記事はC#・C++・Java・Goの実行速度を1本の数字で比較することの危うさを指摘し、公平な比較のための測定設計を整理している。C#とJavaはJITコンパイルとTiered Compilationの影響でcoldとwarmの差が大きく、C++とGoは通常AOTで事前コンパイルされるため、両者を同じ表に混ぜないことを求める。C++ではコンパイラが未使用の計算を消してしまうデッドコード除去への対策としてGoogle Benchmarkやchecksumによる正しさ確認が必要になり、言語内の測定にはBenchmarkDotNet・JMH・go test -bench・Google Benchmarkといった専用ハーネスを使い、言語をまたぐ比較は外側の共通ランナーで実行順序のランダム化とchecksum検証を行う2層構成が推奨される。さらに平均だけでなく中央値やp95/p99のようなテールレイテンシの分布まで見ることが、結果を正しく解釈する条件として整理されている。

C#/C++/Java/Go言語横断ベンチマークの知識マップC#とJavaのJITコンパイルとTiered Compilation、C++とGoの事前コンパイルという違いがcoldとwarmの区別を要求すること、C++のデッドコード除去対策としてのGoogle Benchmarkとchecksum検証、言語別ハーネスと外側の共通ランナーによる2層構成、テールレイテンシの分布評価までの関係を示す図。利用する利用する利用する利用する利用する利用する利用する利用する利用する利用する利用する利用する利用する防止する原因になり得る防止する利用する利用する利用する利用する利用する利用する利用する利用する言語横断ベンチマーク設計C#JIT(Just-In-Time)コンパイルJavaC++AOT(事前)コンパイルGoTiered CompilationGOMAXPROCScgoBenchmarkDotNetJMH(Java Microbenchmark Harness)go test -bench と benchstatGoogle Benchmarkウォームアップ後の安定状態計測(warm)デッドコード除去(最適化による処理の消滅)checksumによる正しさ確認テールレイテンシのパーセンタイル(p95/p99)ガベージコレクション(GC)

概念間の関係(全24件)

図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。

主要概念の定義

言語横断ベンチマーク設計
C#・C++・Java・Goのように異なる言語・ランタイムの実装間で、測定条件を揃えて実行速度を公平に比較するための設計手法。
C#
マイクロソフトが提供する、.NET上で動作するオブジェクト指向のプログラミング言語。
Java
JVM(Java仮想マシン)上でバイトコードを実行時にJITコンパイルして動作するオブジェクト指向プログラミング言語。
C++
コンパイル時にネイティブコードへ事前コンパイル(AOT)される、ISO標準のシステムプログラミング言語。
Go
Googleが開発した、実行前にネイティブの機械語へ事前コンパイルされるプログラミング言語。
BenchmarkDotNet
C#(.NET)向けの、ウォームアップや統計処理を自動で行うマイクロベンチマークライブラリ。
JMH(Java Microbenchmark Harness)
OpenJDKが提供する、Java向けのマイクロベンチマークを作成・実行するためのハーネス。
Google Benchmark
Googleが提供する、C++向けのマイクロベンチマークライブラリ。
checksumによる正しさ確認
比較対象の全実装が同じ入力から同じ結果(checksum)を返すことを確認する、速度比較に先立つ検証手順。

機械可読データ

このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。