Angenommen, wir haben das klassische Szenario, in dem wir das maximale Element (nur ganze Zahlen) eines Arrays suchen müssen, nicht aber dessen Position. Welche der folgenden 2 Codebeispiele (die innerhalb einer 'for' Schleife liegen) laufen schneller auf einer CPU und welche auf einer GPU, und warum?Vergleichen von zwei verschiedenen Szenarien auf zwei verschiedenen Architekturen beim Auffinden des max-Elements eines Arrays
if(array[i] > max)
max = array[i];
und
max = 0.5 * (a + b + abs(a-b)); //Where 'a' and 'b' refer to 'max' and 'array[i]'
Darüber hinaus, was in dem zweiten Code-Block stört mich wirklich, ist der 'abs' Funktionsaufruf. Gibt es eine Möglichkeit, den absoluten Wert einer Zahl nur mit einem arithmetischen Ausdruck zu berechnen?
Sie meinen etwas wie 'a * ((a> 0) - (a <0))'? – user3078414
'abs (a-b)' kann leicht 'int' Überlauf sowohl als' a-b' und 'abs()' verursachen. Keine robuste Methode. '0.5 *' kann Präzisionsverlust verursachen. Was ist der Wert der Geschwindigkeit bei diesen funktionalen Problemen gegenüber dem wohldefinierten 'if (array [i]> max)'? – chux
Das ist wirklich gut, aber mit "arithmetischem Ausdruck" meinte ich etwas ohne logische Operatoren. Entschuldigung, wenn ich unklar war. –