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.
InformationsquelleAutor Renan | 2011-06-14
Schreibe einen Kommentar