Retrieving local *current* GPU core, shader, memory clock

I’m working on a semester long project with a couple teammates at my university for our Software Engineering course. Our initial project idea was to come up with a kind of watered-down combination of CPU-Z & GPU-Z just to see if we could do it and learn how it all works along the way. Both of these programs being hardware information gathering and sensor monitoring applications.

For full project details please feel free to check our team website @ http://www.alienmania.com
(Please excuse the domain name, it’s a free one I’m borrowing from a friend for the semester lol).

There are several screenshots on our homepage of our current prototype but the following illustrates about as far as we have gotten with GPU information:

Up until this point we have exclusively used WMI to query all CPU, mobo, RAM, and now limited GPU information. The above screenshot shows the extent of what we are able to retrieve through WMI for hardware specifications. We would like to retrieve at minimum the current core clock speed and memory clock speed of any local GPU’s on the machine at runtime. I have browsed through the OpenCL C# bindings (which is how I found this forum) and noticed there is a property which returns the ‘CL_DEVICE_MAX_CLOCK_FREQUENCY’, I’m not totally sure what this speed is derived from but I know it’s not the ‘current’ core clock speed. For my EVGA GTX 465 SC this property returns 810 mhz. I should note the speeds we are looking for are for ‘3d mode’ or however it’s considered.

Our project currently is a .NET Framework 4.0 windows forms application programmed in C#. We are all using VS 2010 Pro via our Microsoft Dreamspark accounts ^_^.


If anyone would care to take the time to look through our current source and help us out via PM’s or instant messanging (Skype, AIM, MSN, Yahoo, whichever is convienent for you) please let me know! Thanks.

CL_DEVICE_MAX_CLOCK_FREQUENCY is everything that is exposed through OpenCL. What you can do if you really want to list the memory frequency is creating a database for them.

So it’s possible the user could have a current clock frequency greater than that property returns? I supposed this is so because I’m able to overclock my GPU past 810 mhz and that’s what the property returns.

I thought of the database and that would work fine however it can only show default timings for the cards we recognize through WMI queries. We’re just trying to understand what’s involved with getting these ‘current’ properties of a video card and try to see if we can include it. Too bad WMI doesn’t have functionality for this :cry: .

Unfortunately that information is simply not available in real time. When you think about it, it’s pretty useless data anyway. It does not help you to know how fast running a certain kernel is going to be because that depends on a gazillion other factors besides clock frequency. I don’t even know why maximum clock frequency is advertised in the first place.

Ah I see. We’re not really looking at it from that perspective more of just being able to find device capabilities and display it nice and neatly. When you say it’s not available I imagine you are referring to it not being available through OpenCL? Because numerous other utilities are able to monitor the separate clock speeds of each graphics card (on multi-card machines) and display this information.

I meant not available through standard OpenCL. I don’t know of any extension that provides this info either, but it may certainly exist.

This sort of information is usually available through OS-specific hardware APIs. There are various device properties in OpenCL that you can use to retrieve device identity (names, vendors) which is hopefully enough to figure out which device corresponds to which hardware.