Look at the SMBIOS specifications: System Management BIOS (SMBIOS) Reference Specification. Actually, latest version is dated 14 May 2018.
Step 1:
You need to read the Current Interleave
from
7.6 Memory Controller Information (Type 5)
for older versions, and then follow the notes about how to read the newest structures.
Step 2: You need to get the memory devices from:
7.38 Memory Channel (Type 37)
Offset Name Length Value Description
06h Memory Device Count(n) BYTE Varies Number of Memory Devices (Type 11h) that are
associated with this channel
This value also defines the number of
Load/Handle pairs that follow.
You should read that Count(n)
memory devices with their associated channels.
Step 3: all together, You will end up with a table as follows:
Channel 1: DIMM #0
Channel 1: DIMM #1
Channel 2: DIMM #0
Channel 2: DIMM #1
Luckily, in the SMBIOS specifications there are some examples.
For instance look at section 7.7.3 Memory subsystem
:
04h ; 2-way interleave currently used
As the specifications are frequently subject to change and some are obsolete, I wouldn't rely on any out-of-the-box Windows WMI/API. The best way I can suggest You, is to read the RAW SMBIOS DATA in one shot and build a simple table like the one above. Here is how: SMBIOS Demystified
Moreover, I believe You can't do any further assumption about the real effective channel speed. You may need to gather some othe information about the speed of each DIMM module.
IMHO, posting the source code for such a task goes far beyond the current question scope, so there are some links: the best reference about that topic is dmidecode but, as I feel good with Delphi, I would prefer to look at this Delphi/FPC post: Reading the SMBios Tables using Delphi.