CUDA编程.配置内核参数+API函数
为了我们获得并行能力,需要做一些配置CIA可以,这个配置在内核启动中写。它们指定了Grid中块的数量,和每一个块中线程的数量。每个快上面有512或者1024个线程。
GPU有多个Core,core被分为流处理器和流多处理器。GPU看作多个块(Block)的组合,每个块可以执行多个线程。
每个块绑定到GPU上的不同流多处理器。每个块在流多处理器上运行,一个块中的线程可以通过共享内存(Shared Memory)彼此通信。程序员无法选定哪个流多处理器将执行特定的块,也无法选定块和线程以何种顺序执行。
并行启动500个线程的快
或者两个线程,每个线程250个块。
因此,你必须修改内核启动配置里的值。
程序员必须注意,每个块的线程数量不能超过GPU设备所支持的最大限制。
这也是500个线程
__global__:与__device__,__host___一起是三个限定符关键字。这个的函数被声明为一个设备函数,当从主机调用时在设备上面执行,这个函数只能从主机调用
cudaMalloc:是动态分配
cudaMalloc(void ** d_pointer,size_t size);
cudaMalloc((void**)&d_c,sizeof(int));
以上code分配一个整数大小的内存块,并返回一个指向该内存位置的指针
cudaMemcpy:这个函数用于将一个内存区域复制到主机或者设备上的其他区域
cudaMemcpy(void *det_ptr,const void *src_ptr,size_t size,enum cudaMemcpyKind kind);
cudaMemcpy(&h_c,d_c,sizeof(int),cudaMemcpyDeviceToHost);
这个函数哟4个参数,一个是目标的指针,第二个参数是原指针,第三个是参数的数据的复制的大小,最后一个是复制的方向
cudaFree:是free函数
cudaFree(void * d_ptr);
cudaFree(d_c);
它释放了d_ptr指向的内存空间。使用Malloc使用Free释放~
赞 (0)