Brook+ Programming
来源:互联网 发布:壁纸知乎 编辑:程序博客网 时间:2024/06/06 02:52
翻译自AMD文档
2.1Runtime Options
在运行Brook+程序之前,需要注意一下环境变量:
BRT_RUNTIME
这个环境变量允许你决定计算的后端是CPU(可以方便地调试)还是CAL(运行于GPU之上).如果不设置,默认的是CAL.
设置为"cpu"使用CPU后端,设置为"cal"使用CAL后端.
BRT_ADAPTER
这个环境变量允许你决定使用单个GPU还是多个GPU系统.第一个GPU编号是"0",第二个是"2",第N个是"n-1".如果不
设置,默认是"0"
BRT_PERMIT_READ_WRITE_ALIASING
这个环境变量允许你将一个流在运行时绑定为既为输入流又为输出流的流.这不是写新代码时必须的.更多信息参见Brook+
的安装信息
BRT_LOG_FILE
这个变量允许你设置一个记录内部诊断信息的文件及其位置
若在Linux下运行Brook+,注意以下变量:
DISPLAY
确保此变量设置为0.0以使CAL使用本地X Window server.CAL通过X Window server与GPU建立联系.
同时确保你有足够的权限使用本地X Window server,若是远程登录,也要确保你的账户有使用X Window server的权限.
2.2一个简单的应用程序
Brook+包含两部分:编译器和运行时库.生成一个程序包含以下步骤:
1.使用Brook+编译器将Brook+源代码编译为包含CPU代码和流处理器的代码的C++文件;
2.用其它编译器编译得到的C++文件并将其链接到Brook+运行时库.
接下来的几节将以一个小程序为例讨论编写代码、生成、运行、调试和日志记录的细节。
2.2.1编写代码
下面是sum.br这个Brook+程序的源代码。它将两个流加到一起并将输出赋给第三个流。Brook+源代码的后缀名一般是".br"
Sum.br
#include <stdio.h>
//kernel函数
kernel void sum(float a<>,float b<>,out flaot c<>)
{
c = a + b;
}
int mian(int argc,char** argv)
{
int i,j;
//声明三个10x10大小的二维流,每个流包含100个元素,每个元素是一个浮点数
float a<10,10>;
float b<10,10>;
float c<10,10>;
//声明三个浮点数组
float input_a[10][10];
float input_b[10][10];
float input_c[10][10];
//初始化
for(i = 0;i< 10;++i)
for(j = 0;j<10;++j)
{
input_a[i][j] = (float)i;
input_b[i][j] = (float)j;
}
//将数组读入流
streamRead(a,input_a);
streamRead(b,inout_b);
//调用kernel函数,此时计算运行于GPU设备上
sum(a,b,c);
//将结果写回数组
streamWrite(c,input_c);
//输出结果
for(i = 0;i<10;++i)
{
for(j = 0;j<10;++j)
{
printf("%6.2f",input_c[i][j]);
}
printf("/n");
}
return 0;
}
- Brook+ Programming
- Brook+ Programming (1)
- Brook+ Programming (2)
- Brook+ Programming (3)
- Brook+ Programming (4)
- Brook+ Programming (5)
- Brook+ Programming (6)
- brook+在Ubuntu 9.04下的配置
- programming
- programming
- Programming
- brook+编程之GPU加速到底多快?
- 介绍Brook+的kernel到IL的转化方法和优化技巧
- 软件开发与项目管理易理——布鲁克斯法则 ( Brook's Law )
- programming-GDI programming Note
- Windows Programming/Programming CMD
- Accept CS Ph.D. Offer from Stony Brook University,去SUNY石溪大学的CS Ph.D.啦
- Programmatic programming, Declarative programming and Generative programming
- offsetTop.offsetLeft,offsetWidth,offsetHeight,offsetParent,scrollTop,scrollLeft,scrollWidth,scrollHeight区别
- Invoke的用法
- String Function
- DBA 工作清单
- kernel 打补丁
- Brook+ Programming
- 追求
- tr命令使用
- Spring配置文件总结
- SQL学习笔记
- GOF以及java的23种设计模式简介
- sql server行级锁,排它锁,共享锁的使用
- Java HashMap和TreeMap的排序问题总结
- WINCE 的API大全