Я перенес проект cuda из linux в windows (в основном просто добавил несколько определений и typedefs в заголовочный файл). Я использую Visual Studio 2008, и пользовательские правила сборки API CUDA Runtime из SDK. Код c, а не c ++ (и я компилирую / TC не / TP)
У меня проблемы с областью действия, которых у меня не было в Linux. Глобальные переменные в моем заголовочном файле не являются общими для файлов .c и .cu.
Я создал упрощенный проект, и вот весь код:
main.h:
#ifndef MAIN_H
#define MAIN_H
#include <stdio.h>
#include <cuda.h>
#include <cuda_runtime.h>
cudaEvent_t cudaEventStart;
#if defined __cplusplus
extern "C" void func(void);
#else
extern void func(void);
#endif
#endif
main.c:
#include "main.h"
int main(void)
{
int iDevice = 0;
cudaSetDevice(iDevice);
cudaFree(0);
cudaGetDevice(&iDevice);
printf("device: %d\n", iDevice);
cudaEventCreate(&cudaEventStart);
printf("create event: %d\n", (int) cudaEventStart);
func();
cudaEventDestroy(cudaEventStart);
printf("destroy event: %d\n", (int) cudaEventStart);
return cudaThreadExit();
}
kernel.cu:
#include "main.h"
void func()
{
printf("event in cu: %d\n", (int) cudaEventStart);
}
выход:
device: 0
create event: 44199920
event in cu: 0
event destroy: 441999920
Есть идеи о том, что я здесь делаю неправильно? Как мне изменить настройки, чтобы они работали в Visual Studio? В идеале я хотел бы, чтобы установка работала на нескольких платформах.
CUDA 3.2, GTX 480, 64-битная Win7, 263,06 общие