OpenCL 操作context

本程序主要测试:

context = clCreateContext(NULL, 1, &device, NULL, NULL, &err);

创建一个context

clRetainContext(context);//Context的reference +1

clReleaseContext(context);//Context的reference -1

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#ifdef MAC
#include <OpenCL/cl.h>
#else
#include <CL/cl.h>
#endif

namespace context_count
{

int run()
{
	cl_platform_id platform;
	cl_device_id device;
	cl_context context;
	cl_int err;
	cl_uint ref_count;

	err = clGetPlatformIDs(1, &platform, NULL);
	if(err < 0) {
		perror("Couldn't find any platforms");
		exit(1);
	}

	err = clGetDeviceIDs(platform, CL_DEVICE_TYPE_GPU, 1, &device, NULL);
	if(err == CL_DEVICE_NOT_FOUND) {
		err = clGetDeviceIDs(platform, CL_DEVICE_TYPE_CPU, 1, &device, NULL);
	}
	if(err < 0) {
		perror("Couldn't find any devices");
		exit(1);
	}

	/* 创建 context */
	context = clCreateContext(NULL, 1, &device, NULL, NULL, &err);
	if(err < 0) {
		perror("Couldn't create a context");
		exit(1);
	}

	/* 获取reference count的数量,使用ref_count返回值*/
	err = clGetContextInfo(context, CL_CONTEXT_REFERENCE_COUNT,
		sizeof(ref_count), &ref_count, NULL);
	if(err < 0) {
		perror("Couldn't read the reference count.");
		exit(1);
	}
	printf("Initial reference count: %u\n", ref_count);

	/* 每次函数访问context的时候,调用clRetainContext,就是把context reference + 1,因为context并不是像platform和device那样delete的,而是clRetainContext的时候+1,当调用clReleaseContext的时候-1,当为零的时候,系统自动删除context。这就可以方便cl_context数据存活超过创建它的函数,可以让第三方库什么的继续访问context */
	clRetainContext(context);clRetainContext(context);
	clGetContextInfo(context, CL_CONTEXT_REFERENCE_COUNT,
		sizeof(ref_count), &ref_count, NULL);
	printf("Reference count: %u\n", ref_count);			

	clReleaseContext(context);
	clGetContextInfo(context, CL_CONTEXT_REFERENCE_COUNT,
		sizeof(ref_count), &ref_count, NULL);
	printf("Reference count: %u\n", ref_count);			

	clReleaseContext(context);clReleaseContext(context);
	system("pause");
	return 0;
}

}

OpenCL 操作context,布布扣,bubuko.com

时间: 2024-11-01 22:29:33

OpenCL 操作context的相关文章

OpenCL之简单的向量加法实现

向量加法 程序流程 创建平台 选择设备 创建上下文 创建命令队列 创建程序对象 编译程序 开辟内存 创建Kernel对象 设置Kernel参数 运行Kernel 拷贝结果回主机 释放资源 完整代码 效果截图 Hello World 代码如下 向量加法 程序流程 创建平台 //创建平台对象 status = clGetPlatformIDs( 1, &platform, NULL ); 注意:上式是选择默认的第一个平台.如果我们系统中安装不止一个opencl平台,如何选择自己需要的平台? 比如我现

循序渐进学.Net Core Web Api开发系列【9】:常用的数据库操作

系列目录 循序渐进学.Net Core Web Api开发系列目录 本系列涉及到的源码下载地址:https://github.com/seabluescn/Blog_WebApi 一.概述 本篇描述一些常用的数据库操作,包括:条件查询.排序.分页.事务等基本数据库操作.试验的数据库为MySQL. 二.条件查询1.查询所有记录 List<Article> articles = _context.Articles.ToList<Article>(); 2.根据主键进行查询 Articl

聊聊golang的context

golang的context的主要用途在于在多个goroutine之间传递数据,管理多个goroutine的生命周期.实际的应用场景有比如,在http服务中,每个请求就对应一个goroutine,而请求之中可能又会调用别的api,而产生更多的goroutine,用context来管理这些goroutine就能比较方便在这些goroutine中传递数据和管理. 主要方法 func Background() Context Background() 返回一个空的context,这是一个根节点. fu

Django的模板系统

模板系统介绍 模板系统的组成:HTML代码和逻辑控制代码 逻辑控制代码可以理解是django模板语言 django的模板语言组成 变量(使用双大括号来引用变量): 标签(tag)的使用(使用大括号和百分比的组合来表示使用tag) 模板继承 模板语言之变量 语法: {{var_name}} var_name 指变量名 使用模板语言之前: 先介绍template对象和Context对象 进入django的项目的交互环境 python manange.py shell >>> from dja

Struts2学习总结(3)

本文包括以下五个部分: 值栈. Ognl表达式. struts2标签库. 国际化. 表单数据校验 拦截器. struts2的执行过程. 一.值栈 采用servlet和JSP开发时,servlet通过域对象保存数据,在JSP页面通过jstl标签+el表达式获取数据. 采用struts2和JSP框架进行开发时,Action通过值栈对象保存数据,在JSP页面通过struts标签+ognl表达式获取数据. 1.1 值栈(ValueStack)的概念 值栈就是存放action的堆栈,用来存储请求响应数据,

基于OpenGL ES 的深度学习框架编写

基于OpenGL ES的深度学习框架编写 背景与工程定位 背景 项目组基于深度学习实现了视频风格化和人像抠图的功能,但这是在PC/服务端上跑的,现在需要移植到移动端,因此需要一个移动端的深度学习的计算框架. 同类型的库 caffe-android-lib 目前应该是最便于集成使用的深度学习框架库. tensorflow和mxnet据说也有对应的android库,因时间原因暂未测试. CNNdroid,网址https://zhuanlan.zhihu.com/p/25259452,这个是用 ren

nginx+tomcat集群+redis(memcache)session共享!

nginx+tomcat+redissession共享 常用保持session的方式: 1.一些代理(比如nginxIP_hash) 1.使用数据库来存储Session 2.使用Cookie来存储Session                       3.使用Redis来存储Sesssion(memcache也可以) --   环境: 192.168.1.220   nginx    centos6.6   端口:80 版本:1.9.2 192.168.1.224   tomcatA  ce

《JAVASCRIPT高级程序设计》Canvas绘图-2D上下文

Canvas是HTML5添加的新元素,这个元素负责在页面中设定一个区域,然后通过JavaScript动态的在这个区域绘制图形.<canvas>由几组API组成,除了具备基本绘图能力的2D上下文,<canvas>还建议了一个名为WebGL的3D上下文,目前,支持该元素的浏览器都支持2D上下文,但对WebGL的支持还不够好.以下仅介绍2D上下文. 一.2D上下文 1.进行填充和描边 2D上下文的两种基本绘图操作是填充和描边:填充,是指的用指定的样式填充图形:描边,就是只在图像边缘划线.

HTML5css3学习总结(4)canvas绘图

canvas HTML5 重中之重 canvas是HTML5中的重点:今天简单的学习了一下,总结一下canvas的概念:canvas是要有面向对象的思维:各个标签就像我们画水彩画一样,需要注意标签使用的顺序canvas就是一个画布:可以画线,图形,填充等.操作图片和文本.操作方式是使用js:可以提供2d图形,3d图形绘制: canvas使用:①<canvas id='myCanvas' width='500' height='500'></canvas>需要有一个ID ,画布的尺寸