• Hallo Gast, du kaufst gerne günstig ein und erfährst oft vor deinen Freunden von interessanten Angeboten? Dann kannst du dein Talent als Schnäppchenjäger jetzt zu Geld machen und anderen PCGH-Lesern beim Sparen helfen! Schau einfach mal rein - beim Test der Community Deals!

VRAM-Allocator CUDA Version

HisN

Kokü-Junkie (m/w)
Die Diskussion wie viel VRAM man nun wirklich auf einer Grafikkarte braucht ist so alt wie das Forum, wenn nicht sogar älter :-)

Bis jetzt konnte man die Frage nur schwer beantworten, z.b. indem man "gleiche" Grafikkarten mit unterschiedlicher Speicher-Ausstattung gegeneinander geprüft hat.

Aber damit konnte man nicht "jede" Speichermenge simulieren, und ständig Karten umstecken ist an sich auch nicht der richtige Weg.


Hier kommt der User @gausmath ins Spiel.

Er hat mal schnell ein kleines Programm geschrieben, das über Cuda eine beliebige VRAM-Menge belegt.

Man kann also jetzt den Speicher einer Grafikkarte bewusst "begrenzen" indem man einfach Teile davon füllt.

Und schon kann man ganz genau erkennen ab wann eine Software anfängt an Leistung zu verlieren wenn ihr der Speicher ausgeht.

Und das ohne Karten tauschen zu müssen, einfach mit ein paar Zeilen in der Eingabe-Aufforderung.


Download-Link: https://1drv.ms/u/s!As_jnW8h38YpgcZ0wUsAP7tNmnFf1Q


Aufruf des Tools über die Konsole:

Code:
gpumem.exe 1000


1000 sind 1GB. Quellcode ist auch im Ordner und wird mit

Code:
nvcc gpumem.cu -o gpumem -ccbin "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin"


kompiliert, falls man das selbst kompilieren möchte. Dazu braucht man noch das CUDA SDK: CUDA Toolkit 10.1 Download | NVIDIA Developer


Hier als Beispiel. Ich habe im Leerlauf gut 1GB VRAM der Graka mit dem Zeug was bei mir so am Desktop läuft durch den Fenstermanager belegt.

leerlauf-jpg.1035862



Ich starte das Programm mit dem Wert 10 GB und es werden 10GB VRAM gefüllt.

vram-gefuellt-jpg.1035861


Und sobald ich Return drücke, geht es auf den alten Wert zurück.

vram-fertig-jpg.1035860


So kann man jede Software dazu zwingen mit dem Speicher jonglieren zu müssen und genau sehen ab wann welche Software bei welchen Settings anfängt zu stottern oder die FPS in den Keller gehen. Und zwar ohne viel Aufwand.

Ich hofffe das hilft bei der Frage: Wie viel VRAM ist wirklich nötig. Auch wenn die Beobachtung zur Zeit tatsächlich nur auf Grafikkarten mit "mehr als Genug" VRAM Punkte bringt, weil man auf Grafikkarten die sowieso schon zu wenig VRAM haben nur den Memorymanager mit Swappen beschäftigt. Wobei man allerdings aus der Beobachtung wie viel nun tatsächlich ins RAM geswappt wird, AUCH seine Schlüsse ziehen kann.


Vielen Dank nochmal an den Programmierer gaussmath.




VRAM.Fertig.jpgVRAM-Gefuellt.jpgLeerlauf.jpg
 
Zuletzt bearbeitet:

LastManStanding

PCGH-Community-Veteran(in)
Oh schön bei 1 bis 2 Fragen könnte mir das sicherlich helfen.
Ich wusste immer das gausmath ein Fuchs ist
Danke schön
 
TE
HisN

HisN

Kokü-Junkie (m/w)
Nein, ich kann wundervoll 18GB vermüllen. Hier mal mein erster Versuch.

ROTTR in DX11 (Kein Antialiasing/DSR/SSAA) mit VXAO, rest Maxed-Out in FHD.

ROTTR_2019_03_03_16_31_30_317.jpg

Ich starte das Tool

ROTTR_VRAM-Knapp.jpg

Und wir können sehen das 6GB VRAM eventuell nicht mehr der Weißheit letzter Schluss in FHD sein könnten, wenn man dieses Game betrachtet, und man sieht auch sehr genau, woher das System jetzt fehlendes VRAM hernimmt.

ROTTR_2019_03_03_16_34_18_843.jpg

Und schnell noch ein Gegentest mit 10GB "geklautem" Speicher. Nicht das jemand erzählt, das Tool klaut die Leistung.

ROTTR_2019_03_03_16_46_25_605.jpg

Und das beste ES FUNKTIONIERT SOGAR IM CPU-LIMIT
 
Zuletzt bearbeitet:

gaussmath

Lötkolbengott/-göttin
Gut, wir müssen ja auch die AMDler am Test beteiligen. CUDA läuft auf AMD Karten nicht, aber ich sitze gerade an der OpenCL Variante.

Hier der OpenCL Code:
Code:
#include <stdio.h>
#include <OpenCL/opencl.h>

int main(int argc, char *argv[])
{
     unsigned long long mem_size = 0;
     int err; // error code
     cl_device_id device_id; // compute device id 
     cl_context context; // compute context
     cl_mem devTestMem
     
     err = clGetDeviceIDs(NULL, CL_DEVICE_TYPE_GPU, 1, &device_id, NULL);

     if (err != CL_SUCCESS)
     {
         printf("Error: Failed to create a device group!\n");
         return EXIT_FAILURE;
     }
     
     context = clCreateContext(0, 1, &device_id, NULL, NULL, &err);

     if (!context)
     {
         printf("Error: Failed to create a compute context!\n");
         return EXIT_FAILURE;
     }

     // get amount of memory to allocate in MB, default to 256
     if(argc < 2 || sscanf(argv[1], " %llu", &mem_size) != 1) {
        mem_size = 256;
     }
     mem_size *= 1024*1024;; // convert MB to bytes

     // allocate GPU memory
     devTestMem = clCreateBuffer(context,CL_MEM_READ_WRITE,mem_size,NULL,&err);
     
     if(!devTestMem) {
        printf("Error, could not allocate %llu bytes.\n", mem_size);
        return EXIT_FAILURE;
     }

     // wait for a key press
     printf("Press return to exit...\n");
     getchar();

     // free GPU memory and exit
     clReleaseMemObject(devTempMem);
     clReleaseContext(context);
     return 0;
}

Muss das nur noch kompiliert kriegen.
 
Zuletzt bearbeitet:

Downsampler

Software-Overclocker(in)
Wozu soll das jetzt nochmal genau gut sein?

Ich mülle meinen VRAM voll, von dem ich eh schon zu wenig habe, egal wieviel ich davon habe, WEIL...?????
 

gaussmath

Lötkolbengott/-göttin
Hab den Code zum laufen gebracht, allerdings scheint's Probleme bei der Device Identifizierung zu geben.

Ich mache morgen weiter..
 
TE
HisN

HisN

Kokü-Junkie (m/w)

DaHell63

BIOS-Overclocker(in)
Nein, ich kann wundervoll 18GB vermüllen. Hier mal mein erster Versuch.

ROTTR in DX11 (Kein Antialiasing/DSR/SSAA) mit VXAO, rest Maxed-Out in FHD.







Und wir können sehen das 6GB VRAM eventuell nicht mehr der Weißheit letzter Schluss in FHD sein könnten, wenn man dieses Game betrachtet, und man sieht auch sehr genau, woher das System jetzt fehlendes VRAM hernimmt.

rottr_2019_03_03_16_34_18_843-jpg.1035877

Bei deinem Bild fragt man sich halt nur warum und vor allem weshalb wird soviel VRam verbraucht. Auch mit 6GB VRam kann ich ein gutes Bild in 4K zaubern ohne Texturmatsch.
Wer mit 6GB VRam in FHD nicht auskommt, macht was falsch. Keiner zwingt einen Texturmods oder 4K Texturen in FHD einzuschalten.
Für den der das will.....kein Ding wenn er eine Grafikkarte mit viiieeelll VRam kauft. .

GTX 980 Ti 6GB VRam und es ruckelt und matscht nicht:D
 

Anhänge

  • ROTTR_2016_09_24_12_50_36_374.jpg
    ROTTR_2016_09_24_12_50_36_374.jpg
    2,1 MB · Aufrufe: 100
  • ROTTR_2016_09_24_12_53_30_872.jpg
    ROTTR_2016_09_24_12_53_30_872.jpg
    2,1 MB · Aufrufe: 94
TE
HisN

HisN

Kokü-Junkie (m/w)
Genau darauf will ich hinaus.
Man kann jetzt ganz genau sehen ab wann eine bestimmte Menge VRAM Leistung kostet.
Und es gibt halt die Gamer die jedem FPS hinterherrennen, und die Gamer die einfach nur zocken wollen, und die Gamer, bei denen das Bild einfach nicht geil genug aussehen kann.
Jeder dieser Gruppe kann man jetzt bei einer Kaufberatung eventuell besser helfen wie viel Geld sie in VRAM stecken sollen.

Die Sache ist doch die ... VRAM kostet Geld, daher gibt es die "preiswerten" Grafikkarten mit weniger VRAM. Nun kann man losgelöst von der Rohleistung schon mal Betrachten wie viel VRAM man für eine bestimmte Anwendung braucht.
Denn viele Leute kaufen ihre Grafikkarten ja z.b. wenn sie für eine Bestimmte Anwendung nicht mehr ausreichen.
Ich beobachte das mit dem VRAM ja schon etliche Jahre, konnte aber bissher nur sehen wie viel VRAM eine Anwendung belegt, nicht wie viel sie benötigt.
DAS sehe ich jetzt besser als vorher. Ich finde das unglaublich interessant.
 
Zuletzt bearbeitet:

DaHell63

BIOS-Overclocker(in)
Und es gibt halt die Gamer die jedem FPS hinterherrennen, und die Gamer die einfach nur zocken wollen, und die Gamer, bei denen das Bild einfach nicht geil genug aussehen kann.
Jeder dieser Gruppe kann man jetzt bei einer Kaufberatung eventuell besser helfen wie viel Geld sie in VRAM stecken sollen.

Wenn es in einer Kaufberatung auch so ablaufen würde wäre wirklich viel gewonnen. Falsch ist es sicher nicht, wenn man sich damit auch auseinandersetzt.
 

openSUSE

Software-Overclocker(in)
Es wird bei vielen Spielen immer noch ein Unterschied sein ob wirklich "nur" 4GB VRam vorhanden sind oder ob von 8GB VRam 4GB belegt sind.
Das "VRam Management" wird idR zu beginn durch die tatsätzlich vorhande VRam Menge gewählt, mit der Erwartung, der Treiber/das System verschaft der Anwendung/Game eben nahezu 100% des VRams.
 

gaussmath

Lötkolbengott/-göttin
Ich denke, dass Speicherallokierung heutzutage ziemlich dynamisch ist. Das Game kann schlecht erwarten, dass es die einzige Applikation Ist, die VRAM benötigt.
 

openSUSE

Software-Overclocker(in)
Doch, die überwiegende Mehrheit der Games wird genau davon ausgehen. GPU hat 8GB VRam verbaut, also nutze ich die auch, die anderen müssen platz machen, was idR mit OpenCL/CUDA Code eher nicht passieren wird (was ja eigentlich von dir gewollt ist!).
Ich kenne KEINE Game Engine die es anders macht. Es wird genau einmal abgefragt wieviel VRam "VERBAUT" ist und genau nach diesem Egebniss wird der "VRam Management"/Streaming Algorithmus gewählt. Da aber OpenCL/CUDA Code idR nicht vom System/Treiber Entfernt wird, wird es ein ganz anderes Spielgefühl sein als mit einer "echten" 4GB Karte.
 
Zuletzt bearbeitet:

openSUSE

Software-Overclocker(in)
Schau dir doch mal die Unreal/Unity Engine an.
Wie verhalten sich denn Spiele bei einem 2 Monitor System wenn auf einem ein Spiel gespielt wird wärend auf dem anderm Monitor zb ein Browser ein 4GB Bild/Texture anzeigt?
Oder warum AMD mit HBCC kommt? Genau: Weil gerade Spiele heute noch davon ausgehen, dass der VRam für sie alleine ist.
 

gaussmath

Lötkolbengott/-göttin
Mit CUDA was Lauffähiges in 10 Minuten. OpenCL: 2 Tage und immer noch kein Land in Sicht... ^^

"clCreateCommandQueue" wurde als veraltet deklariert... :lol:
 

openSUSE

Software-Overclocker(in)
Wilkommen bei OpenCL2.0, solltest du noch ein "älteres" Target brauchen:

#define CL_USE_DEPRECATED_OPENCL_1_2_APIS
#include <CL/cl.h>

;)
 
TE
HisN

HisN

Kokü-Junkie (m/w)
Nächster kleiner Test von mir.
Far Cry New Dawn.
Ich simuliere wieder eine 6GB Grafikkarte, weil die initiale VRAM-LASt 7GB beim Level-Load beträgt.

FarCryNewDawn_2019_03_10_12_54_08_256.jpgFarCryNewDawn_2019_03_10_12_52_17_517.jpg
 

Downsampler

Software-Overclocker(in)
Keine Ahnung welche Games ihr testet. Ich habe in den letzten Monaten, seit die Vega eingebaut ist, die Grafikkarte in verschieden Games mit dem Radeon Overlay beobachtet, zwecks Temperaturen und Lüfterdrehzahl. Dabei ist mir aufgefallen, daß ich die höchste VRAM-Belegung von 4.3 GB / 8 GB in Fallout 4 mit ca. 200 Mods beobachtet habe. Andere Games mit moderenen Engines wie z. B. PUBG brauchen sogar weniger als 4 GB. Seid ihr sicher, daß da nicht irgendeine Form von Downsampling im Spiel ist oder testet ihr generell nur in 4K Auflösung?
 
TE
HisN

HisN

Kokü-Junkie (m/w)
Schau Dir die Bilder im Eröffnungs-Post an.
Die Games die ich (ich beziehe mich da ausschließlich auf mich) teste, sind die, bei denen ich einen hohen VRAM-Bedarf bemerke. Macht ja keinen Sinn z.b. Diablo3 genauer unter die Lupe zu nehmen, das in UHD gerade mal 1GB VRAM belegt.
Wenn Du keine Games/Settings hast, die mehr als 4,3GB VRAM belegen, dann liegt das nicht an mir, sondern an Deiner Software-Auswahl :-)

Das ist doch genau der Grundgedanke von diesem Thread hier. Was ist nötig und was nicht, und wie kann man das Beobachten oder feststellen.
 

Downsampler

Software-Overclocker(in)
Schau Dir die Bilder im Eröffnungs-Post an.
Die Games die ich (ich beziehe mich da ausschließlich auf mich) teste, sind die, bei denen ich einen hohen VRAM-Bedarf bemerke. Macht ja keinen Sinn z.b. Diablo3 genauer unter die Lupe zu nehmen, das in UHD gerade mal 1GB VRAM belegt.
Wenn Du keine Games/Settings hast, die mehr als 4,3GB VRAM belegen, dann liegt das nicht an mir, sondern an Deiner Software-Auswahl :-)

Das ist doch genau der Grundgedanke von diesem Thread hier. Was ist nötig und was nicht, und wie kann man das Beobachten oder feststellen.

Naja. Ich denke mal die neueren Engines können deine 24 GB vollknallen, weil sie programmiert wurden, soviel VRAM zu erkennen und zu nutzen. Das heißt aber nicht, das man mit 4 oder 6 GB irgendwelche sichtbaren Nachteile hat. 24 GB können etwas schneller sein von den FPS weil die Texturen im VRAM schneller hin und her geschoben werden können, weil diese schon im VRAM geladen sind und nicht gestreamt werden müssen. Das heißt aber noch Lange nicht, das das Spiel zwingend mehr als 2, 4, 6 GB benötigt.
 
TE
HisN

HisN

Kokü-Junkie (m/w)
Wobei "benötigt" nur eine Frage Deiner Definition ist. (Und da scheinbar jeder seine ganz ureigene von hat, die ich ihm auch nicht ausreden möchte).
Also ich persönlich hasse Engines bei denen, wenn ich mich umdrehe, immer alle Texturen neu gestreamt werden, und ich erst mal ne Sekunde nur Matsch sehe.
Und das böse daran ist, die gibt es, und sie tun es EGAL wie viel VRAM ich habe.

Hier als Beispiel der Vorspann von "The Evil Within", bei jedem Cam-Wechel streamen alle Texturen neu ins Bild.
Ist zwar nur kurz, aber mich stört das ungemein.
So als Beispiel warum ich Streaming nicht unbedingt für der Weißheit letzten Schluss halte.

Recommented content - Youtube An dieser Stelle findest du externe Inhalte von Youtube. Zum Schutz deiner persönlichen Daten werden externe Einbindungen erst angezeigt, wenn du dies durch Klick auf "Alle externen Inhalte laden" bestätigst: Ich bin damit einverstanden, dass mir externe Inhalte angezeigt werden. Damit werden personenbezogene Daten an Drittplattformen übermittelt. For more information go to the privacy policy.
 
Zuletzt bearbeitet:

Rallyesport

Software-Overclocker(in)
Also ich spiele nun seit ein paar Tagen wieder Ark und ich sehe dauerhaft ne VRam Auslastung von an die 10-11GB und die Ram Auslastung geht teilweise auch auf 18-19GB hoch...
 

gaussmath

Lötkolbengott/-göttin
Kann das hier bitte mal jemand mit einer AMD Karte testen? Ich habe hart getrickst...
 

Anhänge

  • AMD_VRAM_Allocator_ByPackets.zip
    83,7 KB · Aufrufe: 59

Downsampler

Software-Overclocker(in)
Wobei "benötigt" nur eine Frage Deiner Definition ist. (Und da scheinbar jeder seine ganz ureigene von hat, die ich ihm auch nicht ausreden möchte).
Also ich persönlich hasse Engines bei denen, wenn ich mich umdrehe, immer alle Texturen neu gestreamt werden, und ich erst mal ne Sekunde nur Matsch sehe.
Und das böse daran ist, die gibt es, und sie tun es EGAL wie viel VRAM ich habe.

Hier als Beispiel der Vorspann von "The Evil Within", bei jedem Cam-Wechel streamen alle Texturen neu ins Bild.
Ist zwar nur kurz, aber mich stört das ungemein.
So als Beispiel warum ich Streaming nicht unbedingt für der Weißheit letzten Schluss halte.

...

Wozu gibt es minimum und empfohlene Systemanvoraussetzungen bei Spielen?

In Borderlands ist das mit dem Texturstreaming sehr auffällig. Als ich noch die 5870 im Rechner hatte, dachte ich es liegt an "nur" 2 GB VRAM. Jetzt mit der Vega ist es aber genau das Gleiche. Es geht gefühlt zwar eine winzige Spur schneller mit dem Texturstreaming, aber richtig genutzt wird der VRAM nicht. Auslastung liegt bei ca. 1 GB.
 

Downsampler

Software-Overclocker(in)
Kann das hier bitte mal jemand mit einer AMD Karte testen? Ich habe hart getrickst...

Das ist der Output von "AMD_VRAM_Allocator.exe 4000 > output.txt":

Memory size in MB: 4000
Number of packets: 4
Packet size in MB: 1000
Packet size in MB: 1000
Packet size in MB: 1000
Packet size in MB: 1000
Error, could not create queue
 

Downsampler

Software-Overclocker(in)
AMD_VRAM_Allocator.exe 2500 > output.txt

Memory size in MB: 2500
Number of packets: 2
Packet size in MB: 1000
Packet size in MB: 1000
Division remainder MB: 500
Press return to exit...

Klappt irgendwie. Hab Borderlands angeworfen und dann Alt+Tab, dein Programm ausgeführt, Alt+Tab. Im Radeon Overlay wird angezeigt, daß der Speicher benutzt wird. Hat mir aber 2 sec. nach der Anzeige mit Strg+Shift+O den Treiber abgeschossen. :D

Die VRAM-Auslastung ist auf jeden Fall gestiegen von 1 GB auf 3,5 GB.

Kann ich das irgendwo anschauen, ohne ein Spiel zu starten?
 
Zuletzt bearbeitet:
Oben Unten