2013-04-22 46 views
2

我想要一個.cuh文件,我可以在其中聲明內核函數和主機函數。這些功能的實現將在.cu文件中進行。該實施將包括使用Thrust庫。CUDA和Thrust library:將.cuh .cu和.cpp文件與-std = C++一起使用時遇到問題0x

main.cpp文件中,我想使用.cu文件中的實現。所以我們可以說,我們有這樣的事情:

myFunctions.cuh

#include <thrust/sort.h> 
#include <thrust/device_vector.h> 
#include <thrust/remove.h> 
#include <thrust/host_vector.h> 
#include <iostream> 

__host__ void show(); 

myFunctions.cu

#include "myFunctions.cuh" 

__host__ void show(){ 
    std::cout<<"test"<<std::endl; 
} 

main.cpp

#include "myFunctions.cuh" 

int main(void){ 

    show(); 

    return 0; 
} 

如果我做這個編譯

nvcc myFunctions.cu main.cpp -O3 

然後鍵入./a.out

test文本將被打印運行可執行文件。

但是,如果我決定通過使用下面的命令包括-std=c++0x

nvcc myFunctions.cu main.cpp -O3 --compiler-options "-std=c++0x" 

我得到了很多錯誤,其中一些如下:

/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h(159): error: identifier "nullptr" is undefined 

/usr/include/c++/4.6/x86_64-linux-gnu/./bits/c++config.h(159): error: expected a ";" 

/usr/include/c++/4.6/bits/exception_ptr.h(93): error: incomplete type is not allowed 

/usr/include/c++/4.6/bits/exception_ptr.h(93): error: expected a ";" 

/usr/include/c++/4.6/bits/exception_ptr.h(112): error: expected a ")" 

/usr/include/c++/4.6/bits/exception_ptr.h(114): error: expected a ">" 

/usr/include/c++/4.6/bits/exception_ptr.h(114): error: identifier "__o" is undefined 

做這些錯誤意味着什麼,我該如何避免它們?

預先感謝您

+1

您可能對[此SO問題]感興趣(http://stackoverflow.com/questions/12073828/c-version-supported-by-cuda-5-0),它是答案。可能最簡單的解決方案是限制你使用的實際需要C++ 0x功能的東西到.cpp文件 – 2013-04-22 14:55:09

+0

我認爲C++ 11比C++ 0x更新,這就是爲什麼它不被支持。但是,我仍然想在.cpp文件中使用C++ 0x,這可能嗎?謝謝。如果你想要,你可以做出答案,以便我可以接受。 – ksm001 2013-04-22 15:24:01

回答

5

如果你看一下this specific answer,你會看到用戶正在編制一個空的虛擬應用程序與您正在使用,並得到了一些確切的同樣的錯誤的同一交換機。如果限制開關來編譯.cpp文件的使用情況,你可能會有更好的效果:

myFunctions.h:

void show(); 

myFunctions.cu:

#include <thrust/sort.h> 
#include <thrust/device_vector.h> 
#include <thrust/remove.h> 
#include <thrust/host_vector.h> 
#include <thrust/sequence.h> 
#include <iostream> 

#include "myFunctions.h" 

void show(){ 
    thrust::device_vector<int> my_ints(10); 
    thrust::sequence(my_ints.begin(), my_ints.end()); 
    std::cout<<"my_ints[9] = "<< my_ints[9] << std::endl; 
} 

爲主。 CPP:

#include "myFunctions.h" 

int main(void){ 

    show(); 

    return 0; 
} 

編譯:

g++ -c -std=c++0x main.cpp 
nvcc -arch=sm_20 -c myFunctions.cu 
g++ -L/usr/local/cuda/lib64 -lcudart -o test main.o myFunctions.o 
+0

非常感謝你! – ksm001 2013-04-22 18:25:17

相關問題