(接上一篇文章)

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)相关推荐

  1. Brook+ Programming

    翻译自AMD文档 2.1Runtime Options 在运行Brook+程序之前,需要注意一下环境变量: BRT_RUNTIME 这个环境变量允许你决定计算的后端是CPU(可以方便地调试)还是CAL ...

  2. Brook+ Programming (4)

    (接上篇) 由main函数开始,生成三个流接受输入矩阵(A和B)和输出矩阵(流一般用来表示矩阵).然后三块内存缓冲区开辟出来(input_A,input_B和 input_C)接着streamRead ...

  3. Brook+ Programming (2)

    (接上一篇) 2.2.2 Building 使用如下步骤生成: 第一步: 用brcc编译 编译器可以在<BROOKROOT>/sdk/bin/下找到 brcc   [-hkrbfilxae ...

  4. Brook+ Programming (6)

    2.6 The Brook+ Runtiem API 现在版本的Brook+的特性都是完全改写了runtime引擎后的.为了提高性能和稳定性,新的C++ API提供给开发者以便能在低层用更有弹性的方式 ...

  5. 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 ...

  6. Java OOP(Object Oriented Programming)个人理解及总结

    面向对象编程(Object Oriented Programming,OOP,面向对象程序设计) 其三大特征:封装,继承,多态: 封装:解决数据的安全问题. 继承:解决代码的重用问题. 多态:解决程序 ...

  7. Structured Streaming编程 Programming Guide

    Structured Streaming编程 Programming Guide • Overview • Quick Example • Programming Model o Basic Conc ...

  8. 算法编程Algos Programming

    算法编程Algos Programming 不同算法的集合,用于编程比赛,如ACM ICPC. 算法按主题划分.大多数算法都可以从文件中按原样运行.每种算法都有一个参考问题,并对其时间和空间复杂度作了 ...

  9. CSE 3100 Systems Programming

    代做CSE 3100留学生作业.代写C/C++程序作业.代做Systems Programming作业.代写C/C++编程设计作业 CSE 3100 Systems Programming Homew ...

最新文章

  1. 华理c语言设计网上作业,华东理工大学第一学年第二学期网上作业参考答案C语言设计1...
  2. 锐浪报表 多条数据集合到一个二维码中_【小麦课堂】快速查询明细数据的操作...
  3. jmeter学习笔记(一)
  4. dubbo指定服务提供者ip_使用指定IP调用Dubbo服务
  5. 干货丨常用JS前端开发框架有哪些?
  6. 【ESP8266】发送HTTP请求
  7. android platform下载地址
  8. 每日总结app_焊工日常工作的主要职责是什么?焊工证考试用什么APP复习?
  9. 微信小程序 1 ~ Hello 微信小程序
  10. STM32硬件复位时间
  11. 一个小工具帮你搞定实时监控Nginx服务器
  12. 老机器上安装了kubuntu先尝试安装Manjaro但是鼠标按键无法使用彻底解决办法
  13. 【WEB搜索技术】课程学习大纲与学习感悟
  14. Linux系统(centos/ubuntu)修改IP地址方法总结
  15. display:The Wayland Book 节选dmabufXDG
  16. android平板 双清,什么是小米平板2刷机前的双清
  17. Unity + Mirror实现原创卡牌游戏局域网联机
  18. HDOJ2000题Java代码
  19. MATLAB解析PFM格式图像
  20. 数字大小写转换(包括金额)

热门文章

  1. NFT支付平台接口,数字藏品支付接口如何申请?
  2. linux服务器time wait,Linux服务器TIME_WAIT进程的解决与原因
  3. 运用PreviousPage简化提交流程
  4. 使用PreviousPage对象在网页间传递Web窗体内容
  5. 日本东北大学最新机器人研究:面对物理损伤,机器人可「立即」适应
  6. hibernate ResultTransformer (转)
  7. Android 自定义控件基础:MeasureSpec
  8. 电表老是跳闸,到底是怎么回事?
  9. html5实现表格拖拽,根据HTML5的新方法 drag drop 方法实现表格拖拽实例
  10. DROO demo_alternate_weights.py