VS2012上CUDA环境搭建

前提需要有NVIDIA的显卡驱动,以及安装dir11.0。

首先需要准备cuda_9.0.176_windows.exe,这是我在官网上下载的最新版本,此版本将cuda SDK也封装进入了安装程序。

第一步:安装程序

重点是安装设置的选择时记得选自定义安装(不要使用默认安装),之后全选所有安装子项目。在选择安装位置界面:有CUDA TOOKKIT,CUDA SAMPLES,CUDA Documentation这三个安装路径选择,个人推荐使用默认的安装路径。之后一直安装,不出问题,能直接安装成功。

第二步:配置环境变量及拓展

正确安装成CUDA之后,在系统变量下会自动生成两个变量,分别是CUDA_PATH和CUDA_PATH_V9_0,然后需要对系统变量进行一些拓展,一下是变量名和变量值:

CUDA_LIB_PATH  %CUDA_PATH%\lib\Win32

CUDA_BIN_PATH   %CUDA_PATH%\bin

CUDA_SDK_PATH    C:\ProgramData\NVIDIA Corporation\CUDASamples\v9.0

CUDA_SDK_BIN_PATH   %CUDA_SDK_PATH%\bin\win64

CUDA_SDK_LIB_PATH   %CUDA_SDK_PATH%\common\lib\x64

注意ProgramData是隐藏文件,可能你在指定位置开不到这个文件,设置一下显示隐藏文件即可看到,拓展完成之后重启计算机使变量生效。

第三步:建立VS2012下的cuda程序

1.创建工程的步骤和创建普通工程的步骤是一样的。最好建一个空项目,然后在这个空项目上配置CUDA环境。

2.源文件中创建CUDAC/C++ File


3.之后,右键项目名称,选择生成自定义,选中CUDA9.0自定义项文件,确定。


4.之后,右键工程名,选择属性,在配置属性界面>>C++目录

添加两个包含目录:

C:\ProgramFile\NVIDIA GPU ComputingToolkit\CUDA\v9.0\include

C:\ProgramData\NVIDIACorporation\CUDASamples\v9.0\common\inc

添加两个lib目录:

C:\ProgramFile\NVIDIA GPU ComputingToolkit\CUDA\v9.0\lib\x64

C:\ProgramData\NVIDIACorporation\CUDASamples\v9.0\common\lib\x64

然后到>>连接器下面,常规,附加库目录,添加以下目录:

$(CUDA_PATH_V9_)\lib\$(Platform)

连接器>>输入>>附加依赖项,添加以下库:

cublas.lib

cublas_device.lib

cuda.lib

cudadevrt.lib

cudart.lib

cudart_static.lib

cufft.lib

cufftw.lib

curand.lib

cusolver.lib

cusparse.lib

nppc.lib

nppial.lib

nppicc.lib

nppicom.lib

nppidei.lib

nppif.lib

nppig.lib

nppim.lib

nppist.lib

nppisu.lib

nppitc.lib

npps.lib

nvblas.lib

nvcuvid.lib

nvgraph.lib

nvml.lib

nvrtc.lib

OpenCL.lib

第四步:在配置管理器中将使用平台修改为64位

第五步:修改源文件属性

源文件中的.cu文件,选择属性,配置属性,常规,项类型选择CUDAC/C++,然后点击应用,确定,关闭属性页窗口。(注意:如果这个没有修改,VS2012会找不到函数入口,会报错:无法解析的外部符号main,该符号在函数__tmainCRTStartup中被引用)


注:只有先完成第三步的第3项,才能在项类型中找到CUDA C/C++的选项

第六步:测试搭建的CUDA环境

接下来就可以编写测试程序,对搭建的环境进行测试,给出以下两个测试代码:

#include <stdio.h>
#include <iostream> 
//For the CUDA runtime routines (prefixed with "cuda_")
#include <cuda_runtime.h>
__global__ void Add(int a ,int b,int *c)
{
    *c = a+b;
}
int main()
{
     int c;    
     int *devc;     
     cudaError_t err = cudaSuccess;     
     err =cudaMalloc((void **)&devc,sizeof(int));    
     if (err != cudaSuccess)
     {
        fprintf(stderr, "Failed toallocate device vector A (error code %s)!\n",cudaGetErrorString(err));
        exit(EXIT_FAILURE);
     }
     Add<<<1,1>>>(2,7,devc);
     err =cudaMemcpy(&c,devc,sizeof(int),cudaMemcpyDeviceToHost); 
      if (err != cudaSuccess)
      {
        fprintf(stderr, "Failed toallocate device vector A (error code %s)!\n",cudaGetErrorString(err));
        exit(EXIT_FAILURE);
      }
    printf("2+7=%d\n",c);
    cudaFree(devc);
    system("pause");
    return 0;
}

第二个测试代码:

#include<stdio.h> 
boolInitCUDA() 
{ 
    int count; 
 
    cudaGetDeviceCount(&count); 
 
    if(count == 0) 
    { 
        fprintf(stderr, "There is nodevice.\n"); 
        return false; 
    } 
    int i;  
    for(i = 0; i < count; i++) 
    { 
        cudaDeviceProp prop; 
        if(cudaGetDeviceProperties(&prop,i) == cudaSuccess) 
        { 
            if(prop.major >= 1) 
            { 
                break; 
            } 
        } 
    } 
 
    if(i == count) 
    { 
        fprintf(stderr, "There is nodevice supporting CUDA 1.x.\n"); 
        return false; 
    } 
    cudaSetDevice(i); 
    return true; 
} 
 
int main()
{ 
    if(!InitCUDA()) 
    { 
        return 0; 
    } 
    printf("HelloWorld, CUDA has beeninitialized.\n"); 
    return 0; 
}  

编译运行,能够成功生成解决方案,运行出结果,就可以说明我们配置的CUDA环境是没有问题的。

接着就可以这个基础上进行其他的环境配置(例如配置FFmpeg和SDL环境等)。配置FFmpeg和SDL环境在这里就不详述了,配置完之后可以进行一些基础测试,例如通过avcodec_find_decoder_by_name()函数来查找FFmpeg中是否有硬解码相关的解码器,这需要在两个环境中测试,一个是配置过CUDA环境的,一个是没有配置CUDA环境的,通过测试可以知道,只有在配置完CUDA开发环境才能通过相应函数查找到cuvid硬解码器。接着编写一个解码器,就可以进行一些简单的CUDA硬解码实验。

猜你喜欢

转载自blog.csdn.net/qq_33233768/article/details/78889080