The project's README from github.com/charlie754/Game-Optimizer-CPUs-Threads-Optimizer. As one markdown file: README.md.
CPU threads optimizer.

Per-game CPU Set isolation for split-topology CPUs — the isolation of BIOS "Turbo Game Mode", applied only to the game you chose, and only while it is running.
Please turn off
On a dual-CCD AMD part (7950X3D, 7900X3D, 9950X3D) one CCD carries 3D V-Cache and the other clocks higher. Some games run better pinned to the cache CCD with nothing else on it. The existing ways to arrange that — a BIOS game mode, or letting Windows and AMD's driver decide — are session-wide: they cost you half the machine for Discord, OBS, browsers and compilers too.
Game Optimizer applies the isolation to one process tree, keeps the other CCD free for everything else, and clears every mask the moment the game exits.
SetProcessDefaultCpuSets, never SetProcessAffinityMask.NOTICE.md and the file table below.Runs on: Windows 10 or 11, x64. The manifest declares no older Windows, and there is no 32-bit or ARM build.
The app works this out for itself. On first run it asks Windows for the machine's core and cache layout, classifies it, and tells you on screen which of the cases below you are in, along with a confidence level and a map of which logical processors are in each group. There is no list of CPU models anywhere in the app — the decision comes from what Windows reports, so nothing here goes stale. Run it and read the first-run screen; that answer is authoritative for your machine and this table is only a guide. The first matching row wins, so a machine reporting more than one core type is classified by core type and never by cache size.
| What Windows reports | Shown as | Masks you get | How much it helps |
|---|---|---|---|
| More than one distinct efficiency class | Intel hybrid (P/E cores) | P-cores, E-cores, All, plus no SMT variants where they differ |
A real split. Game on P-cores, background apps on E-cores. High confidence |
| Two or more last-level-cache domains, sizes differ | AMD asymmetric cache (X3D) | Cache, Freq, Freq 2, …, All |
A real split. Game on the largest-L3 domain, background apps on the rest. High confidence |
| Two or more last-level-cache domains, same size | Multi-CCD symmetric | CCD0, CCD1, …, All |
A real split, but which domain gets called CCD0 is an ordering choice, not a measurement. Medium confidence — check the core map |
| Exactly one last-level-cache domain | Single cache domain | All, and All no SMT if the CPU has SMT |
Very little. There is no second group to move background work onto |
| No cache domains reported at all | Unknown | the same as a single domain | Very little, and the first-run screen says so |
Most CPUs are a single cache domain, and on those this app can only give the game one thread per
physical core. That is the whole of it — no isolated cores, no background separation. If the CPU has
no SMT either, All no SMT is not offered at all, both defaults fall back to All — every
processor — and the app changes nothing on that machine.
The multi-domain cases are the ones worth installing for: parts such as AMD's dual-chiplet X3D desktop processors, where 3D V-Cache sits on one chiplet only, and Intel's hybrid parts with both performance and efficient cores. Those are examples rather than a specification — a single-chiplet X3D part is one cache domain, some chips in Intel's hybrid generations ship with no efficient cores at all, and a dual-chiplet part with V-Cache on both chiplets reports two equal domains and lands in the symmetric row instead. The group names borrow vendor vocabulary but the tests do not: no branch anywhere checks who made the CPU, so any processor Windows reports with two efficiency classes is shown under the Intel name whoever built it.
If Windows cannot describe the topology at all, the app says so at startup and governs nothing — that is a failure to detect, not the Unknown row above.
Two things are untested rather than unsupported. Machines with more than 64 logical processors, which Windows splits across several processor groups, have never been run: the masks are CPU Set Ids, which are not scoped to a processor group, so this is expected to work, but expected is not measured. Windows on Arm has never been run either — there is no Arm64 build, and while Windows 11 on Arm emulates x64 applications, nobody has checked what topology this app sees under emulation.
These are examples, not a compatibility list — the app reads your machine's topology at first run, and that screen is the authoritative answer for your CPU.
Intel hybrid (P/E cores)
🔴 Trap — a hybrid generation is not a hybrid CPU. Plenty of 12th–14th gen parts ship with zero E-cores and land in the single cache domain row instead: i5-12400, i3-12100, i3-12300, i3-13100, i3-14100, Pentium Gold G7400, Celeron G6900. Generation name tells you nothing.
AMD asymmetric cache (X3D)
Two chiplets, 3D V-Cache stacked on one of them. This is the layout the app exists for.
🔴 Trap — most X3D parts are not in this row. Single-chiplet X3D CPUs have one cache domain and nothing to steer between: 9800X3D, 9850X3D, 7800X3D, 5800X3D, 5700X3D, 5600X3D. The X3D name says cache, not asymmetry.
🔴 Trap — the 9950X3D2 Dual Edition is not here either. V-Cache sits under both chiplets, 96 MB each, so it is Multi-CCD symmetric.
Multi-CCD symmetric
Zen 2 and earlier split each die into two four-core complexes with their own L3, so a cache domain there is four cores, not eight. The 3700X has one chiplet and two domains; the 2700X has no chiplets at all and still has two. Confining a game to one of those domains gives it four cores.
Single cache domain
One cache domain means there is nothing to steer between. The app will say so rather than pretend otherwise.
Pre-release. Read what has actually been tested before using this on anything you care about.
No anti-cheat has been tested with this app by anyone, anywhere in this work. No game was running during any measurement.
Game Optimizer requests the minimum access rights
(PROCESS_SET_LIMITED_INFORMATION | PROCESS_QUERY_LIMITED_INFORMATION), never reads or writes
game memory, and never injects anything — but that is a design intention, not a vendor
assurance. BattlEye's FAQ notes they may kick (not ban) players for using third-party
programs; that outcome cannot be prevented or detected by this app.
Use it on anti-cheat-protected titles at your own risk.
Eight files. There is no installer, and the app installs no service and no driver. Nothing is written outside your user profile unless you turn on the AMD 3D V-Cache setting, which writes one registry value for AMD's own driver and service.
| File | What it is |
|---|---|
GameOptimizer.exe |
The app. Double-click this one. |
WebView2Loader.dll |
Microsoft's WebView2 loader. Keep it in the same folder as the exe — that is the first place the app looks for it. It is optional: without it the Settings window draws its sponsor strip with GDI instead and nothing else changes. |
README.md |
This file. |
LICENSE |
MIT, for Game Optimizer itself. |
NOTICE.md |
What is bundled, where it came from, and what is not third-party. |
third_party\webview2\LICENSE.txt |
Microsoft's licence for the loader above. |
third_party\webview2\NOTICE.txt |
Microsoft's notices for the same. |
third_party\webview2\README.md |
Which SDK package version that loader came from. |
The third_party\webview2\ folder is **documentation only** — nothing in it is loaded at run
time. To remove Game Optimizer: **if you turned on the AMD 3D V-Cache setting, turn it off first and
restart** — that setting disables a driver, and the record of its original value lives in
config.ini, so deleting that file first leaves the driver disabled with nothing left to restore
it. Then Exit from the tray icon, delete the folder you unzipped, and delete
%LOCALAPPDATA%\GameOptimizer\ if you want its settings gone too.
If Windows says the file is blocked, that is the mark-of-the-web that lands on anything downloaded. Right-click the zip before extracting, Properties, tick Unblock, OK, then extract.
Double-clicking it never asks for administrator rights. The manifest requests asInvoker, so
launching it raises no UAC prompt. One optional feature does: turning the AMD 3D V-Cache setting on
or off launches a short-lived elevated copy of this same exe to write a single registry value, and
Windows will ask you to approve it. Because the exe is unsigned, that prompt says "Unknown
publisher" for the same reason SmartScreen does.
None of this is in the download — it is for the repository at https://github.com/charlie754/Game-Optimizer-CPUs-Threads-Optimizer.
Requires MSVC (Build Tools 2019 or newer) and a Windows 10 SDK. No other dependencies.
tools\build.bat
Produces build\GameOptimizer.exe. Run tools\gate-a.bat for the build + unit-test gate.
Two diagnostic probes report what this machine actually looks like and how it actually
behaves; their output is the evidence behind docs\spec\04-measurements.md:
tools\build-probe.bat && build\topology_probe.exe
tools\build-behaviour.bat && build\behaviour_probe.exe
The binary is not code-signed, and no certificate is pending. SignPath Foundation, whose programme is free for open-source projects, declined this project on 3 September 2026 — it asks for established public visibility and sustained activity, and the repository was days old. That is a fair call and they invited a reapplication later.
Two things are worth saying plainly rather than leaving a promise standing. Microsoft's own
low-cost signing service restricts individual developers to the United States and Canada, and
its organisation list does not cover this author's country. And signing is not an off switch for
the detections described below: two of the three verdicts this app has received end in !ml,
and machine-learning verdicts fire on signed software too — a Microsoft-signed installer was hit
by the sibling detection Wacatac.H!ml. Whether a certificate would have changed these
particular detections has not been tested and cannot be tested from here, so this file does not
claim it either way. What signing buys that is documented is narrower than it looks — reputation
carrying from one release to the next instead of restarting at zero each time.
So there is no signature, and Windows notices.
The first time you run a downloaded GameOptimizer.exe, SmartScreen shows a prompt headed
"Windows protected your PC" saying the app is unrecognised. Run anyway is not on it
until you click More info:
That is once, for that copy of the file. Nothing here asks you to turn SmartScreen off, add a Defender exclusion, or change any other security setting; none of that is needed to run this.
"Unrecognised" is exactly what it says: no signature and no download reputation. It is not a
statement about what is in the file. What this project offers instead of a signature is that
the whole source is public
and builds with MSVC via tools\build.bat in that repository (not in this zip), so you can read
what it does and produce the binary yourself. A copy you compiled locally does not normally carry
the downloaded-file marker this check is keyed to, so the prompt is a thing downloaders meet
rather than builders.
Some machines have shown a Defender toast for a Game Optimizer build - "Trojan:Win32 Cloxer" on an old development build, and "Trojan:Script Wacatac.H!ml" on a user's copy of a release. The "!ml" suffix marks a machine-learning verdict: no analyst looked at the file. The exe is not signed, it is new, few machines have seen it, and it does things a scanner scores as suspicious for a good reason - it enumerates processes, opens the game's process to set its CPU Sets, controls one AMD service on request, writes a Start-with-Windows entry when you ask for one, and relaunches a short-lived elevated copy of itself for the one action that needs administrator rights. None of that is hidden; all of it is in this repository.
What to check before trusting any copy:
certutil -hashfile GameOptimizer-vX.Y.Z-x64.zip SHA256 on the file you downloaded. If you
already unpacked it and only have the loose exe, hash that instead with
certutil -hashfile GameOptimizer.exe SHA256. Older releases do not all list a hash; if the
release you downloaded does not, you cannot use this check on it.tools\build.bat with the Visual Studio Build Tools gives you a
binary you compiled from these sources. It will not be byte-identical to the released
exe - the build is not reproducible bit for bit, so its SHA256 will differ and that is
expected. tools\build.bat currently expects the Build Tools at one hard-coded path and
stops if it is not there, so you may need to point it at your own vcvars64.bat.Defender's clean-up also deletes the Start-with-Windows entry it finds. After restoring or reinstalling, switch "Start with Windows" back on in Settings.
Nothing here asks you to add an exclusion or turn Defender off.
Double-click GameOptimizer.exe. The Settings window opens and the app gets a taskbar button,
plus an icon in the notification area.
Closing the Settings window does not quit the app. It returns to the tray and keeps working. The tray icon's Settings item brings the window back; Exit is what actually quits, and quitting clears every mask it applied. If you turn on Start with Windows, the app starts quietly at login with no window.
On first launch it detects your topology, shows you a core map, and asks you to confirm it before anything is applied. Then pick a game — from the running-process list or by browsing to an .exe — and choose which named mask it should get.
On a 9950X3D the derived masks are Cache, Cache no SMT, Freq, Freq no SMT, All and
All no SMT. On Intel hybrid they are P-cores / E-cores variants. On a symmetric dual-CCD
part they are CCD0 / CCD1, and the app tells you it cannot determine which is better. On a
single-CCD part it says plainly that no split exists and only the SMT masks will help.
A profile is a game plus a list of "heavy apps". The game and its descendants get one mask; the heavy apps get the other, for as long as the game runs. Optionally, any process that sustains more than N% CPU for M seconds while the game is in the foreground is moved to the background mask too.
Configuration is a plain INI file at %LOCALAPPDATA%\GameOptimizer\config.ini, editable by hand.
If it is killed rather than closed — Task Manager, a crash, a power cut — the assignments it
had applied are recorded in %LOCALAPPDATA%\GameOptimizer\applied.journal, and the next start
reads that journal and tries to clear each one, writing the result of every attempt to
%LOCALAPPDATA%\GameOptimizer\GameOptimizer.log. An entry it cannot clear is logged as
FAILED and not retried later, so the log is the place to check rather than an assumption.
Rebooting is the guaranteed reset: a CPU Set assignment belongs to a running process and does
not survive one.
The product was renamed. Two things move on first start of a renamed build, automatically and
once, each logged to GameOptimizer.log:
%LOCALAPPDATA%\GameOptimizer\config.ini does not exist and
%LOCALAPPDATA%\CoreDirector\config.ini does, config.ini and applied.journal are
copied across. The old folder is not deleted — roll back by running the old build.HKCU\…\Run value named CoreDirector pointed at an exe
that no longer exists, so Windows would fail it silently at every login and leave the value
behind. It is deleted, and a GameOptimizer value pointing at the current exe is written
in its place — but only if the old value was actually there, so autostart is never
switched on for someone who had turned it off.The first-run wizard checks Game Mode and reports what it finds. It never changes the setting and never requires a particular value.
Worth understanding: Game Mode does not park CCDs itself. On X3D parts, AMD's 3D V-Cache Performance Optimizer makes the same kind of decision Game Optimizer does, by a different mechanism and on Windows' idea of what counts as a game rather than yours. Running both means two systems placing your game by different rules.
That optimizer is three components, and