CN108881917A - 基于高速实时解码平台的并行解码快速排序方法 - Google Patents

基于高速实时解码平台的并行解码快速排序方法 Download PDF

Info

Publication number
CN108881917A
CN108881917A CN201810847824.0A CN201810847824A CN108881917A CN 108881917 A CN108881917 A CN 108881917A CN 201810847824 A CN201810847824 A CN 201810847824A CN 108881917 A CN108881917 A CN 108881917A
Authority
CN
China
Prior art keywords
image
frame
decoding
processor
code stream
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.)
Granted
Application number
CN201810847824.0A
Other languages
English (en)
Other versions
CN108881917B (zh
Inventor
张静
孔孟行
胡锐
李云松
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Xidian University
Original Assignee
Xidian University
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Xidian University filed Critical Xidian University
Priority to CN201810847824.0A priority Critical patent/CN108881917B/zh
Publication of CN108881917A publication Critical patent/CN108881917A/zh
Application granted granted Critical
Publication of CN108881917B publication Critical patent/CN108881917B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/43Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
    • H04N21/44Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream or rendering scenes according to encoded video stream scene graphs
    • H04N21/4402Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream or rendering scenes according to encoded video stream scene graphs involving reformatting operations of video signals for household redistribution, storage or real-time display

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)
  • Image Processing (AREA)

Abstract

本发明公开了一种基于高速解码平台的并行解码图像排序方法,解决了现有技术中并行解码图像序列乱序的问题。实现步骤包括:重新定义系统接收到的码流帧号;给处理器设置标志位数组;构建映射函数将帧号范围缩小:设置图像链表,并设置指导图像有序发送的全局变量;接收端处理器依据其并行解码策略进行码流解码;非接收端处理器依据其并行解码策略进行码流解码;通过标志位数组的下标对图像链表中的节点地址进行排序;处理器依据其图像发送策略发送图像。本发明采用取模映射的方式,减少了并行解码后图像排序时延,能够满足实时性要求,节省了内存空间,可用于实现对JPEG2000图像的实时解码。

Description

基于高速实时解码平台的并行解码快速排序方法
技术领域
本发明属于视频和图像处理技术领域,更进一步涉及快速排序方法,具体是一种基于高速实时解码平台的并行解码快速排序方法,可用于多核系统架构下数字设备的视频和图像实时解码显示与传输。
背景技术
伴随着数据传输技术的飞速发展,导致网络的数据带宽越来越大。随之而来的问题是:如何实时处理高速传输的大量数据。普通的单核处理系统已经远远不能满足用户对于大量数据实时处理的需求。基于多核架构的多处理器高速并行处理系统框架正是在这样的背景下产生的。
目前,基于多核架构的多处理器高速并行处理系统的数据处理速度基本能够匹配数据的传输速率,满足实时性要求。但是,由于处理器的核数增加和处理器的个数增加,如何有效的完成多个核,以及多个处理器之间的通信显得尤为重要。另外,由于针对于处理完的数据的大多数后续处理需要保证数据的时间一致性。例如,对于实时高清视频处理系统,乱序的输出数据是无法容忍的。因此,如何快速对处理后的数据进行排序已经成为制约并行系统实时性的关键问题。根据木桶原理,在一个串行实时系统中,决定该系统处理速率的决定性因素是速度最慢的一环。
基于多核架构的多处理器系统,在同一时刻同时有多个核在并行化处理数据。由于各个核的计算能力的差异,导致单核的处理时间有所差异。因此,导致数据处理完成的顺序与该系统接收到的数据顺序不同,从而造成乱序的情况。如果采用传统的排序算法的乱序的数据进行处理,将有以下两个难点:
1.考虑到链表的存储方式能够有效的应对多个链表节点的插入和删除操作,具有灵活性高、对内存空间限制低的优点,传统的基于多核架构的多处理器高速并行处理系统均采用链表的存储方式。对于一个拥有n个核的处理器,使用传统的排序算法,其时间复杂度一般是O(n2)和O(nlogn)。对于一个拥有m个处理器的架构,相当于两层排序架构,其复杂度将大幅度增加。基于传统的排序算法,该系统的排序时间复杂度为O((m*n)2)和O((m*n)log(m*n))。对于一个高要求的实时处理系统,这样的处理效率是很难满足实时性要求的。如果排序过程消耗的时间太长,则内存会因为源源不断的接收数据而被占满。一方面,会导致系统崩溃;另一方面,会导致新来的数据无法接收,进一步会造成数据丢失的情况。如果数据发生了严重的丢失,则会造成系统效率低下,无法满足用户的需求;
2.基于传统排序算法的多核架构的多处理器系统需要为排序算法设置排序空间和缓存空间。排序算法将在排序空间内进行完全排序,等到完全排序结束后,将顺序的数据发送出去。然后再从缓存空间读取数据进行下一轮排序。对于高速处理系统,数据接收速率比较高,短时间内会接受大量数据。如果缓存空间容量太小,新来的数据会覆盖掉缓存空间中原有的数据,造成数据的丢失,从而对数据的后续处理产生不利的影响。相反的,如果缓存空间设置的过大,会造成内存空间的浪费。如何合理的设置缓存空间的容量大小,将是一个比较棘手的问题。另外,对于实时处理系统,如何在保证系统的效率的基础上制定合理的策略,使得从缓存空间中取出的数据为时间上相似的数据也是一个算法设计的难点。
考虑到传统的排序算法的排序过程会引起处理效率低而难以满足实时性要求;以及为排序算法设置合理容量大小的缓存空间有困难,因此传统的排序算法无法满足基于多核架构的多处理器高速并行处理系统在视频和图像实时解码显示与传输处理上的要求。
发明内容
本发明的目的在于针对上述已有技术的不足,提出一种更加节省空间和实时性更好的基于高速实时解码平台的并行解码快速排序方法。
本发明是一种基于高速实时解码平台的并行解码快速排序方法,在解码平台上运行,形成一个完整的系统,系统涉及到配置的若干处理器,包括接收端处理器和非接收端处理器,其特征在于,包括有如下步骤:
(1)重新定义系统接收到的码流帧号:系统在接收到码流后,需要确定图像或视频中帧号的正确顺序。定义一个全局变量,用来表示码流的全局帧号,体现系统从压缩码流发送源接收到的图像和视频的码流顺序,再在存储码流和解码后图像的节点中分别定义两个变量,用来临时保存映射帧号,即映射函数的结果,这两个变量保存的帧号值相同;
(2)给处理器设置标志位数组:假设系统中有n个并行工作的处理器,给第i个处理器设置i+1个标志位数组,其中,i=0,1,2,...,n-1。所设置的标志位数组中的每个元素具备两个属性,即指向图像节点的指针和指示元素内是否含有图像的标志位,每个标志位数组对应一个数组长度,同时给第i个处理器的i+1个数组定义一个数组总长度,即每个处理器均定义有一个数组总长度;
(3)构建映射函数:将全局帧号映射到当前数组总长度所对应的范围,得到一个映射后的码流帧号,即映射帧号。在映射范围内,保证相应的解码视频序列与输入码流序列保持时间一致性。每当连续映射的全局帧个数等于数组总长度时,称为完成一次映射循环;
(4)设置图像链表,并设置指导图像有序发送的全局变量:给n个并行工作的处理器i设置i+1个图像链表,用来保证其发送的解码后的图像为完全排序的图像序列。同时,设置一个指导图像有序发送的全局变量,用来表示发送帧号。每当成功发送一帧图像,对该指导图像有序发送的全局变量进行更新;
(5)接收端处理器依据其并行解码策略进行码流解码:接收端处理器通过网络从压缩码流发送源接收压缩码流,成功接收码流后,依据接收端处理器的并行解码的策略,对满足本级处理器要求的码流进行多核并行解码,并将解码后得到的图像与标志位数组进行关联,将其余的码流通过另一个内核线程发送给下一级处理器;
(6)非接收端处理器依据其并行解码策略进行码流解码:非接收端处理器通过网络从上一级处理器接收码流,成功接收码流后,依据非接收端处理器的并行解码的策略,对满足本级处理器要求的码流进行多核并行解码,得到解码后的图像,将其余的码流通过另一个内核线程发送给下一级处理器。此外,非接收端处理器将从上一级处理器接收到的解码后图像,根据映射帧号分别放置到相对应的图像链表中,为下一步的图像排序做准备;
(7)各处理器依据其图像排序策略进行图像排序:查看各处理器相对应的图像链表中对应节点的标志位数组,确定是否包含图像。如果包含图像,则进一步确认是否包含将要发送的图像。如果包含将要发送的图像,则退出临界区,重新竞争链表资源;反之,先对该节点进行剔除,然后从空闲链表中取下一个空闲节点并向图像链表中插入新的图像节点。如果不包含图像,则将标志位数组先修改为包含图像,然后从空闲链表中取下一个空闲节点并向图像链表中插入新的图像节点,完成对解码后图像的排序;
(8)各处理器依据其图像发送策略发送图像:根据发送帧号确定图像链表,并计算出待发送帧在标志位数组中的索引,然后查看由此所确定的节点中是否包含图像,如果该节点在给定的时间内持续没有图像,则视为解码错误,跳过该帧,更新发送帧号;反之,解码正确,则从图像链表中取下发送帧号对应的图像节点,将节点中的图像数据取出,打包发送给下一个处理器或输出端,并更新发送帧号;
(9)各处理器具体处理流程:处理器从上一级接收到码流和解码后的图像,首先处理器依据其并行解码策略进行多核并行码流解码。其中,将不满足自身处理要求的码流发送给下一级处理器。然后,依据其图像排序策略将解码图像存在图像链表中。最后,将图像链表中的图像依据其图像发送策略发送给下一级处理器。各处理器保持并行工作,最后一级处理器的图像链表所发送图像的顺序即为最终的排序结果。
本发明与现有技术相比较,具有如下优点:
第一,本发明采用取模映射的方式,创建一个映射函数,将全局帧号映射到常数级别,通过循环存储的思想,在保证图像排序实时性要求的基础上,有效的降低了空间复杂度。
第二,本发明通过设置标志位数组,有效将内存空间中的节点联系起来,将视频序列帧间的时间连续性转换为数组地址空间的连续性,简化了视频序列排序过程,使得本发明能够对解码后的数据进行实时排序,降低了时间复杂度,大大减少了排序时延。
第三,本发明采用在非接收端处理器设置多个图像链表的方式,分别对不同处理器解码后的图像进行排序,保证其发送的解码后的图像为完全排序的图像序列,有效的避免了图像归并排序的过程,简化了控制策略。
第四,本发明设置了一个专门表示发送帧号的全局变量send_frame,每当成功发送一帧图像,send_frame按照特定公式进行更新,保证了输出码流的正确顺序。
附图说明
图1是本发明的所应用的多核架构的多处理器系统的处理流程图。
图2是本发明中接收端CPU的排序流程图。
图3是本发明中非接收端CPU的排序流程图。
图4是本发明中的图像发送策略流程图。
具体实施方式
以下结合附图和具体实施例,对本发明作详细的描述。
实施例1
伴随着数据传输技术的飞速发展,网络数据带宽越来越大,如何实时处理高速传输的大量数据成为数据传输中至关重要的问题,基于多核架构的多处理器高速并行处理系统框架正是在这样的背景下产生的。由于单核的处理时间有所差异,导致数据处理完成的顺序与该系统接收到的数据顺序不同,从而造成乱序的情况。传统的排序算法存在排序时间过长和设置缓存空间的容量困难等缺点,为此,本发明经过研究,提出一种基于高速实时解码平台的并行解码快速排序方法,参见图1,包括有如下步骤:
(1)重新定义系统接收到的码流帧号:系统在接收到码流后,需要确定图像或视频中帧号的正确顺序,本发明定义一个全局变量,用来表示码流的全局帧号,体现系统从压缩码流发送源接收到的图像和视频的码流顺序,再在存储码流和解码后图像的节点中分别定义两个变量,用来临时保存映射帧号,即之后所引用的映射函数的结果,两个变量保存的帧号值相同。
(2)给处理器设置标志位数组:假设系统中有n个并行工作的处理器,第i个处理器中设置i+1个标志位数组,其中,i=0,1,2,...,n-1,所设置的标志位数组中的每个元素具备两个属性,即指向图像节点的指针和指示元素内是否含有图像的标志位,每个标志位数组对应一个数组长度,同时给其中第i个处理器的i+1个数组定义一个数组总长度,即每个处理器均定义一个数组总长度。
(3)构建映射函数:将全局帧号映射到当前处理器数组总长度所对应的范围,得到一个映射后的码流帧号,即步骤(1)中定义的映射帧号,在映射范围内,保证相应的解码视频序列与输入码流序列保持时间一致性,每映射数组总长度个全局帧,称为完成一次映射循环。
(4)设置图像链表,并设置指导图像有序发送的全局变量:给n个并行工作的处理器i设置i+1个图像链表,用来保证其发送的解码后的图像为完全排序的图像序列;并设置一个指导图像有序发送的全局变量,用来表示发送帧号,每当成功发送一帧图像,对该指导图像有序发送的全局变量进行更新。
(5)接收端处理器依据其并行解码策略进行码流解码:接收端处理器通过网络从压缩码流发送源接收压缩码流,成功接收码流后,依据接收端处理器的并行解码的策略,对满足本级处理器要求的码流进行解码,得到解码后的图像,将其余的码流通过另一个内核线程发送给下一级处理器。
(6)非接收端处理器依据其并行解码策略进行码流解码:非接收端处理器通过网络从上一级处理器接收码流,成功接收码流后,依据非接收端处理器的并行解码的策略,对满足本级处理器要求的码流进行解码,得到解码后的图像,将其余的码流通过另一个内核线程发送给下一级处理器,此外,非接收端处理器将从上一级处理器接收到的解码后图像,根据帧号分别放置到相对应的图像链表中,为下一步的图像排序做准备。
(7)各处理器依据其图像排序策略进行图像排序:查看各处理器相对应的图像链表中对应节点的标志位数组,确定是否包含图像,如果包含图像,进一步确认是否包含将要发送的图像,如果包含将要发送的图像,则提出临界区,重新竞争链表资源;反之,先对该节点进行剔除,然后从空闲链表中取下一个空闲节点并向图像链表中插入新的图像节点;如果不包含图像,则将标志位数组先修改为包含图像,然后从空闲链表中取下一个空闲节点并向图像链表中插入新的图像节点,完成对解码后图像的排序。
(8)各处理器依据其图像发送策略发送图像:根据发送帧号确定图像链表,并计算出待发送帧在标志位数组中的索引,然后查看由此所确定的节点中是否包含图像,如果该节点在给定的时间内持续没有图像,则视为解码错误,跳过该帧,更新发送帧号,反之,解码正确,则从图像链表中取下发送帧号对应的图像节点,将节点中的图像数据取出,打包发送给下一个处理器或输出端,并更新发送帧号。
(9)各处理器具体处理流程:处理器从上一级接收到码流和解码后的图像,首先处理器依据其并行解码策略进行多核并行码流解码,其中将不满足自身处理要求的码流发送给下一级处理器;然后依据其图像排序策略将解码图像存在图像链表中;最后将图像链表中的图像依据其图像发送策略发送给下一级处理器;各处理器保持并行工作,最后一级处理器的图像链表所发送图像的顺序即为最终的排序结果。
本发明采用取模映射的方式,通过循环存储的方法,在保证图像排序实时性要求的基础上,有效的降低了空间复杂度;并通过设置标志位数组,将视频序列帧间的时间连续性转换为数组地址空间的连续性,简化了视频序列排序过程,使得本发明能够对解码后的数据进行实时排序,降低了时间复杂度,大大减少了排序时延。
实施例2
基于高速实时解码平台的并行解码快速排序方法同实施例1,步骤(2)中所述的给处理器设置标志位数组,具体包括:
2.1设置标志位数组并定义其属性:设置标志位数组arr_sign时,其元素需要具备两个属性,一个是指向图像节点的指针p_frame,另一个是指示元素内是否含有图像的标志位sign,元素的结构具体定义如下:
struct sign_flag
{
ListNode*p_frame
bool sign
}。
2.2定义标志位数组总长度:标志位数组arr_sign(i)所对应的数组长度设置为:List(i)_length=α*m(i),其中α>1,表示系统解码容错性,m(i)表示第i个处理器的并行解码速度。相对应的结构体数组声明为:
sign_fiag arr_sign(i)[List(i)_length]。
同时,为了保证系统中每一个处理器解码后的图像均为完全排序的图像序列,该系统需要在第i个处理器中设置i+1个标志位数组,即arr_sign(0),arr_sign(1),...,arr_sign(i),其所对应的数组长度分别为List(0)_length,List(1)_length,...,List(i)_length。
本发明通过设置标志位数组,有效将内存空间中的节点联系起来,将视频序列帧间的时间连续性转换为数组地址空间的连续性,简化了排序过程,使得解码后的数据进行实时排序,降低了时间复杂度。
实施例3
基于高速实时解码平台的并行解码快速排序方法同实施例1-2,步骤(3)中所述的构建映射函数,将全局帧号global_frame映射到数组总长度max_frame所对应的范围,在映射范围内,保证相应的解码视频序列与输入码流序列保持时间一致性,从而保证输出视频的连续和完整,具体映射函数为:
f(new_frame)=mod(new_frame,max_frame)。
本发明采用取模映射的方式,创建一个映射函数,将全局帧号映射到常数级别,通过循环存储的方法,在保证图像排序实时性要求的基础上,有效的将空间复杂度降低到O(1)。
实施例4
基于高速实时解码平台的并行解码快速排序方法同实施例1-3,步骤(4)中所述的指导图像有序发送的全局变量send_frame,在每当成功发送一帧图像时,对其进行更新,具体更新公式为:
send_frame=(send_frame+1)%max_frame。
本发明设置了一个专门表示发送帧号的全局变量send_frame,每当成功发送一帧图像,send_frame按照特定公式进行更新,保证了输出码流的正确顺序。
实施例5
基于高速实时解码平台的并行解码快速排序方法同实施例1-4,步骤(5)中所述的接收端处理器依据其并行解码策略进行码流解码,参见图2,图2是接收端CPU排序策略图,具体实现方法如下:
(5a)首先,解码成功的内核线程通过竞争请求进入临界区;
(5b)如果竞争成功则跳转至步骤(5c),反之,则跳转至步骤(5a);
(5c)竞争成功地内核进入临界区,加互斥锁;
(5d)进入临界区后,取出映射帧号new_frame,并使用映射函数更新new_frame,具体函数为:F(new_frame)=mod(new_frame,arr_length);
(5e)查看处理器i的标志位数组中的标志位arr_sign(i)[new_frame].sign是否等于1,如果等于1,跳转至步骤(5f),反之,则跳转到步骤(5g);
(5f)比较发送帧号send_frame与映射帧号new_frame的大小;如果new_frame>send_frame,退出临界区,解除互斥锁,跳转至步骤(5a),反之,则跳转至步骤(5g);
(5g)令arr_sign(i)[new_frame].sign=1;
(5h)从空闲链表中取下一个空闲节点ListNode,并且将空闲节点ListNode连接到arr_sign(i)[new_frame].p_frame;
(5i)将节点插入到图像链表List(0)的末尾;
(5j)该内核线程的一个解码周期结束,退出临界区,解开互斥锁,进入下一个解码周期,系统跳转至步骤(5a)。
本发明的接收端并行解码策略,是指首先从发送源接收压缩码流,对满足本级处理器要求的码流进行解码,将其余的码流发送给下一级处理器,然后将有效帧成功解码所得图像通过图像链表进行排序,使得最终解码所得的图像按码流传入顺序进行正确排序。
实施例6
基于高速实时解码平台的并行解码快速排序方法同实施例1-5,步骤(6)中所述的非接收端处理器依据其并行解码策略进行码流解码,参见图3,图3是非接收端CPU排序策略图,具体实现步骤如下:
(6a)首先,如果成功接收解码图像,跳转至步骤(6c),反之,跳转至步骤(6a);
(6b)接收失败,丢弃该帧图像,跳转至步骤(6a);
(6c)内核竞争请求进入临界区内核;
(6d)内核线程竞争成功,进入临界区,加互斥锁,反之跳转至步骤(6c);
(6e)将接收到的图像装入空闲图像节点ListNode;
(6f)根据接收到图像的new_frame,按照如下公式确定图像链表List(k)和标志位数组arr_sign(k):k=mod(new_frame,4);
(6g)根据公式k=mod(new_frame,max_frame)确定该帧图像在标志位数组中的位置;
(6h)将ListNode和arr_sign(k)[m].p_frame连接,并且将后者置为1,然后将ListNode插入链表末尾;
(6i)退出临界区,解开互斥锁,跳转至步骤(6a)。
排序策略,是指非接收端处理器从上一级处理器接收码流后,按接收端处理器图像排序策略进行解码和图像排序,此外,非接收端处理器将接收到的解码后图像根据帧号,分别放置到相对应的图像链表中,然后对图像进行排序,保证码流解码和图像排序过程的并行处理,保证了系统排序过程的实时性。
实施例7
基于高速实时解码平台的并行解码快速排序方法同实施例1-6,步骤(7)中所述的各处理器依据其图像发送策略发送图像,参见图4,图4是图像发送策略,具体步骤如下:
(7a)根据全局变量send_frame,按照如下公式确定图像链表List(i):
i=mod(send_frame,4);
(7b)根据如下公式计算待发送帧在标志位数组中的索引k:k=ceil(send_frame/4);
(7c)查看标志位数组arr_sign(i)[k].sign是否等于1,如果等于1,跳转至步骤(7g),反之,则跳转到步骤(7d);
(7d)等待10ms,记等待次数计数变量wait_count=wait_count+1;
(7e)判断wait_count是否大于最大等待次数变量MAX_VISIT;如果wait_count>MAX_VISIT,跳转至步骤(7f),反之,则跳转至步骤(8d);
(7f)丢弃该帧图像,跳转至步骤(7k);
(7g)内核线程请求进入互斥区;
(7h)如果内核线程竞争成功,进入互斥区,加互斥锁,反之,则跳转至步骤(7g);
(7i)根据arr_sign(i)[k].p_frame在图像链表List(i)中取下图像节点;
(7j)将节点中的图像数据取出,打包发送;
(7k)通过如下公式更新send_frame,跳转至步骤(7a)。
本发明的图像发送策略是在确定图像链表中特定的的节点中是否包含图像后,剔除解码错误的帧号,从图像链表中取下发送帧号对应的图像节点,将节点中的正确解码的图像数据取出,打包发送给下一个处理器或输出端,并更新发送帧号,分别对不同处理器解码后的图像进行排序,保证其发送的解码后的图像为完全排序的图像序列,有效的避免了图像归并排序的过程,简化了控制策略。
实施例8
下面给出一个详细的例子,结合附图对本发明进一步说明:
基于高速实时解码平台的并行解码快速排序方法同实施例1-7,下面结合附图1,图2,图3和图4对本发明的实现步骤详细描述,本发明测试平台整体架构如附图1所示。在图1所示系统中,采用的CPU型号为TILE-Gx 8036TM:
步骤1.根据算法需求,本例中对4个CPU进行初始化,即处理器个数n=4
本发明需要为CPU设置全局变量,分别表示体现系统从压缩码流发送源接收到的图像和视频码流的顺序的全局帧号、指导图像的有序发送的发送帧号、对应每个处理器的数组总长度和最大等待次数;还需要为CPU设置标志位数组;再在存储码流和解码后图像的节点中分别定义两个变量,用来保存系统中的映射帧号,两个变量保存的帧号值相同;此外,处理器设置图像链表,用来保证其发送的解码后的图像为完全排序的图像序列。
(1).定义标志位结构体数组的数据结构,其中包含有:
i指向解码图像的存储节点的指针p_frame,初始化为空地址;
ii指示数组下标所对应的图像节点中是否包含数据的标志位sign,1表示包含数
据,0表示不包含数据,并且初始化为0;
因此,标志位结构体为:
struct sign_flag
{
ListNode*p_frame
bool sign
}。
(2).根据实时性要求,结合系统处理器的解码速度和接收速度,为每个处理器设置合适的标志位数组和图像链表。
i结合本发明技术方案和图1所示的系统,按照如下方式设置标志位数组和图像链表:
ii对于CPU0,设置1个图像链表List(0)和标志位数组arr_sign(0),数组长度为List0_length=60。
iii对于CPU1,设置2个图像链表List(0),List(1)和标志位数组arr_sign(0)和arr_sign(1),数组长度分别为List0_length=60,List1_length=60。
iv对于CPU2,设置3个图像链表List(0),List(1),List(2)和标志位数组arr_sign(0),arr_sign(1)和arr_sign(2),数组长度分别为List0_length=60,List1_length=60,List2_length=60。
v对于CPU3,设置4个图像链表List(0),List(1),List(2),List(3)和标志位数组arr_sign(0),arr_sign(1),arr_sign(2),arr_sign(3),数组长度分别为List0_length=60,List1_length=60,List2_length=60,List3_length=60。
(3)设值全局变量
i为CPU0设置表示全局帧号的全局变量global_frame,初始化为0。
ii为每个CPU设置表示发送帧号的全局变量send_frame,初始化为0。
iii为每个CPU设置表示数组总长度的全局变量max_frame。初始化为4个CPU
所对应标志位数组的长度之和,即:
max_frame=list0_length+list1_length+list2_length+list3_length。
iv为每个CPU设置最大等待次数MAX_VISIT,初始化值为50。
(4).在图像链表节点和码流链表节点中加入映射帧号new_frame。
步骤2.CPU0工作过程
CPU0通过网络从压缩码流发送源接收压缩码流。成功接收码流后,将global_frame=global_frame+1,并且将global_frame赋值为接收到的码流,即new_frame=global_frame。为了保证四个CPU工作负荷均衡分配,对接收到的码流进行4等分,即满足方程0=mod(new_frame,4)的码流由CPU0解码,其余的码流通过另一个内核线程发送给其余三个CPU。
考虑到Jpeg2000压缩算法难以细粒度并行实现,4个CPU均采用粗粒度并行方式进行解码工作。CPU0通过30个内核线程进行粗粒度的并行解码工作,即每一个内核线程完成码流的独立解码工作。当内核线程完成解码工作后,则通过技术方案中的接收端排序算法对解码后的图像进行排序。即:
1.首先,解码成功的内核线程通过竞争请求进入临界区。
2.如果竞争成功则跳转至步骤3;反之,则跳转至步骤1。
3.竞争成功地内核进入临界区,加互斥锁。
4.进入临界区后,取出图像帧号new_frame,并使用映射函数更新new_frame:
F(new_frame)=mod(new_frame,max_frame)。
5.查看标志位数组中arr_sign(0)[new_frame].sign是否等于1。如果arr_sign(0)[new_frame].sign==1,跳转至步骤6;反之,则跳转到步骤7。
6.比较send_frame与new_frame的大小。如果new_frame>send_frame,退出临界区,解除互斥锁,跳转至步骤1;反之,则跳转至步骤7。
7.将arr_sign(0)[new_frame].sign置为1,即arr_sign(0)[new_frame].sign=1。
8.从空闲链表中取下一个空闲节点ListNode,并且将空闲节点ListNode连接到arr_sign(i)[new_frame].p_frame。
9.将节点插入到链表List(0)的末尾。
10.该内核线程的一个解码周期结束,退出临界区,解开互斥锁,进入下一个解码周期,系统跳转至步骤1。
CPU0使用一个内核线程,按照技术方案中的图像发送策略向CPU1发送解码后的图像,即:
1.根据如下公式计算待发送帧在标志位数组中的索引k:
k=ceil(send_frame/4)。
2.查看标志位数组arr_sign(0)[k].sign是否等于1。如果arr_sign(0)[k].sign==1,跳转至步骤6;反之,则跳转到步骤3。
3.等待10ms,wait_count=wait_count+1。
4.判断wait_count是否大于MAX_VISIT。如果wait_count>MAX_VISIT,跳转至步骤5;反之,则跳转至步骤3。
5.丢弃该帧图像,跳转至步骤10。
6.内核线程请求进入互斥区。
7.如果内核线程竞争成功,进入互斥区,加互斥锁;反之,则跳转至步骤7。
8.根据arr_sign(0)[k].p_frame在图像链表List(i)中取下图像节点。
9.将节点中的图像数据取出,打包发送。
10.通过如下公式更新send_frame,跳转至步骤1:
send_frame=(send_frame+1)%max_frame。
步骤3.CPU1工作过程
CPU1接收CPU0发送过来的码流,为了使得4个CPU工作负荷均衡,对接收到的码流进行3等分,即满足方程1=mod(new_frame,4)的码流由CPU1解码,其余的码流通过另一个内核线程发送给其余三个CPU。同时,CPU1使用一个内核线程,利用技术方案中非接收端处理器基于并行解码的图像排序策略的第二部分接收由CPU0解码后的有序图像序列,即:
1.首先,如果成功接收解码图像,跳转至步骤3;反之,跳转至步骤2。
2.接收失败,丢弃该帧图像,跳转至步骤1。
3.内核竞争请求进入临界区内核。
4.内核线程竞争成功,进入临界区,加互斥锁;反之跳转至步骤3。
5.将接收到的图像装入空闲图像节点ListNode。
6.根据接收到图像的new_frame,按照如下公式确定图像链表List(0)和标志位数组arr_sign(0):
0=mod(new_frame,max_frame)。
7.根据公式m=mod(new_frame,max_frame)确定该帧图像在标志位数组中的位置。
8.将ListNode和arr_sign(k)[m].p_frame连接,并arr_sign(k)[m].p_frame=1,然后将ListNode插入链表末尾。
9.推出临界区,解开互斥锁,跳转至步骤1。
CPU1通过30个内核线程进行粗粒度的并行解码工作,即每一个内核线程完成码流的独立解码工作。当内核线程完成加码工作后,则通过技术方案中的非接收端排序算法的第一部分对解码后的图像进行排序。即:
1.首先,解码成功的内核线程通过竞争请求进入临界区。
2.如果竞争成功则跳转至步骤3;反之,则跳转至步骤1。
3.竞争成功地内核进入临界区,加互斥锁。
4.进入临界区后,取出图像帧号new_frame,并使用映射函数更新new_frame:F(new_frame)=mod(new_frame,max_frame)。
5.查看标志位数组中arr_sign(1)[new_frame].sign是否等于1。如果arr_sign(1)[new_frame].sign==1,跳转至步骤6;反之,则跳转到步骤7。
6.比较send_frame与new_frame的大小。如果new_frame>send_frame,退出临界区,解除互斥锁,跳转至步骤1;反之,则跳转至步骤7。
7.将arr_sign(1)[new_frame].sign置为1,即arr_sign(1)[new_frame].sign=1。
8.从空闲链表中取下一个空闲节点ListNode,并且将空闲节点ListNode连接到arr_sign(1)[new_frame].p_frame。
9.将节点插入到链表List(1)的末尾。
10.该内核线程的一个解码周期结束,退出临界区,解开互斥锁,进入下一个解码周期,系统跳转至步骤1。
CPU1使用一个内核线程,按照技术方案中的图像发送策略向CPU2发送图像,即:
1.根据全局变量send_frame,按照如下公式确定图像链表List(m):
m=mod(send_frame,4)。
2.根据如下公式计算待发送帧在标志位数组中的索引k:
k=ceil(send_frame/4)。
3.查看标志位数组arr_sign(m)[k].sign是否等于1。如果arr_sign(m)[k].sign==1,跳转至步骤7;反之,则跳转到步骤4。
4.等待10ms,wait_count=wait_count+1。
5.判断wait_count是否大于MAX_VISIT。如果wait_count>MAX_VISIT,跳转至步骤6;反之,则跳转至步骤4。
6.丢弃该帧图像,跳转至步骤11。
7.内核线程请求进入互斥区。
8.如果内核线程竞争成功,进入互斥区,加互斥锁;反之,则跳转至步骤7。
9.根据arr_sign(m)[k].p_frame在图像链表List(m)中取下图像节点。
10.将节点中的图像数据取出,打包发送。
11.通过如下公式更新send_frame,跳转至步骤1:
send_frame=(send_frame+1)%max_frame。
步骤4.CPU2工作过程
CPU2接收CPU1发送过来的码流,为了使得4个CPU工作负荷均衡,对接收到的码流进行2等分,即满足方程2=mod(new_frame,4)的码流由CPU2解码,其余的码流通过另一个内核线程发送给其余三个CPU。同时,CPU2使用一个内核线程,利用技术方案中非接收端处理器基于并行解码的图像排序策略的第二部分接收由CPU1发送的有序图像序列,即:
1.首先,如果成功接收解码图像,跳转至步骤3;反之,跳转至步骤2。
2.接收失败,丢弃该帧图像,跳转至步骤1。
3.内核竞争请求进入临界区内核。
4.内核线程竞争成功,进入临界区,加互斥锁;反之跳转至步骤3。
5.将接收到的图像装入空闲图像节点ListNode。
6.根据接收到图像的new_frame,按照如下公式确定图像链表List(k)和标志位数组arr_sign(k):k=mod(new_frame,4)。
7.根据公式m=mod(new_frame,max_frame)确定该帧图像在标志位数组中的位置。
8.将ListNode和arr_sign(k)[m].p_frame连接,并arr_sign(k)[m].p_frame=1,然后将ListNode插入链表末尾。
9.推出临界区,解开互斥锁,跳转至步骤1。
CPU2通过30个内核线程进行粗粒度的并行解码工作,即每一个内核线程完成码流的独立解码工作。当内核线程完成加码工作后,则通过技术方案中的非接收端排序算法的第一部分对解码后的图像进行排序。即:
1.首先,解码成功的内核线程通过竞争请求进入临界区。
2.如果竞争成功则跳转至步骤3;反之,则跳转至步骤1。
3.竞争成功地内核进入临界区,加互斥锁。
4.进入临界区后,取出图像帧号new_frame,并使用映射函数更新new_frame:F(new_frame)=mod(new_frame,max_frame)。
5.查看标志位数组中arr_sign(2)[new_frame].sign是否等于1。如果arr_sign(2)[new_frame].sign==1,跳转至步骤6;反之,则跳转到步骤7。
6.比较send_frame与new_frame的大小。如果new_frame>send_frame,退出临界区,解除互斥锁,跳转至步骤1;反之,则跳转至步骤7。
7.将arr_sign(2)[new_frame].sign置为1,即arr_sign(2)[new_frame].sign=1。
8.从空闲链表中取下一个空闲节点ListNode,并且将空闲节点ListNode连接到arr_sign(2)[new_frame].p_frame。
9.将节点插入到链表List(2)的末尾。
10.该内核线程的一个解码周期结束,退出临界区,解开互斥锁,进入下一个解码周期,系统跳转至步骤1。
CPU2使用一个内核线程,按照技术方案中图像发送策略向CPU3发送图像,即:
1.根据全局变量send_frame,按照如下公式确定图像链表List(m):
m=mod(send_frame,4)。
2.根据如下公式计算待发送帧在标志位数组中的索引k:
k=ceil(send_frame/4)。
3.查看标志位数组arr_sign(m)[k].sign是否等于1。如果arr_sign(m)[k].sign==1,跳转至步骤7;反之,则跳转到步骤4。
4.等待10ms,wait_count=wait_count+1。
5.判断wait_count是否大于MAX_VISIT。如果wait_count>MAX_VISIT,跳转至步骤6;反之,则跳转至步骤4。
6.丢弃该帧图像,跳转至步骤11。
7.内核线程请求进入互斥区。
8.如果内核线程竞争成功,进入互斥区,加互斥锁;反之,则跳转至步骤7。
9.根据arr_sign(m)[k].p_frame在图像链表List(m)中取下图像节点。
10.将节点中的图像数据取出,打包发送。
11.通过如下公式更新send_frame,跳转至步骤1:
send_frame=(send_frame+1)%max_frame。
步骤5.CPU3工作过程
CPU3接收CPU2发送过来的码流,然后进行解码。同时,CPU3使用一个内核线程,利用技术方案中非接收端处理器基于并行解码的图像排序策略的第二部分接收由CPU2发送的有序图像序列,即:
1.首先,如果成功接收解码图像,跳转至步骤3;反之,跳转至步骤2。
2.接收失败,丢弃该帧图像,跳转至步骤1。
3.内核竞争请求进入临界区内核。
4.内核线程竞争成功,进入临界区,加互斥锁;反之跳转至步骤3。
5.将接收到的图像装入空闲图像节点ListNode。
6.根据接收到图像的new_frame,按照如下公式确定图像链表List(k)和标志位数组arr_sign(k):k=mod(new_frame,4)。
7.根据公式m=mod(new_frame,max_frame)确定该帧图像在标志位数组中的位置。
8.将ListNode和arr_sign(k)[m].p_frame连接,并arr_sign(k)[m].p_frame=1,然后将ListNode插入链表末尾。
9.推出临界区,解开互斥锁,跳转至步骤1。
CPU3通过30个内核线程进行粗粒度的并行解码工作,即每一个内核线程完成码流的独立解码工作。当内核线程完成加码工作后,则通过技术方案中的非接收端排序算法的第一部分对解码后的图像进行排序。即:
1.首先,解码成功的内核线程通过竞争请求进入临界区。
2.如果竞争成功则跳转至步骤3;反之,则跳转至步骤1。
3.竞争成功地内核进入临界区,加互斥锁。
4.进入临界区后,取出图像帧号new_frame,并使用映射函数更新new_frame:F(new_frame)=mod(new_frame,max_frame)。
5.查看标志位数组中arr_sign(3)[new_frame].sign是否等于1。如果arr_sign(3)[new_frame].sign==1,跳转至步骤6;反之,则跳转到步骤7。
6.比较send_frame与new_frame的大小。如果new_frame>send_frame,退出临界区,解除互斥锁,跳转至步骤1;反之,则跳转至步骤7。
7.将arr_sign(3)[new_frame].sign置为1,即arr_sign(i)[new_frame].sign=1。
8.从空闲链表中取下一个空闲节点ListNode,并且将空闲节点ListNode连接到arr_sign(3)[new_frame].p_frame。
9.将节点插入到链表List(3)的末尾。
10.该内核线程的一个解码周期结束,退出临界区,解开互斥锁,进入下一个解码周期,系统跳转至步骤1。
CPU3使用一个内核线程,按照技术方案中图像发送策向后续设备发送图像,即:
1.根据全局变量send_frame,按照如下公式确定图像链表List(i):
i=mod(send_frame,4)。
2.根据如下公式计算待发送帧在标志位数组中的索引k:
k=ceil(send_frame/4)。
3.查看标志位数组是否等于1。如果arr_sign(i)[k].sign==1,跳转至步骤7;反之,则跳转到步骤4。
4.等待10ms,wait_count=wait_count+1。
5.判断wait_count是否大于MAX_VISIT。如果wait_count>MAX_VISIT,跳转至步骤6;反之,则跳转至步骤4。
6.丢弃该帧图像,跳转至步骤11。
7.内核线程请求进入互斥区。
8.如果内核线程竞争成功,进入互斥区,加互斥锁;反之,则跳转至步骤7。
9.根据arr_sign(i)[k].p_frame在图像链表List(i)中取下图像节点。
10.将节点中的图像数据取出,打包发送。
11.通过如下公式更新send_frame,跳转至步骤1:
send_frame=(send_frame+1)%max_frame。
最终,CPU3发送的图像序列是顺序与输入码流的顺序一致的图像序列。
本发明的实现方法,包括统一帧号编排方式,创建映射函数,建立标志位数组,连接标志位数组与图像链表和将标志为数组按顺序发送相应节点的图像,减少了传统算法中因为排序所需的缓冲空间,有效的节省了内存空间;避免了传统方法中链表中固定节点的删除与插入过程中时间的消耗,提高了排序效率。
简而言之,本发明公开的基于高速解码平台的并行解码图像排序方法,主要解决现有技术中并行解码图像序列乱序的问题。实现步骤包括:(1)重新定义系统接收到的码流帧号;(2)给处理器设置标志位数组;(3)构建映射函数将帧号范围缩小:(4)设置图像链表,并设置指导图像有序发送的全局变量;(5)接收端处理器依据其并行解码策略进行码流解码(6)非接收端处理器依据其并行解码策略进行码流解码;(7)通过标志位数组的下标对图像链表中的节点地址进行排序;(8)处理器依据其图像发送策略发送图像。本发明采用取模映射的方式,减少了并行解码后图像排序时延,能够满足实时性要求,节省了内存空间,可用于实现对JPEG2000图像的实时解码。

Claims (7)

1.一种基于高速实时解码平台的并行解码快速排序方法,在解码平台上运行,形成一个完整的系统,系统涉及到配置的若干处理器,包括接收端处理器和非接收端处理器,其特征在于,包括有如下步骤:
(1)重新定义系统接收到的码流帧号:系统在接收到码流后,需要确定图像或视频中帧号的正确顺序。定义一个全局变量,用来表示码流的全局帧号,体现系统从压缩码流发送源接收到的图像和视频的码流顺序,再在存储码流和解码后图像的节点中分别定义两个变量,用来临时保存映射帧号,即映射函数的结果,这两个变量保存的帧号值相同;
(2)给处理器设置标志位数组:假设系统中有n个并行工作的处理器,给第i个处理器设置i+1个标志位数组,其中,i=0,1,2,...,n-1。所设置的标志位数组中的每个元素具备两个属性,即指向图像节点的指针和指示元素内是否含有图像的标志位,每个标志位数组对应一个数组长度,同时给第i个处理器的i+1个数组定义一个数组总长度,即每个处理器均定义有一个数组总长度;
(3)构建映射函数:将全局帧号映射到当前数组总长度所对应的范围,得到一个映射后的码流帧号,即映射帧号。在映射范围内,保证相应的解码视频序列与输入码流序列保持时间一致性。每当连续映射的全局帧个数等于数组总长度时,称为完成一次映射循环;
(4)设置图像链表,并设置指导图像有序发送的全局变量:给n个并行工作的处理器i设置i+1个图像链表,用来保证其发送的解码后的图像为完全排序的图像序列。同时,设置一个指导图像有序发送的全局变量,用来表示发送帧号。每当成功发送一帧图像,对该指导图像有序发送的全局变量进行更新;
(5)接收端处理器依据其并行解码策略进行码流解码:接收端处理器通过网络从压缩码流发送源接收压缩码流,成功接收码流后,依据接收端处理器的并行解码的策略,对满足本级处理器要求的码流进行多核并行解码,并将解码后得到的图像与标志位数组进行关联,将其余的码流通过另一个内核线程发送给下一级处理器;
(6)非接收端处理器依据其并行解码策略进行码流解码:非接收端处理器通过网络从上一级处理器接收码流,成功接收码流后,依据非接收端处理器的并行解码的策略,对满足本级处理器要求的码流进行多核并行解码,得到解码后的图像,将其余的码流通过另一个内核线程发送给下一级处理器。此外,非接收端处理器将从上一级处理器接收到的解码后图像,根据映射帧号分别放置到相对应的图像链表中,为下一步的图像排序做准备;
(7)各处理器依据其图像排序策略进行图像排序:查看各处理器相对应的图像链表中对应节点的标志位数组,确定是否包含图像。如果包含图像,则进一步确认是否包含将要发送的图像。如果包含将要发送的图像,则退出临界区,重新竞争链表资源;反之,先对该节点进行剔除,然后从空闲链表中取下一个空闲节点并向图像链表中插入新的图像节点。如果不包含图像,则将标志位数组先修改为包含图像,然后从空闲链表中取下一个空闲节点并向图像链表中插入新的图像节点,完成对解码后图像的排序;
(8)各处理器依据其图像发送策略发送图像:根据发送帧号确定图像链表,并计算出待发送帧在标志位数组中的索引,然后查看由此所确定的节点中是否包含图像,如果该节点在给定的时间内持续没有图像,则视为解码错误,跳过该帧,更新发送帧号;反之,解码正确,则从图像链表中取下发送帧号对应的图像节点,将节点中的图像数据取出,打包发送给下一个处理器或输出端,并更新发送帧号;
(9)各处理器具体处理流程:处理器从上一级接收到码流和解码后的图像,首先处理器依据其并行解码策略进行多核并行码流解码。其中,将不满足自身处理要求的码流发送给下一级处理器。然后,依据其图像排序策略将解码图像存在图像链表中。最后,将图像链表中的图像依据其图像发送策略发送给下一级处理器。各处理器保持并行工作,最后一级处理器的图像链表所发送图像的顺序即为最终的排序结果。
2.根据权利要求1所述的基于高速实时解码平台的并行解码快速排序方法,其特征在于,步骤(2)中所述给处理器设置标志位数组,具体包括:
2.1设置标志位数组并定义其属性:设置标志位数组arr_sign时,其元素需要具备两个属性,一个是指向图像节点的指针p_frame,另一个是指示元素内是否含有图像的标志位sign,元素的结构定义如下:
struct sign_flag
{
ListNode*p_frame
bool sign
}
2.2定义标志位数组总长度:标志位数组arr_sign(i)所对应的数组总长度设置为:List(i)_length=α*m(i),其中α>1,表示系统解码容错性,m(i)表示第i个处理器的并行解码速度。
3.根据权利要求1所述的基于高速实时解码平台的并行解码快速排序方法,其特征在于,步骤(3)中所述的构建映射函数,将全局帧号global_frame映射到数组总长度max_frame所对应的范围,在映射范围内,保证相应的解码视频序列与输入码流序列保持时间一致性,具体映射函数为:
f(new_frame)=mod(new_frame,max_frame)。
4.根据权利要求1所述的基于高速实时解码平台的并行解码快速排序方法,其特征在于,步骤(4)中所述的指导图像有序发送的全局变量send_frame,在每当成功发送一帧图像时,对其进行更新,具体更新公式为:
send_frame=(send_frame+1)%max_frame。
5.根据权利要求1所述的基于高速实时解码平台的并行解码快速排序方法,其特征在于,步骤(5)中所述的接收端处理器依据其并行解码策略进行码流解码,具体实现方法如下:
(5a)首先,解码成功的内核线程通过竞争请求进入临界区;
(5b)如果竞争成功则跳转至步骤(5c),反之,则跳转至步骤(5a);
(5c)竞争成功地内核进入临界区,加互斥锁;
(5d)进入临界区后,取出映射帧号new_frame,并使用映射函数更新new_frame, 具体函数为:F(new_frame)=mod(new_frame,arr_length);
(5e)查看处理器i的标志位数组中的标志位arr_sign(i)[new_frame].sign是否等于1,如果等于1,跳转至步骤(5f),反之,则跳转到步骤(5g);
(5f)比较发送帧号send_frame与映射帧号new_frame的大小;如果new_frame>send_frame,退出临界区,解除互斥锁,跳转至步骤(5a),反之,则跳转至步骤(5g);
(5g)令arr_sign(i)[new_frame].sign=1;
(5h)从空闲链表中取下一个空闲节点ListNode,并且将空闲节点ListNode连接到arr_sign(i)[new_frame].p_frame;
(5i)将节点插入到图像链表List(0)的末尾;
(5j)该内核线程的一个解码周期结束,退出临界区,解开互斥锁,进入下一个解码周期,系统跳转至步骤(5a)。
6.根据权利要求1所述的基于高速实时解码平台的并行解码快速排序方法,其特征在于,步骤(6)中所述的非接收端处理器依据其并行解码策略进行码流解码,具体实现步骤如下:
(6a)首先,如果成功接收解码图像,跳转至步骤(6c),反之,跳转至步骤(6a);
(6b)接收失败,丢弃该帧图像,跳转至步骤(6a);
(6c)内核竞争请求进入临界区内核;
(6d)内核线程竞争成功,进入临界区,加互斥锁,反之跳转至步骤(6c);
(6e)将接收到的图像装入空闲图像节点ListNode;
(6f)根据接收到图像的new_frame,按照如下公式确定图像链表List(k)和标志位数组arr_sign(k):k=mod(new_frame,4);
(6g)根据公式k=mod(new_frame,max_frame)确定该帧图像在标志位数组中的位置;
(6h)将ListNode和arr_sign(k)[m].p_frame连接,并且将后者置为1,然后将ListNode插入链表末尾;
(6i)退出临界区,解开互斥锁,跳转至步骤(6a)。
7.根据权利要求1所述的基于高速实时解码平台的并行解码快速排序方法,其特征在于,步骤(7)中所述的各处理器依据其图像发送策略发送图像,具体步骤如下:
(7a)根据全局变量send_frame,按照如下公式确定图像链表List(i):i=mod(send_frame,4);
(7b)根据如下公式计算待发送帧在标志位数组中的索引k:k=ceil(send_frame/4);
(7c)查看标志位数组arr_sign(i)[k].sign是否等于1,如果等于1,跳转至步骤(7g),反之,则跳转到步骤(7d);
(7d)等待10ms,记等待次数计数变量wait_count=wait_count+1;
(7e)判断wait_count是否大于最大等待次数变量MAX_VISIT;如果wait_count>MAX_VISIT,跳转至步骤(7f),反之,则跳转至步骤(8d);
(7f)丢弃该帧图像,跳转至步骤(7k);
(7g)内核线程请求进入互斥区;
(7h)如果内核线程竞争成功,进入互斥区,加互斥锁,反之,则跳转至步骤(7g);
(7i)根据arr_sign(i)[k].p_frame在图像链表List(i)中取下图像节点;
(7j)将节点中的图像数据取出,打包发送;
(7k)通过如下公式更新send_frame,跳转至步骤(7a)。
CN201810847824.0A 2018-07-27 2018-07-27 基于高速实时解码平台的并行解码快速排序方法 Active CN108881917B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810847824.0A CN108881917B (zh) 2018-07-27 2018-07-27 基于高速实时解码平台的并行解码快速排序方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810847824.0A CN108881917B (zh) 2018-07-27 2018-07-27 基于高速实时解码平台的并行解码快速排序方法

Publications (2)

Publication Number Publication Date
CN108881917A true CN108881917A (zh) 2018-11-23
CN108881917B CN108881917B (zh) 2019-12-03

Family

ID=64306488

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810847824.0A Active CN108881917B (zh) 2018-07-27 2018-07-27 基于高速实时解码平台的并行解码快速排序方法

Country Status (1)

Country Link
CN (1) CN108881917B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110572667A (zh) * 2019-09-30 2019-12-13 杭州当虹科技股份有限公司 一种基于视频序列组并行的hevc和avs2 8k视频解码方法

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1767601A (zh) * 2005-10-21 2006-05-03 西安交通大学 一种支持多源流媒体的同步播放控制方法
GB0718798D0 (en) * 2005-04-07 2007-11-07 Nds Ltd Novel trick mode system
CN101615985A (zh) * 2008-06-23 2009-12-30 华为技术有限公司 数据处理方法、装置以及系统
US20120230399A1 (en) * 2011-03-10 2012-09-13 Christopher Andrew Segall Video decoder parallelization including a bitstream signal
CN103325259A (zh) * 2013-07-09 2013-09-25 西安电子科技大学 一种基于多核并行的违章停车检测方法
CN108257078A (zh) * 2016-12-28 2018-07-06 英特尔公司 存储器知晓重排序源

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB0718798D0 (en) * 2005-04-07 2007-11-07 Nds Ltd Novel trick mode system
CN1767601A (zh) * 2005-10-21 2006-05-03 西安交通大学 一种支持多源流媒体的同步播放控制方法
CN101615985A (zh) * 2008-06-23 2009-12-30 华为技术有限公司 数据处理方法、装置以及系统
US20120230399A1 (en) * 2011-03-10 2012-09-13 Christopher Andrew Segall Video decoder parallelization including a bitstream signal
CN103325259A (zh) * 2013-07-09 2013-09-25 西安电子科技大学 一种基于多核并行的违章停车检测方法
CN108257078A (zh) * 2016-12-28 2018-07-06 英特尔公司 存储器知晓重排序源

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
DUNG VU ; JILONG KUANG ; LAXMI BHUYAN: "An Adaptive Dynamic Scheduling Scheme for H.264/AVC Decoding on Multicore Architecture", 《2012 IEEE INTERNATIONAL CONFERENCE ON MULTIMEDIA AND EXPO》 *
黄伯虎: "一种采用预排序策略的多核并行skyline算法", 《华中科技大学学报(自然科学版)》 *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110572667A (zh) * 2019-09-30 2019-12-13 杭州当虹科技股份有限公司 一种基于视频序列组并行的hevc和avs2 8k视频解码方法

Also Published As

Publication number Publication date
CN108881917B (zh) 2019-12-03

Similar Documents

Publication Publication Date Title
DE102018126005A1 (de) Synchronisation in einer Multi-Kachel-, Multi-Chip-Verarbeitungsanordnung
CN105893126B (zh) 一种任务调度方法及装置
CN112465129B (zh) 片内异构人工智能处理器
US7318126B2 (en) Asynchronous symmetric multiprocessing
US8893145B2 (en) Method to reduce queue synchronization of multiple work items in a system with high memory latency between processing nodes
CN111738434B (zh) 在异构处理单元上执行深度神经网络的方法
US8209690B2 (en) System and method for thread handling in multithreaded parallel computing of nested threads
CN109542830B (zh) 一种数据处理系统及数据处理方法
CN104699631A (zh) Gpdsp中多层次协同与共享的存储装置和访存方法
US11748174B2 (en) Method for arbitration and access to hardware request ring structures in a concurrent environment
US20090135180A1 (en) APPARATUS AND METHOD FOR VOLUME RENDERING ON MULTIPLE GRAPHICS PROCESSING UNITS (GPUs)
Ma et al. Process distance-aware adaptive MPI collective communications
CN106575264A (zh) 异构共享虚拟存储器中的按需共享性转换
CN104978321B (zh) 构造数据队列的方法、装置及从其插入和消费对象的方法
Biswas et al. Accelerating tensorflow with adaptive rdma-based grpc
TWI666551B (zh) 以複數個引擎作資源與互連結構的分散式分配以支援指令序列的執行
DE102012214007A1 (de) Auswahl eines Protokolls einer kollektiven Operation in einem Paralellrechner
CN113821311A (zh) 任务执行方法及存储设备
DE69111764T2 (de) Übereinstimmungsprotokolle für Mehrprozessoren mit gemeinsam genutztem Speicher.
CN108881917B (zh) 基于高速实时解码平台的并行解码快速排序方法
CN114662932A (zh) 一种节点分级的工作流类定时任务调度方法
Yao et al. Opportunistic competition overhead reduction for expediting critical section in NoC based CMPs
TW202131193A (zh) 應用資料標籤在多計算單元平台上的資料共用方法
DE102023105568A1 (de) Programmatisch gesteuertes daten-multicasting über mehrere rechen-engines
CN112100446B (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
GR01 Patent grant
GR01 Patent grant