簡體   English   中英

使用CUDA和犰狳

[英]Using CUDA and Armadillo

我在64x VS2010項目中有一個.cu文件。 該項目配置為提取.mexw64文件。 貝婁有我運行的例子。 在mex函數內部,我想使用Armadillo線性代數庫的某些函數。 因此,當使用#include "armaMex.hpp" ,編譯器將返回一些錯誤:

  1. 錯誤C3203:“已修復”:非專業類模板不能用作模板參數“ T1”的模板參數,應為實型c:.... \\ armadillo-4.200.0 \\ include \\ armadillo_bits \\ Mat_meat.hpp
  2. 錯誤C2955:'arma :: Mat :: fixed':使用類模板需要模板參數列表c:\\ ..... \\ armadillo-4.200.0 \\ include \\ armadillo_bits \\ Mat_meat.hpp
  3. 錯誤C1903:無法從以前的錯誤中恢復; 停止編譯c:\\ ..... \\ armadillo-4.200.0 \\ include \\ armadillo_bits \\ Mat_meat.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM