今日の高度に相互接続されたデジタル時代では、ソフトウェア開発においてパフォーマンスの移植性が重要な問題となっています。パフォーマンスの移植性とは、アプリケーションがさまざまなハードウェア プラットフォーム上で効果的に実行できる能力を指します。開発者がパフォーマンス対応のポータブル アプリケーションを設計する場合、理想的にはプラットフォーム固有のコードを最小限に抑えながら、パフォーマンスを損なうことなく複数のプラットフォームをサポートする必要があります。
パフォーマンスのポータビリティは、ハイ パフォーマンス コンピューティング (HPC) コミュニティで非常に求められている機能と考えられていますが、現在、普遍的または一貫した測定基準はありません。
パフォーマンスは 2 つの方法で測定されます。1 つは、アプリケーションの最適化されたバージョンとポータブル バージョンのパフォーマンスを比較することです。もう 1 つは、実行され、実行中にメイン メモリから移動される浮動小数点演算 (FLOP) の数に基づきます。 . アプリケーションの理論上のピークパフォーマンスを比較するためのデータとプロセッサ周波数。ハードウェアの多様性が増すにつれて、さまざまなマシンで実行できるソフトウェアを開発することがますます重要になり、アプリケーションの長期使用と更新の可能性に影響します。
パフォーマンスの移植性は業界で広く言及されており、通常は次のことを指します。第 1 に、複数のハードウェア プラットフォームで同じアプリケーションを実行できること。第 2 に、これらのプラットフォームで特定のパフォーマンス目標を達成すること。 2016 年に米国エネルギー省 (DOE) が開催したパフォーマンス ポータビリティ会議で、専門家は「アプリケーションは、最もよく知られている実装と比較して、各プラットフォームで一貫したレベルのパフォーマンスを達成できれば、アプリケーションとみなすことができる」と述べました。効率性と可搬性を実現します。」
Jeff Larkin 氏 (NVIDIA) は、パフォーマンスの移植性は「同じソース コードが複数の異なるアーキテクチャ上で生産的に実行できる」ことであると直接指摘しました。
したがって、パフォーマンスのポータビリティは、ハイ パフォーマンス コンピューティング コミュニティでの重要な議論のテーマとなっています。産学界、DOE国立研究所のパートナーは、パフォーマンスポータビリティの研究開発を推進するために、2016年から「パフォーマンス、ポータビリティ、高効率コンピューティング生産性フォーラム」を定期的に開催している。
コンピューティング アーキテクチャが進化し続ける中、パフォーマンスの移植性は依然として重要です。開発者は、単一のコード ベースが、新しいアーキテクチャだけでなく、まだテストされていない現在のさまざまなアーキテクチャでも許容可能なパフォーマンスを達成できると想定しています。ハードウェアの多様性が高まるにつれ、複数のプラットフォームで実行できるソフトウェアを開発することが必要になります。これは、アプリケーションの活力と継続的な関連性に関係します。
米国エネルギー省のエクサスケール コンピューティング プロジェクト (ECP) は、特にマルチプラットフォーム環境では、パフォーマンスのポータビリティが継続的な懸案事項であることを強調しています。
2016 年以来、DOE はパフォーマンスの移植性の重要性の高まりについて議論するために複数のワークショップを開催してきました。 2017 年の会議には、国立エネルギー研究科学計算センター (NERSC) やロス アラモス国立研究所 (LANL) など、多くの著名な機関からの参加が呼びかけられました。
プログラムがパフォーマンスの移植性を達成した時期を定量化するには、2 つの要素を考慮する必要があります。まず、パフォーマンスの移植性は、アーキテクチャ間で使用されるコードの行数と、単一のアーキテクチャのみで使用されるコードの行数を比較することで測定できます。第 2 に、パフォーマンスはさまざまな方法で測定できます。たとえば、アプリケーションのプラットフォーム最適化バージョンとポータブル バージョンのパフォーマンスを比較するには、アプリケーションの理論上のピーク パフォーマンスを取得できるルーフ パフォーマンス モデルを使用するのが効果的な測定方法です。
2016 年のカンファレンスで、参加者は「アプリケーション チームがパフォーマンス ポータブルであると主張する場合、このコードはパフォーマンス ポータブルであるとみなされる」と述べました。
近年の研究では、さまざまな並列コンピューティング アーキテクチャ向けに記述された移植可能なコードはオープン標準プログラミング モデルに準拠する必要があり、コードは複数のプラットフォームで同時に開発および改善される必要があることが指摘されています。これらの戦略は、開発者がさまざまなプラットフォームに適したパラメーターを見つけるのに役立ちます。
市場には、開発者がパフォーマンスの移植性を実現できるように設計されたさまざまなプログラミング アプリケーションやシステムが提供されています。一般的なフレームワークには、OpenCL、SYCL、Kokkos、RAJA などが含まれます。これらのプログラミング インターフェイスは、マルチプラットフォーム マルチプロセス プログラミングをサポートします。一部の非フレームワーク ソリューションには、セルフチューニングやドメイン固有の言語が含まれます。
テクノロジーが進歩するにつれて、パフォーマンスの移植性の可能性を新たな高みに引き上げるプログラミングの新時代を迎える準備はできているでしょうか?