2010-11-23 86 views
1

嘿有...所以我在這裏使用VS2008,使用CUDA C編程。我安裝了3.2工具包並正在工作。結構問題,CUDA C/C++和VS 2008

現在我的問題是,我有這樣一個文件:

#ifndef _cuda_rng_cu_included_ 
#define _cuda_rng_cu_included_ 

#include <stdio.h> 


static void HandleError(cudaError_t err, 
         const char *file, 
         int line) { 
    if (err != cudaSuccess) { 
     printf("%s in %s at line %d\n", cudaGetErrorString(err), 
       file, line); 
     exit(EXIT_FAILURE); 
    } 
} 
#define HANDLE_ERROR(err) (HandleError(err, __FILE__, __LINE__)) 

//some other struct 

我從書CUDA通過實例驗證碼,所以它應該工作..但是當我擊築我得到這個錯誤(第一):

error C2065: 'cudaError_t' : undeclared identifier

,然後錯誤的海嘯被附加,像uint2類型不被發現和變量不被聲明。

可能是什麼問題? cudaError_t在$(CUDA_PATH_V3_2)\ include中定義,並且此路徑位於我所需的include目錄中。

文件屬性設置喜歡:Tool: CUDA Runtime API

我把那的#ifndef,因爲我還沒有想出如何使用CUDA C.像普通C之間的連接++和工作,如果我有兩個一個struct CUDA C(__global__` __device__)以及一些常規方法。如果我將這個文件命名爲.cu,那麼在使用此結構的普通C++代碼中會打印一條錯誤消息,說明它未被聲明。

我試圖手動包含driver_types.h和其他大量的頭文件,但編譯器找不到它們。

對不起,如果我不清楚,我很困。

回答

3

擴展名爲.cu的文件由nvcc處理,該文件自動包含CUDA特定的頭文件,以便聲明CUDA類型。當您將其命名爲.c/.cpp時,您需要包含相關標題以獲取類型。由於您使用的是運行時API,請嘗試包括cuda_runtime_api.h

事實上,你沒有找到它們表明你的路徑沒有被正確設置。嘗試將$(CUDA_PATH)\ include添加到包含路徑中(有關更多詳細信息,請參見this post)。

話雖如此,這裏還有關注...

你並不需要聲明一個結構(或類)作爲__global____device__,該結構僅僅是一個類型,類型爲交叉平臺。您需要這些聲明的地方是存儲隱含的位置,即創建結構實例或創建必須爲設備編譯的代碼的位置。

如果您只是聲明一個結構,那麼你應該能夠宣稱它在頭文件並將其包含在這兩個.cpp.cu文件沒有問題,如果沒有然後通過各種手段發佈更多的細節一個單獨的問題。

+0

我看到那篇文章一次,我忘了在這個新項目中做。但仍然無效。我現在可以包含cuda.h,cuda_runtime.h和其他,並且未聲明的標識符會消失。但是現在我得到另一個錯誤:`'threadIdx':未聲明的標識符`。他媽的..感覺就像我應該在Linux上這樣做... – hfingler 2010-11-23 18:43:27

0

您是否正確設置了包含路徑?這將解釋爲什麼編譯器不能找到包含文件。