私は並行プログラムを書いていますが、システムのコア数を知る必要があるため、プログラムは開くプロセスの数を知ることができます。Erlangコード内でこれを取得するコマンドはありますか?
サンクス。
私は並行プログラムを書いていますが、システムのコア数を知る必要があるため、プログラムは開くプロセスの数を知ることができます。Erlangコード内でこれを取得するコマンドはありますか?
サンクス。
使用できます
erlang:system_info(logical_processors_available)
erlang ランタイム システムで使用できるコアの数を取得します。
もあります:
erlang:system_info(schedulers_online)
実際に実行されているスケジューラ スレッドの数がわかります。
使用可能なコアの数を取得するには、次のlogical_processors
フラグを使用しerlang:system_info/1
ます。
1> erlang:system_info(logical_processors).
8
これには 2 つの関連フラグがありますlogical_processors_online
。使用中の数を示し、使用可能な数を示します (使用可能なすべての論理プロセッサがオンラインlogical_processors_available
になると返されます)。unknown
schedulers_online
コードを並列化する方法を知るには、現在の VM インスタンスで利用可能な実際の Erlang スケジューラの数を返すものに依存する必要があります。
1> erlang:system_info(schedulers_online).
8
ただし、この値だけで並列化するだけでは不十分な場合があることに注意してください。場合によっては、CPU 時間を必要とする他のプロセスが実行されている場合があり、アルゴリズムがさらに並列処理を行うことでメリットが得られる場合があります (IO の待機など)。経験則schedulers_online
として、 から取得した値を並列処理の乗数として使用しますが、常に異なる倍数でテストして、アプリケーションに最適なものを確認してください。
この情報がどのように公開されるかは、オペレーティング システムによって異なります (もちろん、オペレーティング システムを作成している場合を除きます)。
作業しているオペレーティング システムについては言及していません。Linux の場合、/proc/cpuinfo からデータを取得できますが、ハイパースレッディングの意味と、共有 L2 キャッシュを使用して同じダイに複数のコアを配置するという問題には微妙な問題があります (事実上、NUMA アーキテクチャを使用しています)。 )。