Ich benutze Cudafy, um einige Berechnungen auf einer NVIDIA-GPU zu machen. (Quadro K1100M Fähigkeit 3.0, wenn es darauf ankommt)Warum ist z immer Null im CUDA-Kernel
Meine Frage ist, wenn ich die folgende
cudaGpu.Launch(new dim3(44,8,num), new dim(8, 8)).MyKernel...
verwenden, warum mein z Indizes aus der GThread Instanz immer Null, wenn ich diese verwende in meinem Kernel?
int z = thread.blockIdx.z * thread.blockDim.z + thread.threadIdx.z;
Außerdem, wenn ich muss etwas tun, wie
cudaGpu.Launch(new dim3(44,8,num), new dim(8, 8, num)).MyKernel...
z verschiedene Indizes nicht geben, wie es sollte, aber num kann nicht sehr groß sein wegen der Beschränkungen Anzahl der Threads pro Block. Irgendeine Belastung wie man das umgeht?
bearbeiten
Ein anderer Weg, um es zu Ausdruck. Kann ich thread.z in meinem Kernel (für etwas Nützliches) verwenden, wenn die Blockgröße nur 2D ist?
0 könnte der Standardwert sein? Sie sollten Ihrem "num" immer einen Wert von mindestens 1 geben. Um die Grenze der Threads pro Block zu bewältigen, erhöhen Sie einfach die Anzahl der Blöcke (also mehr Blöcke mit weniger Threads). – Taro
num war nur um anzuzeigen, es könnte alles sein, aber ich bin positiv, es ist> 0. – smok
Ich weiß nicht viel über cudafy aber es könnte sein, dass die Zuordnung zwischen dot net und cuda, entworfen vor cuda GridDim.z Dimension erlaubt , wurde nicht aktualisiert und berücksichtigt nicht die z-Dimension. Dies erfordert Überprüfung jedoch –