静的、動的、単一の動的リンクとはどういう意味ですか?


9

インテルMKL for BLASを使用し、コマンドラインオプションのヘルプにはインテルMKLリンクラインアドバイザーを使用しています。

アドバイザーは、静的、動的、および単一動的ライブラリーのオプションを提供します。これらの用語はどういう意味ですか?

これに関するSOに関する投稿は数多くありますが、それらすべては科学的/数学的なコードではなくソフトウェアの開発に焦点を当てています。(これは特に便利でした)

  • これらの用語は並列コンピューティングにどのように関連していますか?
  • どちらか一方が他方より「優れている」のでしょうか。(より良いものをより正確に定義する必要があることは知っていますが、今のところ方法がわかりません)
  • より一般的に使用されるものとその理由は?
  • リンクするときにプログラマは何を考慮する必要がありますか?

ちょうどメモとして、それを見たことがない場合は、新しいIntelコンパイラ(バージョン11以降だと思います)は、-mklほとんどの場合にリンクラインアドバイザを使用する必要をなくすフラグを提供します。
Aesin 2012年

@Aesin、私は疑問に思いました。リンクの最適な方法ですか?
インクエスト2012年

残念ながらわかりません-私は実際にはテストを行っていません。マニュアルでは、それが何をしているか、または他のオプションとどのように組み合わせるかについては詳しく説明していません。指定-staticした場合はMKLを静的にリンクし、指定しない場合は動的にリンクします。いずれにしても、使いやすさの観点からは、はるかに優れています。
Aesin

回答:


14

静的リンクおよび動的リンクという用語は、並列計算に直接関係していませんが、(静的にコンパイルされた実行可能ファイルをロードするのではなく)動的ロードが重いため、ネットワークファイルシステムで適切にスケーリングされないことがかなり前から知られていますダイナミックローダーがターゲットライブラリのロードパスを検索することにより発生するメタデータロード。

スタティックライブラリとダイナミックライブラリのどちらがハイパフォーマンスコンピューティングで優れているかについて一般的な説明をするのは困難です。確かに、ほとんどのスーパーコンピューティングアプリケーションでは、静的にリンクする方が簡単で好ましいです。どうしてこれなの?現在の世代のスーパーコンピューターでは、通常、ノードごとに実行されるジョブは1つだけです。これにより、共有ライブラリーによるメモリー消費の削減の利点が大幅に減少します。さらに、科学計算コードは、言語機能やプログラム設計の点であまり洗練されていない傾向があり、動的な読み込みを必要とする言語機能(プラグインモジュールなど)を使用することはほとんどありません。動的ライブラリには、静的ライブラリよりもオペレーティングシステム間での移植性がはるかに低いという難点があります。

これらすべての結果として、ほとんどのHPCシステムは、可能な場合は静的コンパイルを使用します。静的ライブラリは、より高速で、インストールと保守が容易で、一般に堅牢であると見なされています。Pythonに基づくHPCコードはこれの例外の1つですが、動的ロードに関連するパフォーマンスの問題の影響を受けます(scicompの数人のユーザーが実際にこの問題に取り組んでいます!)。

静的リンクと動的リンクを選択する場合は、コードをデプロイする方法と場所、基盤となるライブラリが変更または移動される可能性があるかどうか、およびネットワークファイルシステムのパフォーマンス特性を考慮する必要があります。ライブラリの依存関係を介して、またはPythonなどの動的スクリプト言語と相互運用するために、動的リンクが必要かどうかも評価する必要があります。

シングルダイナミックライブラリは、Intel固有の用語です。リンクプロセスを簡略化するために、動的ライブラリを単一のメタライブラリにパッケージ化することを指します。Intelライブラリとの動的リンクを使用する場合は、複雑なことを行わない限り、この形式がおそらく推奨されます。


正解です。もう1つ、動的リンクは不要であり、静的と単一動的のどちらかを選択できることに気づきました。私が複雑なことをしていない限り(私はそうではありません)、後者を選択すべきだとあなたは言っています。では、シングルダイナミックを使用してリンクする必要がありますか?[FWiW、私はクリロフ部分空間法に取り組んでいます]
Inquest

ごめんなさい!デフォルトでは静的を使用する必要がありますが、動的ではなく単一の動的を使用します。
Aron Ahmadia 2012年

ベンチマークを行ったところ、Dynamic : 0:42.92 Static : 0:42.93 Single Dynamic : 0:42.97平均すると1000を超える値が見つかりました 。
質問:

1
一部のHPCシステムで静的にリンクする必要あることに注意してください。たとえば、BlueGene / Lシステムでは、計算ノードのOSが動的リンクをサポートしていないため、これが当てはまります。
Aesin

1
「現在の世代のスーパーコンピュータでは、通常、ノードごとに実行されるジョブは1つだけです。これにより、共有ライブラリによるメモリ消費の削減のメリットが大幅に減少します。」ノードごとに1つのプロセスしかないということですか?ノードごとに1つのジョブがどのように状況に影響するかはわかりません。各プロセスを静的にリンクすると、実行可能ファイルの完全なコピーが保存されます。これは、プロセッサあたりのコアが増えるにつれて重要になる可能性があります。動的リンクでは、共有メモリ空間ごとに動的ライブラリのコピーが1つだけ必要です。
andybauer 2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.