2016-10-16 10 views
1

Visual StudioでC++でプログラムを強制実行して、特定のコア/コア(複数のコンピュータを持つコンピュータ)で実行する方法を知りました。Windowsの特定のコアで実行されるC++プログラムを作成する

私はthis記事を見つけましたが、中には、LinuxでCを参照して(と私はWindows上のVisual Studioを使用しています)

も、問題では、私が使用しているWindowsのバージョンをしますか?

+2

https://msdn.microsoft.com/en-us/library/windows/desktop/ms686247(v=vs.85).aspxまたはhttps://msdn.microsoft.com/en-us/library/ windows/desktop/ms686223(v = vs.85).aspx –

+3

[SetProcessAffinityMask](https://msdn.microsoft.com/en-us/library/windows/desktop/ms686223(v = vs.85).aspx) –

+0

私はこのリンクから理解したこと:1)ウィンドウ内の特定のコアを選択することは不可能であり、最終的にオペレーティングシステムが呼び出しを行うにもかかわらず、 'affinity mask'は少しでもそれを制御するツールです。 2)スレッドでしか作成できませんでした。このコンセプトは私には意味をなさない。なぜならユーザーがプログラムをレンダリングするためにコアを選択できるグラフィックプログラムを聞いたからだ。 – yd1

答えて

3

Windows API関数SetThreadIdealProcessorEx()を使用することができます。この機能は、Windows 7以降に適用されます。古いシステムでは、いくつかの制限がありますが、SetThreadIdealProcessor()を使用することは可能です。スレッド理想的なプロセッサを指定する第一リンク

における発言に係る

これは、スレッドのための好適なプロセッサ約スケジューラにヒントを提供します。スケジューラは、可能であればスレッドの理想的なプロセッサ上でスレッドを実行します。

私は、スケジューラが特定のプロセッサ上でスレッドを実行するように強制する機能は認識していません。したがって、スケジューラーが行動しようとするヒントを与えることはおそらく、あなたの要件を満たすのに最も近いでしょう。

SetProcessorAffinityMask()も使用することをお勧めします。これは、親プロセスのアフィニティマスク内にないプロセッサ上でスレッドが実行される可能性は低いと思われるため、プロセスが実行されるプロセッサを指定する働きがあります。

システム自体がプロセスが実行可能なプロセッサに制限を課す可能性があるため、これらの機能のドキュメントを注意深く読んでください。

関連する問題