GPU编程
Duco
只存在于stash的代码
展开
-
【OpenCL】求矩阵所有元素的和——归约算法
任务分析矩阵内求和任务在GPU上实现并不直观。假设每个线程load一个数据并累加到最后的结果标量中,这样的处理过程会使得整个任务退化到串行处理。原因是同一时刻只有一个线程可以操作目的标量,其他线程只能等待。解决此类问题可以套用归约算法。若读者对这个问题感兴趣,请先对归约算法有个大概的了解。下文不会介绍基本概念,主要是讨论实现细节和优化点。归约算法1(reductionInner)归约可以分为两个层次。一个层次是kernel层面的。在下图中需要对一维的数据求和,假设整个数组是在同一个group中,自然原创 2020-09-19 14:22:03 · 2091 阅读 · 0 评论 -
MACE源码解析【GPU内存排布技巧】
前言在移动端推理引擎中,除了一些计算上技巧外,内存排布对效率的影响也是有一定影响的。本篇来浅析一下MACE的opencl模块在内存上有什么讲究,应用了哪些技巧。若内容有误,或者有自己的思考欢迎留言讨论。权重的排布MACE中权重是是由opencl中的image2D存储的(亦有buffer版的kernel),所以需要把四维的filter参数转换到2维上。一般情况下filter默认排布为OIHW,...原创 2019-11-16 10:43:00 · 843 阅读 · 0 评论 -
CPU版本、全局内存版本、共享内存版本矩阵乘法的实现和分析
前言矩阵乘法是cuda samples中的一个。所以就从这个较为简单的程序开始熟悉cuda吧。下面的代码有三个部分。CPU版本:使用三层循环进行常规的矩阵乘法运算。cuda global memory 版本:使用多个block进行并行计算,但GPU线程访问都是在global memory中。cuda shared memory 版本:也就是cuda 提供的样例代码。基本思路如下,对矩...原创 2018-04-13 15:17:31 · 1391 阅读 · 0 评论