[英]Using CUDA and Armadillo
我在64x VS2010項目中有一個.cu
文件。 該項目配置為提取.mexw64
文件。 貝婁有我運行的例子。 在mex函數內部,我想使用Armadillo線性代數庫的某些函數。 因此,當使用#include "armaMex.hpp"
,編譯器將返回一些錯誤:
我不知道是什么導致這些錯誤。 你能解釋一下嗎?
#include "mex.h"
#include "armaMex.hpp"
void
mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
mexPrintf("hello!\n");
}
PS:CUDA SDK 5.5 64x,VS2010
這是nvcc的已知限制(我認為技術上是cudafe ++)。 nvcc使用文件擴展名來確定應處理給定的源文件以獲取設備代碼還是將其傳遞給CUDA預處理器,然后傳遞給設備編譯器。 看來編譯軌跡無法正確解析Armadillo包含的某些非常復雜的聲明,並且編譯失敗。 眾所周知,Boost,Eigen和QT會發生這種情況。 我猜犰狳在同一條船上。
解決方案是不要在.cu文件中導入Armadillo標頭。 將主機增強代碼放在.cc文件中,將設備代碼和內核啟動放在單獨的.cu文件中,並進行一些精簡包裝,以訪問.cc文件中的內核調用。 您仍然可以將所有源代碼傳遞給nvcc以編譯成單個目標文件,但是將Armadillo導入與設備代碼分開可以避免前端阻塞導致Armadillo包含的復雜模板聲明的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.