CN116308995A - OpenCL与OpenGL混合的图像计算显示方法 - Google Patents
OpenCL与OpenGL混合的图像计算显示方法 Download PDFInfo
- Publication number
- CN116308995A CN116308995A CN202310279826.5A CN202310279826A CN116308995A CN 116308995 A CN116308995 A CN 116308995A CN 202310279826 A CN202310279826 A CN 202310279826A CN 116308995 A CN116308995 A CN 116308995A
- Authority
- CN
- China
- Prior art keywords
- opencl
- opengl
- image
- kernel
- computing
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/60—Memory management
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Image Generation (AREA)
Abstract
本发明公开了提供一种OpenCL与OpenGL混合的图像计算显示方法,该方法首先生成一块OpenCL与OpenGL可共同操作的显存空间,随后利用OpenCL多线程并行技术对图像灰度化计算进行加速处理,而后将OpenCL计算后的结果数据拷贝到共享显存中,最后利用OpenGL技术对共享显存中的数据进行渲染显示,整个计算显示过程实时性高、处理效果良好。
Description
技术领域
本发明涉及高性能计算与图形显示领域,具体涉及一种OpenCL与OpenGL混合的图像计算显示方法。
背景技术
随着计算能力和可编程性的不断增强,越来越多的算法被成功移植到GPU(通用图形处理器)平台上,并取得了很好的加速效果。OpenCL(Open Computing Language,开放式计算语言)是面向异构计算平台的通用编程框架,由一门编写kernel的语言(基于C99)和一组用于定义和控制平台的API来组成,主要用于并行运算方面,其将计算设备组织成一个统一的混合计算平台,为实现GPU通用计算程序的跨平台移植提供了解决方案。与此同时,GPU本身作为图形处理器,在渲染显示方面有着极大的处理效率,OpenGL(Open GraphicsLibrary,开放式图形库)是面向GPU平台用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口,用来绘制从简单的图形比特到复杂的三维景象。
图像灰度化是图像处理领域内较为广泛应用的算法,为了提高计算效率,减少计算延时,同时为了将计算后的结果数据进行渲染显示,减少数据在CPU与GPU之间的来回传输问题。OpenCL与OpenGL混合编程互操作技术则是利用OpenCL技术将图像灰度化算法进行加速处理,并将计算后的结果放在OpenCL与OpenGL可同时看到的一块共享区域内存中,随后OpenGL将处理后的灰度化图像数据生成纹理信息进行渲染显示。
目前对图像灰度化算法的加速主要是利用CPU中央处理器进行SIMD(单指令多数据流)方面上的加速,因CPU寄存器最大长度只有128位,对于32位单精度浮点型数据而言,一次也只能处理4个数据,最大加速效率也只能提升4倍。而GPU优势在于其拥有非常多的计算核心数,由此便可利用SIMT(单指令多线程)计算同时并发计算核心,每个计算核心可完成一个或多个数据的灰度化处理算法,其加速效率一般可在20~100倍之间。传统方法的渲染显示一般是将CPU内存上的数据传到GPU中,随后利用OpenGL进行显示处理,而我们的结果数据已经在GPU中,故让OpenGL可以直接访问到我们OpenCL处理后的数据,不在让数据经过GPU(OpenCL)->CPU->GPU(OpenGL),带来不必要的传输延时成为整个高效计算显示的关键。
发明内容
本发明的发明目的在于提供一种OpenCL与OpenGL混合的图像计算显示方法,该方法首先生成一块OpenCL与OpenGL可共同操作的显存空间(共享显存),随后利用OpenCL多线程并行技术对图像灰度化计算进行加速处理,而后将OpenCL计算后的结果数据拷贝到共享显存中,最后利用OpenGL技术对共享显存中的数据进行渲染显示,整个计算显示过程实时性高、处理效果良好。
本发明的发明目的通过以下技术方案实现:
一种OpenCL与OpenGL混合的图像计算显示方法,步骤如下:
步骤1,OpenGL窗口和OpenGL上下文初始化;
步骤2,OpenCL上下文及命令队列、视频图像对象cl_mem、kernel对象、内核对象初始化;
步骤3,利用OpenCL编写图像灰度化并行算法kernel,根据输入图像的宽w、高h动态建立w*h个线程,同时生成程序对象和实例化kernel;
步骤4,实时获取视频流,运用步骤2中创建的视频图像对象cl_mem将视频按帧输入到OpenCL内核中,根据步骤2中创建的命令队列执行步骤3图像灰度化并行算法kernel,将GPU OpenCL生成图像灰度化后的图像结果数据放到共享的缓存对象中;
步骤5,利用OpenGL生成显示区域顶点、纹理信息,将步骤4中的OpenCL计算的灰度化图像直接进行显示。
优选地,步骤1,通过调用OpenGL GLFW glfwWindowHint和glfwCreateWindow创建最终显示的OpenGL窗口,在OpenGL窗口的基础上调用glfwMakeContextCurrent生成OpenGL上下文glContext。
优选地,在步骤2中:
首先通过调用OpenCL API函数,查询当前主机端有哪些支持OpenCL的平台,选择执行图像计算的平台,创建平台对象,查询该平台对象下的异构计算设备,选择异构计算设备创建设备对象GPU,在步骤1glContext基础上调用wglGetCurrentDC、wglGetCurrentContext与clCreateContext创建一个OpenCL上下文Clcontext,该OpenCL上下文用来管理平台、异构计算设备、kernel对象、内核;
然后利用clCreateImage2D创建视频图像对象cl_mem,同时利用clCreateFromGLTexture2D创建OpenGL与OpenCL共享的一段缓存对象;
最后在GPU上,在clContext上创建命令队列clCommandQueue进行程序的调度。
优选地,在步骤3中,查询GPU平台的调度单元数量,将此调度单元数量作为局部工作组线程数,在每个线程上利用如下公式计算转化后的灰度值Gray,其中B、G、R分别为像素的三通道颜色分量值,每个线程要根据自己的ID正确索引到图像数据,将转化后的灰度值存放到步骤2中的共享的缓存中;
Gray=0.299f*B+0.587f*G+0.114f*R。
优选地,在步骤4中,还包含通过clFinsh来同步每一个线程的计算结果,将GPUOpenCL生成图像灰度化后的图像结果数据放到共享的缓存对象中。
优选地,在步骤4中,还包含在调用kernel计算前,调用clEnqueueAcquireGLObjects保证OpenCL正常访问缓存,在计算完成后,调用clEnqueueReleaseGLObjects解锁缓存,保证OpenGL拿到结果数据去绘制渲染显示。
优选地,步骤5中,调用GLFW接口glBegin(GL_QUADS)生成窗口的顶点着色器信息,同时调用clEnqueueCopyBufferToImage将图像数据处理为OpenGL的纹理数据信息,最终将OpenCL计算的灰度化图像显示出来。
本发明的有益效果在于:
1、利用OpenCL单指令多线程加速灰度计算,提高计算实时性。
2、利用OpenCL与OpenGL的共享内存模式,减少数据在CPU之间的传递,从而减低整个显示系统的延时,使显示系统更加流畅。
附图说明
图1是实施例所示的一种OpenCL与OpenGL混合的图像计算显示方法的整体框图。
图2是实施例中灰度化后的结果图像。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。
参见图1所示,本实施例所示的一种OpenCL与OpenGL混合的图像计算显示方法,采用OpenCL通用计算框架加速图像计算部分,可以在任意支持OpenCL计算的设备上实现,代码移植性较强;同时采用OpenGL通用图形渲染框架加速图像显示部分,主要步骤如下:
步骤1,OpenGL窗口和OpenGL上下文初始化。
通过调用OpenGL GLFW glfwWindowHint和glfwCreateWindow等API函数创建最终显示的OpenGL窗口,在OpenGL窗口的基础上调用glfwMakeContextCurrent生成OpenGL上下文glContext。
步骤2,OpenCL上下文及命令队列、视频图像对象、kernel对象、内核对象初始化。
首先通过调用OpenCL API函数,查询当前主机端有哪些支持OpenCL的平台,选择执行图像计算的平台,创建平台对象,查询该平台对象下的异构计算设备,选择异构计算设备创建设备对象GPU,在步骤1glContext基础上调用wglGetCurrentDC、wglGetCurrentContext与clCreateContext创建一个OpenCL上下文Clcontext,该OpenCL上下文用来管理平台、异构计算设备、kernel对象、内核等OpenCL资源。
然后利用clCreateImage2D创建视频图像对象cl_mem,同时利用clCreateFromGLTexture2D创建OpenGL与OpenCL共享的一段缓存对象。该缓存对象用于存放OpenCL灰度化后的结果图像数据,可供计算OpenCL和OpenGL分时复用,两者都可访问到这段缓存对象,但CPU却看不见这块缓存对象。当利用GPU OpenCL计算完成后,将计算结果放在该共享的缓存对象中,随后GPU OpenGL便可从这段共享内存中直接访问计算结果数据进行显示。相较于之前传统的计算显示方案,即GPU OpenCL计算完成后的结果数据一般都是通过CPU搬移到CPU可见的内存上,然后再通过CPU将这段内存的数据搬移到GPU OpenGL的内存中。本发明减少了数据在CPU与GPU之间的两次搬移时间,大大提高了计算显示的效率。
最后在GPU上,在clContext上创建命令队列clCommandQueue进行程序的调度。
步骤3,利用OpenCL编写图像灰度化并行算法kernel,根据输入图像的宽(w)高(h)动态建立w*h个线程,同时生成程序对象和实例化kernel。
图像灰度化算法即将图像中的每一个像素的三通道数据进行灰度化运算。但由于CPU是冯诺依曼架构,每一个像素的灰度化运算只能串行处理,即一个像素处理完成后才能进行下一个像素的计算,而GPU存在较多的运算资源,图像灰度化并行算法kernel将根据输入图像的宽(w)高(h)动态建立w*h个全局线程数,同时为了保证计算效率的最大化,结合各自GPU硬件信息,查询GPU平台的调度单元数量,将此调度单元数量作为局部工作组线程数以满足OpenCL硬件单元调度机制。在每个线程上利用如下公式计算转化后的灰度值Gray,其中B、G、R分别为像素的三通道颜色分量值,每个线程要根据自己的ID正确索引到图像数据,将转化后的灰度值存放到步骤2中的共享的缓存中。
Gray=0.299f*B+0.587f*G+0.114f*R
使用图像灰度化并行算法kernel可对图像中的每一个像素进行并行加速处理,各个像素灰度化之间的运算前后没有依赖关系,每一个线程作为独立的工作项同时开展灰度化运算,从而实现计算上的高效处理。
步骤4,实时获取视频流,运用步骤2中创建的视频图像对象cl_mem将视频按帧输入到OpenCL内核中,根据步骤2中创建的命令队列执行步骤3图像灰度化并行算法kernel,由于GPU OpenCL每一个线程工作项之间的运算前后没有依赖顺序关系,故最后通过clFinsh来同步每一个线程的计算结果,将GPU OpenCL生成图像灰度化后的图像结果数据放到共享的缓存对象中;
因步骤2中的缓存对象为共享内存,即在OpenCL与OpenGL是无法同时访问的,必须加锁以保证数据访问的冲突。故在在调用kernel计算前,须调用clEnqueueAcquireGLObjects保证OpenCL可正常访问,在计算完成后,调用clEnqueueReleaseGLObjects解锁保证OpenGL可拿到结果数据去绘制渲染显示。
步骤5,利用OpenGL生成显示区域顶点、纹理信息,将步骤4中的OpenCL计算的灰度化图像直接进行显示。
当步骤4处理完成后,OpenGL可正常访问到共享内存中的灰度化图像数据,调用GLFW接口glBegin(GL_QUADS)生成窗口的顶点着色器信息,同时调用clEnqueueCopyBufferToImage将图像数据处理为OpenGL可用的纹理数据信息,最终便可将OpenCL计算的灰度化图像显示出来,中间不需要CPU在参与数据的搬移过程。
在本实施例中,步骤1中在利用GPU的独有的显示优势进行窗口的绘制。步骤2与步骤3在GPU中建立大量工作项,每一个工作项作为独立线程,可共同并行执行灰度化核函数算法。步骤4中,程序申请OpenCL与OpenGL可共同访问的一段内存,在算法执行完成后不需要将OpenCL的计算结果拷贝到CPU,再从CPU到OpenGL申请的显存中,减小数据的来回拷贝延时。步骤5中OpenGL可将共享内存中的数据生成纹理信息直接进行显示,减少数据在CPU上的搬移。
为验证本实施例提供的一种OpenCL与OpenGL混合的图像计算显示方法的功效,本实例对一路4K视频进行灰度化显示实验。图2为对图像灰度化后的图像,整体视觉效果良好。同时对比OpenCL与OpenGL混合编程直接显示与需要CPU搬移数据显示的耗时,发现OpenCL与OpenGL混合编程直接显示在1ms内便可完成1张4k图像灰度化显示,系统延时较小,显示流畅,而需要CPU搬移数据的显示方式时间为20ms,系统延时较大。
可以理解的是,对本领域普通技术人员来说,可以根据本发明的技术方案及其发明构思加以等同替换或改变,而所有这些改变或替换都应属于本发明所附的权利要求的保护范围。
Claims (7)
1.一种OpenCL与OpenGL混合的图像计算显示方法,其特征在于步骤如下:
步骤1,OpenGL窗口和OpenGL上下文初始化;
步骤2,OpenCL上下文及命令队列、视频图像对象、kernel对象、内核对象初始化;
步骤3,利用OpenCL编写图像灰度化并行算法kernel,根据输入图像的宽w、高h动态建立w*h个线程;
步骤4,实时获取视频流,运用步骤2中创建的视频图像对象cl_mem将视频按帧输入到OpenCL内核中,根据步骤2中创建的命令队列执行步骤3图像灰度化并行算法kernel,将GPUOpenCL生成图像灰度化后的图像结果数据放到共享的缓存对象中;
步骤5,利用OpenGL生成显示区域顶点、纹理信息,将步骤4中的OpenCL计算的灰度化图像直接进行显示。
2.根据权利要求1所述的一种OpenCL与OpenGL混合的图像计算显示方法,其特征在于步骤1,通过调用OpenGL GLFW glfwWindowHint和glfwCreateWindow创建最终显示的OpenGL窗口,在OpenGL窗口的基础上调用glfwMakeContextCurrent生成OpenGL上下文glContext。
3.根据权利要求1所述的一种OpenCL与OpenGL混合的图像计算显示方法,其特征在于步骤2中:
首先通过调用OpenCL API函数,查询当前主机端有哪些支持OpenCL的平台,选择执行图像计算的平台,创建平台对象,查询该平台对象下的异构计算设备,选择异构计算设备创建设备对象GPU,在步骤1glContext基础上调用wglGetCurrentDC、wglGetCurrentContext与clCreateContext创建一个OpenCL上下文Clcontext,该OpenCL上下文用来管理平台、异构计算设备、kernel对象、内核;
然后利用clCreateImage2D创建视频图像对象cl_mem,同时利用clCreateFromGLTexture2D创建OpenGL与OpenCL共享的一段缓存对象;
最后在GPU上,在clContext上创建命令队列clCommandQueue进行程序的调度。
4.根据权利要求1所述的一种OpenCL与OpenGL混合的图像计算显示方法,其特征在于步骤3中,查询GPU平台的调度单元数量,将此调度单元数量作为局部工作组线程数,在每个线程上利用如下公式计算转化后的灰度值Gray,其中B、G、R分别为像素的三通道颜色分量值,每个线程要根据自己的ID正确索引到图像数据,将转化后的灰度值存放到步骤2中的共享的缓存中;
Gray=0.299f*B+0.587f*G+0.114f*R。
5.根据权利要求1所述的一种OpenCL与OpenGL混合的图像计算显示方法,其特征在于步骤4中,还包含通过clFinsh来同步每一个线程的计算结果,将GPU OpenCL生成图像灰度化后的图像结果数据放到共享的缓存对象中。
6.根据权利要求1所述的一种OpenCL与OpenGL混合的图像计算显示方法,其特征在于步骤4中,还包含在调用kernel计算前,调用clEnqueueAcquireGLObjects保证OpenCL正常访问缓存,在计算完成后,调用clEnqueueReleaseGLObjects解锁缓存,保证OpenGL拿到结果数据去绘制渲染显示。
7.根据权利要求1所述的一种OpenCL与OpenGL混合的图像计算显示方法,其特征在于步骤5中,调用GLFW接口glBegin(GL_QUADS)生成窗口的顶点着色器信息,同时调用clEnqueueCopyBufferToImage将图像数据处理为OpenGL的纹理数据信息,最终将OpenCL计算的灰度化图像显示出来。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310279826.5A CN116308995A (zh) | 2023-03-20 | 2023-03-20 | OpenCL与OpenGL混合的图像计算显示方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310279826.5A CN116308995A (zh) | 2023-03-20 | 2023-03-20 | OpenCL与OpenGL混合的图像计算显示方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116308995A true CN116308995A (zh) | 2023-06-23 |
Family
ID=86783118
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310279826.5A Pending CN116308995A (zh) | 2023-03-20 | 2023-03-20 | OpenCL与OpenGL混合的图像计算显示方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116308995A (zh) |
-
2023
- 2023-03-20 CN CN202310279826.5A patent/CN116308995A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11010858B2 (en) | Mechanism to accelerate graphics workloads in a multi-core computing architecture | |
US10229529B2 (en) | System, method and computer program product for implementing anti-aliasing operations using a programmable sample pattern table | |
US11859973B2 (en) | Large scale CNN regression based localization via two-dimensional map | |
EP3008701B1 (en) | Using compute shaders as front end for vertex shaders | |
US10636112B2 (en) | Graphics processor register data re-use mechanism | |
CN106575430B (zh) | 用于像素哈希的方法和装置 | |
US10565670B2 (en) | Graphics processor register renaming mechanism | |
US10318292B2 (en) | Hardware instruction set to replace a plurality of atomic operations with a single atomic operation | |
US10776156B2 (en) | Thread priority mechanism | |
US9477477B2 (en) | System, method, and computer program product for executing casting-arithmetic instructions | |
US10546411B2 (en) | Directed acyclic graph path enumeration with application in multilevel instancing | |
US20170132833A1 (en) | Programmable per pixel sample placement using conservative rasterization | |
CN110807827A (zh) | 系统生成稳定的重心坐标和直接平面方程访问 | |
TWI720981B (zh) | 用於處理需要相加數個乘法結果之指令的方法、設備和非暫態電腦可讀取媒體 | |
US10552211B2 (en) | Mechanism to increase thread parallelism in a graphics processor | |
WO2017172032A1 (en) | System and method of caching for pixel synchronization-based graphics techniques | |
US10769751B2 (en) | Single input multiple data processing mechanism | |
CN116308995A (zh) | OpenCL与OpenGL混合的图像计算显示方法 | |
TW201635243A (zh) | 當複合物件在圖形影像中無法產生可見改變時促進圖形處理單元中此等物件之淘汰的技術 | |
CN115205091A (zh) | 动态场景中改进的时间降噪器质量 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |