Reputation: 5731
I was reading the great SO post about how to determine the size and other information of cache memory: Programmatically get the cache line size?
I wrote the following program to find out these information on Windows platform:
#include<Windows.h>
int main()
{
BOOL retval;
SYSTEM_LOGICAL_PROCESSOR_INFORMATION *buffer = 0;
int buffersize = 0;
retval = GetLogicalProcessorInformation(buffer,(PDWORD)&buffersize);
if(retval == FALSE)
{
DWORD ret = GetLastError();
if(ret == ERROR_INSUFFICIENT_BUFFER)
{
// Use the actual length required information while allocating the memory
char* tmp = new char[buffersize];
buffer = (SYSTEM_LOGICAL_PROCESSOR_INFORMATION *)tmp;
retval = GetLogicalProcessorInformation(buffer,(PDWORD)&buffersize);
CACHE_DESCRIPTOR x;
if(retval == TRUE)
{
x = buffer->Cache;
}
delete [] tmp;
}
}
return 0;
}
However while running/debugging the program I am not getting all information about cache(except the level of cache and its type). Below is the output of variable x
x.Level = 1
x.Associativity = 0
x.LineSize = 0
x.Size = 0
x.Type = CacheUnified
Why above program does not give the LineSize and Size information about this cache? Am I doing something wrong over here?. Is there another way to find out these information programmatically on Windows platform?.
My Platform information is:
Windows 7
64 Bit Operating System
Intel i5 CPU
Visual Studio 2010
Upvotes: 0
Views: 582
Reputation: 39551
GetLogicalProcessorInformation
returns more than one SYSTEM_LOGICAL_PROCESSOR_INFORMATION
structure. You need to search through through the list of these structures for the one that whose Relationship
value is RelationCache
and whose Cache.Level
is 1. The post you linked shows how do this.
Upvotes: 1