OpenCL
OpenCL的相关学习笔记
陈塬升
成功不必在我,而功力必不唐捐。
展开
-
OpenCL 性能分析事件、工作项同步化
1.性能事件分析1.1配置性能分析命令为了获得一条命令的时序信息,需要分别做以下三步:在用clCreateCommandQueue函数创建命令队列时,设置CL_QUEUE_PROFILING_ENABLE标志;将cl_event所要进行性能分析的命令关联起来。如前所述,这可以将事件的指向设为入列命令的函数的最后一个参数。在执行完后,调用clGetEventProfilingInfo函数来...原创 2020-04-29 16:36:28 · 1539 阅读 · 0 评论 -
OpenCL 主机提醒事件、命令同步事件
1.在OpenCL中,事件是一个和事件发生(occurrence)相对应的数据结构。一次事件监视的可能是数据传输操作的结束,也可能监视的是内核的执行。可以通过三种主要的方式来使用事件:(1.主机提醒(host notification)--用来提醒主机,设备已经执行完一条命令的事件;(2.命令同步--用来强迫延迟执行,直到另一个事件发生的事件;(3.性能分析--用来监视执行一条命令所耗时长的...原创 2020-04-29 13:49:37 · 738 阅读 · 0 评论 -
OpenCL 图像处理函数、图像放缩和插值
1.OpenCL提供了大量可以在内核中运行的图像处理函数,它们大致可以分为以下三类:(1)Read functiongs--返回给定坐标上的颜色取值;(2)write functiongs-- 设定给定坐标上的颜色取值;(3)Information functions-- 提供关于图像对象的信息,例如图像的维度以及像素属性;图像读取函数是从图像对象中读取向量,他们各自的参数基本一样。唯一...原创 2020-04-03 14:15:12 · 4386 阅读 · 1 评论 -
OpenCL 设备上的图像对象和采样器
1.设备上的图像对象:image2d_t和image3d_t当主机将一个图像对象传递到设备上,设备上的内核函数会将它作为一个内核参数来访问。这个参数的数据类型和图像的维度有关。如果接受的是二维图像对象,参数的数据类型就是image2d_t,如果接受的是三维图像对象,参数的数据类型就是image3d_t.缓存对象参数可以接受__global或__kernel等修饰符来指定在设备上存储缓存对象的位...原创 2020-04-03 10:12:09 · 1465 阅读 · 2 评论 -
OpenCL 图像对象和采样器
内存对象可以用来对主机和设备之间所要传输的数据进行包装。内存对象可以分为两种类型:缓存对象和图像对象。缓存对象用来传输通用数据。理论上讲:可以将图像对象保存在缓存对象中,将它的像素作为一般的缓存数据来访问。但选择图像对象有如下四个重要的理由:(1)在GPU上,图像数据是保存在特殊的全局内存中,这个内存被称为纹理内存,和一般的全局内存不同,纹理内存是被缓存,用于高速访问处理。(2)用来读...原创 2020-03-31 14:15:28 · 1589 阅读 · 0 评论 -
OpenCL 混洗和选择函数、向量测试函数、几何函数
1.OpenCL的混洗函数的参数输入为一个或两个输入向量,输出得到的向量包含输入向量的分量。(1)allm shuffle(alln x, uintegerm mask); --创建一个向量,其中包含x的分量,顺序由mask来确定。(2)allm shuffle2(alln x, alln y, uintgerm mask); --创建一个向量,其中包含x和y的分量,顺序由mask来确定。s...原创 2020-03-31 11:26:22 · 949 阅读 · 0 评论 -
OpenCL 整数函数
1.整数函数分为三类来讨论;加法运算和减法运算,乘法运算,以及其余类型的函数。在各种整数函数的运算中,integer数据类型指代范围包含有符号整数和无符号整数:uchar,char,ushort,short,uint,int,ulong和long.uinteger型指代范围仅仅是无符号整数:uchar,ushort,uint和ulong.2.加法和减法函数:(1)integern add_sa...原创 2020-03-31 09:59:28 · 1811 阅读 · 0 评论 -
OpenCL 三角函数和其他类型的浮点函数
1.和math.h相比,OpenCL提供了更为丰富的三角函数:(1)floatn sin/cos/tan(floatn)–返回正弦值,余弦值和正切值(2)floatn sinpi/cospi/tanpi(floatn x)–返回Pix的正弦值,余弦值和正切值(3)floatn asin/acos/atan(floatn)–返回反正弦值、反余弦值和反正切值(4)floatn asinpi/a...原创 2020-03-30 17:31:29 · 1087 阅读 · 0 评论 -
OpenCL 比较函数、指数函数和对数函数
1.比较函数:OpenCL有些函数所返回的是两个浮点数中的较大值,有些函数返回的则是较小值。其余的函数则根据阈值参数来限制或平滑数据输入。比较函数:(1)float clamp(floatn x, float/n min,float/n max)–返回如果x<min,就返回min;如果x>max,就返回max,否则返回x;(2)float fdim(floatn x,floatn ...原创 2020-03-30 16:38:01 · 1673 阅读 · 0 评论 -
OpenCL 数据传输操作
1.加载和保存同类型的数据:如果发送端和接收端的数据类型相同,例如将一个区域的int4型向量加载到另一区域中,只知道“=”即可。除了对变量赋值外,等号还可以将一个区域的数据赋值传输到另一个区域中。例如,内核想将全局内存中的数据加载到局部内存中,并将处理完的结果保存回全局内存。如果要将局部内存改为私有内存,只需要将数据声明中的_local标识符去掉即可,默认的标识符便是_private,因此,如果没...原创 2020-03-30 14:34:51 · 1700 阅读 · 1 评论 -
OpenCL 工作组和工作项函数
1.主机应用程序先设定内核数据的维度,每个维度上工作项的数量以及每个维度上各个工作组中工作项的数量,然后,调用函数clEnqueueNDRangeKernel来进行配置。当工作项开始执行时,他需要事先知道所要访问的数据所在的位置,即当前工作项在所有工作项中的ID.如果工作项还属于某个工作组,那还需要知道工作项在这个工作组中的ID.2.维度和工作项:工作项ID的维度数就是你访问一个包含工作项数据的...原创 2020-03-30 13:55:26 · 856 阅读 · 0 评论 -
OpenCL 运算符
1.Opencl中的全部操作符,他们的操作符既可以是每一位,各个数字,也可以是逻辑表达式。在这些接受多个参数的操作符中,运算对象既可以全部是标量,也可以全部是向量。此外,这其中的很多操作符还可以处理标量和向量之间的混合运算。2.如果是算术操作符,它的两个操作数类相同,得到的结果类型不变。如果两个操作数,一个是包含整数的向量,另一个是包含浮点数的向量,得到的结果向量所含的分量将全部是浮点数,注意,...原创 2020-03-30 11:21:51 · 467 阅读 · 0 评论 -
OpenCL 内核编程:运算符和函数
1.OpenCL的内建函数:不需要另外的链接库文件,或者是包含特别的头文件。可用的内建函数分为7类:(1)工作项和工作组函数–用来表示数据的维度,决定工作组的成员(participation),获取工作项和工作组的ID;(2)数据传输函数–用于在内存区域间加载和保存数据;(3)浮点函数–用于算数运算、取舍、比较、求幂或是求对数运算,三角函数运算以及其他的运算操作;(4)整数运算函数–整型向...原创 2020-03-30 10:51:03 · 917 阅读 · 0 评论 -
OpenCL OpenCL设备模型
1.Opencl设备模型:__global被称为地址空间修饰符,这是因为它所修饰的任何指针都会被保存在全局地址空间之中,而这个地址空间也被称为全局内存。每个引用内存的内核参数都必须有一个地址空间修饰符。2.OpenCL设备模型提供了四种地址空间:(1)全局内存–保存整个设备的数据,既可读,也可写;(2)常数内存–和全局内存相似,但是只可读;(3)局部内存–保存工作组中工作项的数据;(4)...原创 2020-03-27 17:16:03 · 673 阅读 · 0 评论 -
OenCL 向量数据类型
1.首选向量宽度:函数clGetDeviceInfo需要一个参数来表示所需的信息类型,opencl提供了一系列的参数来引用向量宽度,名字形如:CL_DEVICE_PREFERED_VECTOR_WIDTH_TYPE,函数的返回值是数据结构cl_uint,表示一个给定类型的向量其中有多少个相应类型的标量数据.TYPE可以设为char,short,int,long或float,当然也可为HALF或Do...原创 2020-03-27 16:08:01 · 407 阅读 · 0 评论 -
OpenCL half数据类型
1.half数据类型:half数据类型用16位来表示浮点数。这比更为常用的float型的示数范围要小,但他是浮点数家族的新成员。有效位数(0-9)10bits,指数位(9-15)5bits,符号位1bits.opencl标准并没有规定兼容设备是否需要支持half数据类型,但是你可以通过设定CL_DEVICE_EXTENSIONS参数,调用clGetDeviceInfo函数的方法来确定设备是否支持这...原创 2020-03-27 14:53:16 · 2242 阅读 · 0 评论 -
OpenCL 浮点计算
1.浮点计算。标准定义了三种表示实数的方法,分别表示为float,double,和half等数据类型。opencl标准只定义了float数据类型。如果目标设备还能支持另外两种,编程时也可以使用他们来计算处理。2.float数据另外i行可以表示的数值共分为下面四种:(1)正规化数–数字完全可以用float数据类型来表示;(2)去正规化数–数字的绝对值比最小所能表示的正规化还小;(3)无穷数–...原创 2020-03-27 14:05:01 · 1059 阅读 · 0 评论 -
OpenCL 内核函数
1.内核函数的整体结构就像是一个正常的C函数,他也是由函数名,括号所包含的参数列表以及花括号所包含的可执行的语句所构成,但两者之间还是有以下三个主要不同点:(1)每个内核函数的声明都是以_kernel开头;(2)每个内核函数的返回类型都必须是void类型;(3)有些平台将会拒绝编译那些不带参数的内核函数;2.内核函数并不需要单独保存在另外的文件中,关键词_kernel实际上是提醒编译器,这...原创 2020-03-27 11:37:36 · 2239 阅读 · 1 评论 -
OpenCL 工作项、工作组和数据划分
1.工作项的大小和偏移量:(1)函数clEnqueueNDRangeKernel的参数global_work_sizes表示的是各个维度上所要处理的工作项的数量。如果需要访问的第一个工作项的全局(初始值)ID为{0,2,3},只需要将函数clEnqueueNDRangeKernel的参数global_work_offset取值设为{0,2,3}即可。一般代码都将global_work_offse...原创 2020-03-27 10:07:28 · 1297 阅读 · 0 评论 -
OpenCL 映射和解映射
1.主机使用函数clSetKernelArg将内存对象发送给设备,完成设备到主机的数据传输最为简单的函数是调用函数clEnqueueReadBuffer。每个函数都包含一个名为blocking的布尔型变量,如果它的值为CL_TRUE,这个函数在完成读写操作之前都不会返回。如果它的值为CL_FALSE,这个函数将入列读写命令,但是不会等到整个数据传输操作结束之后才返回。2.offset参数表示的是...原创 2020-03-26 18:01:14 · 1561 阅读 · 1 评论 -
OpenCL 简单概念
OpenCL(全称Open Computing Language,开放运算语言)是第一个面向异构系统通用目的并行编程的开放式、免费标准,也是一个统一的编程环境,便于软件开发人员为高性能计算服务器、桌面计算系统、手持设备编写高效轻便的代码,而且广泛适用于多核心处理器(CPU)、图形处理器(GPU)、Cell类型架构以及数字信号处理器(DSP)等其他并行处理器,在游戏、娱乐、科研、医疗等各种领...原创 2020-03-13 11:04:07 · 1797 阅读 · 0 评论 -
GPU加速 OpenCL学习与实践(CUDA)
前言由于CUDA完美地结合了C语言的指针抽象,NVIDIA不断升级其CUDA计算平台,CUDA获得了大量科学计算人员的认可,已经成为目前世界上使用最广泛的并行计算平台。通过CUDA,NVIDIA成功打破了Intel在超算市场上的绝对主导地位。在今天,大多数大中小型超算中心中都有GPU的身影。由于CUDA由NIVIDA一家设计,并未被Intel和AMD等接受,因此目前使用CUDA编写的程序只支持...原创 2020-03-31 17:37:17 · 1404 阅读 · 0 评论 -
OpenCL相关资源
OpenCL: OpenCL快速入门教程http://blog.csdn.net/augusdi/article/details/12750683OpenCL Tutorialshttp://opencl.codeplex.com/wikipage?title=OpenCL%20Tutorialshttp://opencl.codeplex.com/wikipage?title=OpenC...原创 2020-04-02 11:26:59 · 242 阅读 · 1 评论