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% 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%