赞
踩
https://docs.nvidia.com/cuda/cuda-runtime-api/index.html
异构计算指在具有多种类型处理(CPU和GPU)的系统中完成的计算
GPU上进行并行计算(主要是数据并行)
图形计算 -> 通用计算
CUDA C是对ANSI C的扩展
CUDA平台提供了驱动层接口(Driver API)和运行时接口(Runtime API)
基于CUPA平台开发的代码包含主机代码和设备代码
lspci |grep nvidia
硬件是否支持CUDA查询: https://developer.nvidia.com/cuda-gpus
sudo apt-get install linux-header-$(uname -r)
安装完成后,验证
cat /proc/driver/nvidia/version
nvcc -V
关键概念: grid(网格)和block(块)
内核(kernel)执行时所产生的所有线程称为grid
grid由多个block构成
相同block中的线程可以通过同步机制和块内共享内存做数据交互(不同的block之间无法数据交互)
内存管理接口函数:
nvcc入参文档:
https://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/index.html
kernel function被GPU上线程并发执行
内核函数定义
CUDA程序中的函数修饰符(function qualifier)
内核函数限制条件:
#inlcude <stdio.h>
__global__ void helloFromGPU()
{
printf("Hello World From GPU\n");
}
int main()
{
printf("Hello World From CPU\n");
helloFromGPU<<<1,10>>>(); //会被10个线程执行
cudaDeviceReset();
return 0;
}
nvcc helloFromGPU.cu --output-file helloGPU
#include "common/common.h" #include <stdio.h> __global__ void helloFromGPU() { printf("blockDim:x=%d,y=%d,z=%d,gridDim:x=%d,y=%d,z=%d Current threadIdx:x=%d,y=%d,z=%d\n",blockDim.x,blockDim.y,blockDim.z,gridDim.x, gridDim.y, gridDim.z,threadIdx.x,threadIdx.y,threadIdx.z); } int main(int argc,char **argc) { printf("Hello World from CPU!\n"); dim3 grid; grid.x = 2; grid.y = 2; dim3 block; block.x = 2; block.y = 2; helloFromGPU<<<grid,block>>>(); cudaDeviceReset(); return 0; }
enum cudaError文档说明:
https://docs.nvidia.com/cuda/cuda-runtime-api/group__CUDART__TYPES.html
文档:
https://docs.nvidia.com/cuda/cuda-runtime-api/group__CUDART__DEVICE.html#group__CUDART__DEVICE_1g18808e54893cfcaafefeab31a73cc55f
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。