Ich habe ein kleines komisches Problem hier, dass ich eine Menge Schwierigkeiten habe, um die Antwort herauszufinden.Wie erkennt man die Standard-GPU zur Laufzeit?
Ich habe eine C++ - 3D-Engine, und ich verwende OpenCL für Optimierungen und OpenGL-Interoperabilität.
In meiner Maschine habe ich zwei GPUs installiert, eine GTX 960 und eine AMD R9 280X.
Alles funktioniert gut, einschließlich der Erkennung der GPUs und CPU und die Grafik-Interoperabilität läuft sehr schnell wie erwartet.
Aber immer in einer Maschine haben wir eine Standard-GPU auf dem System (Dies sind auf Windows abhängig von der Reihenfolge, installieren wir die Treiber).
Also, wenn ich Sein Ausgangs lesen Sie die alle Geräte und die GPU's erkennen, wenn ich die Interoperabilität Kontexte i eine seltsame Situation zu schaffen versuchen haben:
Wenn ich AMD als Standard GPU haben: im Fall von NVIDIA-Geräten gibt die OpenCL-Datei einen Fehler zurück, der besagt, dass der CL-Kontext nicht erstellt werden kann (Becouse ist nicht die Standard-GPU). Wenn ich den OpenGL-Kontext für die AMD-GPU erstelle, wird der Kontext korrekt erstellt.
Wenn ich NVIDIA als Standard-GPU: im Falle von NVIDIA-Geräten den Kontext richtig erstellt haben, aber wenn ich versuche, erstellen Sie den AMD-Kontext, stattdessen geben Sie mir einen Fehler, das System Crash!
Also, mein Hauptproblem ist, wie die Standard-GPU während Runtime zu Interoperabilitätskontexten zu erkennen, nur für die Standard-GPU, da die AMD Absturz statt Rückgabe Fehler ... (Becouse mit den Fehlern kann ich ein Flag einrichten die Standard-GPU basierend auf diesem Ergebnis ...).
Jeder hat eine Idee, wie kann ich die Standard-GPU zur Laufzeit mit C++ erkennen?
Mit freundlichen Grüßen.
Ja, ich kodiere meine eigene Optimierungskomponente von Grund auf, und ich mische viele Kontexte, da ich mehr als ein Gerät habe. –