HPCハイブリッドシステム、たとえばMICアーキテクチャでは、メインメモリへのアクセスが、自分のキャッシュまたは別のコアのキャッシュにあるデータへのアクセスよりもはるかに遅いことを理解しています。
HPC MICアーキテクチャは、ストリームメモリアクセスまたは無視できるメモリアクセスのプログラムで最適に機能することを読みました。
Wプログラムはレイテンシまたはメモリのどちらに依存すると私たちはいつ言いますか?違いはなんですか?この種のプログラムに最適なHPCアーキテクチャーはありますか?
メモリからの大量のデータが必要な場合、アプリケーションはmemory-boundと呼ばれるため、実行時間のほとんどはデータの読み取りと書き込みに費やされます。
Latency-boundはメモリバインドカテゴリのサブセットと考えることができ、主に一度にメモリから大量のデータを取得しないが、待機する必要がある場合に発生しますメモリ階層の上位レベルで、データをプロセッサに近づけるために多くのことを行います。
開発者が通常行うことは、この遅延を ソフトウェアパイプライン処理とデータプリフェッチ などの手法で隠し、プロセッサがデータを待機してアイドル状態にならないようにアプリケーションの命令と操作を整理することです。
メモリにバインドされたアプリケーションに取り組むための特定のアーキテクチャがあるかどうかはわかりませんが、前述のような手法を知っており、コンピュータ業界はデータを計算に近づけることによってメモリとプロセッサのパフォーマンスのギャップを埋めようとしていることを知っています(SoC)またはホスト(およびそのメモリ)からより自律的に実行できるコプロセッサの開発。
このStackOverflowスレッド にも同様のスレッドがあります。また、あなたはいくつかの論文を見ることができます これのような 。
例として、浮動小数点演算は多くの場合、スループットが高いだけでなく、レイテンシも高くなります。たとえば、サイクルごとに2つの乗算を開始できても、乗算の結果が利用可能になるまでに5サイクルかかる場合があります。 1つ目はスループット(サイクルごとに2つ)と呼ばれ、2つ目はレイテンシです。
1つの操作が前の操作に依存するように計算を実行すると、レイテンシが制限される可能性があります。 (x0 + y0)*(x1 + y1)*(x2 + y2)* ...を計算するとします。これを単純な方法で行うと、各乗算は前の乗算の5サイクル後にしか開始できないため、結果的にプロセッサーがサイクルごとにはるかに多くの処理を実行できる場合でも、サイクルごとに0.2乗算と0.2加算を使用します。これがレイテンシの限界であるコードです。
ハイパースレッディングは、プロセッサが2つのレイテンシバウンドスレッドを1つと同じ速度で処理することが非常に簡単であるため、レイテンシバウンドコードに非常に役立ちます。コードがスループットによって制限されている場合、ハイパースレッディングは少し役立ちません。基本的に、コードが悪いほど、ハイパースレッディングから得られる助けが増えます。