2.CUDA(仅支持NVIDIA)
###(0)简单了解
<0>参考链接
https://www.cnblogs.com/dwdxdy/p/3244508.html
https://blog.csdn.net/qq_38314702/article/details/99414393
https://blog.csdn.net/qq_25071449/article/details/77680246
https://blog.csdn.net/qq_38295511/article/details/89223169
https://blog.csdn.net/sinat_23619409/article/details/84202651
https://blog.csdn.net/bulubulu2527/article/details/79990015?utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.baidujs&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.baidujs
https://mp.weixin.qq.com/s/b22a58sjzVpAIh_HCKIb_A
https://blog.csdn.net/geduo_feng/article/details/101100202
https://www.cnblogs.com/liangliangdetianxia/p/3978955.html
https://blog.csdn.net/weixin_40054643/article/details/97666285
https://blog.csdn.net/qq_33757398/article/details/82706565
https://www.pianshen.com/article/374938023/
https://www.cnblogs.com/elitphil/p/11833815.html
https://blog.csdn.net/weixin_43402514/article/details/103081728
https://blog.csdn.net/u013468614/article/details/90137814
https://blog.csdn.net/WhatUwannadO/article/details/82468086
https://blog.csdn.net/u011501388/article/details/83142164
https://blog.csdn.net/u014365862/article/details/85338619
https://blog.csdn.net/qq_41790833/article/details/96874220
https://wiki.tiker.net/PyCuda/Installation/Windows/
<1>相关介绍
CUDA是NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题,CUDA只支持NVIDIA自家的显卡,过旧的版本型号也不被支持。它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。 开发人员可以使用C语言来为CUDA™架构编写程序,C语言是应用最广泛的一种高级编程语言。所编写出的程序可以在支持CUDA™的处理器上以超高性能运行。CUDA3.0已经开始支持C++和FORTRAN。
CUDA(Compute Unified Device Architecture)是一个新的基础架构,这个架构可以使用GPU来解决商业、工业以及科学方面的复杂计算问题。它是一个完整的GPU解决方案,提供了硬件的直接访问接口,而不必像传统方式一样必须依赖图形API接口来实现GPU的访问。在架构上采用了一种全新的计算体系结构来使用GPU提供的硬件资源,从而给大规模的数据计算应用提供了一种比CPU更加强大的计算能力。CUDA采用C语言作为编程语言提供大量的高性能计算指令开发能力,使开发者能够在GPU的强大计算能力的基础上建立起一种效率更高的密集数据计算解决方案。
###(1)安装过程
<0>查看自己的NVIDIA版本
点击NVIDIA控制面板,点击左下角系统信息,在组件中查看DLL版本,如下图所示:
<1>选择安装内容
下图是选择解包路径:
<3>win10系统测试
在cmd里面输入:
nvcc -V
nvcc --version
配置包含目录如下:
E:\CUDA\CUDA_install\Sample\v11.1\common\inc(对应)
E:\CUDA\CUDA_install\Extra\v11.1\include(对应Develoment)
配置库目录如下:
E:\CUDA\CUDA_install\Sample\v11.1\common\lib\x64
E:\CUDA\CUDA_install\Extra\v11.1\lib\x64
附加依赖项如下:
cublas.lib
cublasLt.lib
cuda.lib
cudadevrt.lib
cudart.lib
cudart_static.lib
cufft.lib
cufftw.lib
curand.lib
cusolver.lib
cusolverMg.lib
cusparse.lib
nppc.lib
nppial.lib
nppicc.lib
nppidei.lib
nppif.lib
nppig.lib
nppim.lib
nppist.lib
nppisu.lib
nppitc.lib
npps.lib
nvblas.lib
nvjpeg.lib
nvml.lib
nvptxcompiler_static.lib
nvrtc.lib
OpenCL.lib
freeglut.lib
glew64.lib
<5>VS2015下测试
运行下面测试代码:
测试代码1:
#include <iostream>
#include<stdio.h>
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
bool InitCUDA()
{
int count;
cudaGetDeviceCount(&count);
if (count == 0)
{
fprintf(stderr, "There is no device.\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 no device supporting CUDA 1.x.\n");
return false;
}
cudaSetDevice(i);
return true;
}
int main()
{
if (!InitCUDA())
{
return 0;
}
printf("HelloWorld, CUDA has been initialized.\n");
system("pause");
return 0;
}
新建控制台工程,新建cu文件,设置cu文件的项类型属性为cuda C/C++;
测试代码2:
#include "cuda.h"
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include <stdio.h>
__global__ void SaXPY(float a, float* X_d, float* Y_d, int n)
{
if (threadIdx.x < n)
Y_d[threadIdx.x] = a * X_d[threadIdx.x] + Y_d[threadIdx.x];
}
int main()
{
int n = 64;
float a = 2;
float *X_h, *X_d, *Y_h, *Y_d;
X_h = (float*)malloc(n * sizeof(float));
Y_h = (float*)malloc(n * sizeof(float));
for (int i = 0; i < n; i++)
{
X_h[i] = (float)i;
Y_h[i] = 1.0;
}
cudaMalloc(&X_d, n * sizeof(float));
cudaMalloc(&Y_d, n * sizeof(float));
cudaMemcpy(X_d, X_h, n * sizeof(float), cudaMemcpyHostToDevice);
cudaMemcpy(Y_d, Y_h, n * sizeof(float), cudaMemcpyHostToDevice);
SaXPY <<<1, 64 >>>(a, X_d, Y_d, n);
cudaMemcpy(Y_h, Y_d, n * sizeof(float), cudaMemcpyDeviceToHost);
for (int i = 0; i < n; i++)
printf("%2.1f X[%d] + Y[%d] = %f\n", a, i, i, Y_h[i]);
cudaFree(X_d);
cudaFree(Y_d);
free(X_h);
free(Y_h);
system("Pause");
return 0;
}
运行成功,配置完成,测试成功
<6>Anaconda配置CUDA(无需配置python的话就可以跳过了)
在import里面执行下面的命令:
pip install -i https://mirrors.aliyun.com/pypi/simple/ pycuda
<7>Anaconda测试CUDA
import pycuda.autoinit
import pycuda.driver as drv
import numpy as np
import time
from pycuda.compiler import SourceModule
mod = SourceModule('''
__global__ void Text_GPU(float *A , float *B, float *K, size_t N){
int bid = blockIdx.x;
int tid = threadIdx.x;
__shared__ float s_data[2];
s_data[tid] = (A[bid*2 + tid] - B[bid*2 + tid]);
__syncthreads();
if(tid == 0)
{
float sum_d = 0.0;
for(int i=0;i<N;i++)
{
sum_d += (s_data[i]*s_data[i]);
}
K[bid] = exp(-sum_d);
}
}
''')
multiply_them = mod.get_function("Text_GPU")
tic = time.time()
A = np.random.random((1000,20)).astype(np.float32)
B = np.random.random((1000,20)).astype(np.float32)
K = np.zeros((1000,), dtype=np.float32)
N = 20
N = np.int32(N)
multiply_them(
drv.In(A), drv.In(B), drv.InOut(K), N,
block=(20,1,1), grid=(1000,1))
toc = time.time()
print("time cost is:"+str(toc-tic))
3.cuDNN
###(0)简单了解
<0>参考链接
https://blog.csdn.net/jhsignal/article/details/111398427?utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.baidujs&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.baidujs
https://blog.csdn.net/asialee_bird/article/details/108580658?utm_medium=distribute.pc_relevant_download.none-task-blog-baidujs-2.nonecase&depth_1-utm_source=distribute.pc_relevant_download.none-task-blog-baidujs-2.nonecase
<1>相关介绍
CUDA(ComputeUnified Device Architecture),是显卡厂商NVIDIA推出的运算平台。 CUDA是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。NVIDIA cuDNN是用于深度神经网络的GPU加速库。它强调性能、易用性和低内存开销。NVIDIA cuDNN可以集成到更高级别的机器学习框架中,如谷歌的Tensorflow、加州大学伯克利分校的流行caffe软件。简单的插入式设计可以让开发人员专注于设计和实现神经网络模型,而不是简单调整性能,同时还可以在GPU上实现高性能现代并行计算。
CUDA看作是一个工作台,上面配有很多工具,如锤子、螺丝刀等。cuDNN是基于CUDA的深度学习GPU加速库,有了它才能在GPU上完成深度学习的计算。它就相当于工作的工具,比如它就是个扳手。但是CUDA这个工作台买来的时候,并没有送扳手。想要在CUDA上运行深度神经网络,就要安装cuDNN,就像你想要拧个螺帽就要把扳手买回来。这样才能使GPU进行深度神经网络的工作,工作速度相较CPU快很多。
###(1)安装过程
<0>选择对应的安装包下载
进入官网(https://developer.nvidia.com/rdp/cudnn-archive),下载的时候需要一个英伟达的账号,没有的话注册一个登录即可下载。
<1>复制文件到指定路径
将cuDANN三个文件夹下的文件分别复制到CUDA安装目录下的对应的文件夹下面,注意lib文件下还有个x64文件,将x64文件下的内容复制到相应目录下。