OpenGL实现通用GPU计算概述
可能比較早一点做GPU计算的开发者会对OpenGL做通用GPU计算,随着GPU计算技术的兴起,越来越多的技术出现,比方OpenCL、CUDA、OpenAcc等,这些都是专门用来做并行计算的标准或者说接口。
OpenGL用来做通用GPU计算主要是利用纹理存储器在GPU中计算以及把结果取回内存,这大概是OpenGL做通用GPU计算最好的选择。
大概的流程主要就是先创建OpenGL的环境,接着创建FBO(帧缓存对象)、纹理、设置纹理參数、然后将纹理绑定到帧缓存对象,最后传输数据到纹理,接着用片段着色器对数据进行处理,最后就是取回数据。
一个简单的样例例如以下:
- #include <stdio.h>
- #include <gl/glew.h>
- #include <gl/glut.h>
- int main(int argc,char** argv)
- {
- int nWidth = 8;
- int nHeight = 3;
- int nSize = nWidth*nHeight;
- //创建输入数据
- float *pfInput = new float[4*nSize];
- float *pfOutput = new float[4*nSize];
- for (int i = 0; i < nSize*4; i ++)
- {
- pfInput[i] = i + 1.5;
- }
- //创建绘制窗体
- glutInit(&argc,argv);
- glutCreateWindow("GPGPU");
- glewInit();
- //创建FBO并绑定
- GLuint fb;
- glGenFramebuffersEXT(1,&fb);
- glBindFramebufferEXT(GL_FRAMEBUFFER_EXT,fb);
- //创建纹理对象并绑定
- GLuint tex;
- glGenTextures(1,&tex);
- glBindTexture(GL_TEXTURE_RECTANGLE_ARB,tex);
- //设置纹理參数
- glTexParameteri(GL_TEXTURE_RECTANGLE_ARB,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
- glTexParameteri(GL_TEXTURE_RECTANGLE_ARB,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
- glTexParameteri(GL_TEXTURE_RECTANGLE_ARB,GL_TEXTURE_WRAP_S,GL_CLAMP);
- glTexParameteri(GL_TEXTURE_RECTANGLE_ARB,GL_TEXTURE_WRAP_T,GL_CLAMP);
- //将纹理关联到FBO
- glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT,GL_COLOR_ATTACHMENT0_EXT,GL_TEXTURE_RECTANGLE_ARB,tex,0);
- //定义纹理数据单元类型
- glTexImage2D(GL_TEXTURE_RECTANGLE_ARB,0,GL_RGBA32F_ARB,nWidth,nHeight,0,GL_RGBA,GL_FLOAT,0);
- //将传输数据到纹理缓存
- glTexSubImage2D(GL_TEXTURE_RECTANGLE_ARB,0,0,0,nWidth,nHeight,GL_RGBA,GL_FLOAT,pfInput);
- //读取数据
- glReadBuffer(GL_COLOR_ATTACHMENT0_EXT);
- glReadPixels(0,0,nWidth,nHeight,GL_RGBA,GL_FLOAT,pfOutput);
- //打印结果
- for (int i = 0; i < nSize*4; i ++)
- {
- printf("%f\t%f\n",pfInput[i],pfOutput[i]);
- }
- //清除资源
- delete []pfInput;
- delete []pfOutput;
- glDeleteFramebuffersEXT(1,&fb);
- glDeleteTextures(1,&tex);
- return 0;
- }
上面的样例。什么也没做。仅仅是将传输数据到GPU,然后原封不动传回来。主要是验证作用。事实上这个样例就是參考GPGPU编程技术-从GLSL、CUDA到OpenCL这本书上的。
OpenGL实现通用GPU计算概述的更多相关文章
- Julia:高性能 GPU 计算的编程语言
Julia:高性能 GPU 计算的编程语言 0条评论 2017-10-31 18:02 it168网站 原创 作者: 编译|田晓旭 编辑: 田晓旭 [IT168 评论]Julia是一种用于数学计 ...
- GPU计算的后CUDA时代-OpenACC(转)
在西雅图超级计算大会(SC11)上发布了新的基于指令的加速器并行编程标准,既OpenACC.这个开发标准的目的是让更多的编程人员可以用到GPU计算,同时计算结果可以跨加速器使用,甚至能用在多核CPU上 ...
- OpenGL研究2.0 计算圆
OpenGL研究2.0 计算圆 DionysosLai2014-06-18 在游戏中.常常有些地方涉及到一些圆的轨迹计算,例如一些转轴类的游戏,人物一般在角色转轴上面运动.这时,我们就要时刻计算角色的 ...
- GPU计算的十大质疑—GPU计算再思考
http://blog.csdn.NET/babyfacer/article/details/6902985 原文链接:http://www.hpcwire.com/hpcwire/2011-06-0 ...
- (Matlab)GPU计算简介,及其与CPU计算性能的比较
1.GPU与CPU结构上的对比 2.GPU能加速我的应用程序吗? 3.GPU与CPU在计算效率上的对比 4.利用Matlab进行GPU计算的一般流程 5.GPU计算的硬件.软件配置 5.1 硬件及驱动 ...
- 多GPU计算
多GPU计算已经可以说,只要是个成熟的模型,都使用了这一点. 例如: gluoncv:https://github.com/dmlc/gluon-cv/blob/master/scripts/dete ...
- OpenCL入门:(二:用GPU计算两个数组和)
本文编写一个计算两个数组和的程序,用CPU和GPU分别运算,计算运算时间,并且校验最后的运算结果.文中代码偏多,原理建议阅读下面文章,文中介绍了OpenCL相关名词概念. http://opencl. ...
- 从 SPIR-V 到 ISPC:将 GPU 计算转化为 CPU 计算
游戏行业越来越多地趋向于将计算工作转移到图形处理单元 (GPU) 中,导致引擎和/或工作室需要开发大量 GPU 计算着色器来处理不同的计算任务.但有时候在 CPU 上运行这些计算着色器非常方便,不必重 ...
- (一)tensorflow-gpu2.0学习笔记之开篇(cpu和gpu计算速度比较)
摘要: 1.以动态图形式计算一个简单的加法 2.cpu和gpu计算力比较(包括如何指定cpu和gpu) 3.关于gpu版本的tensorflow安装问题,可以参考另一篇博文:https://www.c ...
随机推荐
- 回顾 Exchange 2007 SCC 安装-供需要的人参考!
最近可能会涉及到一个项目的升级,客户目前是基于SCC+SCR的一种工作模式,因为之前对SCR 了解很少,所以需要搭建一个SCC+SCR 平台来做一个整体的POC,来还原整个安装和升级过程. 首先我们先 ...
- fortran中提取字符串中可见字符的索引
fortran中常常需要提取字符串中可见字符的索引,下面是个小例子: !============================================================= su ...
- 样条之贝塞尔(Bezier)
我曾经发过两篇关于贝塞尔的文章:数学图形(1.47)贝塞尔(Bézier)曲线,数学图形之贝塞尔(Bézier)曲面.那是使用我自己定义的脚本语言生成贝塞尔图形.由于我自己定义的脚本语法功能有限,所以 ...
- C++11 std::shared_ptr总结与使用
最近看代码,智能指针用的比较多,自己平时用的少,周末自己总结总结.方便后续使用. std::shared_ptr大概总结有以下几点: (1) 智能指针主要的用途就是方便资源的管理,自动释放没有指针引用 ...
- MultipleRegularExpressionAttribute MVC中扩展自定义验证规则
好久都没有写博客,最近工作中没有什么可写的,公司的项目是以业务为重,技术含量实在不咋的.这次sprint中有一个要求就是password必须一些规则,比如给你一些正则表达式必须满足几个,直接看效果吧 ...
- 使用Spring Cloud Security OAuth2搭建授权服务
阅读数:84139 前言: 本文意在抛砖引玉,帮大家将基本的环境搭起来,具体实战方案还要根据自己的业务需求进行制定.我们最终没有使用Spring Security OAuth2来搭建授权服务,而是完全 ...
- Android -- Annotation
Override Annotation @Override public void onCreate(Bundle savedInstanceState){}; 概念 An annotation is ...
- ML、DL相关资源
1. http://x-algo.cn/index.php/category/nlp/
- win7下使用Taste实现协同过滤算法
如果要实现Taste算法,必备的条件是: 1) JDK,使用1.6版本.需要说明一下,因为要基于Eclipse构建,所以在设置path的值之前要先定义JAVA_HOME变量. 2) Maven,使用2 ...
- CMake can't find GLEW
Q: I'm on Windows and there is a FindGLEW.cmake file in my CMake modules folder, presumably put th ...