web-dev-qa-db-ja.com

プロセスのアフィニティを永続的に設定するにはどうすればよいですか?

CPU使用率に問題があるゲームを持っているので、修正の1つはクアッドコアCPUから1つのコアを無効にすることです。ゲームを起動するたびに、手動でタスクマネージャーに移動してアフィニティを手動で入力する必要があります。これは、ゲームが新しくリリースされてから頻繁にクラッシュする傾向があるため、面倒です。

非ソフトウェアソリューションはありますか?

私はいくつかのソリューションをオンラインで調べましたが、それらはWindows 7のみに向けられているようです。私のようなWindows 8.1ユーザー向けのソリューションはありますか?

18
yuritsuki

アフィニティを割り当てるショートカットを作成できます。

X:\Windows\System32\cmd.exe /C start /affinity Y game.exe

Yは16進数で、ビットマスクです。

0x1 - 0001 - Core0
0x2 - 0010 - Core1
0x3 - 0011 - Core1 & Core0
0x4 - 0100 - Core2
0x5 - 0101 - Core2 & Core0
0x6 - 0110 - Core2 & Core1
0x7 - 0111 - Core2 & Core1 & Core0
0x8 - 1000 - Core3
0x9 - 1001 - Core3 & Core0
0xA - 1010 - Core3 & Core1
0xB - 1011 - Core3 & Core1 & Core0
0xC - 1100 - Core3 & Core2
0xD - 1101 - Core3 & Core2 & Core0
0xE - 1110 - Core3 & Core2 & Core1
0xF - 1111 - Core3 & Core2 & Core1 & Core0
25
The_aLiEn

「非ソフトウェア」とは、追加のソフトウェアを必要としないことを意味する場合、それがあります。コマンドスクリプトからプログラムを実行し、アフィニティスイッチを使用できます"Start /AFFINITY 20 process.exe"

/AFFINITY 20は、20を16進数として扱い、100000と同等のバイナリを使用して、アフィニティを6コアプロセッサの0-5からコア5に設定します。同様の16進マスクを使用すると、Eなどの特定のコアを無効にできます。これは、0-3または0-5のうちの1〜3のコアでのみプロセスを実行します。

7
Richie Frame

これに対する答えを探していて何も見つからない他の人にとって、私が見つけた解決策は WinAFC (またはAffinityChanger)というアプリを使用することでした。これは部分的なGUIであり、特定の実行可能ファイルのプロファイルを指定できる部分的なコマンドラインアプリであり、それらのプロセスリストをポーリングします。一致するプロセスが見つかると、読み込まれたプロファイルの設定に従って、それらのプロセスのアフィニティが変更されます。

ここにいくつかのドキュメントがあります: http://affinitychanger.sourceforge.net/

私の目的のために、次のようなプロファイルを作成しました。

TestMode = 0
TimeInterval = 1
*\convert.exe := PAIR0+PAIR1

このプロファイルは、最初の2つのCPUコアペア(CPU0、CPU1、CPU2、およびCPU3)を使用するようにすべてのconvert.exeプロセスを設定し、毎秒ポーリングします。 TestModeは、実際にアフィニティを設定せずにプロファイルが機能しているかどうかを確認できるトグルです。

誰かがこれが便利だと思ってください!

5
Jake