wmy-ncut

一、安装anaconda

anaconda是用于科学计算的python发行版。

直接在官网上下载(速度比较慢,也可以在清华镜像下载,速度会快一点)。

官网链接:https://www.anaconda.com/distribution/

清华镜像链接:https://mirror.tuna.tsinghua.edu.cn/help/anaconda/

下载完成后,按照教程安装,注意添加进环境变量,不然安装以后也无法启动。

安装以后,在cmd中输入conda list,查看是否能使用conda命令,若可以,则安装成功。

我安装的最新版,所以python对应的版本是3.7,anaconda的版本是4.7.12.

二、安装vs2017

安装时选择python环境, 并且勾选anaconda3,选择默认位置安装。

如果在安装时不确定具体需要安装哪些组件,可以先把需要的勾选上。以后可以再修改,修改方式是以管理员身份运行visualtudio installer,然后选择更改,勾选上需要的组件即可。

我是安装了python、c++的组件,然后在单个组件中还添加了vs2017 版本编译工具集。

 

三、在vs2017中配置opencv

    opencv版本与python版本有对应关系。首先在网址https://www.lfd.uci.edu/~gohlke/pythonlibs/#opencv上下载对应版本的opencv。

 

 

 我下载的是红框里的版本。

终端进入到存放该下载文件的位置,运行pip install opencv_python-4.1.2-cp36-cp36m-win_amd64.whl命令,即可完成安装。

终端输入python,import cv2,如果不报错,即安装正确。

但是基于上诉方法安装的opencv,没有生成对应的opencv/build文件,只能在python中使用。

打开vs2017,创建python空项目,在解决方案-右键python环境-查看所有python环境-选择一个已创建的环境,添加空文件,输入读取和显示图像的代码,运行即可。

至此,vs2017中,基于python的环境已配置成功。

 

为了能在c++中也运行opencv,我又在官网https://opencv.org/releases/中下载opencv4.1.1(特别慢,我下载了整整一个下午),是一个exe文件。

双击该exe文件,选择想要安装的位置(这个位置很重要,一定牢记,我是安装在d盘了)。

安装完以后将D:\soft\opencv\opencv\build\x64\vc15\bin下的2个dll文件移动到C:\Windows\System32

 

 然后打开vs2017,新建一个c++空项目,打开属性页-vc++目录,添加包含目录和库目录

 

 把build/include文件和它下面的opencv2文件路径添加到包含目录,把build/x64/vc15/lib文件添加到库目录。

属性页-链接器-输入-附加依赖项,把上一步添加的库目录下的lib文件添加进去。注意只添加一个,因为我用的debug模式,所以添加的是xxxd.lib。

 

 然后添加一个空的c++文件,输入以下读取和显示图像的代码,运行即可。注意图像的路径最好的绝对路径。

#include <opencv2/opencv.hpp>

int main()
{
    cv::Mat img = cv::imread("F:\\vs_work\\cv_test\\cv\\w.jpg");
    cv::namedWindow("img", cv::WINDOW_AUTOSIZE);
    cv::imshow("img", img);
    cv::waitKey(0);
    cv::destroyWindow("img");

    return 0;}

四、安装CUDA

CUDA是GPU并行计算框架。

接下来的步骤,版本之间的对应关系很重要。

我的电脑是64位的win10,显卡版本是417.88,因此需要下载CUDA10

进入CUDA官网https://developer.nvidia.com/cuda-10.0-download-archive,下载与显卡对应版本。我的选择如下

 

 比较大,2.1G,下载完以后双击安装。

选择精简安装、默认安装位置。

命令端输入nvcc -V,如果输出信息,则安装成功。

五、安装cudnn

cudnn下载链接:https://developer.nvidia.com/rdp/cudnn-download

选择适合自己电脑系统和显卡的型号,我下载的是win10、CUDA10版的。

下载完以后解压,将解压后的3个文件分别复制到对应CUDA中。

a) Copy <installpath>\cuda\bin\cudnn64_7.dll to C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\bin.

b) Copy <installpath>\cuda\ include\cudnn.h to C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\include.

c) Copy <installpath>\cuda\lib\x64\cudnn.lib to C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\lib\x64.

 六、在vs2017里配置CUDA运算环境

1.首先新建一个visual c++空项目,取名test。

2.右击源文件,添加,新建项,NVIDIA CUDA10.0,code,添加CUDA C/C++ File,命名cuda_test。

3.选择项目,右击,生成依赖项,生成自定义,选中CUDA10.0

4,选择项目,属性,配置属性,VC++目录,包含目录,添加以下目录

C:\ProgramData\NVIDIA Corporation\CUDA Samples\v10.0\common\inc
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\include

添加以下库目录:

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\lib\x64
C:\ProgramData\NVIDIA Corporation\CUDA Samples\v10.0\common\lib\x64

5,配置CUDA静态链接器

项目-属性-连接器-常规-附加库目录,添加以下目录:

$(CUDA_PATH_V10_0)\lib\$(Platform)

6,选用CUDA静态链接库

项目-属性-连接器-输入-附加依赖项,添加以下项(这些项是第4步中添加的库下的库,根据自己的库添加,我参考的https://www.cnblogs.com/wayne793377164/p/8185404.html的库,结果有2个库我没有,后面编译的时候报错,把多出的2个库删掉才可):

cublas.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
nvgraph.lib
nvml.lib
nvrtc.lib
OpenCL.lib

7,测试

测试程序为:

// CUDA runtime 库 + CUBLAS 库   
#include "cuda_runtime.h"  
#include "cublas_v2.h"  
#include <time.h>  
#include <iostream>  
using namespace std;  
// 定义测试矩阵的维度  
int const M = 5;  
int const N = 10;  
int main()   
{     
    // 定义状态变量  
    cublasStatus_t status;  
    // 在 内存 中为将要计算的矩阵开辟空间  
    float *h_A = (float*)malloc (N*M*sizeof(float));  
    float *h_B = (float*)malloc (N*M*sizeof(float));  
    // 在 内存 中为将要存放运算结果的矩阵开辟空间  
    float *h_C = (float*)malloc (M*M*sizeof(float));  
    // 为待运算矩阵的元素赋予 0-10 范围内的随机数  
    for (int i=0; i<N*M; i++) {  
        h_A[i] = (float)(rand()%10+1);  
        h_B[i] = (float)(rand()%10+1);  
    }  
    // 打印待测试的矩阵  
    cout << "矩阵 A :" << endl;  
    for (int i=0; i<N*M; i++){  
        cout << h_A[i] << " ";  
        if ((i+1)%N == 0) cout << endl;  
    }  
    cout << endl;  
    cout << "矩阵 B :" << endl;  
    for (int i=0; i<N*M; i++){  
        cout << h_B[i] << " ";  
        if ((i+1)%M == 0) cout << endl;  
    }  
    cout << endl;  
    /* 
    ** GPU 计算矩阵相乘 
    */  
    // 创建并初始化 CUBLAS 库对象  
    cublasHandle_t handle;  
    status = cublasCreate(&handle);  
    if (status != CUBLAS_STATUS_SUCCESS)  
    {  
        if (status == CUBLAS_STATUS_NOT_INITIALIZED) {  
            cout << "CUBLAS 对象实例化出错" << endl;  
        }  
        getchar ();  
        return EXIT_FAILURE;  
    }  
    float *d_A, *d_B, *d_C;  
    // 在 显存 中为将要计算的矩阵开辟空间  
    cudaMalloc (  
        (void*

分类:

技术点:

相关文章: