簡體   English   中英

如何設置我的代碼/ VS10以識別.c文件中的CUDA函數調用?

[英]How do I set up my code/VS10 to recognize CUDA function calls within .c files?

基本上,我有編譯器編譯我的.cu文件,我(我認為)在那些.cu文件中完全操作,但當我嘗試調用它們( kernel<<<1,1>>>(void) )時,編譯器注冊由於CUDA語法導致的語法錯誤。 此外,cudaMalloc之類的調用在c文件中失敗。

這里有三個非常短的文件,所以我可以告訴你哪里出錯了。

//kernel.cu    
#include "kernel.h"
#include <cuda.h>
#include <cuda_runtime_api.h>

__global__ int kernel(void){     
    return 5;
}

//kernel.h
#ifndef _KERNEL_h_
#define _KERNEL_h_

extern "C" int kernel(void);

#endif

//main.c
#include "kernel.h"
#include <cuda.h>
#include <cuda_runtime_api.h>

int main() {
   int* device_a;

   cudaMalloc( (void**)&device_a, sizeof(int) );

   kernel<<<1,1>>>();
}

我從一些SDK示例中獲得了頭文件。 此外,我有我的構建配置與CUDA 4.2,因此.cu文件編譯。 如果我發現任何偶然的語法錯誤,那是因為我簡化了發布,而不是它實際上是在源代碼中,盡管請提及它以防萬一。

kernel.cu編譯得很好。

kernel.h有一個錯誤:“錯誤C2059:語法錯誤:'字符串'”在“extern ...”行上。 (這可能是因為我從c ++示例中獲取了這個嗎?)

main.c有一個錯誤:“錯誤C2065:'內核':未聲明的標識符”

和:“錯誤C2059:語法錯誤:'<'”

但是當我注釋掉內核調用時,所以它只是cudaMalloc,我得到:“錯誤LNK2019:未解析的外部符號_cudaMalloc @ 8在函數_main中引用”

並且:“致命錯誤LNK1120:1未解決的外部”

它是Visual Studio 2010的東西,還是我不包括的東西? 從SDK示例中,我無法分辨出我做錯了什么,然后他們找到了一種方法,我想,不使用三重括號(CTRL + F找不到任何)。 任何幫助表示贊賞。 先感謝您!

編輯:看了一些更多的例子,他們確實使用三重括號語法。

編輯: 對於那些使用它作為參考的人__global__函數只能返回void。 如果您嘗試返回其他任何內容,就像我一樣,您將收到編譯器錯誤。

  1. 將調用CUDA內核的函數放在.cu文件中。

  2. 設置VS2010以使用CUDA編譯器編譯CU文件,而不是內置編譯器(使用位於CUDA SDK中的CUDA規則文件(Cuda.props,Cuda.xml,Cuda.targets))。

  3. 我建議將內核放在具有不同擴展名的文件中(例如.curnel文件),這樣它們就不會被直接編譯(僅在被調用時)。

  4. 我建議在.cuh文件中放置調用CUDA內核的函數的聲明。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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