2013-03-10 9 views
6

私が主に仕事をしているLinuxでは、CPUアイソレーションと呼ばれる手法を使用して、プロセスをプロセッサに効果的にロックし、プロセッサに何も実行されないようにします。私たちのカーネルの人たちは割り込みを処理するいくつかの魔法を使いました。WindowsでのピンプロセッサのCPU分離

私が見つけた最も近いものは、プロセス/スレッドをプロセッサにバインドするように見える親和性の概念です。しかし、プロセッサがそのプロセス/スレッドを実行しているという保証はなく、コンテキストスイッチやその他のジッタが存在する可能性があります。

半決定的な実行時間のためにウィンドウをCPU上に隔離する方法はありますか?

+1

いいえ、必要な場合はLinuxに固執する方がよいでしょう。 –

答えて

3

これをユーザーモードで行う方法はありません。そして、Windowsは、ほとんどの場合、アプリケーションがすべてのシステムリソースを奪うのを防ぎます。しかし、他のプロセスの大部分を別のコア/プロセッサに分離して、コードが主にそのコアに専念できるようにすることはおそらく可能です。

まず、プロセスを列挙することについてat this code here on MSDNを調べてください。あなたの列挙コードを除いて、OpenProcessのフラグとしてPROCESS_SET_INFORMATIONを指定します。あなたのNTクレジットとして実行されていないプロセスのためにこれを行うには、管理者権限でコードを実行する必要があります。取得された各プロセスハンドルについては、SetProcessAffinityMaskを呼び出して、1つを除くすべてのコアでプロセスを実行するように設定します。次に、他のすべてのプロセスハンドルから取り出した予約済みのコアで別のプロセスを実行するようにプロセスを設定します。

これは、コードを実行しようとしているコアに対して、起動から負荷分散までの他のプロセスを処理しません。

あなたのマイルは異なる場合があります。これがテストのためのものであったり、あなたのコード専用のマシンであれば、おそらく問題ありません。これが他のすべてのアプリと並行して動作する商用アプリの場合、コードを実行すると、他のすべてのアプリやサービスのタンクが表示されることに大変苛立つでしょう。慎重に歩いてください。