# Hmm, ATI HD5xxx Memory Usage monitor not possible?



## newfellow (Jul 23, 2010)

Wondering here since I cannot find a single tool which could give me ATI Card memory usage monitor. What hangs on that? I mean isn't it query on same location from display than NVIDIA cards ?

funny still I can fill the memory with OpenCL style toys, but I cannot detect the memory usage.


----------



## INSTG8R (Jul 23, 2010)

It "has" worked on past versions of Everest. It hasn't worked for quite some time tho. I liked to have it on my GPU page for my G15.


----------



## newfellow (Jul 23, 2010)

INSTG8R said:


> It "has" worked on past versions of Everest. It hasn't worked for quite some time tho. I liked to have it on my GPU page for my G15.



I also know there was an simply fix in Rivatuner which was taken on use when HD3xxx cards where changed to HD4xxx card to enable 'vidmem.dll=1' which worked on new cards. I 
understand VRM is different, but in all sense these VRM:s has few times more information and it should work somehow as simply query.

I just haven't found a single took which could tell me the memory usage. Everest included.


----------



## AltecV1 (Jul 23, 2010)

newfellow said:


> Wondering here since I cannot find a single tool which could give me ATI Card memory usage monitor. What hangs on that? I mean isn't it query on same location from display than NVIDIA cards ?
> 
> funny still I can fill the memory with OpenCL style toys, but I cannot detect the memory usage.



its because W1zzard is an NVidia fanboy and wants to keep those features to NVidia cards  no im just joking, but im pretty sure there is a good reason why it hasnt made in to GPU-Z


----------



## cadaveca (Jul 23, 2010)

Data in mem is "in flight" and as such, is not "actively" stored in mem. It requires the use of debugging tools(GPUPerfMonitor et al./virtualiztion of the app, sometimes), or custom code to find out how much is actually being used( for example, GTA4 bench will tell you % of memory was used).

Also, you must be sure to not be querying the local store, which is just 32k.

There basically is not one large 1GB data share on 1GB AMD cards. It's literally broken up into 4x256MB groupings(as the memory controller is not 256-bit, but 4x64 bit, but as they all run in tandem, it's considered 256-bit overall), making proper monitoring even more difficult. 4x data stores means it's very possible that monitoring calls may stall an app, leading to crashes.


----------



## newfellow (Jul 24, 2010)

cadaveca said:


> Data in mem is "in flight" and as such, is not "actively" stored in mem. It requires the use of debugging tools(GPUPerfMonitor et al./virtualiztion of the app, sometimes), or custom code to find out how much is actually being used( for example, GTA4 bench will tell you % of memory was used).
> 
> Also, you must be sure to not be querying the local store, which is just 32k.
> 
> There basically is not one large 1GB data share on 1GB AMD cards. It's literally broken up into 4x256MB groupings(as the memory controller is not 256-bit, but 4x64 bit, but as they all run in tandem, it's considered 256-bit overall), making proper monitoring even more difficult. 4x data stores means it's very possible that monitoring calls may stall an app, leading to crashes.



Thanks, but I do understand this and this 'split' is why it is so damn difficult for me to code on OpenCL environment (+ AMD limitations). I can query 'Cypress' for 
current in-card local memory 'availability' (not on-fly, but 'when query is sent'). However, this is not an option while running an 3D applications. 
(For example: current 'Lavalys Everest' does automate query 'ATI Stream: Cypress' this 'Local Memory' how ever the query is never performed more than 1 time on program start)

I am wondering why this memory isn't in any tools I mean hasn't ATI/AMD provide any specs (other than OpenCL) 
and WHY this couldn't be query exact same way as NVIDIA GPU from the 'display' and not from the card.


----------



## Mussels (Jul 24, 2010)

subscribing to see what people find out


----------



## cadaveca (Jul 24, 2010)

newfellow said:


> I am wondering why this memory isn't in any tools I mean hasn't ATI/AMD provide any specs (other than OpenCL)
> and WHY this couldn't be query exact same way as NVIDIA GPU from the 'display' and not from the card.



As far as I understand, AMD has in fact provided specs for this, and really, you need to have the app coded to support it, due to how the memory subsystem works. Of course, we can monitor how much data is sent to the gpu at any given moment, or else the wouldn't run!

nVidia, on the other hand, uses a global data store, in effect, so you can query the controller to see what's there. This is why they excel @ gpgpu, well..other than the software.

Amd's answer is more power efficient, as seen in thier current gpus. This alone bascially accounts for the power difference between the two current gpus, vs transistor count, if we are excluding the extra ram nV is currently using.

However, ATi has recently change how memory management works, it seems, at the driver level, and this change is evident in apps that feature the aforementioned support for memory use monitoring. It's built into Crysis as well, and, of course, most other engines, but this needs to be enabled inside the app, rather than using an external tool.

Personally, I think that this is why we don't see Phys-X on ATI gpus. nV guys weren't lying when they said they'd give ATi the code...they knew it wouldn't run well on ATi hardware anyway.

I guess, anyway. It's not like this info is out there on the intarwebs, so I gotta guess.



Mussels said:


> subscribing to see what people find out


----------



## slyfox2151 (Jul 24, 2010)

cadaveca said:


> CUT
> 
> Amd's answer is more power efficient, as seen in thier current gpus. This alone bascially accounts for the power difference between the two current gpus, vs transistor count, if we are excluding the extra ram nV is currently using.
> 
> ...



what extra ram is nvidia currently using????
also the physx part is getting off topic and will start a flame fest... lets end that right here.


i think ATI needs to add code to support Ram usage monitoring, im sure it could possibly done atm (check ram useage) but its likely to be inefficient and possibly give incorrect resualts.


----------



## cadaveca (Jul 24, 2010)

GTX480 has how much more ram than 1GB Cypress? 

I think that now, right this moment, yes, you are right, ATi needs to add some code, but, maybe at this point they already have. The driver is different now, so who knows what all they have added...


Which is what really bothers me about them...for someone wanting Open-Source solutions, the sure aren't open with info...I see lots of non-business stuff on social media feeds, even, so clearly, focus isn't 100% on work for some of those @ Ati. 


I'm not expecting any sort of flamefest..I'm straight out guessing. Blame AMD for me having to.

EDIT:

Newfellow, you know, I guess I didn't realyl answer anything there, did I? There is a third party tool out there that you can use to query usage, as Everest does, but like you say, it must be constant query, which will drastically affect performance. I suggest you hit up the dev forum, explain what's going on and why you need this function transparent, and then you may hope it will happen.


----------



## newfellow (Jul 24, 2010)

cadaveca said:


> However, ATi has recently change how memory management works, it seems, at the driver level, and this change is evident in apps that feature the aforementioned support for memory use monitoring. It's built into Crysis as well, and, of course, most other engines, but this needs to be enabled inside the app, rather than using an external tool.



Cheer curiosity. I could almost bet my neck this is the v10.4b(8.721.3.0000) and updated in v10.4 WHQL->after. Would also explain hell a lot other things which I've been 
working on. (of course officially this would be v10.3b, but wth). As for explain. Well, I don't honestly even wanna go to devel forums. I know I will not 
find answer there more likely they'll ban my ars for questioning too much, heh. As for 'inside application' only problem in this really is that not all the engines
comes with the support (like Bioware 'Eclipse'-engine Would love to get this engine statistics on screen anyway). 

I'll find a way and query in 'live' sense only has to be done when executed so I think I can deal with some sort of coding here which would simply push 
hotkey -> drop OSD flashing couple times of current memory in each chunk, but I just don't know where to begin really here, but just saying I'm sure no 
real live 'OSD' Style of memory usage would even be needed to just understand a momentary memory usage.



slyfox2151 said:


> i think ATI needs to add code to support Ram usage monitoring, im sure it could possibly done atm (check ram useage) but its likely to be inefficient and possibly give incorrect resualts.



Well, I'm not saying they wouldn't be capable of doing this and probably some new series will have this in the end, but considering atm drivers they are 
building and as I see clear as a daylight all the issues there is on OpenGL 4.0 implementation, DirectX 9-10 on latest (10.6) CFX and older drivers (<-10.5a) DX11 (nor OGL 4.0).

I am just referring that there is, atm, so many very difficult problems on ATI lair and PR sawing wooden 'Flash is now working'-crap that I doubt there is 
a room for any 'extra' code as they are doing probably the best just to keep up and fix the crap they made up.

*@commonly*

and o as for PhysX flaming. Well, I don't really care does the PhysX work on ATI cards or not it is not even on NVIDIA hardware worth a cent. I'd consider 
maybe DirectCompute 11 as for the moment slow version of physics acceleration through all hardware not even OpenCL as it is so so so early stage of 
development (although, working in my sense, but not for the people as only driver where this works is 10.3b officially and that's just crap. New drivers 
comes with new CAL DD and that breaks with GTK the OpenCL functionality completely).


----------



## W1zzard (Jul 24, 2010)

cadaveca said:


> There basically is not one large 1GB data share on 1GB AMD cards. It's literally broken up into 4x256MB groupings(as the memory controller is not 256-bit, but 4x64 bit, but as they all run in tandem, it's considered 256-bit overall), making proper monitoring even more difficult. 4x data stores means it's very possible that monitoring calls may stall an app, leading to crashes.



sorry but that's bs... the memory on the gpu is one flat space, a memory controller does exactly that, create an abstraction layer from individual chip and cell adressing to a flat memory space. all modern cpus and gpus work like that.

all ati has to do is put a counter into their driver that counts how many bytes it has allocated in gpu memory, and expose it. i'm quite sure the driver already keeps track of memory usage otherwise it wouldnt know when memory is full or when to overflow into main memory. ati is simply not exposing the counter to 3rd party apps, while nvidia does. cost in performance should be pretty much 0, one addition per memory allocate, one subtraction per memory free, one main memory access per read + call overhead

who said anything that those counters are accurate at all?


----------



## newfellow (Jul 24, 2010)

W1zzard said:


> sorry but that's bs... the memory on the gpu is one flat space, a memory controller does exactly that, create an abstraction layer from individual chip and cell adressing to a flat memory space. all modern cpus and gpus work like that.



hmm, were talking on OpenCL I assumed. In there it is not 'flat space' it's split to several while allocated. It even was limited to half on begin (unsure actually how it's on 'ATI Stream 2.1' + new drivers).



W1zzard said:


> all ati has to do is put a counter into their driver that counts how many bytes it has allocated in gpu memory, and expose it. i'm quite sure the driver already keeps track of memory usage otherwise it wouldnt know when memory is full or when to overflow into main memory. ati is simply not exposing the counter to 3rd party apps, while nvidia does. cost in performance should be pretty much 0, one addition per memory allocate, one subtraction per memory free, one main memory access per read + call overhead
> 
> who said anything that those counters are accurate at all?



Now that's nice to know as questioned on original post by me. So, there is an cap in information from ATI side after all.

As for accurate. Well, this is a question I've also been asking lately on specifically NVIDIA CUDA Cores Usage % information which we receive from cards I mean how do we even know the % of something like PhysX is from all available cores and not just from the cores allowed to utilize. Same with OpenCL (for example any Cypress system is limited by AMD to 20 cores maximum no matter do your PC have 2xHD5970 or a single HD5870).

Although, speaking of Memory Usage here, but a bit another manner considering there is a '0' and max in this case 1024MB over any case. As all CFX memory in threaded no matter do you run 2 or 4 GPUs.


----------



## Mussels (Jul 24, 2010)

W1zzard said:


> sorry but that's bs... the memory on the gpu is one flat space, a memory controller does exactly that, create an abstraction layer from individual chip and cell adressing to a flat memory space. all modern cpus and gpus work like that.
> 
> all ati has to do is put a counter into their driver that counts how many bytes it has allocated in gpu memory, and expose it. i'm quite sure the driver already keeps track of memory usage otherwise it wouldnt know when memory is full or when to overflow into main memory. ati is simply not exposing the counter to 3rd party apps, while nvidia does. cost in performance should be pretty much 0, one addition per memory allocate, one subtraction per memory free, one main memory access per read + call overhead
> 
> who said anything that those counters are accurate at all?



you're the only one here with enough pull to get anything done about it, care to try contacting them and asking for the feature to be exposed?


----------



## W1zzard (Jul 24, 2010)

newfellow said:


> hmm, were talking on OpenCL I assumed. In there it is not 'flat space' it's split to several while allocated. It even was limited to half on begin (unsure actually how it's on 'ATI Stream 2.1' + new drivers).


yes opencl works differently





basically all those different memories are a combination of cpu memory, gpu memory, gpu caches, gpu registers. not relevant for this discussion in my opinion



> Now that's nice to know as questioned on original post by me. So, there is an cap in information from ATI side after all.


there is a cap on everything from everyone. there are hundreds of performance counters in modern gpus, nvidia goes as far as exposing 4 (memory + 3x gpu load) - and they dont tell us how they work, what they count, how they refresh, etc etc


----------



## newfellow (Jul 24, 2010)

"not relevant for this discussion in my opinion" 

yeah have nothing to do with this topic. Just an question before could I of simply build based on OpenCL Memory 'Total Local Available Memory'-query on OpenCL to go though the issue to simply make temporal OSD to flash on screen while need quick memory usage reading.

As for information cap well, no can do on my side. I'am all out of luck on ATI.


----------



## cadaveca (Jul 24, 2010)

W1zzard said:


> sorry but that's bs... the memory on the gpu is one flat space, a memory controller does exactly that, create an abstraction layer from individual chip and cell adressing to a flat memory space. all modern cpus and gpus work like that.




Yes, but really, the only need to know for memory usage, outside of engine debugging, and curiosity, would be OpenCL. However, for an indie dev looking for this info, what I've given is what AMD has said in regards to the subject. He did say OpenCL in the OP, after all.

I mean, Like I said, I'm guessing. I don't know jack..but I can easily parrot what they've(AMD) said. I have no intentions of spreading BS, however, as newfellow agreed with me, we can tell that he's run into these situations as well. AMD programming guides basically tell you to guess what memory usage is. 




AMd says on the dev forum that these counters are there now for measuring memory usage, in STREAM, anyway. But i dunno where or what or how they are exposed.

Also, Crossfire configs now seem to use the mem on both cards, or at least, they show in apps as having a much larger buffer than is physically on one card(1.7-2.0GB), and this changed within the past few months. Most see -256MB of total on all GPUs.


BUt info states that Crossfire configs don't share memory, so what's going on?


----------



## newfellow (Jul 31, 2010)

Well, it would look like OpenCL is a no go on this subject.

Just coded an app which can read Global All memory dedicated by windows to graphics and Local GPU Video Memory. Available Free & totals on screen, but I cannot update 'live' values by any means. ATI Stream does actually answer 1024MB for the HD5850 card, but OpenCL again answers 256MB weird. However, since I cannot do an 'live' update on neither on entire Windows run until restarted can't use this to know memory usage. 

need to find some other way pass this read out.


----------



## cadaveca (Jul 31, 2010)

Yeah, that's why I suggested you hit up the dev forum. I know it may seem kind of a waste of time, but until AMD has enough people requesting this functionality, it will never happen.


----------



## somebody (Jul 31, 2010)

What about the *ATI Memory Viewer*?



> The ATI Memory Viewer is a tool to monitor graphics memory usage. The total amount of graphics memory currently being consumed by all applications on the system is displayed in real time. Tools for both 32 and 64 bit versions of Windows are included. See the ReadMe file included in the package for more details.



http://www.amd.com/us/products/workstation/graphics/tools/pages/tools.aspx

Well it doesn't work so well on my nVidia, but maybe that's to be expected.


----------



## erocker (Jul 31, 2010)

It kind of works, just doesn't read the memory under load.


----------



## newfellow (Aug 1, 2010)

This memory Viewer is exactly same looking what I just coded except it only reads local and I used it as OSD or as overlay. 

hehe..

-edit-

and seems indeed pretty darn broken nothing will change the current reading.


----------



## somebody (Aug 2, 2010)

Sorry it didn't work for you guys. Maybe if it's broken at least you could hit up AMD / ATi for a fix. 

What about GL_ATI_meminfo? (OpenGL)

http://www.geeks3d.com/20100531/pro...the-graphics-memory-size-and-usage-in-opengl/
and
http://forums.amd.com/devforum/messageview.cfm?catid=347&threadid=115711&enterthread=y

I tried the nVidia code and that seems to work. Wish I could be more helpful but I know next to nothing about graphics programming, least of all ATi.


----------



## newfellow (Aug 9, 2010)

somebody said:


> Sorry it didn't work for you guys. Maybe if it's broken at least you could hit up AMD / ATi for a fix.
> 
> What about GL_ATI_meminfo? (OpenGL)
> 
> ...



NVIDIA works yeah, but ATI does not I did test the proggy there and it only shows NVIDIA as any other tool would. Crashing tool too 

Anyway, I think I'll believe on what Wizzzard said above there that 'identifier' simply haven't been provided public. although, wonder why. These folks never do anything without a reason.


----------

