2017-06-30 6 views
3

私は72コアのWindows Server 2016を使用しています。私はプロセッサーの2つのグループがあることがわかります。私の.netアプリは1つまたは他のグループを使用します。私は私の選択肢のグループを使用するように強制することができる必要があります。 以下のコード例がありますが、動作させることができません。私は間違った変数を渡している可能性があります。私は、アプリケーションがグループ1とすべてのプロセッサを選択し、次にグループ2とすべてのプロセッサを選択します。プロセッサアフィニティグループC#

私の質問はどうすれば私の.netアプリケーションがグループ1またはグループ2を使用するのですか?下のリンクがうまくいくかどうか分かりません。

https://gist.github.com/alexandrnikitin/babfa4781c68f1664d4a81339fe3a0aa

私は私の設定にこれを追加してみてくださいでしたが、このアプリは唯一のグループ0を使用していますが、私はこのコードのすべてのコアを示してください。私はオプションがbiosに行くとフラットを選択することを知っているが、私は物事を行う正しい方法であることを確認していない。

<Thread_UseAllCpuGroups enabled="true"/> 
     <GCCpuGroup enabled="true"/> 
     <gcServer enabled="true"/> 
+0

72コアを1つのグループにまとめることはできません。 1つのCPUグループの上限は64です.HPにはCPUグループをクラスタ化するBIOS機能がありますが、残念ながらデフォルトでオンになっています。これは私の意見ではナンセンスで<64コアのマシン用の2つのグループを作成します。表示されている設定では、すべてのグループのすべてのコアが使用されますが、別のグループで各インスタンスを開始すると記載しているテキストには、あなたが達成しようとしていることはまだ私には不透明です。 –

+0

こんにちは私の目標は、私が望むグループを選択するために私の.netアプリケーションを強制的にすることです。私は10のアプリを稼働させています。私は1つのグループで5つ、他のグループで5つを求めています。私の質問は、これを強制する方法です。リンクにはグループを選択できることを示すコードがありますが、1,0を渡すコードを使用しても機能していないようです。おそらく私は間違った値を渡している、またはコードが機能しません –

+1

私は質問を再開しています。私はそれが1つ以上のグループで実行されていると思っていました。実行したいグループを選ぶことではありません。私の悪い。 –

答えて

2

投稿されたexamplyは、現在のスレッドのみをCPUプロセッサグループに設定します。しかし、プロセスのすべてのスレッドに対してこの値を設定する必要があります。あなたのプロセスにはSetProcessAffinityMaskを呼び出す必要があります。

プロセスクラスはすでにあなたがそれを直接設定できるプロパティプロセッサ親和性を持っているので、SetProcessAffinityMaskへのPInvokeする必要はありません。

class Program 
{ 
    static void SetProcessAffinity(ulong groupMask) 
    { 
     Process.GetCurrentProcess().ProcessorAffinity = new IntPtr((long)groupMask); 
    } 
    static void Main(string[] args) 
    { 
     SetProcessAffinity(1); // group 0 
     // binary literals are a C# 7 feature for which you need VS 2017 or later. 
     SetProcessAffinity(0b11); // Both groups 0 and 1 
     SetProcessAffinity(0b1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111); // for all cpu groups all 64 bits enabled 
    } 
} 
+0

ありがとうございます。バイナリリテラルなしで見えるものを私に見せてもらえますか?私はまだ2016年で、 –

+0

でも、もし私がグループ1だけを望むなら、それはどうなるでしょう。 –

+0

すべてのコアを使用するには、設定でこれを設定する必要がありますか?