08月11日(星期六)

Linux 编程之GPU计算(转)

关于brookgpu的简要介绍看下面的链接:

本文翻译了斯坦福大学网站上的关于brookgpu语言的一篇文章,原文在:

关于brookgpu的用法在公社中有介绍,请看下面的网址:

想使用brookgpu需要nvidia的显卡和cg的驱动。

ftp://download.nvidia.com/develo ... -1.2.1-Linux.tar.gz

CG接口完成对nvidia_drv.o或fglrx_drv.o或via_drv.o的控制。所以对于能用以上3个.o的GPU都是可的

欢迎大家增加测试的数据和你对brookgpu的理解,初次翻译一个新的技术,错误在所难免,请大家多多批评指正!

我的mail:zhangyu9587@sina.com,欢迎你与我联系!

显卡代替CPU的语言-BrookGpu简介

Brook是标准ANSI C语言的扩展,它是一种为人们所熟悉的高效的语言,它集成了数据并行计算和算术计算集中这两个特点。

通用的计算模型,也就是所谓的流(Stream),同传统的常规语言相比,有以下两个主要的优点:

1.数据并行:允许编程者指定如何在不同的数据上并行地执行相同的操作。

2.算术计算集中:鼓励编程者指定数据上的操作,以达到全局的通信最小而局部的计算最大!

更多的关于Brook的内容可以在Merrimac web site 找到,里面包括了这种语言的完整的说明。Brookgpu为了在GPU上使用,它实现了Brook规范的一个子集。一个Brook 程序中包含合法的C代码和声明流(streams)的句法扩展以及叫做kernels的函数。

流(Streams)

流是一个新的数据类型的扩展,代表了一系列能够被并行处理的数据。Streams的声明规则和数组很像,都是使用尖括号进行声明的。声明一个流的例子如下所示:

float s <10, 10>;

上面声明了一个2维的浮点类型的流。每个流都是由流元素组成的。在上面的例子中,s是一个包含了100个浮点类型流元素的流。流的形状就是指流的维数。在这个例子中,流的形状是10×10。流是用列优先的方式来进行描述的,同C语言中的数组类似。因此,形状为<100>的流与形状为<1,100>和<1,1,100>的流是等同的。

尽管同C数组很类似,但Brookgpu中的流同C语言中的数组有以下的区别:

1. 在kernels函数外不允许通过下标来获得流元素(例如 s[3][2])。

2. 不允许对流进行静态的初始化,例如:

float s<100>={1.0f,2.0f,....}是不允许的。

3. 流必须是局部变量(堆栈)。

4. 流只能在核心(kernel)函数中被读写或者是通过特殊的运算符从普通的指针和versa 获得数据。

streamRead(s,data_s);

/*用*data_s处的数据对流stream s<>进行赋值*/

streamWrite(s,data_s);

/*用流s<>的数据对*data_s进行赋值*/

尽管这个操作还可能通过编译器进行进一步的优化,但是它向流中进行拷贝已经是十分高效了。

对于GPU编译过的代码,流对应于组织内存(texture memory)的区域。编译器能进行代码流分析来更好地决定什么时候什么地点来分配组织内存(texture memory),或者完全消除流变量需要暂时存储的需要。为了方便起见,brook也扩展C来包括float2,float3和float4作为基本的数据类型。这些类型同C语言中用typedef 的结构(structs)是等价的。例如:

linux c 多显卡编程,Linux 编程之GPU计算(转)相关推荐

  1. linux c 多线程socket编程,Linux多线程socket编程一些心得

    前段时间将新的web模型办到Linux上来,用epoll代替了IOCP,经测试确实性能提高了很多,吞吐量也寓所提高,对于Linux下面的网络编程不是三言两语就能说得透的了,加上多线程就更麻烦了,但是e ...

  2. linux操作系统c语言编程,Linux操作系统下C语言编程从零开始

    这里向大家介绍一下在Linux/Unix 的机器上,进行 C/C++ 编程的一些入门级知识. · 所需具备的背景知识 · 开发所需的基本环境 · 获得帮助的途径 · 通过一个实例了解基本步骤 Prer ...

  3. linux不能强制显卡分辨率,Linux系统装显卡驱动及分辨率不正常的解决方法

    Linux系统装显卡驱动及分辨率不正常的解决方法 发布时间:2014-06-13 16:09:53来源:红联作者:velcbo 驱动安装: 这里得说明一下,安装新的显卡驱动也有不完美的地方,就是开机进 ...

  4. 基于c#的区块链编程_C#编程之C#区块链零基础入门,学习路线图

    本文主要向大家介绍了C#编程之C#区块链零基础入门,学习路线图,通过具体的内容向大家展示,希望对大家学习C#编程有所帮助. 一.1分钟短视频<区块链100问>了解区块链基本概念 http: ...

  5. android surface编程,Android编程之SurfaceView实例详解

    本文实例讲述了Android编程之SurfaceView用法.分享给大家供大家参考,具体如下: 关于surfaceView相关知识: View和SurfaceView主要区别: 1. View只能在U ...

  6. 基于sqlite的android数据库编程,Android编程之SQLite数据库操作方法详解

    Android编程之SQLite数据库操作方法详解 发布时间:2020-09-07 12:33:04 来源:脚本之家 阅读:85 作者:低调小一 本文实例讲述了Android SQLite数据库操作方 ...

  7. Linux C高级编程——网络编程之API(5)

    Linux C网络编程--API 宗旨:技术的学习是有限的,分享的精神的无限的.          一.基本socket函数 Linux系统是通过提供套接字(socket)来进行网络编程的.网络的so ...

  8. Linux C高级编程——网络编程之UDP(4)

    Linux网络编程--UDP 宗旨:技术的学习是有限的,分享的精神是无限的. 下面分析一帧基于UDP的TFTP协议帧. 以太网首部 0000: 00 05 5d 67 d0 b1 00 05 5d 6 ...

  9. Linux C高级编程——网络编程之TCP(3)

    Linux网络编程(三)--TCP 宗旨:技术的学习是有限的,分享的精神是无限的. 1.TCP段格式 和UDP协议一样也有源端口号和目的端口号,通讯的双方由IP地址和端口号标识.32位序号.32位确认 ...

最新文章

  1. Yann LeCun力挺前AAAI主席,批判深度学习的Marcus遭怒怼
  2. 从自动贩卖机找零看Python中的动态规划问题
  3. qpython手机版-qpythonl app下载
  4. 动态规划简单应用:斐波那契数列
  5. [机器学习]XGBoost 和 LightGBM 参数对比与调参
  6. C++ Unicode和ANSII转换
  7. 初学者一些常用的SQL语句(二)
  8. 关于Mac网络偏好设置的一些坑
  9. 关于onclick中的event对象和element对象
  10. 关于区块链的一点经济学思考
  11. 量子卡塔教您如何在Q#中进行量子编程
  12. Toast基本使用方法
  13. openfiler服务器打不开web管理页面
  14. 开关电源环路学习笔记(3)-系统框图
  15. MATLAB一元线性回归(最小二乘法)小例子
  16. mysql jdbc驱动 批量更新_jdbc-批量插入、批量删除、批量更新
  17. vue3 效率的提升、composition-api 和 ref 详解
  18. ADO.NET中5大对象简介
  19. 数据分析中的专业术语
  20. Python实现数据预处理-离散值处理

热门文章

  1. 因果推断5--DML(个人笔记)
  2. Nginx配置服务并开机启动
  3. 看完这篇你就知道07版Word怎么设置页码
  4. 【人原代细胞培养】上皮细胞/小气道/人(SAEC)/人慢性阻塞性肺病细胞培养参考文献
  5. 使用sklearn的cross_val_score进行交叉验证
  6. 微信小程序实战之菜谱小程序
  7. 穿越火线数据包的抓取和分析及服务器欺骗的实现
  8. 计算机培训参加考试可以获得计算机证书有哪些
  9. 数据分析的定义和作用
  10. Android APK+Dex文件反编译及回编译工具 比 APKtool GUI 好千倍