Problem beim aufrufen der Vorlage CUDA-kernel
Ich habe versucht, erstellen Sie eine template-Kernel, aber ich bin schon mit einigen Schwierigkeiten, ruft Sie in mein Programm. Ich habe eine Matrix<T>
template-Klasse und einige Methoden, die darin definiert
Matrix.h:
template <typename T> class Matrix {
...
void sum(Matrix<T>& m1, Matrix<T>& m2, Matrix<T>& sum);
...
}
#include "Matrix.cu"
Matrix.cu:
#include "MatrixKernel.h"
template<typename T> void Matrix<T>::sum(const Matrix<T>& m, Matrix<T>& sum) {
...
sumKernel<T><<<dimGrid, dimBlock>>>(Matrix<T> m1, Matrix<T> m2, Matrix<T> sum)
...
}
MatrixKernel.h:
template<typename T> __global__ void sumKernel(const Matrix<T> m1, const Matrix<T> m2, Matrix<T> sum) {
...
}
Das problem ist, dass wenn ich Anrufe, sumKernel aus dem inneren der Summe, der compiler gibt mir die folgende Fehlermeldung:
error C2059: syntax error : '<'
Weiß jemand was Los ist??? Der code kompiliert fein, kurz bevor ich die sumKernel nennen.
Dank.
- Ich wusste nicht, Sie könnte verwenden CUDA und C++ (!). Trivial Vorschlag: versuchen Sie, einen Raum zwischen den
<T>
und die<<<
im Fall mit Ihnen zusammen die Ursache analysieren Probleme. - Hat der compiler dir sagen, welche Zeile der Fehler ist? Es gibt eine Menge von <s in der cuda-template-code, so würde es nützlich sein, um einzugrenzen, welche Linie es ist.
- ja, Sie können. Sie können sogar übergeben von Objekten als Parameter von Kernel (vorausgesetzt, man kopiert die Daten von Interesse in den Speicher des Geräts). Ich werde versuchen, Ihren Vorschlag zu. @Bomadeno: Der Fehler ist auf der Linie und führt den kernel-Aufruf.
- Vielen Dank - das klingt ja wie bin ich nur out-of-date. Wikipedia sagt, die C++ - Unterstützung ist neu in CUDA 2.x.
Du musst angemeldet sein, um einen Kommentar abzugeben.
So, es scheint, Sie haben eine seltsame
#include
, was zu code immer zusammengestellt von den falschen compiler. Eine Unterscheidung zwischen gpu Kopf-und cpu-Header mithilfe .cu.h für cuda-Header. Stellen Sie sicher, dass nur NVCC kompiliert.cu
und.cu.h
- Dateien. Cuda-Dateien sollten niemals aufgenommen werden in der cpp-Dateien. Die kernel-und kernel-Aufruf sollte in einem.cu
oder.cu.h
- Dateien, und diese Dateien sollten nicht enthalten sein, überall in cpps.Weil Ihre
.cu
wird in einem header, die kompiliert wird, die von der host-compiler, der host-compiler landet zu schlagen, die token<<<
- die es nicht erkennen. Es wahrscheinlich nicht verstehen, die token<<
so verbraucht, dass, abgesehen von einem unerwarteten<
.Hier ist ein alternativer Weg, Dinge zu tun, die sollte funktionieren (nicht ausprobiert, aber es ist ähnlich wie code, den wir verwenden)
(beachten Sie, dass dies funktionieren könnte aber es könnte auch nicht der richtige Weg um das problem zu lösen. Mein Chef mag es nicht, wie eine Lösung und würde es bevorzugen, fügen Sie eine Implementierung, die pro-Variante)
Das zugrunde liegende problem scheint zu sein, die mangelnde Unterscheidung zwischen host-und device-code. Ich verlasse das detail in meiner Lösung - Dinge wie das kopieren von Ergebnissen zu und von dem Gerät, Summe, Umsetzung, etc.
Das problem, das ich zu lösen versuche ist, da ein Konstrukt, wie können Sie eine Vorlage es sich für den Einsatz sowohl auf dem host und dem Gerät?
Werde ich die Vorlage
Matrix.h
auf den Typ und die Implementierung detail.Dem host-Implementierung
HostMatrixSum.h
wird Dinge tun, die auf der cpu:Während
GpuMatrixSum.cu.h
laden der matrix, machen die Summe und wieder die Ergebnisse:Dann, wenn wir kommen, um die Matrix aus dem host-code, der Vorlage auf dem host-Summe Umsetzung zu-und nie brauchen, um zu sehen, cuda Besonderheiten:
Und wenn wir arbeiten auf der gpu können wir die gpu-beschleunigte Implementierung der Summe:
Hoffen, dass für Sie arbeitet!
Ich hatte das gleiche problem: error C2059: Syntaxfehler : '<'
Ersten, fand ich ein gutes set-up/tutorial hier (für visual express 2010 und cuda 4.0):
http://www.stevenmarkford.com/installing-nvidia-cuda-with-visual-studio-2010/
und zu lösen, die syntax-Fehler problem, das gelöst:
Wie starte ich eine CUDA-app in Visual Studio 2010?
Insbesondere beim ändern der Eigenschaft der *.cu-Datei, so dass: - Typ "CUDA C/C++"
Schließlich für mich gearbeitet.