CUDA答辩记录

硬件架构:

Tesla架构:早期NVIDIA GPU的架构,主要用于高性能计算(HPC)和科学计算。代表产品:Tesla C870、Tesla C1060等。

Fermi架构:首次引入了CUDA技术。主要用于HPC、科学计算和游戏等领域。代表产品:GTX 480、GTX 580等。

Kepler架构:采用新的SMX(Streaming Multiprocessor)结构和可编程渲染管线,具有更高的性能和能效比。主要用于HPC、深度学习和计算机视觉等领域。代表产品:GTX 680、GTX Titan等。

Maxwell架构:引入了新的存储技术和节能特性,提供了更好的性能和功耗比。主要用于游戏、VR/AR等领域。代表产品:GTX 970、GTX 980等。

Pascal架构:Pascal架构是NVIDIA目前最新一代的架构,采用了16nm FinFET工艺,拥有更多的CUDA核心、更高的时钟速度和更高的功效比。主要用于深度学习、人工智能、科学计算和图形渲染等领域。代表产品:GTX 1080、Tesla P100、Titan X等。

Volta架构:是NVIDIA的最新GPU架构,是目前最强大的深度学习和人工智能计算平台。它引入了张量核技术和人工智能硬件加速器,可以为AI和HPC应用提供前所未有的性能和能效比。代表产品:Tesla V100、Titan V等。

特殊指令:

nvcc X.cu -o X

nvidia-smi

nvprof ./X

特殊结构体:

cudaDeviceProp:

cudaDeviceProp prop;

int count;

cudaGetDeviceCount(&count);    //获取设备的个数

cudaGetDeviceProperties(&prop,i);    //获得对应编号设备的属性

cudaChooseDevice&count(&count, &prop);   //用于在主机上选择最优的CUDA设备,返回其的设备的ID与属性信息

cudaSetDevice(count);   //选定特殊编号设备为主活动设备

unit3:  常用于定位线程位置

blockIdx.(x,y,z)      threadIdx.(x,y,z)

dim3:  常用于指定内核函数的所用线程数量

gridDim.(x,y,z)       blockDim.(x,y,z)

dim3 gridSize(x0,y0,z0);

dim3 blockSize(x1,y1,z1);

主机内存:

可分页内存:

int *a;

a = (int*)malloc(nBytes);

free();

固定内存:

int *a;

cudaMallocHost((void*)&a, nBytes);

cudaFreeHost(a);

零拷贝内存:

cudaHostAlloc((void**)&h_a,nBytes,cudaHostAllocMapped);

cudaHostGetDevicePointer((void**)&d_a,(void*)h_a,0);

cudaFreeHost(h_a);

统一寻址:

__device__ __managed__ int *a;

cudaMallocManaged((void**)&a,N*sizeof(int));

cudaFree(a);

设备内存:

全局内存:

cudaMalloc();

cudaMemcpy(,,cudaMemcpyHostToDevice);

cudaMemcpy(,,cudaMemcpyDeviceToHost);

cudaFree();

__device__ int a[100];    //任何函数的外部定义

cudaMemcpyToSymbol();

cudaMemcpyFromSymbol();

常量内存:全局声明

__constant__ a[1000];    //任何函数的外部定义

cudaMemcpyToSymbol()

寄存器内存:核函数内定义

局部内存:核函数内定义

int idx;

int cache[1000];   //过溢导致迁移存储

共享内存:内核函数内部:

__shared__ cache[100];

纹理内存 表面内存:全局声明

texture<float>  texIn;

cudaBindTexture(NULL,texIn,data.dev_inSrc,bitmap.image_size());

t=tex1Dfetch(texIn,top);

cudaUnbindTexture(texIn);

texture<float,2> texIn;

cudaBindTexture2D(NULL,texIn,data.dev_inSrc,desc,DIM,DIM,sizeof(float)*DIM);

tex2D(texIn,x,top);

cudaUnbindTexture(texIn);

设备缓存:

L1cache:SM层次

L2cache:设备层次

计时:

  • seconds():

float time=seconds();

float total=time-seconds();

  • cudaEvent_t;

cudaEvent_t start,stop;

cudaEventCreate(&start);

cudaEventCreate(&stop);

cudaEventRecord(start,0);

cudaEventRecord(stop,0);

cudaEventSynchronize(stop);

float time;

cudaEventElapsedTime(&time,start,stop);

  • clock()

clock_t start, end;

start = clock();

end = clock();

duration = (double)(end - start) / CLOCKS_PER_SEC;

错误提示:

HANDLE_ERROR();

特殊前缀:

__global__

__device__

__constant__

__managed__

__shared__

­__host__

杂:

GPU非缓存一致

一个线程块内最多含有1024个线程

网格MAX   x轴 231-1 y轴 216-1 z轴 216-1

线程块MAX   x轴 1024 y轴 1024 z轴 64

SP:流处理器,处理线程的基本单位

SM:流处理器组、流处理器簇

SPU:专用单元,处理特殊硬件指令

TPU:纹理处理单元

SFU:特殊函数单元

同步:

cudaDeviceSynchronize();

__syncthreads();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值