11

malloc()非 NUMA / 標準 PC でアプリケーションの速度を上げようとしているときに、マルチコア マシンでもすべてのコア間で共有/同期されているため、ボトルネックが必要であることがわかりました。

Linux と C を使用した NUMA アーキテクチャの PC を利用できますが、2 つの質問があります。

  1. NUMA マシンでは、各コアに独自のメモリが提供されるmalloc()ため、他のコアをブロックすることなく、各コア/メモリで独立して実行されますか?
  2. これらのアーキテクチャでは、呼び出しはどのようにmemcpy()行われますか? これは各コアで個別に呼び出すことができますか、それともコアで呼び出すと他のコアがブロックされますか? 私は間違っているかもしれませんが、1つのコアがそれを使用しているときに他のコアが待たなければならないmemcpy()という同じ問題もあったことを覚えています。malloc()
4

2 に答える 2

6

NUMA マシンは共有メモリ システムであるため、任意のプロセッサからのメモリ アクセスはブロックされることなくメモリに到達できます。メモリ モデルがメッセージ ベースの場合、リモート メモリにアクセスするには、実行中のプロセッサがローカル プロセッサに目的の操作を実行するように要求する必要があります。ただし、NUMA システムでは、特定のアーキテクチャ構成によって異なりますが、メモリ リンクを使用するため、リモート プロセッサが近くにあるプロセッサのパフォーマンスに影響を与える可能性があります。

1に関しては、これはOSとmallocライブラリに完全に依存します。OS は、コアごと/プロセッサごとのメモリを統合空間または NUMA として提示する責任があります。Malloc は NUMA に対応している場合とそうでない場合があります。しかし基本的に、malloc の実装は他の要求と同時に実行できる場合とできない場合があります。そして、Al からの回答 (および関連する議論) は、この点をより詳細に扱っています。

2に関しては、memcpyは一連のロードとストアで構成されているため、唯一の影響は、他のプロセッサのメモリコントローラーなどを使用することによる潜在的なアーキテクチャ上の影響です.

于 2011-03-29T15:58:01.527 に答える
2
  1. NUMAアーキテクチャを使用しているかどうかに関係なく、別々のプロセスでのmallocの呼び出しは独立して実行されます。同じプロセスの異なるスレッドでのmallocの呼び出しは、返されたメモリがプロセス内のすべてのスレッドに等しくアクセスできるため、独立して実行することはできません。特定のスレッドに対してローカルなメモリが必要な場合は、スレッドローカルストレージを参照してください。Linux VMとスケジューラーがコア、スレッド、ローカルメモリ、スレッドローカルストレージ間の親和性を最適化できるかどうかについての明確なドキュメントを見つけることができませんでした。
于 2011-03-29T10:40:26.287 に答える