使用 OpenCL.Net 进行 C# GPU 并行编程
在 初探 C# GPU 通用计算技术 中,我使用 Accelerator 编写了一个简单的 GPU 计算程序。也简单看了一些 Brahma 的代码,从它的 SVN 最新代码看,Brahma 要转移到使用 OpenCL.Net 作为底层了,于是也去网上搜索了一下,发现了 OpenCL.Net 和另一个相关的项目 OpenCLTemplate。
看了一些它的代码,颇像 DirectCompute 的风格,其 GPU 程序是标准 C 代码,所以编写和阅读也容易一些,而 Host 程序是 C# 的,把 GPU 代码字符串传给编译器进行编译,然后就可以在 C# 对它进行调用,并且取回结果了。
安装了 ati-stream-sdk-v2.1-vista-win7-64,折腾了一下它的例子程序 FirstOpenCLProgram,运行时会抛出一个 InvalidContext 的异常,到它的论坛去问,版主建议我安装 ati 最新 driver 先,虽然觉得本本刚买没几天,应该驱动比较新,还是去安装了最新的驱动,果然不再报异常了。只是如果直接引用 OpenCLTemplate 下的 OpenCL.NET.dll 和 OpenCLTemplate.dll 的话,在初始化的时候会报空指针;而引用 FirstOpenCLProgram 下的这两个 dll 的话,则初始化时会闪现好几个控制台窗口,但是后续都是正常的。
既然正常了,就还是以上次那个程序,来看看 OpenCL 的方式,会不会有更大的速度提升。
使用 OpenCL 的程序代码如下:
代码
运行程序,点击 4 次按钮,显示图形和前两个程序相同,说明程序运算正常,4 次时间为:8、8、7、8。比使用 Accelerator 的程序速度也快了 5 倍以上。
因为是标准 C 程序,所以我们的自由度很大,我也在 OpenCL 下实现了一下 Life 游戏,C# 部分的代码就不贴了,GPU 代码如下:
代码
很长时间不用 C,有很多像函数声明顺序等规则都忘了,好的一点是 OpenCL.Net 中还提供了 OpenCLCodeChecker,用来进行代码检测,同时也在侧边栏里提供了语言帮助,只是它的检测稍嫌弱智,代码稍微复杂,提示的错误位置很奇怪,有时候告知编译出错,Log 里面却没有任何错误信息。不过总体来说,帮助还是很大就是了。
这个 Life 程序,有一个小 Bug,在于没有判断超出右边界的代码,所以如果左边有生物,右边虽然原来没有生物,也会无中生有 :)
总的来说,用 OpenCL.Net 编程,感觉还是很愉快的。
使用 OpenCL.Net 进行 C# GPU 并行编程相关推荐
- openacc的Linux安装教程,科学网—opensuse 13.1 系统 openACC编译器使用及GPU并行编程环境配置 - 马小军的博文...
本文讲述opensuse13.1系统openACC编译器使用及GPU并行编程环境配置. 这里以笔记本显卡驱动为NVIDIA为例 在安装前,请确保系统已经安装kernel-devel ,kernel-s ...
- matlab gpuarray是什么,MATLAB GPU并行编程
gpuArray MATLAB中的gpuArray表示存储在GPU上的数据.使用gpuArray函数可以将数据从MATLAB工作空间传送到GPU.例如: A = data(10); G = gpuAr ...
- GPU 并行编程- Inclusive Scan 全面扫描算法
定义 扫描操作采用二进制关联运算符 ⨁\bigoplus⨁(circle plus)和一个有n个元素的数组组成. 数组为 [x0,x1,......,xn−1][x_0,x_1,......,x_{n ...
- CPU并行与GPU并行联系及区别
主要参考博文:https://blog.csdn.net/ustcbob/article/details/38677603 应用特点:GPU并行吞吐量大,适合大数据并行处理:CPU适合逻辑处理和串行计 ...
- 异构计算(CPU + GPU)编程简介
异构计算(CPU + GPU)编程简介 1.概念 所谓异构计算,是指CPU+ GPU或者CPU+ 其它设备(如FPGA等)协同计算.一般我们的程序,是在CPU上计算.但是,当大量的数据需要计算时,CP ...
- CPU+GPU异构计算编程简介
异构计算(CPU + GPU)编程简介 1. 概念 所谓异构计算,是指CPU+ GPU或者CPU+ 其它设备(如FPGA等)协同计算.一般我们的程序,是在CPU上计算.但是,当大量的数据需要计算时,C ...
- 从头开始进行CUDA编程:Numba并行编程的基本概念
作者 | CarlosCosta 编辑 | 极市平台 点击下方卡片,关注"自动驾驶之心"公众号 ADAS巨卷干货,即可获取 点击进入→自动驾驶之心[模型部署]技术交流群 后台回复[ ...
- GPU及GPU通用计算编程模型简介
以下内容来自网络总结: NVIDIA公司在1999年发布GeForce256时首先提出GPU(图形处理器)的概念,随后大量复杂的应用需求促使整个产业蓬勃发展至今. GPU英文全称Graphic Pro ...
- C++ AMP异构并行编程解析
C++ AMP异构并行编程解析 原文发表于<程序员>杂志2012年第4期,略有改动. 文 / 陈冠诚 微软在今年2月份的GoingNative大会上正式对外发布了C++ AMP(Accel ...
最新文章
- 深入浅出WPF——附加事件(Attached Event)
- 编译Linux内核的详细过程
- sql 按时间二段排序
- 利用melendy插入参考文献_四苯基卟啉在改性磷酸锆层间的插入及荧光增强
- [Node.js] 模块化 -- 中间件和跨域
- MVC 使用Jquery实现AJax
- MssqlOnLinux 主从集群【2】
- win11beta版如何升级正式版 Windows11beta升级正式版的步骤方法
- Oracle 11g vs 12c 内存、优化器等默认参数对比
- 2011年国庆老家记录
- 商城购物车php代码,php网上商城购物车代码一例
- OD调试初体验—关闭x86版winrar广告弹窗
- Windows 7安装超级终端连接COM口设备
- linux syslinux u盘,如何使用syslinux做一个开启U盘?
- 万字长文深度剖析面向对象的javascript
- C#如何遍历文件夹下的所有文件
- SAP ABAP——数据类型(一)【数据类型概要及分类】
- python如何期货交易_能用python的期货交易软件
- easyuefi只能在基于uefi启动的_只需2个命令,就能将win10 BIOS启动方式转换为UEFI,你见过吗!...
- 遇到爬虫、接口盗刷怎么办?反爬虫组件来助你
热门文章
- 深入解析java web_java进阶--深入分析java Web
- 您需要来自pc的权限才能_微信电脑版还是鸡肋吗?微信PC版3.0内测体验
- 超好的Git学习网站
- 【HDU - 5012】Dice(模拟,bfs)
- 【HDU - 5883】The Best Path(判断欧拉回路)
- *【HDU - 1517】【POJ - 2505】A Multiplication Game(博弈,递推找规律或SG函数)
- 两组的数据平均值合并_不要进入数据陷进
- oracle导出建表主键,oracle主键自动生成 配合hibernate的生成策略详解
- mysql爆内存_线上MySQL数据库机器内存爆掉原因分析与解决
- 编译安装mysql5.6.36_MySQL5.6.36编译安装