CUDA externen Klasse "Verknüpfung" und " unresolved extern-Funktion im ptxas Datei

Arbeite ich mit CUDA und ich erstellt haben, ein int2_ Klasse befassen sich mit komplexen zahlen.

Klasse Erklärungen in der ComplexTypes.h - Datei wie folgt:

namespace LibraryNameSpace
{
    class int2_ {

        public:
            int x;
            int y;

            //Constructors
            __host__ __device__ int2_(const int,const int);
            __host__ __device__ int2_();
            //etc.

            //Equalities with other types      
            __host__ __device__ const int2_& operator=(const int);
            __host__ __device__ const int2_& operator=(const float);
            //etc.

    };
}

Klasse-Implementierungen in der ComplexTypes.cpp - Datei wie folgt:

#include "ComplexTypes.h"

__host__ __device__         LibraryNameSpace::int2_::int2_(const int x_,const int y_)           { x=x_; y=y_;}
__host__ __device__         LibraryNameSpace::int2_::int2_() {}
//etc.

__host__ __device__ const   LibraryNameSpace::int2_& LibraryNameSpace::int2_::operator=(const int a)                        { x = a;            y = 0.;             return *this; }
__host__ __device__ const   LibraryNameSpace::int2_& LibraryNameSpace::int2_::operator=(const float a)                      { x = (int)a;       y = 0.;             return *this; }
//etc.

Alles gut funktioniert. In der main (die ComplexTypes.h) ich konnte viel mit int2_ zahlen.

In der CudaMatrix.cu - Datei, ich bin jetzt auch ComplexTypes.h und zu definieren und richtig zu instanziieren der __global__ Funktion:

template <class T1, class T2>
__global__ void evaluation_matrix(T1* data_, T2* ob, int NumElements)
{
    const int i = blockDim.x * blockIdx.x + threadIdx.x;
    if(i < NumElements) data_[i] = ob[i];
}

template __global__ void evaluation_matrix(LibraryNameSpace::int2_*,int*,int);

Die situation der CudaMatrix.cu - Datei zu sein scheint symmetrisch zu der main Funktion. Dennoch, der compiler beschwert sich:

Error   19  error : Unresolved extern function '_ZN16LibraryNameSpace5int2_aSEi'    C:\Users\Documents\Project\Test\Testing_Files\ptxas simpleTest

Bitte beachten Sie, dass:

  1. Bevor die Implementierung in separaten Dateien, alles war richtig funktioniert, wenn beide Deklarationen und Implementierungen in main Datei.
  2. Die problematische Anweisung ist data_[i] = ob[i].

Jemand hat eine Idee was Los ist?

  • vermutlich haben Sie sich nicht ComplexTypes.cpp - Datei, sondern eine ComplexTypes.cu - Datei, die Sie auf der Durchreise sind nvcc, da sonst die __host__ __device__ sollte nicht kompilieren...
  • Ich habe eine Lösung gefunden für mein Problem. Ich habe es geschrieben als Antwort in der Hoffnung, dass es nützlich sein könnte, um andere Benutzer.
InformationsquelleAutor JackOLantern | 2013-06-19
Schreibe einen Kommentar