wake-up-neo.com

Unterstützt CUDA Rekursion?

Unterstützt CUDA Rekursion?

53
JuanPablo

Auf NVIDIA-Hardware, die die Berechnungsfunktionen 2.0 und CUDA 3.1 unterstützt, gilt Folgendes:

Neue Sprachfunktionen für CUDA C/ C++ include:

Unterstützung für die Funktion Zeiger und Rekursion machen es einfacher viele existierende Algorithmen auf .__ portieren. Fermi-GPUs

http://developer.nvidia.com/object/cuda_3_1_downloads.html

Funktionszeiger:http://developer.download.nvidia.com/compute/cuda/sdk/website/CUDA_Advanced_Topics.html#FunctionPointers

Recursion: Ich kann kein Codebeispiel auf der NVIDIA-Website finden, aber im forum jemand postet folgendes:

__device__ int fact(int f)
{
  if (f == 0)
    return 1;
  else
    return f * fact(f - 1);
}
46
Stringer

Ja, siehe NVIDIA CUDA-Programmierhandbuch :

device -Funktionen unterstützen nur die Rekursion in Gerätecode, der für Geräte kompiliert wurde der Rechenfähigkeit 2.0.

Sie benötigen eine Fermi-Karte, um sie verwenden zu können.

12

Auch wenn die Rekursion nur für bestimmte Chips unterstützt wird, können Sie manchmal mit "emulierter" Rekursion davonkommen: Sehen Sie, wie ich für meinen CUDA-Raytracer die Rekursion zum Kompilieren verwendet habe .

9
ttsiodras

In CUDA 4.1 Release unterstützt CUDA die Rekursion nur für die Funktion __device__, nicht jedoch für die Funktion __global__.

7
username_4567

Nur nach 2.0 Rechenfähigkeit auf kompatiblen Geräten

5
Arturo Garcia

Sicher, aber das erfordert die Kepler-Architektur. Sehen Sie sich ihr aktuelles Beispiel zur klassischen schnellen Sortierung an.

http://blogs.nvidia.com/2012/09/how-tesla-k20-speeds-up-quicksort-a-familiar-comp-sci-code/

Soweit ich weiß, unterstützt nur der neueste Kepler GK110 dynamische Parallelität, die diese Art von rekursivem Aufruf und das Auftauchen neuer Threads innerhalb des Kernels ermöglicht. Vor dem Kepler GK110 war das nicht möglich. Beachten Sie, dass dies nicht von allen Kepler-Architekturen unterstützt wird, nur von GK110.

Wenn Sie eine Rekursion benötigen, benötigen Sie wahrscheinlich die Tesla K20 ..__ Ich bin nicht sicher, ob Fermi dies unterstützt, lesen Sie nie davon. :\ Aber Kepler macht das sicher. =)

3
Hong Zhou

CUDA 3.1 unterstützt Rekursion

2
Jan C

Jeder rekursive Algorithmus kann mit einem Stack und einer Schleife implementiert werden. Es ist viel mehr ein Schmerz, aber wenn Sie wirklich Rekursion brauchen, kann dies funktionieren.

2
dicroce

Wenn Ihr Algorithmus eine Vielzahl von Rekursionen erfordert, dann unterstützt oder nicht, ist er nicht für GPUs konzipiert. Entweder müssen Sie Ihre Algorithmen neu entwerfen oder eine bessere CPU erhalten. In beiden Fällen wird es besser sein (ich wette, in vielen Fällen ist es besser, wenn die Einstellungen besser sind) GPUs.

1
user0002128

Ja, es wird von der aktuellen Version unterstützt. Trotz der Tatsache, dass es möglich ist, rekursive Funktionen auszuführen, müssen Sie bedenken, dass die Speicherzuordnung aus dem Ausführungsstack nicht vorhergesagt werden kann (die rekursive Funktion muss ausgeführt werden, um die tatsächliche Tiefe der Rekursion zu ermitteln), so Ihr Stapel Dies kann dazu führen, dass Sie für Ihre Zwecke nicht ausreichen, und es kann eine manuelle Erhöhung der Standardstapelgröße erforderlich sein

0
Mr.PotatusVII

Ja, es wird keine Rekursion unterstützt. Es ist jedoch keine gute Idee, eine Rekursion auf der GPU durchzuführen. Weil jeder Thread es tun wird.

0
palebluedot