LoginSignup
10
10

More than 5 years have passed since last update.

ld と ld.gold のリンクの速さを比較した話

Last updated at Posted at 2016-07-29

ベンチマークのスクリプト類は Githubにあります

ld.gold についてとベンチマークの動機

C++で作業をしているとリンクの遅さがストレスになります。OpenCVみたいな複数の共有ライブラリを作るようなプロジェクトの場合は顕著になります。オブジェクトファイルへのコンパイルは make -j9 のように並列で行えばよいのですが、リンクは並列に行えないためにボトルネックとなります。

2012年ごろに gold(ld.gold) というリンカが出てきました。Google発だそうです。現在は binutils に入っています。既存の ld に比べて5倍ほど速いそうです。それだけ速いなら常用できないかと試しにベンチマークをとりました。

ベンチマークの方法

  • std::vector<some_type_XXXX> を使用するオブジェクトファイルを2000個作る
  • 上記オブジェクトファイルが提供する関数をすべて main() で使用する
  • これらのリンクにかかる時間を time コマンドで計測する

使用法と注意

binutils の一部になっているので gcc から使用できます。リンク時に -fuse-ld=gold を指定してください。環境変数LDld.goldを指定してもよいという記事を見かけましたが自分の環境ではうまくいきませんでした。

ld.gold はELF専用です。Windows用のバイナリ出力などには使用できません。

結果と感想

Core i7-4770 3.40GHz、VMWare上で4コア、16GB RAM、HDD上のUbuntu 14.04。ldld.gold との相対が重要です。

人工的なコードのせいか ld.gold の方がだいたい6倍くらい速いです。可能な状況では ld.gold を使用していきたい気分です。

最近LLVMチームが lld というリンカを発表したそうです。まだ試すことができていませんが環境が整ったら試したいところです。

# ld の場合(sec)
4.84
4.55
4.56
4.55
4.73
# ld.gold の場合(sec)
0.73
0.72
0.75
0.72
0.73
10
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
10