我想要一個.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
做這些錯誤意味着什麼,我該如何避免它們?
預先感謝您
您可能對[此SO問題]感興趣(http://stackoverflow.com/questions/12073828/c-version-supported-by-cuda-5-0),它是答案。可能最簡單的解決方案是限制你使用的實際需要C++ 0x功能的東西到.cpp文件 – 2013-04-22 14:55:09
我認爲C++ 11比C++ 0x更新,這就是爲什麼它不被支持。但是,我仍然想在.cpp文件中使用C++ 0x,這可能嗎?謝謝。如果你想要,你可以做出答案,以便我可以接受。 – ksm001 2013-04-22 15:24:01