Ich führe einen Filter auf ein Bild und ich führe einen vertikalen Durchlauf durch, gefolgt von einem horizontalen Durchlauf. Die Funktion für diese Aufgabe ist für beide Durchgänge gleich, nur die Argumentwerte ändern sich. Ich rufe die Funktion in einer Schleife auf. Zum Vektorisieren der Operationen in dieser Funktion muß ich getrennte Funktionsaufrufe für die zwei Durchläufe schreiben. Die Schleife ist jetzt getrennt für horizontale und vertikale Durchgänge. Eine "if-Bedingung" wird nun aufgrund dieser Änderung hinzugefügt, und ich habe festgestellt, dass der Kernel zwar mehr Zeit benötigt, um ausgeführt zu werden, obwohl die Berechnungen vektorisiert sind. Ich habe den Code mehrmals ausgeführt und die durchschnittliche Zeit mit dem vektorisierten Code ist mehr als der ursprüngliche Code. Ist es wegen der "if-Bedingung" in den Code gesteckt?Beeinflussen "if-Bedingungen" die Leistung der Kernel-Ausführung in OpenCL?
Originalcode
global int* a;
for(int i = 0; i < 4; i++)
{
filter(a + i, b, c);
}
Modified Code
global int* a;
if(offset == 1)
for(int i = 0; i < 4; i++)
{
filter_vertical(a + i, b, c);
}
else
filter_horizontal(a, b, c);
Bitte zeigen Sie uns Ihr Beispielcode-Fragment. Die Art, wie Sie die 'if'-Anweisung verwenden, kann die Antwort ändern. –