Effizienz von CUDA-Vektortypen (float2, float3, float4)

8
___ tag123cuda ___ CUDA ist eine parallele Rechenplattform und ein Programmiermodell für Nvidia GPUs (Graphics Processing Units). CUDA bietet eine Schnittstelle zu Nvidia-GPUs über eine Vielzahl von Programmiersprachen, Bibliotheken und APIs. ___ answer26702643 ___

Ich erweitere njuffas Kommentar in ein funktionierendes Beispiel. In diesem Beispiel füge ich einfach zwei Arrays auf drei verschiedene Arten hinzu: Laden der Daten als integrate_functor , particles_kernel.cu oder make_float4(pos, age) .

Dies sind die Timings auf einem GT540M und auf einer Kepler K20c-Karte:

%Vor%

Wie man sieht, ist das Laden der Daten als make_float4 der schnellste Ansatz.

Im Folgenden sind die disassemblierten Codes für die drei Kernel (Kompilierung für Rechenleistung vector_functions.h ).

add_float

%Vor%

add_float2

%Vor%

add_float4

%Vor%

Wie zu sehen ist und wie von njuffa erwähnt, werden verschiedene Ladeanweisungen für die drei Fälle verwendet: float3 , float4 bzw. make_float4 .

Schließlich der Code:

%Vor%     
___ tag123thrust ___ Thrust ist eine Template-Bibliothek paralleler Algorithmen mit einer Schnittstelle, die der C ++ Standard Template Library (STL) für NVIDIA CUDA ähnelt. ___ tag123c ___ C ist eine universelle Computerprogrammiersprache, die für Betriebssysteme, Bibliotheken, Spiele und andere Hochleistungsanwendungen verwendet wird. Dieses Tag sollte bei allgemeinen Fragen zur C-Sprache verwendet werden, wie in der Norm ISO 9899: 2011 definiert. Fügen Sie ggf. ein versionsspezifisches Tag wie c99 oder c90 für Fragen zu älteren Sprachstandards hinzu. C unterscheidet sich von C ++ und es sollte nicht mit dem C ++ - Tag kombiniert werden, wenn ein rationaler Grund fehlt. ___ qstnhdr ___ Effizienz von CUDA-Vektortypen (float2, float3, float4) ___
ilciavo 31.10.2014, 14:16
quelle

1 Antwort

30

Ich erweitere njuffas Kommentar in ein funktionierendes Beispiel. In diesem Beispiel füge ich einfach zwei Arrays auf drei verschiedene Arten hinzu: Laden der Daten als float , float2 oder float4 .

Dies sind die Timings auf einem GT540M und auf einer Kepler K20c-Karte:

%Vor%

Wie man sieht, ist das Laden der Daten als float4 der schnellste Ansatz.

Im Folgenden sind die disassemblierten Codes für die drei Kernel (Kompilierung für Rechenleistung 2.1 ).

add_float

%Vor%

add_float2

%Vor%

add_float4

%Vor%

Wie zu sehen ist und wie von njuffa erwähnt, werden verschiedene Ladeanweisungen für die drei Fälle verwendet: LD , LD.64 bzw. LD.128 .

Schließlich der Code:

%Vor%     
JackOLantern 02.11.2014, 18:12
quelle

Tags und Links