GPGPU OpenCL编程步骤与简单实例

1.OpenCL概念

OpenCL是一个为异构平台编写程序的框架,此异构平台可由CPUI、GPU或其他类型的处理器组成。 OpenCL由一门用于编写kernels (在OpenCL设备上运行的函数)的语言(基于C99)和一组用于定义并 控制平台的API组成。

OpenCL提供了两种层面的并行机制:任务并行与数据并行。

2.OpenCL与CUDA的区别

不同点:OpenCL是通用的异构平台编程语言,为了兼顾不同设备,使用繁琐。

CUDA是nvidia公司发明的专门在其GPGPU上的编程的框架,使用简单,好入门。

相同点:都是基于任务并行与数据并行。

3.OpenCL的编程步骤

(1)Discover and initialize the platforms

调用两次clGetPlatformIDs函数,第一次获取可用的平台数量,第二次获取一个可用的平台。

(2)Discover and initialize the devices

调用两次clGetDeviceIDs函数,第一次获取可用的设备数量,第二次获取一个可用的设备。

(3)Create  a context(调用clCreateContext函数)

上下文context可能会管理多个设备device。

(4)Create a command queue(调用clCreateCommandQueue函数)

一个设备device对应一个command queue。

上下文conetxt将命令发送到设备对应的command queue,设备就可以执行命令队列里的命令。

(5)Create device buffers(调用clCreateBuffer函数)

Buffer中保存的是数据对象,就是设备执行程序需要的数据保存在其中。

Buffer由上下文conetxt创建,这样上下文管理的多个设备就会共享Buffer中的数据。

(6)Write host data to device buffers(调用clEnqueueWriteBuffer函数)

(7)Create and compile the program

创建程序对象,程序对象就代表你的程序源文件或者二进制代码数据。

(8)Create the kernel(调用clCreateKernel函数)

根据你的程序对象,生成kernel对象,表示设备程序的入口。

(9)Set the kernel arguments(调用clSetKernelArg函数)

(10)Configure the work-item structure(设置worksize)

配置work-item的组织形式(维数,group组成等)

(11)Enqueue the kernel for execution(调用clEnqueueNDRangeKernel函数)

将kernel对象,以及 work-item参数放入命令队列中进行执行。

(12)Read  the output buffer back to the host(调用clEnqueueReadBuffer函数)

(13)Release OpenCL resources(至此结束整个运行过程)

时间: 2024-12-09 17:12:58

GPGPU OpenCL编程步骤与简单实例的相关文章

Win Socket编程原理及简单实例

[转]http://www.cnblogs.com/tornadomeet/archive/2012/04/11/2442140.html  使用Linux Socket做了小型的分布式,如Linux C Socket编程原理及简单实例. 为了更好地分布也得看看Win Socket. Win Socket TCP原理图: Win Socket UDP原理图:    简单TCP连接实例: 服务器端: 1 #include <WINSOCK2.H> 2 #include <stdio.h&g

Linux C Socket编程原理及简单实例

部分转自:http://goodcandle.cnblogs.com/archive/2005/12/10/294652.aspx 1.   什么是TCP/IP.UDP? 2.   Socket在哪里呢? 3.   Socket是什么呢? 4.   有很多的框架,为什么还在从Socket开始? 5.   Linux C Socket简单示例   1.什么是TCP/IP.UDP? TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控

用fileupload组件实现的大文件上传简单实例_JSP编程

1.FileUploadServlet.java文件,实现上传处理 import java.io.File; import java.io.IOException; import java.io.PrintWriter; import java.text.DecimalFormat; import java.util.Iterator; import java.util.List; import javax.servlet.ServletException; import javax.servl

C#中的cookie编程简单实例与说明

这篇文章介绍了C#中的cookie编程简单实例与说明,有需要的朋友可以参考一下   复制代码 代码如下: using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Web; using System.Web.SessionState; using System.Web.UI; using System.Web.

jsp页面中两种方法显示当前时间的简单实例_JSP编程

在jsp页面实现显示当前的日期时间,我们可以用一下两种方式实现: 1. 通过在jsp页面添加Java代码实现,主要代码如下所示 java.text.SimpleDateFormat simpleDateFormat = new java.text.SimpleDateFormat( "yyyy-MM-dd HH:mm:ss"); java.util.Date currentTime = new java.util.Date(); String time = simpleDateForm

jsp输出九九乘法表的简单实例_JSP编程

<% String st = ""; for(int i = 1; i <= 9; i++){ for(int j = 1; j <= i; j++){ st += j+"x"+i+"="+i*j; st += "  "; } st += "<br>"; } %> <table width="400" height="200"

jsp登录页面的简单实例 雏形_JSP编程

jsp登录页面的简单实例 雏形 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.d

jsp输出金字塔的简单实例_JSP编程

jsp输出金字塔的简单实例 <% String str = ""; for(int i = 1; i <= 5; i++){ for(int j = 1; j <= 5-i; j++){ str +="    "; } for(int k = 1; k <= 2*i-1; k++){ str +="☆"; } str +="<br>"; } %> <%= str %> 以上

JQuery解析XML数据的几个简单实例_jquery

用JavaScript解析XML数据是常见的编程任务,JavaScript能做的,JQuery当然也能做.下面我们来总结几个使用JQuery解析XML的例子. 第一种方案: <script type="text/javascript"> $(document).ready(function() { $.ajax({ url: 'http://www.jb51.net/cgi/test.xml', dataType: 'xml', success: function(data