Brook+ Programming (1)
(接上一篇文章)
Brook+的代码和C/C++的很像,但要注意以下几点:
第一,brcc像C编译器一样工作,也就是说编程要坚持标准C规范(例如:变量在代码段前声明)。
对于更复杂的应用,要小心地区分C代码和Brook+代码以使其可组织、可使用。因此,函数可以被声明,然后从C/C++代码文件中调用,
而不是直接放在main函数里面。
2.2.1.1 Kernels
对于前面的例子,注意到kernel函数:
kernel void sum(float a<>,float b<>,out float c<>)
{
c = a + b;
}
. . .
sum(a,b,c);
Kernel函数是运行于流处理器上的。kernel函数作用于流的每个元素(原文:The kenerl is invoked on every element of the stream)。
Kernel函数通过调用他们而被执行,就像有参数的C中的函数一样。
Kernel函数像C中的函数一样,但是有一些扩展和限制(参见Brook+ 语言特性的完全列表).接下来的例子中,a和b是输入流,c是输出流。流在Brook+里面是用尖括号表示的。在这种约定下,API自动地定位流。
2.2.1.2 Streams
在上例中,
float a<10,10>;
float b<10,10>;
float c<10,10>;
流通过这种尖括号的形式被声明(而不是C/C++中的方括号).硬件本身最多只支持大小为8192的一维数组和8192x8192的二维数组,其中的每个元素为流类型(例如:float4。注:float4指四维的浮点向量)。更高位数的和更大尺度的流通过地址虚拟技术在编译时实现(很可能影响性能)。例如,一个一维的数组可以被虚拟为包含8192x8192个元素。允许使用地址虚拟化技术的详情参见2.2.2节“生成”,更多细节参见Brook+ 语言特性。
2.2.1.3 Handling Streams
从上例:
streamRead(a,input_a);
streamRead(b,,input_b);
. . .
streamRead(c,input_c);
流不能被直接操纵。数据在流和内存之间的交换必须通过streamRead()和streamWrite()两个函数:
streamRead(stream* ,void *);
streamWrite(stream *,void *);
Brook+ Programming (1)相关推荐
- Brook+ Programming
翻译自AMD文档 2.1Runtime Options 在运行Brook+程序之前,需要注意一下环境变量: BRT_RUNTIME 这个环境变量允许你决定计算的后端是CPU(可以方便地调试)还是CAL ...
- Brook+ Programming (4)
(接上篇) 由main函数开始,生成三个流接受输入矩阵(A和B)和输出矩阵(流一般用来表示矩阵).然后三块内存缓冲区开辟出来(input_A,input_B和 input_C)接着streamRead ...
- Brook+ Programming (2)
(接上一篇) 2.2.2 Building 使用如下步骤生成: 第一步: 用brcc编译 编译器可以在<BROOKROOT>/sdk/bin/下找到 brcc [-hkrbfilxae ...
- Brook+ Programming (6)
2.6 The Brook+ Runtiem API 现在版本的Brook+的特性都是完全改写了runtime引擎后的.为了提高性能和稳定性,新的C++ API提供给开发者以便能在低层用更有弹性的方式 ...
- docker报错:driver failed programming external connectivity on endpoint, iptables:No chain by that name
docker 报错: Error response from daemon: Cannot restart container hello: driver failed programming ext ...
- Java OOP(Object Oriented Programming)个人理解及总结
面向对象编程(Object Oriented Programming,OOP,面向对象程序设计) 其三大特征:封装,继承,多态: 封装:解决数据的安全问题. 继承:解决代码的重用问题. 多态:解决程序 ...
- Structured Streaming编程 Programming Guide
Structured Streaming编程 Programming Guide • Overview • Quick Example • Programming Model o Basic Conc ...
- 算法编程Algos Programming
算法编程Algos Programming 不同算法的集合,用于编程比赛,如ACM ICPC. 算法按主题划分.大多数算法都可以从文件中按原样运行.每种算法都有一个参考问题,并对其时间和空间复杂度作了 ...
- CSE 3100 Systems Programming
代做CSE 3100留学生作业.代写C/C++程序作业.代做Systems Programming作业.代写C/C++编程设计作业 CSE 3100 Systems Programming Homew ...
最新文章
- 华理c语言设计网上作业,华东理工大学第一学年第二学期网上作业参考答案C语言设计1...
- 锐浪报表 多条数据集合到一个二维码中_【小麦课堂】快速查询明细数据的操作...
- jmeter学习笔记(一)
- dubbo指定服务提供者ip_使用指定IP调用Dubbo服务
- 干货丨常用JS前端开发框架有哪些?
- 【ESP8266】发送HTTP请求
- android platform下载地址
- 每日总结app_焊工日常工作的主要职责是什么?焊工证考试用什么APP复习?
- 微信小程序 1 ~ Hello 微信小程序
- STM32硬件复位时间
- 一个小工具帮你搞定实时监控Nginx服务器
- 老机器上安装了kubuntu先尝试安装Manjaro但是鼠标按键无法使用彻底解决办法
- 【WEB搜索技术】课程学习大纲与学习感悟
- Linux系统(centos/ubuntu)修改IP地址方法总结
- display:The Wayland Book 节选dmabufXDG
- android平板 双清,什么是小米平板2刷机前的双清
- Unity + Mirror实现原创卡牌游戏局域网联机
- HDOJ2000题Java代码
- MATLAB解析PFM格式图像
- 数字大小写转换(包括金额)
热门文章
- NFT支付平台接口,数字藏品支付接口如何申请?
- linux服务器time wait,Linux服务器TIME_WAIT进程的解决与原因
- 运用PreviousPage简化提交流程
- 使用PreviousPage对象在网页间传递Web窗体内容
- 日本东北大学最新机器人研究:面对物理损伤,机器人可「立即」适应
- hibernate ResultTransformer (转)
- Android 自定义控件基础:MeasureSpec
- 电表老是跳闸,到底是怎么回事?
- html5实现表格拖拽,根据HTML5的新方法 drag drop 方法实现表格拖拽实例
- DROO demo_alternate_weights.py