WIN7 x64+CUDA8.0+VS2010编译环境搭建

CUDA下载和安装

(安装CUDA之前,应确保电脑具有VS2005以上的版本)CUDA 8.0的下载地址http://docs.nvidia.com/ -CUDA toolkit Documentation-Installation Guides-Installation Guide Windows 检测电脑是否具备CUDA的操作系统以及硬件条件

若具备,进入https://developer.nvidia.com/cuda-downloads 选择电脑操作系统 构架 版本以及安装类型,下载CUDA


下载成功后,在相应路径中出现如下软件开发包程序,点击安装,根据相应的提示安装(我都选择的默认)

安装完成后会在菜单所有程序中有以下的文件夹,其中Samples是有Nvidia专业开发人员以及顶尖开发者编写的,以后学习过程中可以作为很好的参考。

以上例子若可以运行的 话,说明开发环境基本安装成功。CUDA Toolkit主要包含编译器和各种编译工具以及库文件等,另外很重要的是驱动,一些人安装后提示错误是没有支持CUDA的设备存在,此时应避免在安装前有NVIDIA的相关驱动,因此在安装前将NVIDIA的相关驱动卸载,所需要的相关驱动都会在下载的安装包的涵盖。一般认为样例程序可以运行即驱动没有问题。

CUDA的安装成功的检测

CUDA中的deviceQuery.exe和bandWidthTest.exe是检测用到的两个程序。

首先启动cmd.exe(在此应先找到以上两个程序的路径,博主的路径为C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\extras\demo_suite)

进来默认的路径是 c:\users\Admistrator  输入两个cd...(有三个点),退到C目录下。并按照以上的路径查找到两个程序。

分别执行两个程序,结果如下



两个的Result=PASS 说明安装成功

 CUDA开发平台搭建和检测
方法一 利用VS 中支持CUDA的样例程序检测
打开VS2010,会有完整的CUDA开发工具的支持,新建测试程序,在Project的类型中会出现CUDA 8.0,将工程命名为test-OK,VS和CUDA会自动生成一个样例程序


在main 函数中 return 0之前加入getchar(),以防止程序自动退出,便于观察运行结果

项目-属性-通用配置-输入和输出-嵌入清单-将是修改成否


编译执行,得到如下结果,则配置成功


 方法二 手动配置VS项目

打开VS,新建WIN 32的控制台工程,命名testcuda

工具-选项-文件编辑器-文件扩展名 添加microsoft Visual C++ 的cu  cuh两个扩展名


右击源文件-添加-新建项-NVIDIA CUDA 8.0 -CUDA C/C++ Flie  命名test
右键点击工程名称-生成自定义-CUDA 8.0

右击test.cu-属性-选择项类型为 CUDA C/C++
以上步骤将新建的WIN32控制台工程 应以为CUDA,接下来将工程的属性与CUDA对应

工程名右击-属性-更改Additional Include Directiories(博主的目录为C:\ProgramData\NVIDIA Corporation\CUDA Samples\v8.0\common\inc,根据自己的安装目录做相应更改)

为了寻找该工程所需要的以下头文件(可直接搜索以下文件,填写上步路径)


连接器-常规-附加库目录 添加$(CUDA_PATH_V5_5)\lib\$(Platform);

连接器-输入-附加依赖项   添加 cudart.lib;

清单工具-输入和输出-嵌入清单-否,至此属性配置完成
在test.cu中编写符合CUDA语言的程序代码(改代码为博主拷贝),运行
#include <stdio.h>
#include <stdlib.h>
#include <cuda_runtime.h> 

#define DATA_SIZE 1024
#define checkCudaErrors(err)  __checkCudaErrors (err, __FILE__, __LINE__)
#define getLastCudaError(msg)  __getLastCudaError (msg, __FILE__, __LINE__)

int data[DATA_SIZE];


// These are CUDA Helper functions

// This will output the proper CUDA error strings in the event that a CUDA host call returns an error


inline void __checkCudaErrors(cudaError err, const char *file, const int line )
{
    if(cudaSuccess != err)
    {
        fprintf(stderr, "%s(%i) : CUDA Runtime API error %d: %s.\n",file, line, (int)err, cudaGetErrorString( err ) );
        return ;        
    }
}

// This will output the proper error string when calling cudaGetLastError


inline void __getLastCudaError(const char *errorMessage, const char *file, const int line )
{
    cudaError_t err = cudaGetLastError();
    if (cudaSuccess != err)
    {
        fprintf(stderr, "%s(%i) : getLastCudaError() CUDA error : %s : (%d) %s.\n",
        file, line, errorMessage, (int)err, cudaGetErrorString( err ) );
        return ;
    }
}

// end of CUDA Helper Functions

__global__ static void sumOfSquares(int *num, int * result){
    int sum=0;
    int i;
    for(i=0;i<DATA_SIZE;i++) {
        sum += num[i]*num[i];
        }
    *result = sum;
}
void GenerateNumbers(int *number, int size){
    for(int i = 0; i < size; i++) {
        number[i] = rand() % 10;
        printf("number[%d] is %d\n",i,number[i]);
    }}
    
int main(){

        cudaSetDevice(0);
        cudaDeviceSynchronize();
        cudaThreadSynchronize();

        GenerateNumbers(data, DATA_SIZE);

        int * gpudata, * result;
        int sum;

        checkCudaErrors( cudaMalloc((void**) &gpudata, sizeof(int)*DATA_SIZE));
        checkCudaErrors(cudaMalloc((void**) &result, sizeof(int)));
        checkCudaErrors(cudaMemcpy(gpudata, data, sizeof(int)*DATA_SIZE,cudaMemcpyHostToDevice));

        sumOfSquares<<<1, 1, 0>>>(gpudata, result);

        checkCudaErrors(cudaMemcpy(&sum, result, sizeof(int), cudaMemcpyDeviceToHost));

        cudaFree(gpudata);
        cudaFree(result);

        printf("-----------sum: %d\n",sum);

        sum = 0;
        for(int i = 0; i < DATA_SIZE; i++) {
            sum += data[i] * data[i];
        }
        printf("sum (CPU): %d\n", sum);

        getchar();
        return 0;
}
运行结果如下,证明环境搭建成功



自行搭建环境可能有很有问题,建议用第一种办法测试,如果出现下下错误,建议仔细核对以上步骤


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lee_Yu_Rui

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值