Can someone with a Windows computer with more than 64 cores run this https://gist.github.com/Sc00bz/448af736cc57d1396fcf2538d431739c.
Get CPU cache info for Windows

Get CPU cache info for Windows. GitHub Gist: instantly share code, notes, and snippets.

Gist
You'll need Visual Studio (others might work but I know MinGW-w64 doesn't have GetLogicalProcessorInformationEx in their windows.h), create an empty c++ project, add main.cpp, run (64 bit. There's a bug in Windows, according to documentation, where a 32 bit program will do 1 << (x % 32) instead of UINT64_C(1) << x when setting the masks).
I believe the struct GROUP_AFFINITY (https://learn.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-group_affinity) is a sparse array for the array "Masks" which is has a bit for every core. Thus is {Mask=Masks[i], Group=i}. I'm trying to confirm or deny this.
GROUP_AFFINITY (winnt.h) - Win32 apps

Represents a processor group-specific affinity, such as the affinity of a thread.

Thus Level=1, GroupCount=0, Group=1, Mask=0x0000000000000001 will happen for the 65th core. Oh if you're wondering why GroupCount=0 even though there's 1. There's a union in the CACHE_RELATIONSHIP struct (https://learn.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-cache_relationship). So when it's zero you use GroupMask even though it's the same as GroupCount=1, GroupMasks[0].
CACHE_RELATIONSHIP (winnt.h) - Win32 apps

Describes cache attributes. This structure is used with the GetLogicalProcessorInformationEx function.

@sc00bz I've got 112 logical processors.

what you're describing is sorta right but processor groups are split based on NUMA topology, so I have two groups of 56 rather than 64 + 48.

@sc00bz (I'm going to bed but I can run it tomorrow probably)
@gsuberland A few days ago, someone with 2, 12 core CPUs (4 NUMA groups) ran it and it was 1 group. So sparse array is my current theory.
@sc00bz small core counts do get merged like that yeah