Ich arbeite gerade an einem OpenCL-Projekt und frage mich, warum es keine Rekursion unterstützt. Geht es um Parallelität?Warum unterstützt OpenCL keine Rekursion?
3
A
Antwort
5
Es hängt mit der Zielhardware zusammen, denke ich. Zur Unterstützung der Rekursion sind mehrere Hardwarefunktionen erforderlich, die bestimmte Klassen von OpenCL-Geräten (z. B. GPUs) nicht haben. Ohne sie ist das Pflegen eines Aufruf-Stacks und das Ausführen indirekter Codeverzweigungen nicht praktikabel. NVIDIA unterstützt keine Rekursion auf all ihrer CUDA-fähigen Hardware aus dem gleichen Grund.
3
Es ist nicht OpenCL, seine GPU-Hardware. AMD hatte eine zukünftige Befehlssatzarchitektur entworfen, die die Rekursion unterstützen wird. GPUs haben eine große Anzahl von Registern (bis zu 32 K). So, seien Sie vorsichtig, wonach Sie fragen und bekommen sollen. Push/Pop von 32K-Registern für einen rekursiven Aufruf ist nicht schnell.
Talonmies: Rekursion wird für Gerätefunktionen auf Compute-fähigen 2.x-Geräten unterstützt. –
@ashwin: Ich bin mir dessen bewusst, weshalb ich sagte: "NVIDIA unterstützt keine Rekursion auf * all * ihrer CUDA-fähigen Hardware". Sie unterstützen es auf einigen, dh Fermi und Kepler ... – talonmies