Max Anzahl der threads, die eingeleitet werden können, in einem einzigen CUDA-kernel
Ich bin verwirrt über die maximale Anzahl der threads an, die gestartet werden können in eine Fermi-GPU.
Meiner GTX 570 Gerät Abfrage-sagt der folgende.
Maximum number of threads per block: 1024
Maximum sizes of each dimension of a block: 1024 x 1024 x 64
Maximum sizes of each dimension of a grid: 65535 x 65535 x 65535
Aus meinem Verständnis, ich verstehe die obige Aussage wie:
Für einen CUDA-kernel können wir starten bei den meisten 65536 Blöcke. Jedes gestartete block kann bis zu enthalten
1024 threads. Also im Prinzip, ich kann es starten bis zu 65536*1024 (=67108864) threads.
Ist das richtig? Was ist, wenn mein thread verwendet eine Menge von Registern? Werden wir noch in der Lage zu erreichen das theoretische maximum von der Anzahl der threads?
Nach dem schreiben und dem starten der CUDA-kernel, wie weiß ich, dass die Anzahl der threads und Blöcke, die habe ich ins Leben gerufen haben tatsächlich instanziiert wurde. Ich meine, ich möchte nicht, dass die GPU zu berechnen, einige junk-oder Verhalten sich sonderbar, wenn ich durch Zufall instanziiert mehr threads als möglich für ein bestimmten kernel.
- Dieses kann dir helfen: stackoverflow.com/questions/2392250/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nein das ist nicht richtig. Starten Sie ein raster von bis zu 65535 x 65535 x 65535 Blöcke, und jeder block hat einen maximal 1024 threads pro block, obwohl die pro-thread-Ressource Einschränkung kann beschränken die Gesamtzahl der threads pro block weniger als dieses maximum.
Nein, Sie werden nicht in der Lage, erreichen Sie die maximale threads pro block in diesem Fall. Jede neue Version des NVIDIA-CUDA-toolkit umfasst eine Belegung Taschenrechner Tabellenkalkulation, die Sie verwenden können, um den Effekt der register Druck auf die Beschränkung der Blockgröße.
Wenn Sie eine illegale Hinrichtung Konfiguration (also falsche Blockgröße oder grid Größe) der kernel nicht gestartet und die Laufzeit ein Problem
cudaErrorInvalidConfiguration
Fehlermeldung. Sie können die standard -cudaPeekAtLastError()
undcudaGetLastError()
überprüfen des status von jedem kernel starten.