Was kostet das Umwandeln einer Variablen in OpenCL in einen anderen Typ?OpenCL: Typkonvertierungs-Overhead
Beispiel: I Punktprodukt von 2 int3
Vektoren nehmen wollen (AFAIK dot()
ist nicht für int3
s überlastet), so dass anstelle von dot()
von mir in unvectorized Art und Weise der Umsetzung, möchte ich mithilfe der den Code vektorisieren nativ dot()
für float3
. Zuerst konvertiere ich die 2 Vektoren in float3
s und dann werfe ich das Ergebnis auf int
.
Welche der beiden Funktionen, foo
und bar
, ist weniger zeitaufwendig (und warum)?
inline int foo(int3 a, int3 b) {
return a.x*b.x + a.y*b.y + a.z*b.z;
}
inline int bar(int3 a, int3 b) {
return (int)dot(convert_float3(a), convert_float3(b));
}
Erste Regel der Optimierung: messen. Zweite Regel der Optimierung: erneut messen. Dies ist vollständig von Hardware und Architektur abhängig. Niemand kann eine definitive Antwort auf Ihre Frage geben. –
@AndreasPapadopoulos Ich stimme zu. Übrigens, wissen Sie etwas über eine genauere Art der Profilerstellung - d. H. Die Ausführungszeit für jeden einzelnen Befehl des Kernels (etwas wie Apples Metal) zu sehen, anstatt nur die Ausführungszeit des * ganzen * Kernels zu sehen? – sarasvati
@AndreasPapadopoulos, um die Idee besser zu veranschaulichen, werfen Sie einen Blick auf [dieses Profiling-Sitzungsbild] (https://developer.apple.com/library/ios/documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/Art/xcode_gpu_overview_program_2x.png) in XCode . Es zeigt den prozentualen Zeitaufwand für jede Codezeile an. – sarasvati