Cпойлер(щелкните, чтобы прочесть):
Если обратили внимание, у каждго процесса движка игры есть секция с описанием параметров:
<CreateProcess instance-name="имя_процесса" [параметры]>
<ConstraintInterval interval-length="значение" />
<Message type="название" />
</CreateProcess>
Например:
<CreateProcess instance-name="main" memory-size="80000000" type="Gothic4Process" thread-pool-bit="2" memory-synchronized="false" memory-logged="false" stall-time="1" >
<ConstraintInterval interval-length="1" />
<Message type="Gothic4InitMessage" /></CreateProcess>
<CreateProcess instance-name="renderer" memory-size="140000000" type="SBRendererProcess" memory-synchronized="true" memory-logged="false" thread-pool-bit="1" stall-time="1" >
<ConstraintInterval interval-length="1" />
<Message type="SBRendererInitMessage" /></CreateProcess>
Есть секция создания группы:
<CreateGroup name="main_group" ><ProcessInstance name="main" /></CreateGroup>
<CreateGroup name="renderer" ><ProcessInstance name="renderer" /></CreateGroup>
Есть параметр: thread-pool-bit="значение", который задает индекс бита (1..8 или 0..7 ?) который отвечает за идентификацию вычислительной "нити" thread из набора привязанных к ядру в разделе <Thread hardware-mask="значение" thread-pool-mask="значение" />
Я привел соответствующий блок параметров в Arcania.exe к такому виду. Данная правка работает.
<ThreadConfig platform="PC" cores="4" >
<Thread hardware-mask="ffffffff" thread-pool-mask="00000001" />
<Thread hardware-mask="ffffffff" thread-pool-mask="00000002" />
<Thread hardware-mask="ffffffff" thread-pool-mask="00000004" />
<Thread hardware-mask="ffffffff" thread-pool-mask="00000008" />
</ThreadConfig>
Я представляю себе так:
1. "Нить" с маской "00000001" привязывается к "ffffffff" (любому?) ядру процессора. Параметр thread-pool-bit="1" для процесса "render" назначает "нить" с идентификатором по первому биту thread-pool-mask="00000001".
2. "Нить" с маской "00000002" привязывается к "ffffffff" (любому?) ядру процессора. Параметр thread-pool-bit="2" для процесса "main" назначает "нить" с идентификатором по второму биту thread-pool-mask="00000002".
Таким образом, для процессов "main" и "render" назначены отдельные "нити". И если подобные назначения "нитей" присвоить всем процессам по отдельности, задав параметр thread-pool-bit в соответствующей секции описания процесса - мы сможем разделить выполнение процессов по конкретным ядрам.
Жаль, что без возможности считывать данные из ProcessManager.xml нельзя проверить на практике мои предположения.