▶ 总体印象:适合 OpenCL 入门的书,有丰富的代码和说明,例子较为简单。先把 OpenCL 代码的基本结构(平台 → 设备 → 上下文 → 命令队列 → 创建缓冲区 → 读写缓冲区 → 编译代码 → 创建程序 → 创建内核 → 设定内核参数 → 执行内核 → 缓冲区读写 → 回收检查结果)定死了,在围绕这个结构展开算法和应用。

▶ 第一章,并行编程入门

● 开放计算语言(Open Computuing Language,OpenCL)

● 设备语言可以高效映射到众多的内存系统构架上;主机端语言的目标是以较低的开销来高效管理复杂点的并行程序。两者共同为开发人员提供了一种从算法设计高效过渡到实现的途径。

● 并发性(Concurrency)考虑的是同时发生两个或两个以上的活动。并行性(Parallelism)指的是以提高总体性能为明确目标,并行进行两个或两个以上任务。并行程序必须有并发性,但是并发程序不一定要保证并行性。

●支持完全一致的共享内存模型,会在硬件上有较大开销,因为共享总线式设计瓶颈。

● 粒度,定义为计算与通信之比。并行粒度首先与应用程序算法的内在特性。

  ■ 细粒度的并行,计算强度低;没有租后的任务来隐藏长时间的异步通信耗时;容易通过提供大量可管理的工作单元来实现负载均衡;如果粒度过细,则可能人物之间的通信和同步开开销过大

  ■ 粗粒度的并行,计算强度高;完整的应用可以作为并行的粒度;难以有效实现负载均衡

● 程序实现指令集的细粒度并行,如超长指令字(VLIW)和超标量体系结构

▶ 第二章,并行编程入门

● OpenCL 规范有四个部分组成:平台模型,设备模型,内存模型,变成模型

● OpenCL 中编程人员的默表示尽可能细粒度地表示程序中的并行性,在计算单元上运行的 kernel 程序的每个实例都称为一个工作项(work-item)

● 工作项与工作组

  

● 上下文(Context)是一个抽象容器,存在于主机端,用于协调主机设备之间的交互,管理设备上可用的内存对象,跟踪每个设备新建的 kernel 程序。

● 命令队列(Command Queue)是主机端用于向设备端发送请求的行为机制,每个命令队列只能关联一个设备。

● 时间(Event),任何进入命令队列的操作都可以标记为一个事件,用以表示任务依赖关系(规定任务之间的拓扑顺序和阻塞)和提供程序剖析机制。

● 函数 clFinish() 阻塞直到命令队列中所有任务完成,函数 clFlush() 阻塞直到命令队列中所有任务都被移出任务队列,但不保证任务都执行完成。

● OpenCL 软件仅被链接到一个公共的运行层(ICD),所有平台特定的 SDK 通过一个动态库接口委托给某个厂商的运行时。

● 内存模型,注意关键字 __global,__constant,__local

  

● OpenCL 内存模型与 AMDGPU 内存的关系

  

▶ 第三章,OpenCL 设备架构

● SIMD 和超长指令字(Very Long Instruction Word,VLIW)构架尝试荣国提高算术操作逻辑电路的比例,进一步提高有效任务的数量;多线程方法通过增加可用的有效任务数量来占用计算逻辑部件,以隐藏其他使用非计算部件的时间,比如访问流水线。

● CMOS 动态功耗公式:P = ACV2F + Ileak 。A 为活动因子,电路中正在切换的晶体管数量;C 为电路电容量;V 为电路电压;F 为切换频率; Ileak 为估计的晶体管漏电电流。

● VLIW 通病是运行效率会因为编译器不能填满包而损失,这可以归结为编译器能力有限或指令缺乏内在的并行性

● SIMD 和向量并行是直接允许硬件指令参与数据并行执行,通产采用数据流水的形式进行计算而不是同时对所有数据单元进行操作。

● 同时多线程(Simultaneous Multithreading,SMT)通过扩展超标量调度逻辑电路来记录指令间的依赖关系和源线程,从而使得多线程指令在资源上交叉执行。

● 介绍了多种 CPU 和 GPU 的体系结构,没有细读。

● 几种并行的方式:

  ■ 汇编指令流的乱序执行

  

  ■ 汇编指令流的乱序执行,在结合第二个线程之后同时执行

  

  ■ 两个线程通过轮转时间片来调度执行

  

  ■ VLIW 乱序执行

  

  ■ SIMD 顺序调度,多个 ALU 上执行

  

▶ 第四章,OpenCL 基本实例,见代码堆,没有散点笔记

《OpenCL异构并行编程实战》补充笔记散点,第一至四章的更多相关文章

  1. 《OpenCL异构并行编程实战》补充笔记散点,第五至十二章

    ▶ 第五章,OpenCL 的并发与执行模型 ● 内存对象与上下文相关而不是与设备相关.设备在不同设备之间的移动如下,如果 kernel 在第二个设备上运行,那么在第一个设备上产生的任何数据结果在第二个 ...

  2. 《OpenCL异构并行编程实战》第十二至十四章

    ▶ 第十二章,在其他语言中使用 OpenCL ● JOCL(Java Building for OpenCL),PyOpenCL ● 一个 PyOpenCL 的例子代码,需要 pyopencl 包 i ...

  3. 【ARM-Linux开发】OpenACC并行编程实战笔记

    今年运气比较好,学了cuda之后,了解到了gpu的另两种使用语言opencl和openacc,  opencl(Open Computing Language ,开放计算语言)是面向异构系统的并行编程 ...

  4. ROS机器人程序设计(原书第2版)补充资料 (肆) 第四章 在ROS下使用传感器和执行器

    ROS机器人程序设计(原书第2版)补充资料 (肆) 第四章 在ROS使用传感器和执行器 书中,大部分出现hydro的地方,直接替换为indigo或jade或kinetic,即可在对应版本中使用. 第四 ...

  5. 《Visual C++并行编程实战》译者序

    说来凑巧,当开始着手这本书的翻译时,我刚刚入手了自己第一台四核计算机,而翻译工作临近完成之时,我又为自己添置了一台iPad 2(这是一台双核计算机).由此可见,多核计算机已经完全进入了我的日常生活.鉴 ...

  6. Java多线程编程实战读书笔记(一)

    多线程的基础概念本人在学习多线程的时候发现一本书——java多线程编程实战指南.整理了一下书中的概念制作成了思维导图的形式.按照书中的章节整理,并添加一些个人的理解.

  7. 《java并发编程实战》笔记

    <java并发编程实战>这本书配合并发编程网中的并发系列文章一起看,效果会好很多. 并发系列的文章链接为:  Java并发性和多线程介绍目录 建议: <java并发编程实战>第 ...

  8. Java并发编程实战 读书笔记(一)

    最近在看多线程经典书籍Java并发变成实战,很多概念有疑惑,虽然工作中很少用到多线程,但觉得还是自己太弱了.加油.记一些随笔.下面简单介绍一下线程. 一  线程与进程   进程与线程的解释   个人觉 ...

  9. Java并发编程实战 读书笔记(二)

    关于发布和逸出 并发编程实践中,this引用逃逸("this"escape)是指对象还没有构造完成,它的this引用就被发布出去了.这是危及到线程安全的,因为其他线程有可能通过这个 ...

随机推荐

  1. JAVA异常处理分析高级进界(下)

    既然Throwable是异常处理机制的核心,那么,我们就来分析下它的源码来看看它是如何实现的. 进行分析前,我们可以先想想如果让我们实现一个异常处理机制,我们需要它做什么? 1. 发生异常终止程序执行 ...

  2. Mac for MySQL 5.7 安装教程

    一.环境 MAC OS X 10.10 二.下载MySQL 地址:http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.10-osx10.10- ...

  3. OOP的感悟

    不要认为你关心的东西就是对象的全部或对象的核心,相对于对象的成员家族而言,它仅仅是其中的一个‘很小的成员而已’

  4. Eclipse CDT 配置C /C ++ 标准库 (UBUNTU 12 )

    http://blog.csdn.net/wudiwo/article/details/7682320

  5. 改变Vim保存文件路径

    1. vim 有个cd命令.用来更改当前文件夹.:cd sth进入sth文件夹.这样新文件保存之后就在当前文件夹.不过如果你打开一个已经保存的文件后然后更改当前文件夹是不会改变保存路径的.你必须为:w ...

  6. 『转』Kaspersky Internet Security for Android &KMS – 免费6个月

    卡巴越南的活动,需要注册账户,完成小调查,24小时内发送激活码,激活码3个月内有效.建议用谷歌翻译下网站.KIS for Android 的激活码也通用于 Kaspersky Mobile Secur ...

  7. 201621123006 《Java程序设计》第11周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2. 书面作业 本次PTA作业题集多线程 1. 源代码阅读:多线程程序BounceThread 1.1 BallR ...

  8. 第13课:HTML基础之DOM操作2

    1. 1)d.innerHTML:标签中的所有内容 删除某个标签 a)可以直接修改innerHTML的值: b) 2)d.innerText:标签中的文本内容 3)input.value='aaa'  ...

  9. websocket 缺点

    当时用 python 做的服务器,后来回去想再工作项目上用,但新的技术升级,随之而来还是要解决很多非技术问题, 服务器带宽,并发服务器性能方方面面考虑之后还是没有用上,十分可惜, 一个新的技术推动,尤 ...

  10. CS231n课程笔记翻译4:最优化笔记

    译者注:本文智能单元首发,译自斯坦福CS231n课程笔记Optimization Note,课程教师Andrej Karpathy授权翻译.本篇教程由杜客翻译完成,堃堃和李艺颖进行校对修改.译文含公式 ...