转载自:http://blog.csdn.net/leonwei/article/details/8956632

这里介绍关于OpenCL中program函数的写法,program函数通常是文本形式的,然后使用clCreateProgramWithSource这样的接口load进来。在Shader编程中也经常使用这种形式书写GPU上运行的代码,所以为了表述清楚和理解方便,这里姑且把这些program函数的源码文本称为OpenCL的shader吧

下面都是写在shader中的一些语法

1 shader是类C的语言,派生自C99标准(99年ansi C接受的标准,也是C最新的标准)

不支持:

头文件、函数指针、递归、变长数组(这个VS也不支持)

额外加入的类型:

vector 类型 char2 ushaort4 int8  这些最后都会变成长度对齐的

图像类型 image2d_t image3d_t  sampler_t ...

event类型 event_t(关联于API中CL_event)

2.work item和 work Group相关函数

3.vector 操作

vector的前一半为lo,后一半为hi

int4 v=(int4) 7 =(int4)(7,7,7,7)

v=(in4)(1,2,3,4)

int2 v2=v.lo ->(1,2)

v2=v.hi ->(3,4)

v2.v.odd ->(2,4)

对vector做四则运算、abs等于对每个元素分别计算

4.寻址空间描述符,写在变量的最前面,用于变量所处于的地址空间

__global

__local

__private

__constant

这四个分别对应了CL架构中的存储区域(设备全局、work group、compute unit 、设备constant)

  • 前面的__也可去掉
  • 目前global一定是constant的,也就是声明global时必须赋值 (global就等于 global constant)
  • 不同地址空间上的指针转化是没有定义的

5.类型转换

5.1convert类型转换;这是按照变量语意的类型转换

写成convert_destType<_sat><_roundingMode>形式,

如float4 f4=(float4)(1.0f,2.0f,3.0f,4.0f)

int4 i4=convert_int4_sat_rte(f4)

destType:目标类型

_sat:超出范围自动归结为最大或最小显示的数

_roundingMode:

_rte:表示成最接近的偶数

_rtz:朝0接近

_rtp:朝正无穷大

_rtn:朝负无穷大

这里面的规则比较复杂,详见http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/convert_T.html

5.2 as转换:这是根据bit值重新解释的类型转换

写成as_desttype

其中转换前后的类型的vetctor size是要一样的,desttype是目标类型,这个转换会保持bit值不变,在此基础上根据desttype重新解释数值

as转换和convert转换有着本质的区别!

如float4 f4=(float4)(1.0f,2.0f,3.0f,4.0f)

int4 i4=as_int4(f4)

6.内建函数:

6.1各种各样超多的数学函数
:详见http://www.khronos.org/registry/cl/sdk/1.2/docs/man/xhtml/的Built_in Function一节

贴个简表

6.2Work_group函数:

主要用于一个group内的computer item间的交互

一个goup内的所有item必须全部执行完这个barrier函数之后才能继续进行后续的事情,也可看做这是所有item的一个同步点,不管谁快谁慢,必须到这个点停一下,大家都到了这个点之后,再继续进行。

这里的参数分两种情况:

CLK_LOCAL_MEM_FENCE和CLK_GLOBAL_MEM_FENCE

这个参数我现在也没搞得很懂,大意是加入一个mem fence保证这时loca mem或者globalmem 的同步正常,关于mem fence 的概念还要再看看opencl的描述

  • 异步的内存copy和prefetch函数

 async_work_group_copy:他会完成global与local之间的异步的内存拷贝,这种拷贝可能会使用DMA 引擎的(DMA的数据传输不使用传统的硬件中断,会很快),这个函数是异步的,所以会返回一个事件event_t用于同步

使用wait_group_events函数来等待上面的event返回,用于同步

async_work_group_strided_copy:文档上说它用于gather数据从src到dest,但是文档中gather的意思不能让人很好的理解,仔细的分析一下,这个函数同  async_work_group_copy的差异在于stride,他也是完成异步的拷贝,但是它可以从src抽取一部分域出来到dst中。例如在图形学中我们经常用一个大数组表示颜色、法向、纹理坐标等等,他们是连在一起的,如{color1,ccolor2,color3,tex0,tex1,color1,color2,color3,text0,tex1,....},这时我们需要抽取其中的color信息出来,那就要用到这个stride copy。

opencl-Shader的更多相关文章

  1. A Simple OpenGL Shader Example II

    A Simple OpenGL Shader Example II eryar@163.com Abstract. The OpenGL Shading Language syntax comes f ...

  2. A Simple OpenGL Shader Example

    A Simple OpenGL Shader Example eryar@163.com Abstract. OpenGL Shading Language, the high-level progr ...

  3. 微软的HLSL Shader Model 6.0 compiler要转向LLVM了,开源的节奏. Apple/Khronos都有各自计划

    So, Microsoft is making an opensource HLSL-to-almost-LLVM compiler, and Khronos is making an opensou ...

  4. 【原创翻译】初识Unity中的Compute Shader

    一直以来都想试着自己翻译一些东西,现在发现翻译真的很不容易,如果你直接把作者的原文按照英文的思维翻译过来,你会发现中国人读起来很是别扭,但是如果你想完全利用中国人的语言方式来翻译,又怕自己理解的不到位 ...

  5. 通过 Autostereograms 案例学习 OpenGL 和 OpenCL 的互操作性

    引言 在过去的十年里, GPU (图形处理单元)已经从特殊硬件(特供)转变成能够在数值计算领域开辟新篇章的高性能计算机设备. 很多算法能够使用拥有巨大的处理能力的GPU来快速运行和处理大数据量.即使在 ...

  6. 从零開始学习OpenCL开发(一)架构

    多谢大家关注 转载本文请注明:http://blog.csdn.net/leonwei/article/details/8880012 本文将作为我<从零開始做OpenCL开发>系列文章的 ...

  7. Vulkan Tutorial 11 Shader modules

    操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Visual Studio 2017 与之前的图像API不同,Vulkan中的着色器代码必须以二进制字节码的格式使用,而不 ...

  8. CUDA版本的OpenCL在windows 7的下编程初步

    参考文献: http://blog.csdn.net/neoxmu/article/details/8866928 我安装的是CUDA5.5,代码如下: //#include "stdafx ...

  9. OpenGL Compute Shader靠谱例子及读取二进制Shader,SPIR-V

    学OpenGL以来一直苦恼没有像DX那样可以读取二进制Shader使用的方法,除去有时不想公开自己写的牛逼Shader的心理(虽然目前还从没写过什么牛逼的Shader), 主要是不用现场编译,加快读取 ...

  10. OpenGL10-骨骼动画原理篇(3)-Shader版本代码已经上传

    视频教程请关注 http://edu.csdn.net/lecturer/lecturer_detail?lecturer_id=440 接上一个例程OpenGL10-骨骼动画原理篇(2),对骨骼动画 ...

随机推荐

  1. python相关博客

    入门:http://www.pythontip.com/ Python之禅--大道至简 美胜于丑,显胜于隐,简胜于繁,繁胜于杂,平胜于迭,疏胜于密,读胜于写...名可名, 请常名 http://www ...

  2. 网站开发常用jQuery插件总结(七)背景插件backstretch

    一.backstretch插件功能 优化网站外观.主要用于设置页面背景图片,也可以设置html元素的背景图片.背景图片可以设置多张,在间隔时间内循环显示. 注 但是在设置背景图片时,如果图片过大,网站 ...

  3. SQL Cursor(游标)

    1.游标在数据表没有id(identity(1,1))时好用,但是游标会吃更多的内存,减少可用的并发,占用宽带,锁定资源,当然还有更多的代码量 2.如果能不用游标,尽量不要使用游标,用完用完之后一定要 ...

  4. 【转】Oracle job procedure 存储过程定时任务

    原文:Oracle job procedure 存储过程定时任务 oracle job有定时执行的功能,可以在指定的时间点或每天的某个时间点自行执行任务. 一.查询系统中的job,可以查询视图 --相 ...

  5. SVG绘制圆形简单示例分享

    今天分享“svg绘制圆形”部分 1.简单圆形 效果图如下: 关键代码: <svg xmlns="http://www.w3.org/2000/svg" version=&qu ...

  6. Java源代码分析与生成

    源代码分析:可使用ANTLRANTLR是开源的语法分析器,可以用来构造自己的语言,或者对现有的语言进行语法分析. JavaParser 对Java代码进行分析 CodeModel 用于生成Java代码 ...

  7. wdcp日志

    apache或nginx都有开关默认日志,一个是正常访问日志,一个是错误的日志,目录在 /www/wdlinux/nginx-1.0.15/logs /www/wdlinux/httpd-2.2.22 ...

  8. Apache配置允许文件索引

    这两天在看bootstrap的文档,所以在本地搭建了一个web server. 这里记下Apache的一个小配置: LISTEN *:8000 <VirtualHost *:8000> A ...

  9. hdu-A+B问题,大数加法

    格式问题很头疼啊 Input The first line of the input contains an integer T(1<=T<=20) which means the num ...

  10. 补充一下我对 POJ 3273 的理解,这肯定是我一生写的最多的题解。。。

    题目:http://poj.org/problem?id=3273 当分成的组数越多,所有组的最大值就会越小或不变,这一点不难证明:    如果当前分成了group组,最大值是max,那么max的这一 ...