CN107291559A - 一种控制cpu线程和gpu线程同步的方法及装置 - Google Patents
一种控制cpu线程和gpu线程同步的方法及装置 Download PDFInfo
- Publication number
- CN107291559A CN107291559A CN201710523425.4A CN201710523425A CN107291559A CN 107291559 A CN107291559 A CN 107291559A CN 201710523425 A CN201710523425 A CN 201710523425A CN 107291559 A CN107291559 A CN 107291559A
- Authority
- CN
- China
- Prior art keywords
- gpu
- fence
- signal
- line journey
- cpu line
- 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
Classifications
-
- 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/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
-
- 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/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/543—Local
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Image Generation (AREA)
Abstract
本发明公开了一种控制CPU线程和GPU线程同步的方法,包括:在GPU进行图像帧渲染时,为GPU线程创建GPU栅栏,GPU栅栏的初始状态为关闭状态;为CPU线程创建信号事件,信号事件的初始状态为无信号状态;将GPU栅栏和所述信号事件进行绑定;调用预设函数将CPU线程挂起,并等待信号事件变为有信号状态;在GPU完成对图像帧的渲染时,将GPU栅栏打开,并将信号事件设置为有信号状态,从而通过预设函数将CPU线程唤醒。本发明实现了在Direct3D 12上程序逻辑与程序画面同步的技术效果。同时,本发明还公开了一种控制CPU线程和GPU线程同步的装置。
Description
技术领域
本发明涉图像处理技术领域,尤其涉及一种控制CPU线程和GPU线程同步的方法及装置。
背景技术
当程序运行的指令运行在CPU(Central Processing Unit,中央处理器)中时,只要上一条指令运行完,就可以判定该任务执行完成,然后即可进行后面的任务。但是,当指令运行在GPU(Graphics Processing Unit,图形处理器)中时,在某些情况下,可能需要明确的知道运行在GPU中的指令是否完成,若确定已完成,再进行后面的任务。
在Direct3D 9到Direct3D 11的图形开发API(Application Program Interface,应用编程接口)中,显示函数都是同步的,也就是说,CPU会等到GPU将绘制指令执行完成后才返回。
但是,到了Direct3D 12,显示函数是异步的,也就是说,CPU线程和GPU线程不同步,CPU不会等到GPU执行完成后才返回,而是直接就返回了。这样就造成了一个很大的问题,那就是程序逻辑与程序画面的不同步。例如:在运行游戏程序时,游戏逻辑已经到了T2时刻,而屏幕上显示出来的游戏画面还是先前的T1时刻的内容。
发明内容
本申请实施例通过提供一种控制CPU线程和GPU线程同步的方法及装置,解决了现有技术中,在Direct3D 12上存在的程序逻辑与程序画面难以同步的技术问题,实现了在Direct3D 12上程序逻辑与程序画面同步的技术效果。
第一方面,本申请通过本申请的一实施例提供如下技术方案:
一种控制CPU线程和GPU线程同步的方法,包括:
在GPU进行图像帧渲染时,为GPU线程创建GPU栅栏,所述GPU栅栏的初始状态为关闭状态;
为CPU线程创建信号事件,所述信号事件的初始状态为无信号状态;
将所述GPU栅栏和所述信号事件进行绑定;
调用预设函数将所述CPU线程挂起,并等待所述信号事件变为有信号状态;
在所述GPU完成对所述图像帧的渲染时,将所述GPU栅栏打开,并将所述信号事件设置为所述有信号状态,从而通过所述预设函数将所述CPU线程唤醒。
优选地,所述为GPU线程创建GPU栅栏,包括:
调用CreateFence函数,为所述GPU线程创建所述GPU栅栏。
优选地,所述为CPU线程创建信号事件,包括:
调用CreateEvent函数,为所述CPU线程创建所述信号事件。
优选地,所述将所述GPU栅栏和所述信号事件进行绑定,包括:
创建一帧计数器,其中,所述帧计数器用于统计所述GPU完成渲染的图像祯的数量;
将所述帧计数器和所述信号事件设置到所述GPU栅栏的完成事件中。
优选地,所述调用一预设函数将所述CPU线程挂起,并等待所述信号事件变为有信号状态,包括:
调用WaitforsingleObject函数,将所述CPU线程挂起,并等待所述信号事件变为有信号状态。
优选地,所述在所述GPU完成对所述图像帧的渲染时,将所述GPU栅栏打开,包括:
在所述帧计数器的计数值加1时,调用Signal函数,将所述GPU栅栏打开。
优选地,所述将所述信号事件设置为所述有信号状态,包括:
调用SetEvent函数,将所述信号事件设置为所述有信号状态。
第二方面,本申请通过本申请的一实施例提供如下技术方案:
一种控制CPU线程和GPU线程同步的装置,其特征在于,包括:
第一创建单元,用于在GPU进行图像帧渲染时,为GPU线程创建GPU栅栏,所述GPU栅栏的初始状态为关闭状态;
第二创建单元,用于为CPU线程创建信号事件,所述信号事件的初始状态为无信号状态;
绑定单元,用于将所述GPU栅栏和所述信号事件进行绑定;
调用单元,用于调用预设函数将所述CPU线程挂起,并等待所述信号事件变为有信号状态;
打开单元,用于在所述GPU完成对所述图像帧的渲染时,将所述GPU栅栏打开,并将所述信号事件设置为所述有信号状态,从而通过所述预设函数将所述CPU线程唤醒。
第三方面,本申请通过本申请的一实施例提供如下技术方案:
一种控制CPU线程和GPU线程同步的装置,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
在GPU进行图像帧渲染时,为GPU线程创建GPU栅栏,所述GPU栅栏的初始状态为关闭状态;为CPU线程创建信号事件,所述信号事件的初始状态为无信号状态;将所述GPU栅栏和所述信号事件进行绑定;调用预设函数将所述CPU线程挂起,并等待所述信号事件变为有信号状态;在所述GPU完成对所述图像帧的渲染时,将所述GPU栅栏打开,并将所述信号事件设置为所述有信号状态,从而通过所述预设函数将所述CPU线程唤醒。
第四方面,本申请通过本申请的一实施例提供如下技术方案:
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
在GPU进行图像帧渲染时,为GPU线程创建GPU栅栏,所述GPU栅栏的初始状态为关闭状态;为CPU线程创建信号事件,所述信号事件的初始状态为无信号状态;将所述GPU栅栏和所述信号事件进行绑定;调用预设函数将所述CPU线程挂起,并等待所述信号事件变为有信号状态;在所述GPU完成对所述图像帧的渲染时,将所述GPU栅栏打开,并将所述信号事件设置为所述有信号状态,从而通过所述预设函数将所述CPU线程唤醒。
本申请实施例中提供的一个或多个技术方案,至少具有如下技术效果或优点:
在本申请实施例中,公开了一种控制CPU线程和GPU线程同步的方法,包括:在GPU进行图像帧渲染时,为GPU线程创建GPU栅栏,所述GPU栅栏的初始状态为关闭状态;为CPU线程创建信号事件,所述信号事件的初始状态为无信号状态;将所述GPU栅栏和所述信号事件进行绑定;调用预设函数将所述CPU线程挂起,并等待所述信号事件变为有信号状态;在所述GPU完成对所述图像帧的渲染时,将所述GPU栅栏打开,并将所述信号事件设置为所述有信号状态,从而通过所述预设函数将所述CPU线程唤醒。由于保证了CPU线程和GPU线程的同步,所以解决了现有技术中在Direct3D 12上存在的程序逻辑与程序画面难以同步的技术问题,实现了在Direct3D 12上程序逻辑与程序画面同步的技术效果。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1为本申请实施例中一种控制CPU线程和GPU线程同步的方法的流程图;
图2为本申请实施例中一种控制CPU线程和GPU线程同步的装置的结构图;
图3为本申请实施例中一种控制CPU线程和GPU线程同步的装置的结构图;
图4为本申请实施例中一种计算机可读存储介质的结构图。
具体实施方式
本申请实施例通过提供一种控制CPU线程和GPU线程同步的方法及装置,解决了现有技术中,在Direct3D 12上存在的程序逻辑与程序画面难以同步的技术问题,实现了在Direct3D 12上程序逻辑与程序画面同步的技术效果。
本申请实施例的技术方案为解决上述技术问题,总体思路如下:
一种控制CPU线程和GPU线程同步的方法,包括:在GPU进行图像帧渲染时,为GPU线程创建GPU栅栏,所述GPU栅栏的初始状态为关闭状态;为CPU线程创建信号事件,所述信号事件的初始状态为无信号状态;将所述GPU栅栏和所述信号事件进行绑定;调用预设函数将所述CPU线程挂起,并等待所述信号事件变为有信号状态;在所述GPU完成对所述图像帧的渲染时,将所述GPU栅栏打开,并将所述信号事件设置为所述有信号状态,从而通过所述预设函数将所述CPU线程唤醒。
为了更好的理解上述技术方案,下面将结合说明书附图以及具体的实施方式对上述技术方案进行详细的说明。
实施例一
本实施例提供了一种控制CPU线程和GPU线程同步的方法,应用于终端设备中,所述终端设备可以是PC(Personal Computer,个人电脑)、或智能手机、或平板电脑、或智能电视、等等,此处,对于所述终端设备具体是何种设备,本实施例不做具体限定。
如图1所示,所述控制CPU线程和GPU线程同步的方法,包括:
步骤S101:在GPU进行图像帧渲染时,为GPU线程创建GPU栅栏,GPU栅栏的初始状态为关闭状态。
所谓栅栏,就是一个隔离器,在正常情况下,栅栏是关闭的,这样其它任务是不能进入到栅栏里面的,只有当满足一定的条件后,栅栏才会打开,其它任务才可以进入到栅栏内部。同理,GPU栅栏也是这样的原理,当GPU栅栏被关闭时,GPU将不允许GPU线程访问,GPU线程将会被挂起,只有当GPU栅栏被打开时,GPU线程才会被唤醒,从而继续执行绘制渲染指令。
在具体实施过程中,在GPU进行图像帧渲染时,可以为GPU线程创建一个GPU栅栏,GPU栅栏的初始状态为关闭状态,这样,GPU线程被挂起,GPU只能对当前图像祯进行渲染,而其它任务不会进入GPU栅栏,GPU不会去执行其它任务。
作为一种可选的实施例,所述为GPU线程创建GPU栅栏,包括:调用CreateFence函数,为GPU线程创建一GPU栅栏。
在具体实施过程中,可以调用ID3D12Device接口中的CreateFence函数,来创建ID3D12Fence接口,ID3D12Fence接口是一个物理显卡的抽象,在Direct3D 12中用来表示GPU栅栏的接口,其中,ID3D12Fence接口中的Signal函数可以用来打开GPU栅栏。
步骤S102:为CPU线程创建信号事件,信号事件的初始状态为无信号状态。
在Windows操作系统上,有一种内核对象叫做事件对象Event,用于线程的同步与互斥。事件对象通常有两种状态,一种是有信号状态,一种是无信号状态。当一个CPU线程去等待一个有信号状态的事件时,等待条件得到满足,该线程会继续执行不会阻塞;而当一个线程去等待一个无信号状态的事件时,等待条件得不到满足,该CPU线程不会继续执行,并且会被系统的线程调度程序剥夺执行权,只有当该等待的事件变为有信号状态时,该线程才会被唤醒,从而继续执行。在本实施例中,在Direct3D 12中,CPU与GPU的同步就是依靠这种机制来实现的。
作为一种可选的实施例,步骤S102,包括:调用CreateEvent函数,为CPU线程创建一信号事件。
在具体实施过程中,可以调用Windows系统中的API函数CreateEvent函数,来创建一个无信号状态的信号事件hCpuEvent。
步骤S103:将GPU栅栏和信号事件进行绑定。
作为一种可选的实施例,步骤S103,包括:
创建一帧计数器,其中,该帧计数器用于统计GPU完成渲染的图像祯的数量;将该帧计数器和信号事件设置到GPU栅栏的完成事件中。
在具体实施过程中,由于事件信号与GPU栅栏是绑定在一起的,GPU可以根据当前的渲染帧索引来判断当前帧是否渲染完成。所以,可以创建一个索引计数器(即:帧计数器)frameCount,其初始值为1,GPU每渲染完成一帧,该值加1。
在具体实施过程中,可以基于ID3D12Fence接口中的SetEventOnCompletion函数,将帧计数器frameCount和信号事件hCpuEvent设置到GPU栅栏的完成事件中。在当前帧渲染完成后,GPU栅栏会将hCpuEvent事件设定为有信号状态。
步骤S104:调用预设函数将CPU线程挂起,并等待信号事件变为有信号状态。
作为一种可选的实施例,步骤S104,包括:调用WaitforsingleObject函数,将CPU线程挂起,并等待信号事件变为有信号状态。
在具体实施过程中,可以调用系统的WaitforsingleObject函数,来等待信号事件hCpuEvent变为有信号状态,当信号事件hCpuEvent变成有信号状态之前,该CPU线程将会一直阻塞。
步骤S105:在GPU完成对图像帧的渲染时,将GPU栅栏打开,并将信号事件设置为有信号状态,从而通过预设函数将CPU线程唤醒。
作为一种可选的实施例,所述在GPU完成对图像帧的渲染时,将GPU栅栏打开,包括:在帧计数器的计数值加1时,调用Signal函数,将GPU栅栏打开。
在具体实施过程中,在通过帧计数器确定GPU已完成对当前帧的渲染时,可以调用ID3D12Fence接口中的Signal函数,将GPU栅栏打开。
作为一种可选的实施例,所述将信号事件设置为有信号状态,包括:调用SetEvent函数,将信号事件设置为有信号状态。
在具体实施过程中,因为在步骤S103中通过SetEventOnCompletion将GPU栅栏和该信号事件绑定在一起,所以当GPU完成对当前帧的渲染后,将会调用系统的SetEvent函数将信号事件hCpuEvent变为有信号状态,从而使得WaitforsingleObject函数返回,进而使CPU线程继续运行。这样,便实现了在Direct3D 12中CPU线程与GPU线程的同步,从而实现了在Direct3D 12上程序逻辑与程序画面同步的技术效果。
利用本实施例中的控制CPU线程和GPU线程同步的方法,可以开启多线程渲染,从而极大提高游戏的渲染性能,进而解决了从Direct3D 9到Direct3D11时代只能单线程渲染游戏的瓶颈。
上述本申请实施例中的技术方案,至少具有如下的技术效果或优点:
在本申请实施例中,公开了一种控制CPU线程和GPU线程同步的方法,包括:在GPU进行图像帧渲染时,为GPU线程创建GPU栅栏,所述GPU栅栏的初始状态为关闭状态;为CPU线程创建信号事件,所述信号事件的初始状态为无信号状态;将所述GPU栅栏和所述信号事件进行绑定;调用预设函数将所述CPU线程挂起,并等待所述信号事件变为有信号状态;在所述GPU完成对所述图像帧的渲染时,将所述GPU栅栏打开,并将所述信号事件设置为所述有信号状态,从而通过所述预设函数将所述CPU线程唤醒。本申请实施例保证了CPU线程和GPU线程的同步,所以解决了现有技术中在Direct3D12上存在的程序逻辑与程序画面难以同步的技术问题,实现了在Direct3D 12上程序逻辑与程序画面同步的技术效果。
实施例二
如图2所示,本实施例提供了一种控制CPU线程和GPU线程同步的装置200,包括:
第一创建单元201,用于在GPU进行图像帧渲染时,为GPU线程创建GPU栅栏,所述GPU栅栏的初始状态为关闭状态;
第二创建单元202,用于为CPU线程创建信号事件,所述信号事件的初始状态为无信号状态;
绑定单元203,用于将所述GPU栅栏和所述信号事件进行绑定;
调用单元204,用于调用预设函数将所述CPU线程挂起,并等待所述信号事件变为有信号状态;
打开单元205,用于在所述GPU完成对所述图像帧的渲染时,将所述GPU栅栏打开,并将所述信号事件设置为所述有信号状态,从而通过所述预设函数将所述CPU线程唤醒。
作为一种可选的实施例,第一创建单元201,具体用于:调用CreateFence函数,为所述GPU线程创建所述GPU栅栏。
作为一种可选的实施例,第二创建单元202,具体用于:调用CreateEvent函数,为所述CPU线程创建所述信号事件。
作为一种可选的实施例,绑定单元203,具体用于:创建一帧计数器,其中,所述帧计数器用于统计所述GPU完成渲染的图像祯的数量;将所述帧计数器和所述信号事件设置到所述GPU栅栏的完成事件中。
作为一种可选的实施例,调用单元204,具体用于:调用WaitforsingleObject函数,将所述CPU线程挂起,并等待所述信号事件变为有信号状态。
作为一种可选的实施例,打开单元205,具体用于:在所述帧计数器的计数值加1时,调用Signal函数,将所述GPU栅栏打开。
作为一种可选的实施例,打开单元205,具体用于:调用SetEvent函数,将所述信号事件设置为所述有信号状态。
由于本实施例所介绍的控制CPU线程和GPU线程同步的装置为实施本申请实施例中控制CPU线程和GPU线程同步的方法所采用的装置,故而基于本申请实施例中所介绍的控制CPU线程和GPU线程同步的方法,本领域所属技术人员能够了解本实施例的控制CPU线程和GPU线程同步的装置的具体实施方式以及其各种变化形式,所以在此对于该控制CPU线程和GPU线程同步的装置如何实现本申请实施例中的方法不再详细介绍。只要本领域所属技术人员实施本申请实施例中信息控制CPU线程和GPU线程同步的方法所采用的装置,都属于本申请所欲保护的范围。
上述本申请实施例中的技术方案,至少具有如下的技术效果或优点:
在本申请实施例中,公开了一种控制CPU线程和GPU线程同步的装置200,包括:第一创建单元,用于在GPU进行图像帧渲染时,为GPU线程创建GPU栅栏,所述GPU栅栏的初始状态为关闭状态;第二创建单元,用于为CPU线程创建信号事件,所述信号事件的初始状态为无信号状态;绑定单元,用于将所述GPU栅栏和所述信号事件进行绑定;调用单元,用于调用预设函数将所述CPU线程挂起,并等待所述信号事件变为有信号状态;打开单元,用于在所述GPU完成对所述图像帧的渲染时,将所述GPU栅栏打开,并将所述信号事件设置为所述有信号状态,从而通过所述预设函数将所述CPU线程唤醒。本申请实施例保证了CPU线程和GPU线程的同步,所以解决了现有技术中在Direct3D 12上存在的程序逻辑与程序画面难以同步的技术问题,实现了在Direct3D 12上程序逻辑与程序画面同步的技术效果。
实施例三
如图3所示,本实施例提供了一种控制CPU线程和GPU线程同步的装置300,包括存储器310、处理器320及存储在存储器310上并可在处理器320上运行的计算机程序311,处理器320执行计算机程序311时实现以下步骤:
在GPU进行图像帧渲染时,为GPU线程创建GPU栅栏,所述GPU栅栏的初始状态为关闭状态;为CPU线程创建信号事件,所述信号事件的初始状态为无信号状态;将所述GPU栅栏和所述信号事件进行绑定;调用预设函数将所述CPU线程挂起,并等待所述信号事件变为有信号状态;在所述GPU完成对所述图像帧的渲染时,将所述GPU栅栏打开,并将所述信号事件设置为所述有信号状态,从而通过所述预设函数将所述CPU线程唤醒。
在具体实施过程中,处理器320执行计算机程序311时,可以实现实施一中的任一实施方式。
实施例四
如图4所示,本实施例提供了一种计算机可读存储介质400,其上存储有计算机程序411,计算机程序411被处理器执行时实现以下步骤:
在GPU进行图像帧渲染时,为GPU线程创建GPU栅栏,所述GPU栅栏的初始状态为关闭状态;为CPU线程创建信号事件,所述信号事件的初始状态为无信号状态;将所述GPU栅栏和所述信号事件进行绑定;调用预设函数将所述CPU线程挂起,并等待所述信号事件变为有信号状态;在所述GPU完成对所述图像帧的渲染时,将所述GPU栅栏打开,并将所述信号事件设置为所述有信号状态,从而通过所述预设函数将所述CPU线程唤醒。
在具体实施过程中,计算机程序411被处理器执行时,可以实现实施一中的任一实施方式。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其它可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其它可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其它可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其它可编程数据处理设备上,使得在计算机或其它可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其它可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (10)
1.一种控制CPU线程和GPU线程同步的方法,其特征在于,包括:
在GPU进行图像帧渲染时,为GPU线程创建GPU栅栏,所述GPU栅栏的初始状态为关闭状态;
为CPU线程创建信号事件,所述信号事件的初始状态为无信号状态;
将所述GPU栅栏和所述信号事件进行绑定;
调用预设函数将所述CPU线程挂起,并等待所述信号事件变为有信号状态;
在所述GPU完成对所述图像帧的渲染时,将所述GPU栅栏打开,并将所述信号事件设置为所述有信号状态,从而通过所述预设函数将所述CPU线程唤醒。
2.如权利要求1所述的控制CPU线程和GPU线程同步的方法,其特征在于,所述为GPU线程创建GPU栅栏,包括:
调用CreateFence函数,为所述GPU线程创建所述GPU栅栏。
3.如权利要求1所述的控制CPU线程和GPU线程同步的方法,其特征在于,所述为CPU线程创建信号事件,包括:
调用CreateEvent函数,为所述CPU线程创建所述信号事件。
4.如权利要求1所述的控制CPU线程和GPU线程同步的方法,其特征在于,所述将所述GPU栅栏和所述信号事件进行绑定,包括:
创建帧计数器,其中,所述帧计数器用于统计所述GPU完成渲染的图像祯的数量;
将所述帧计数器和所述信号事件设置到所述GPU栅栏的完成事件中。
5.如权利要求1所述的控制CPU线程和GPU线程同步的方法,其特征在于,所述调用预设函数将所述CPU线程挂起,并等待所述信号事件变为有信号状态,包括:
调用WaitforsingleObject函数,将所述CPU线程挂起,并等待所述信号事件变为有信号状态。
6.如权利要求1所述的控制CPU线程和GPU线程同步的方法,其特征在于,所述在所述GPU完成对所述图像帧的渲染时,将所述GPU栅栏打开,包括:
在所述帧计数器的计数值加1时,调用Signal函数,将所述GPU栅栏打开。
7.如权利要求1~6任一所述的控制CPU线程和GPU线程同步的方法,其特征在于,所述将所述信号事件设置为所述有信号状态,包括:
调用SetEvent函数,将所述信号事件设置为所述有信号状态。
8.一种控制CPU线程和GPU线程同步的装置,其特征在于,包括:
第一创建单元,用于在GPU进行图像帧渲染时,为GPU线程创建GPU栅栏,所述GPU栅栏的初始状态为关闭状态;
第二创建单元,用于为CPU线程创建信号事件,所述信号事件的初始状态为无信号状态;
绑定单元,用于将所述GPU栅栏和所述信号事件进行绑定;
调用单元,用于调用预设函数将所述CPU线程挂起,并等待所述信号事件变为有信号状态;
打开单元,用于在所述GPU完成对所述图像帧的渲染时,将所述GPU栅栏打开,并将所述信号事件设置为所述有信号状态,从而通过所述预设函数将所述CPU线程唤醒。
9.一种控制CPU线程和GPU线程同步的装置,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现以下步骤:
在GPU进行图像帧渲染时,为GPU线程创建GPU栅栏,所述GPU栅栏的初始状态为关闭状态;为CPU线程创建信号事件,所述信号事件的初始状态为无信号状态;将所述GPU栅栏和所述信号事件进行绑定;调用预设函数将所述CPU线程挂起,并等待所述信号事件变为有信号状态;在所述GPU完成对所述图像帧的渲染时,将所述GPU栅栏打开,并将所述信号事件设置为所述有信号状态,从而通过所述预设函数将所述CPU线程唤醒。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现以下步骤:
在GPU进行图像帧渲染时,为GPU线程创建GPU栅栏,所述GPU栅栏的初始状态为关闭状态;为CPU线程创建信号事件,所述信号事件的初始状态为无信号状态;将所述GPU栅栏和所述信号事件进行绑定;调用预设函数将所述CPU线程挂起,并等待所述信号事件变为有信号状态;在所述GPU完成对所述图像帧的渲染时,将所述GPU栅栏打开,并将所述信号事件设置为所述有信号状态,从而通过所述预设函数将所述CPU线程唤醒。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710523425.4A CN107291559A (zh) | 2017-06-30 | 2017-06-30 | 一种控制cpu线程和gpu线程同步的方法及装置 |
PCT/CN2018/082297 WO2019001077A1 (zh) | 2017-06-30 | 2018-04-09 | 一种控制cpu线程和gpu线程同步的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710523425.4A CN107291559A (zh) | 2017-06-30 | 2017-06-30 | 一种控制cpu线程和gpu线程同步的方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN107291559A true CN107291559A (zh) | 2017-10-24 |
Family
ID=60099677
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710523425.4A Pending CN107291559A (zh) | 2017-06-30 | 2017-06-30 | 一种控制cpu线程和gpu线程同步的方法及装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN107291559A (zh) |
WO (1) | WO2019001077A1 (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2019001077A1 (zh) * | 2017-06-30 | 2019-01-03 | 武汉斗鱼网络科技有限公司 | 一种控制cpu线程和gpu线程同步的方法及装置 |
CN110688203A (zh) * | 2018-07-05 | 2020-01-14 | 武汉斗鱼网络科技有限公司 | 一种任务执行方法和装置 |
CN114237532A (zh) * | 2021-11-30 | 2022-03-25 | 珠海全志科技股份有限公司 | 基于Linux嵌入式系统的多窗口实现方法、装置及介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130262776A1 (en) * | 2012-03-29 | 2013-10-03 | Ati Technologies Ulc | Managing Coherent Memory Between an Accelerated Processing Device and a Central Processing Unit |
CN106528096A (zh) * | 2016-10-20 | 2017-03-22 | 武汉斗鱼网络科技有限公司 | 一种在d3d12全屏游戏源上绘制弹幕图像的方法及系统 |
CN106528303A (zh) * | 2016-10-20 | 2017-03-22 | 武汉斗鱼网络科技有限公司 | 一种基于gpu纹理共享来获取d3d12游戏源图像的方法及系统 |
CN106648552A (zh) * | 2011-07-29 | 2017-05-10 | 英特尔公司 | Cpu/gpu同步机制 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8754904B2 (en) * | 2011-04-03 | 2014-06-17 | Lucidlogix Software Solutions, Ltd. | Virtualization method of vertical-synchronization in graphics systems |
US9990766B2 (en) * | 2015-10-29 | 2018-06-05 | Intelligent Fusion Technology, Inc | Method and system for predicting collision probability of space objects via graphics processing unit |
CN106227594A (zh) * | 2016-07-11 | 2016-12-14 | 中国人民解放军国防科学技术大学 | 一种基于分屏的多核cpu帧缓存显示优化方法 |
CN107291559A (zh) * | 2017-06-30 | 2017-10-24 | 武汉斗鱼网络科技有限公司 | 一种控制cpu线程和gpu线程同步的方法及装置 |
-
2017
- 2017-06-30 CN CN201710523425.4A patent/CN107291559A/zh active Pending
-
2018
- 2018-04-09 WO PCT/CN2018/082297 patent/WO2019001077A1/zh active Application Filing
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106648552A (zh) * | 2011-07-29 | 2017-05-10 | 英特尔公司 | Cpu/gpu同步机制 |
US20130262776A1 (en) * | 2012-03-29 | 2013-10-03 | Ati Technologies Ulc | Managing Coherent Memory Between an Accelerated Processing Device and a Central Processing Unit |
CN106528096A (zh) * | 2016-10-20 | 2017-03-22 | 武汉斗鱼网络科技有限公司 | 一种在d3d12全屏游戏源上绘制弹幕图像的方法及系统 |
CN106528303A (zh) * | 2016-10-20 | 2017-03-22 | 武汉斗鱼网络科技有限公司 | 一种基于gpu纹理共享来获取d3d12游戏源图像的方法及系统 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2019001077A1 (zh) * | 2017-06-30 | 2019-01-03 | 武汉斗鱼网络科技有限公司 | 一种控制cpu线程和gpu线程同步的方法及装置 |
CN110688203A (zh) * | 2018-07-05 | 2020-01-14 | 武汉斗鱼网络科技有限公司 | 一种任务执行方法和装置 |
CN110688203B (zh) * | 2018-07-05 | 2022-05-13 | 武汉斗鱼网络科技有限公司 | 一种任务执行方法和装置 |
CN114237532A (zh) * | 2021-11-30 | 2022-03-25 | 珠海全志科技股份有限公司 | 基于Linux嵌入式系统的多窗口实现方法、装置及介质 |
Also Published As
Publication number | Publication date |
---|---|
WO2019001077A1 (zh) | 2019-01-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103455292B (zh) | 业务数据显示处理方法与装置、用户设备 | |
CN106358003A (zh) | 一种基于线程级流水线的视频分析加速方法 | |
CN105353936B (zh) | 一种显示方法及电子设备 | |
CN109213607B (zh) | 一种多线程渲染的方法和装置 | |
US20130024812A1 (en) | Foreground/background assortment of hidden windows | |
CN103559087B (zh) | 一种虚拟处理器之间的中断的实现方法、相关装置和系统 | |
CN107291559A (zh) | 一种控制cpu线程和gpu线程同步的方法及装置 | |
CN107003892A (zh) | Gpu虚拟化方法、装置、系统及电子设备、计算机程序产品 | |
CN105094520B (zh) | 一种显示方法及终端 | |
CN104049900A (zh) | 悬浮窗口关闭方法及装置 | |
CN105190701B (zh) | 基于原语的合成系统及方法 | |
CN110494837B (zh) | 使用高优先级队列进行墨水渲染 | |
CN105023234B (zh) | 基于嵌入式系统存储优化的图形加速方法 | |
CN107256121A (zh) | 控件的控制方法及装置、计算机装置和可读存储介质 | |
US20230403437A1 (en) | Graphics engine and graphics processing method applicable to player | |
CN107678652A (zh) | 对目标物体的操作控制方法和装置 | |
CN106502662A (zh) | 用于智能操作系统的多区域图形绘制方法及装置 | |
CN106354366A (zh) | 桌面图标排列处理方法及装置 | |
CN107077375A (zh) | 用于多操作系统的显示方法、装置和电子设备 | |
CN115686758B (zh) | 一种基于帧统计的VirtIO-GPU性能可控方法 | |
CN107783886A (zh) | 一种获取运行帧率的方法及终端 | |
CN107562325A (zh) | 一种虚拟机中自带光标软件的光标加速方法及系统 | |
CN106598696A (zh) | 一种虚拟机之间数据交互的方法及装置 | |
CN106155796A (zh) | 一种基于队列的线程调度方法及装置 | |
CN104836710B (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 | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20171024 |