Ich bin mir bewusst, dass die meisten modernen GPUs, obwohl sie für Gleitkomma ausgelegt sind, heutzutage in Bezug auf die Ganzzahlleistung mehr oder weniger gleichwertig sind, mit ein paar Einschränkungen wie dem Fehlen eines verschmolzenen Multiplikationszusatzes. Ich bin mir jedoch nicht sicher, wie dies für Schichtoperationen gilt. Ich mache Marching Cubes auf der GPU, schreibe zunächst eine 32-Bit-Packposition für jeden Oberflächenwürfel und entpacke diese dann in einem späteren Durchgang zu den tatsächlichen Eckpunkten in diesem Cube wie folgt:
ivec3 unpackedPos = ivec3( packedPos >> 20 & 0x3FF,
packedPos >> 10 & 0x3FF,
packedPos & 0x3FF);
Mir ist gerade eingefallen, ob Shader-Einheiten heutzutage Barrel-Shifter enthalten. Mache ich hier 2 Schichten oder 30?
EDIT >> Ich bin ein Idiot ... Danke für die Antworten, Leute, nützlich zu wissen, aber ich habe das alles falsch gemacht. Ich sollte nur das RGB10_A2UI-Texturformat verwenden und dann mit einer einzelnen Anweisung zum Laden / Speichern von Bildern packen / entpacken, anstatt selbst mit Bitshifts herumzuspielen.
RE_EDIT >> Oder nicht ... Diese Methode funktioniert anscheinend bei roten Kästchen, aber nicht bei grünen, also zurück zu Bitverschiebungen.
quelle
Antworten:
Ja (mit 50% des FMA 32b-Durchsatzes auf nVIDIA Maxwell).
Siehe https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#arithmetic-instructions
quelle