先新建一个简单的控制台应用程序,项目名称为Test00301,如下图所示:
然后在项目中新建一个名为Test01.cu文件,如下图所示:
然后在解决方案资源管理器中选择该项目并点击右键,在弹出的菜单中选择“生成自定义…”,如下图所示:
在弹出的“Visual C++生成自定义项文件”窗体上勾选CUDA4.2(或其它版本),如下图所示:
然后在解决方案资源管理器中选择文件Test.cu并点击右键,在弹出的菜单中选择“属性”,如下图所示:
在弹出的属性页上设置“项类型”为CUDA C/C++,如下图所示:
最后,打开项目的属性页,如下图所示,在“配置属性”——“链接器”——“输入”中的“附件依赖项”里面添加cudart.lib(中间采用分号;连接),如下图所示:
至此,就可以在Test.cu文件中添加cuda代码并能通过编译,现在Test.cu中添加如下代码(用于获取显卡信息):
#include <stdio.h>
#include <iostream>
#include <cuda_runtime.h> //CUDA运行时库头文件
using namespace std;
//显示设备信息
extern "C" void showDeviceProp(void)
{
int i,count;
cudaDeviceProp prop;
cudaError_t cudaStatus=cudaGetDeviceCount(&count);
if(cudaStatus == cudaSuccess) {
cout<<"共有设备数目:"<<count<<"\n";
if(count>0)
{
for(i=0;i<count;i++)
{
cudaGetDeviceProperties(&prop,i);//获取设备的属性信息
cout<<"\n第"<<i+1<<"个设备信息:\n";
cout<<"设备名称:"<<prop.name<<"\n";
cout<<"总内存:"<<prop.totalGlobalMem/1048576<<"M\n";
cout<<"常量内存:"<<prop.totalConstMem<<"字节\n";
cout<<"设备中处理器数目:"<<prop.multiProcessorCount<<"个\n";
cout<<"每个线程块最多包含线程数目:"<<prop.maxThreadsPerBlock<<"个\n";
cout<<"一个线程格中可包含的线程块数目:I="<< prop.maxGridSize[0]
<<" J="<<prop.maxGridSize[1]<<" K="<<prop.maxGridSize[2]<<"\n";
cout<<"多维线程块中可以包含的最大线程数目:I="<< prop.maxThreadsDim[0]
<<" J="<<prop.maxThreadsDim[1]<<" K="<<prop.maxThreadsDim[2]<<"\n";
}
}
}
else
{
cout<<"没有获取到设备信息!请检查计算机是否具有支持CUDA的显卡设备以及CUDA驱动程序版本是否需要更新!\n";
}
}
然后在Test00301.cpp中添加该cu文件中函数的外部引用,如下:
// Test00301.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
extern "C" void showDeviceProp();
int _tmain(int argc, _TCHAR* argv[])
{
//显示设备属性信息
showDeviceProp();
//暂停
system("pause");
return 0;
}
运行程序,其结果如下图所示:
值得注意的是,在cpp或h文件中调用cu或cuh中定义的函数,直接采用include的方式包含然后调用暂时是行不通的,可以采用extern的方式将cu或cuh中定义的CUDA函数设置为公共函数,然后在cpp或h中声明这个extern函数,最后在cpp或h文件中需要的地方调用即可。