views:

2483

answers:

5

I'd like my program to read the cache line size of the CPU it's running on in C++.

I know that this can't be done portably, so I will need a solution for Linux and another for Windows (Solutions for other systems could be usefull to others, so post them if you know them).

For Linux I could read the content of /proc/cpuinfo and parse the line begining with cache_alignment. Maybe there is a better way involving a call to an API.

For Windows I simply have no idea.

Thanks for your help.

A: 

Looks like at least SCO unix (http://uw714doc.sco.com/en/man/html.3C/sysconf.3C.html) has _SC_CACHE_LINE for sysconf. Perhaps other platforms have something similar?

Evan Teran
+4  A: 

On Win32, GetLogicalProcessorInformation will give you back a SYSTEM_LOGICAL_PROCESSOR_INFORMATION which contains a CACHE_DESCRIPTOR, which has the information you need.

Nick
Yikes - decoding the array of SYSTEM_LOGICAL_PROCESSOR_INFORMATION structures looks like it would be a pain.
Michael Burr
Welcome to the world of systems programming. ;)
TURBOxSPOOL
A: 

I think you need NtQuerySystemInformation from ntdll.dll.

cubex
+2  A: 

For x86, the CPUID instruction. A quick google search reveals some libraries for win32 and c++. I have used CPUID via inline assembler as well.

Some more info:

robottobor
could you comment on how you'd use CPUID to get this?
Nathan Fellman
+1  A: 

On Linux try the proccpuinfo library, an architecture independent C API for reading /proc/cpuinfo

PiedPiper