因为cuda具有高效利用GPU进行科学计算的优势,而人工智能的重点之一就是复杂的计算任务,因此学好GPU计算是学习AI的重点任务。这里,我们即将进行利用共享内存的矩阵运算。
我们看一个例子,如何对矩阵进行分配显卡内存以及元素赋值操作。通常来讲,在GPU中分配内存使用的是cudaMalloc函数,但是对于二维或者三维矩阵而言,使用cudaMalloc来分配内存并不能得到最好的性能,原因是对于2D或者3D内存,对齐是一个很重要的性质,而cudaMallocPitch或者cudaMalloc3D这两个函数能够保证分配的内存是合理对齐的,满足物理上的内存访问,因此可以确保对行访问时具有最优的效率,除此之外,对于数组内存的复制应当使用cudaMemcpy2D和cudaMemcpy3D来实现。而对于一维数组,使用cudaMalloc以及cudaMemcpy即可满足使用需求。下面我们通过一段代码来认识一下cudaMallocPitch这个函数。
#define N 11
#define M 3
#define GridSize 16
#define BlockSize 16
#include<iostream>
using namespace std;
__global__ void kernel(float * d_matrix, size_t pitch) {
int count = 1;
for (int j = blockIdx.y * blockDim.y + th