Xeon Skylake SMPでの予期せぬ原因不明の低速(および異常な)メモリパフォーマンス
Supermicro X11DPH-Iマザーボードを搭載した2x Xeon Gold 6154 CPUと96GB RAMを使用してサーバーをテストしましたが、1 CPU(1ソケットが空)、同様のデュアルCPU Haswell Xeon E5-2687Wv3(この一連のテスト用ですが、他のBroadwellは同様に動作します)、Broadwell-E i7s、およびSkylake-X i9s(比較用)。 さまざまなmemcpy関数やメモリ割り当て(回避策が見つかったため、以下のテストではカバーされていません)に関しては、メモリが高速なSkylake XeonプロセッサはHaswellよりも高速に実行されることが予想されますが、代わりに両方のCPUがインストールされています、Skylake XeonsはHaswell Xeonsのほぼ半分の速度で動作し、i7-6800kと比較するとさらに遅くなります。さらに奇妙なのは、Windows VirtualAllocExNumaを使用してメモリ割り当て用のNUMAノードを割り当てる場合です。プレーンメモリコピー機能は、リモートノードとローカルノードではパフォーマンスが低下すると予想されますが、SSE、MMX、AVXレジスタを使用するメモリコピー機能は、多くの場合実行しますローカルNUMAノードよりもリモートNUMAノードの方が高速です(何?)。上記のように、Skylake Xeonsでは、 これがマザーボードまたはCPUのバグなのか、UPI対QPIのバグなのか、上記のどれなのかはわかりませんが、BIOS設定の組み合わせはこれを利用していないようです。BIOSでNUMA(テスト結果に含まれない)を無効にすると、SSE、MMX、AVXレジスタを使用するすべてのコピー機能のパフォーマンスが向上しますが、他のすべてのプレーンメモリコピー機能も大きな損失を被ります。 テストプログラムでは、インラインアセンブリ関数と_mm組み込み関数の両方を使用してテストしました。アセンブリ関数を除くすべてに対してVisual Studio 2017でWindows 10を使用しました。msvc++はx64のasmをコンパイルしないため、-c -O2msvc ++リンカーに含まれているフラグを使用して、objファイルをコンパイルします。 システムがNUMAノードを使用している場合、各NUMAノードに対してVirtualAllocExNumaを使用して新しいメモリ割り当て演算子をテストし、各メモリコピー機能ごとに16 MBのメモリバッファコピーの累積平均を100回行い、どのメモリ割り当てをオンにするかを切り替えますテストの各セット間。 100個のソースバッファと100個の宛先バッファはすべて64バイトに揃えられ(ストリーミング機能を使用したAVX512までの互換性のため)、ソースバッファの増分データと宛先バッファの0xffに一度初期化されます。 一部の構成でははるかに高速で、他の構成でははるかに低速だったため、各構成で各マシンで平均されるコピーの数は異なりました。 結果は次のとおりです。 Haswell Xeon E5-2687Wv3 32GB DDR4-2400(10c / 20t、25 MBのL3キャッシュ)を搭載したSupermicro X10DAi上の1つのCPU(1つの空のソケット)。ただし、ベンチマークは100ペアの16MBバッファーを循環するため、L3キャッシュヒットはおそらく発生しません。 --------------------------------------------------------------------------- Averaging 7000 copies of 16MB of data per function …