Ich benutze CUDA Toolkit 8 mit Visual Studio Community 2015. Wenn ich versuche, einfache Vektor-Zugabe von NVidia PDF-Handbuch (minus Fehlerprüfung, für die ich nicht die * .hs), kommt es immer zurück als undefinierte Werte, was bedeutet, dass das Ausgabe-Array nie gefüllt wurde. Wenn ich es mit Nullen vorfülle, ist das alles, was ich am Ende bekomme.CUDA Kernel gibt nichts zurück
Andere hatten dieses Problem und einige Leute sagen, dass es durch Kompilieren für die falsche Rechenleistung verursacht wurde. Allerdings verwende ich eine NVidia GTX 750 Ti, die Compute Capability 5 sein soll. Ich habe versucht, Compute Capability 2.0 (das Minimum für mein SDK) und 5.0 zu kompilieren.
Ich kann auch keine der vorkompilierten Beispiele funktionieren, wie vectoradd.exe, die besagt, "Fehler beim Zuweisen von Gerätevektor A (Fehlercode Initialisierungsfehler)!" Und oceanfft.exe sagt: "Fehler beim Suchen von GLSL-Vertex- und Fragment-Shadern!" Das macht keinen Sinn, da GLSL und Fragment Shading sehr grundlegende Funktionen sind.
Meine Treiberversion ist 361.43 und andere Anwendungen wie Blender Cycles im CUDA-Modus und Stellarium arbeiten perfekt. Hier
ist der Code, sollte Arbeit:
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include <stdio.h>
#include <iostream>
#include <algorithm>
#define N 10
__global__ void add(int *a, int *b, int *c) {
int tid = blockIdx.x; // handle the data at this index
if (tid < N)
c[tid] = a[tid] + b[tid];
}
int main(void) {
int a[N], b[N], c[N];
int *dev_a, *dev_b, *dev_c;
// allocate the memory on the GPU
cudaMalloc((void**)&dev_a, N * sizeof(int));
cudaMalloc((void**)&dev_b, N * sizeof(int));
cudaMalloc((void**)&dev_c, N * sizeof(int));
// fill the arrays 'a' and 'b' on the CPU
for (int i = 0; i<N; i++) {
a[i] = -i;
b[i] = i * i;
}
// copy the arrays 'a' and 'b' to the GPU
cudaMemcpy(dev_a, a, N * sizeof(int),cudaMemcpyHostToDevice);
cudaMemcpy(dev_b, b, N * sizeof(int),cudaMemcpyHostToDevice);
add << <N, 1 >> >(dev_a, dev_b, dev_c);
// copy the array 'c' back from the GPU to the CPU
cudaMemcpy(c, dev_c, N * sizeof(int),cudaMemcpyDeviceToHost);
// display the results
for (int i = 0; i<N; i++) {
printf("%d + %d = %d\n", a[i], b[i], c[i]);
}
// free the memory allocated on the GPU
cudaFree(dev_a);
cudaFree(dev_b);
cudaFree(dev_c);
return 0;
}
Ich versuche CUDA zu entwickeln apps so wäre jede Hilfe sehr geschätzt.
Kann bestätigen Code arbeiten. – Mikhail
Ihre CUDA-Installation scheint unterbrochen zu sein. 361.43 ist nicht der Treiber, der mit dem CUDA 8-Windows-Installationsprogramm ausgeliefert wird, und Sie sollten diesen Treiber wahrscheinlich verwenden, bis Sie ein Betriebssystem erhalten. Mein Vorschlag wäre, [das neueste Installationsprogramm herunterzuladen] (https://developer.nvidia.com/cuda-downloads), und CUDA 8 neu zu installieren, wobei die Anweisungen im [Windows CUDA install guide] (http: // docs .nvidia.com/cuda/cuda-installationsanleitung-microsoft-windows/index.html # abstract). –
Okay, ich lade jetzt das neueste CUDA 8.0.61 Toolkit herunter und probiere es aus und wähle die Treiberinstallation. Ich hatte bereits einen Bildschirmtreiber, und ich muss den Treiber des Toolkits übersprungen haben, da ich keine Notwendigkeit sah, über meinen aktuellen Treiber zu installieren. –