Ich verwende cudaMemGetInfo, um den vram zu erhalten, der momentan vom System verwendet wird.cudaMemGetInfo verwendet vram und gibt den falschen Wert zurück.
extern __host__ cudaError_t CUDARTAPI cudaMemGetInfo(size_t *free, size_t *total);
Und ich habe zwei Probleme:
die wichtigsten ist, dass der zurück freie Wert nur richtig, wenn die Grafik Gerät fast keinen Speicher frei für die Zuteilung hat. Ansonsten bleibt es bei etwa 20% Speicherverbrauch, selbst wenn GPU-Z klar angibt, dass etwa 80% verwendet werden. Und wenn ich 95% Speicher erreiche, verwendet cudaMemGetInfo plötzlich einen guten Wert. Beachten Sie, dass der Gesamtspeicher immer korrekt ist.
Das zweite Problem ist, dass, sobald ich die Funktion verwenden, Videospeicher zugeordnet ist. Mindestens 40 MByte, aber bei einigen Grafikgeräten kann er 400 erreichen.
Mein Code:
#include <cuda_runtime.h>
size_t Profiler::GetGraphicDeviceVRamUsage(int _NumGPU)
{
cudaSetDevice(_NumGPU);
size_t l_free = 0;
size_t l_Total = 0;
cudaError_t error_id = cudaMemGetInfo(&l_free, &l_Total);
return (l_Total - l_free);
}
Ich habe versucht, mit 5 verschiedenen nvidia Grafikgeräten. Die Probleme sind immer gleich.
Irgendeine Idee?
ist das 'cudaSetDevice (0)' ein Fehler? Hast du nur 1 GPU in jedem System? – talonmies
Ich habe nur eine GPU auf meinem aktuellen System. Aber du hast recht, ich habe mein Codebeispiel zu sehr vereinfacht. Habe gerade die Frage aktualisiert. – Mat
Ist die GPU auch für das Grafikdisplay zuständig? –