CN109523455A - 一种图像数据异步传输方法、装置及计算机可读存储介质 - Google Patents
一种图像数据异步传输方法、装置及计算机可读存储介质 Download PDFInfo
- Publication number
- CN109523455A CN109523455A CN201811156852.4A CN201811156852A CN109523455A CN 109523455 A CN109523455 A CN 109523455A CN 201811156852 A CN201811156852 A CN 201811156852A CN 109523455 A CN109523455 A CN 109523455A
- Authority
- CN
- China
- Prior art keywords
- thread
- data
- memory
- graphics processor
- main memory
- 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
- 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
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
- G06F3/0611—Improving I/O performance in relation to response time
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0656—Data buffering arrangements
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- General Engineering & Computer Science (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
一种图像数据异步传输方法、装置及计算机可读存储介质,方法包括以下步骤:主存储器设多个缓存池;建立第一线程和第二线程,主存储器与外部存储器中数据间的I/O操作由第一线程负责,调用图形处理器执行运算由第二线程负责,主存储器与图形处理器显存间的I/O操作根据图形处理器运算时间确定由第一线程或第二线程负责;多个第一线程在主存储器与外部存储器间进行数据传输,多个第一线程或第二线程使得图形处理器显存获取缓存池的数据,由第二线程调用图形处理器执行运算;外部存储器的数据读取完毕时,终结第一线程,图形处理器运算执行完毕且数据块缓冲池中无等待处理的数据时,终结第二线程。本发明减少了磁盘I/O的次数,提高运算效率。
Description
技术领域
本发明涉及图像数据传输技术领域,具体地说,涉及一种图像数据异步传输方法、装置及计算机可读存储介质。
背景技术
随着遥感卫星传感器技术的飞速发展,遥感数据体量的急剧增长,遥感图像数据处理速度成为生态遥感评价的瓶颈。
近年来,随着GPU(图形处理器)设备的可编程能力迅速提升,且应用范围不断扩大,作为通用的高性能大规模并行处理器,GPU具有高密度运算、并行性高、相对体积较小且高性价比等特点,为遥感数据的处理加速提供了一个极具潜力的技术手段。然而CPU与GPU之间PCI-E(总线接口)/AGP(图形加速接口)总线的带宽远低于显存总线,仍然是生态遥感评价的瓶颈。
通常应用程序需要在I/O(输入输出)环节将数据由外部磁盘读入内存,再从内存将数据复制到GPU设备显存,之后才是GPU对数据进行并行处理,整个流程按照图1所示时序进行。外部存储器与主存储器之间的I/O时间为T1,主存储器与GPU设备显存的I/O的时间与GPU的运算时间和为T2。可以看出,在应用程序执行各设备之间的I/O过程中,GPU运算资源始终处于空闲状态;同理,在GPU执行运算操作时,主存储器的运算资源也在闲置。
发明内容
为解决现有技术存在的不足,本发明提供一种图像数据异步传输方法、装置及存储介质,采用多线程传输机制,结合基于动态获取的内存空间大小划分数据块的方法,降低了程序的逻辑复杂度,减少了磁盘I/O的次数,运算效率提高。
为实现上述目的,本发明提供一种图像数据异步传输方法,应用于电子装置,该方法包括:在主存储器中设置具有预设存储空间的多个缓存池;建立第一线程和第二线程,其中,主存储器与外部存储器中数据之间的I/O操作由第一线程负责,调用图形处理器执行运算由第二线程负责,主存储器与图形处理器显存之间的I/O操作则根据图形处理器运算时间来确定由第一线程或第二线程负责;通过多个第一线程在主存储器与外部存储器之间进行数据传输,通过多个第一线程或第二线程使得图形处理器显存获取缓存池的数据,并由第二线程调用图形处理器执行运算;当外部存储器的数据读取完毕时,终结第一线程,当图形处理器运算执行完毕且数据块缓冲池中无等待处理的数据时,终结第二线程。
一种电子装置,该电子装置包括:主存储器、外部存储器、处理器和图形处理器,所述主存储器中存储有图像数据异步传输程序,所述图像数据异步传输程序被所述处理器执行时实现如下步骤:在主存储器中设置具有预设存储空间的多个缓存池;建立第一线程和第二线程,其中,主存储器与外部存储器中数据之间的I/O操作由第一线程负责,调用图形处理器执行运算由第二线程负责,主存储器与图形处理器显存之间的I/O操作则根据图形处理器运算时间来确定由第一线程或第二线程负责;通过多个第一线程在主存储器与外部存储器之间进行数据传输,通过多个第一线程或第二线程使得图形处理器显存获取缓存池的数据,并由第二线程调用图形处理器执行运算;当外部存储器的数据读取完毕时,终结第一线程,当图形处理器运算执行完毕且数据块缓冲池中无等待处理的数据时,终结第二线程。
一种计算机可读存储介质,所述计算机可读存储介质中包括图像数据异步传输程序,所述图像数据异步传输程序被处理器执行时,实现如上所述的图像数据异步传输方法的步骤。
本发明提出的图像数据异步传输方法、装置及存储介质通过基于动态获取的内存空间大小划分数据块的方法,采用多线程传输机制,内存与GPU的I/O以及GPU运算这部分的时间消耗完全被覆盖,相比原有方案中各环节完全顺序执行提升了可观的时间效率。基于动态获取的可用内存空间来划分数据块,降低了程序的逻辑复杂度,又大大减少了磁盘I/O的次数。对比原来的分块方法,运算效率大大提高。
附图说明
通过结合下面附图对其实施例进行描述,本发明的上述特征和技术优点将会变得更加清楚和容易理解。
图1是表示现有技术中数据传输的流程图;
图2是表示本发明实施例的图像数据异步传输方法的流程图;
图3是表示本发明实施例的数据传输的流程图一;
图4是表示本发明实施例的数据传输的流程图二;
图5是表示现有技术中数据块划分的示意图;
图6是表示本发明实施例的数据块划分的示意图;
图7是表示本发明实施例的GPU计算的流程图;
图8是表示本发明实施例的电子装置的硬件架构示意图;
图9是表示本发明实施例的图像数据异步传输程序的模块构成图。
具体实施方式
下面将参考附图来描述本发明所述的图像数据异步传输方法、装置及存储介质的实施例。本领域的普通技术人员可以认识到,在不偏离本发明的精神和范围的情况下,可以用各种不同的方式或其组合对所描述的实施例进行修正。因此,附图和描述在本质上是说明性的,而不是用于限制权利要求的保护范围。此外,在本说明书中,附图未按比例画出,并且相同的附图标记表示相同的部分。
应当理解,当在本说明书和权利要求书中使用时,术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。也应当理解,在本发明说明书和权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
也应当理解,尽管术语第一、第二等可以在此用来描述各种元素,但这些元素不应该受限于这些术语。这些术语仅用来将这些元素彼此区分开。例如,在不脱离本发明范围的前提下,第一线程可以被称为第二线程,并且类似地,第二线程可以被称为第一线程。第一线程和第二线程均为线程,但它们并非同一种线程。
一种图像数据异步传输方法,如图2所示,包括如下步骤:
S10,在主存储器中设置具有一定存储空间的多个缓存池,作为数据块由外部存储器到GPU(图像处理器)显存的中转站,各缓存池的大小由数据块的大小来决定。其中,主存储器11包括内存及至少一种类型的可读存储介质。其中,内存用于设置缓存池,可读存储介质用于存储例如图像数据异步传输程序。
S30,建立第一线程和第二线程,通过多线程机制来实现数据I/O和GPU数据运算的同步执行,所述多线程是指在单个程序中同时运行多个线程完成不同的工作。逻辑上每一数据块的处理过程都是相互独立的,让主机对数据块的I/O和GPU设备对于数据块的运算处理这两个在逻辑上相互独立的操作过程“并行”执行。
其中,如图3所示,第一线程负责主存储器按块同外部存储器中的遥感影像数据进行I/O操作,将待处理数据读入缓存池或将缓存池中结果数据写回外部存储器的文件,其时间为T1;第二线程负责主存储器与GPU的I/O以及调用GPU执行运算,其时间为T2,将缓存池中数据块复制到GPU显存执行运算或将运算结果写回缓存池。
或者,如图4所示,如果整个计算任务执行过程中GPU运算环节占据了整个过程中绝大部分的时间消耗,则第二线程仅负责计算,其时间为T2,而第一线程则负责将待处理数据读入缓存池或将缓存池中结果数据写回外部存储器的文件,并且还负责主存储器与GPU的I/O,其时间为T1,通过这样调整线程,可以使得主存储器与GPU的I/O以及下一步的外部存储器和主存储器的I/O这部分的时间消耗完全被GPU的计算过程时间覆盖,相比原有方案中各环节完全顺序执行也是提升了可观的时间效率。
S50,通过多个第一线程在主存储器与外部存储器之间进行数据传输,通过多个第一线程或第二线程使得图形处理器显存获取缓存池的数据,并由第二线程调用图形处理器执行运算;
S70,当外部存储器的数据读取完毕时,终结第一线程,当图形处理器运算执行完毕且数据块缓冲池中无等待处理的数据时,终结第二线程。
在一个可选实施例中,第一线程与第二线程之间的通信和同步操作通过设置信号量以及资源锁的方式来实现。信号量是一种允许多个线程竞争共享资源(例如,存储器、文件)的协调或同步的硬件和软件构造。信号量是储存在主存储器的指定位置中线程可检查和改变的值。基于信号量的值,某个第二线程可访问某个缓存池,或等待一段时间并再次检查信号量。信号量通过一个计数器控制对该缓存池的访问,信号量的值是一个非负整数,所有通过它的线程都会将该整数减1。如果计数器大于0,则访问被允许,计数器减1;如果为0,则访问被禁止,所有试图通过它的线程都将处于等待状态。计数器计算的结果是允许访问共享资源的通行证。因此,为了访问缓存池,各线程必须从信号量得到通行证,如果该信号量的计数大于0,则此线程获得一个通行证并与缓存池连接,这将导致信号量的计数递减,否则,此线程将被阻塞直到获得一个通行证为止。当此线程不再需要访问该缓存池时,它释放该通行证,这导致信号量的计数递增,如果另一个线程等待通行证,则那个线程将在那时获得通行证。
例如,信号量用于解决各线程间各种同步问题。某一缓存池为第二线程所需,信号量的初始值为0。第二线程要使用缓存池内的数据,需要等该缓存池与外部存储器之间完成数据传输以后。在缓存池与外部存储器之间进行数据传输的时候,若第二线程与缓存池连接,信号量的初始值为0,执行P操作(P操作表示申请一个资源)会把第二线程阻塞,并放入阻塞队列中,当缓存池与外部存储器之间数据传输完成,执行V操作(V操作表示释放一个资源),把第二线程从阻塞队列中放回就绪队列中,得以继续执行。同样地,当第一线程试图与某一缓存池连接时,信号量同样可以控制第一线程,当第二线程与该缓存池连接时,则不允许第一线程与该缓存池连接。
进一步地,信号量还可以处理线程互斥问题,为某一缓存池设置有实现一个第二线程与另一个第二线程互斥的信号量,每次只允许一个线程与该缓存池连接,信号量的初始值为1,当没有线程与该缓存池连接时,任意一个线程与该缓存池连接都会执行P操作,把信号量的值减为0,然后第二线程与该缓存池连接,进行计算,而当有其他第二线程想要和该缓存池连接时,由于信号量的值为0,该第二线程将会被阻塞,直至与该缓存池连接的第二线程退出连接,通过V操作,表示该缓存池目前没有与第二线程连接,则其他第二线程可以与该缓存池连接。
另外,资源锁同样也可以用在多线程多任务互斥,一个线程占用了某一个资源,那么别的线程就无法访问,直到这个线程被释放,其他的线程才开始可以利用这个资源。具体说,待处理数据读入缓存池,或缓存池中结果数据写回外部存储器文件的过程中,设置资源锁,使得第二线程不能访问该缓存池。当缓存池数据读入或写回外部存储器的文件完成后,资源锁打开,第二线程才可以访问该缓存池。
或者,某个第二线程正在使用缓存池的数据进行计算,则资源锁锁定,使得无法向该缓存池内读入数据,该缓存池也不能向外部存储器写入数据。同时,第一线程可以与另一缓存池进行数据传输。直到该第二线程完成计算,资源锁打开,才允许该缓存池内读入数据或向外部存储器写入数据。而第二线程则又可以用已经读入数据的另一缓存池的数据进行计算。
数据块划分读取机制通常作为处理遥感影像场景下的解决方案之一。首先,作为存放在外部存储器中遥感影像和主存储器之间的数据传输单位,将原始的遥感影像划分为若干数量固定的数据块(Block)20,如图5所示每个数据块20包含一定数量的栅格像元数据10。该数据块划分机制,可以通过调整数据块的大小来适配实际应用中不同配置的软硬件系统。
然而在大图像处理中磁盘I/O仍是计算效率的主要瓶颈,现有的数据块划分机制如图5所示,该方案的弊端在于当数据写入到某一块时,其写入顺序从数据块的起始地址写,将数据块中的第1行数据写入,当要进行接下来块的第2行数据写入时,数据块中第1行和第2行存放位置不连续,间隔s通常为
s=IC (1)
其中:
I为图像宽度;
C为通道类型。
在数据块中读取栅格像元数据时,换行读写时必须先移动文件指针,图2中读取一块数据块就需要移动3次文件指针。整幅图像的读写就需要移动至少Blocks×3(Blocks为数据块数)次文件指针,这样的磁盘I/O次数非常大。
在一个可选实施例中,对于数据块的分块采用以下方式:根据每次读取源影像数据的像元行数进行分块,可以通过动态获取可用内存空间的大小来间接设定内存的数据块的大小,进而间接获得每次读取的源影像数据的行数。其中,数据块的大小S的计算公式如下:
S=WHC (2)
其中:
S为数据块的大小;
W为数据块的宽度;
H为数据块的高度,
根据数据块的大小S,可知每次要读取的影像像元行数R为
R=M/S (3)
M为动态获取可用内存空间的大小。
进一步地,其中,数据块的宽度可以采用外存的默认宽度。
进一步地,数据块的高度可以根据实际可用内存空间进行推算,可以用下面公式计算,
M/H≥8 (4)
具体说,若内存相对于单行数据块空间足够大,则尽可能多的读取多行数据块,但为了多线程运行,单行数据块应该不超过内存的1/8,若内存相对于单行数据块空间不够大,则仅读取单行的数据块,从而确定单行数据块的高度。
数据块划分的情况如图6所示。采用这种数据块划分方法,由于是整行读取读像元数据,读取数据时行号变化,列号不变化,能大大减少磁盘I/O次数。
例如,内存大小为24G,由公式2可知单行数据块的高度应小于等于3,如采用8个线程的话,则单行数据块的高度可取为3,将单行数据块的高度代入公式1,即可计算出数据块的大小S,并应用公式3,进而计算出每次要读取的影像像元行数R。
下面说明一下遥感图像异步传输处理过程,优选地,该遥感图像异步传输在CUDA(并行编程与计算平台)上进行。下面结合图7来具体说明一下异步传输方法的具体步骤:
S1,初始化CUDA运算平台,若为否,则返回继续初始化;
S2,在主存储器中开辟一组固定大小的存储空间作为缓存池,存储空间的大小根据主存储器以及GPU设备显存实际情况在程序中设定,每一个缓存池都包含3种状态,分别是Ready_to_read、Ready_to_write以及Ready_to_process,其中:Ready_to_read状态表示该缓存池可以进行新数据读入,即可以从外部存储器读取一个数据块到该缓存空间;Ready_to_write状态表示该缓存池中的数据可以写回到外部存储器的文件中;Ready_to_process状态表示该缓存池中的数据已经读取完毕,可以放入GPU执行运算处理。
S31,建立多个第一线程,用于处理外部存储器和内存缓存池的数据I/O;
S32,建立多个第二线程,用于将缓存池的数据同GPU设备显存进行I/O操作并执行GPU运算;
S41)获取一个缓存池;
S51)判断该缓存池是否准备好读入数据,若该缓存池准备好读入数据,则步骤S511,将待处理数据读入缓存池,并返回步骤S41,若该缓存池未准备好读入数据,则执行步骤S61;
S61)判断外部存储器是否准备好写入数据,若为是,则步骤S611,将缓存池中结果数据写回外部存储器的文件,并返回步骤S41,若为否,则执行步骤S71;
S71)获取第一线程的状态;
S81)判断是否I/O数据传输结束,可以通过在程序中设置IS_IO_Done全局变量来记录并控制第一线程的执行状态。若为是(即IS_IO_Done为真值),则步骤S3,程序调用Pthread_join方法将第一线程终结,若为否,则返回步骤S41。
S42)第二线程获取一个缓存池;
S52)判断是否准备好计算,若第二线程准备好计算,则步骤S521,执行计算,并在计算结束后再次返回步骤S42;若为否,执行步骤S62;
S62)获取第二线程状态;
S72)判断是否GPU运算执行完毕且缓冲池中无等待处理的数据,可以通过在程序中设置IS_Process_Done全局变量来记录并控制第二线程的执行状态。若为是(即IS_Process_Done为真值),则步骤S3,程序调用Pthread_join方法将第二线程终结。若为否,则返回步骤S42。
其中,步骤S31、S41、S51、S61、S71、S81与步骤S32、S42、S52、S62、S72是并行同步执行的。
图8所示是本发明电子装置1的硬件架构示意图。所述电子装置1是一种能够按照事先设定或者存储的指令,自动进行数值计算和/或信息处理的设备。所述电子装置1可以是计算机、也可以是单个网络服务器、多个网络服务器组成的服务器组或者基于云计算的由大量主机或者网络服务器构成的云,其中云计算是分布式计算的一种,由一群松散耦合的计算机集组成的一个超级虚拟计算机。
在本实施例中,电子装置1可包括,但不仅限于,可通过系统总线相互通信连接的主存储器11、外部存储器13、处理器14和图形处理器15,需要指出的是,图8仅示出了具有部分组件的电子装置1,但是应理解的是,并不要求实施所有示出的组件,可以替代的实施更多或者更少的组件。
其中,主存储器11包括内存及至少一种类型的可读存储介质。内存为电子装置1的运行提供缓存;可读存储介质可为如闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等的非易失性存储介质。在一些实施例中,可读存储介质可以是电子装置1的内部存储单元,例如该电子装置1的硬盘;在另一些实施例中,该非易失性存储介质也可以是电子装置1的外部存储设备,例如电子装置1上配备的插接式硬盘,智能存储卡(Smart Media Card),安全数字(Secure Digital)卡,闪存卡(Flash Card)等。本实施例中,主存储器11的可读存储介质通常用于存储安装于电子装置1的操作系统和各类应用软件,例如本实施例中的图像数据异步传输程序代码等。此外,主存储器11还可以用于暂时地存储已经输出或者将要输出的各类数据。
所述处理器14用于运行所述主存储器11中存储的程序代码或者处理数据。通过处理器14调用图形处理器15进行图像处理。
另外,电子装置1还包括网络接口,所述网络接口可包括无线网络接口或有线网络接口,该网络接口通常用于在所述电子装置1与其他电子设备之间建立通信连接。
图像数据异步传输程序存储在主存储器11中,包括至少一个存储在主存储器中的计算机可读指令,该至少一个计算机可读指令可被处理器14执行,以实现本申请各实施例的方法;以及,该至少一个计算机可读指令依据其各部分所实现的功能不同,可被划为不同的逻辑模块。
在一个实施例中,上述图像数据异步传输程序被所述处理器14执行时实现如下步骤:
S10,在主存储器中设置具有一定存储空间的多个缓存池,作为数据块由外部存储器到GPU(图像处理器)显存的中转站,各缓存池的大小由数据块的大小来决定。
S30,建立第一线程和第二线程,通过多线程机制来实现数据I/O和GPU数据运算的同步执行,在单个程序中同时运行多个线程完成不同的工作,称为多线程。逻辑上每一数据块的处理过程都是相互独立的,让主机对数据块的I/O和GPU设备对于数据块的运算处理这两个在逻辑上相互独立的操作过程“并行”执行。
其中,第一线程负责主存储器按块同外部存储器中的遥感影像数据进行I/O操作,将待处理数据读入缓存池或将缓存池中结果数据写回外部存储器的文件;第二线程负责主存储器与GPU显存的I/O以及调用GPU执行运算,将缓存池中数据块复制到GPU显存执行运算或将运算结果写回缓存池。
或者,整个计算任务执行过程中GPU运算环节占据了整个过程中绝大部分的时间消耗,则第二线程仅负责计算,而第一线程则负责将待处理数据读入缓存池或将缓存池中结果数据写回外部存储器的文件,并且还负责主存储器与GPU显存的I/O,通过这样调整线程,可以使得内存与GPU的I/O以及下一步的外部存储器和主存储器的I/O这部分的时间消耗完全被GPU的计算过程时间覆盖,相比原有方案中各环节完全顺序执行也是提升了可观的时间效率。
S50,通过多个第一线程在主存储器与外部存储器之间进行数据传输,通过多个第一线程或第二线程使得图形处理器显存获取缓存池的数据,并由第二线程调用图形处理器执行运算;
S70,当外部存储器的数据读取完毕时,终结第一线程,当图形处理器运算执行完毕且数据块缓冲池中无等待处理的数据时,终结第二线程。
在一个可选实施例中,第一线程与第二线程之间的通信和同步操作通过设置信号量以及资源锁的方式来实现。信号量是一种允许多个线程竞争共享资源(例如,存储器、文件)的协调或同步的硬件和软件构造。信号量是储存在主存储器的指定位置中线程可检查和改变的值。基于信号量的值,某个第二线程可访问某个缓存池,或等待一段时间并再次检查信号量。信号量通过一个计数器控制对该缓存池的访问,信号量的值是一个非负整数,所有通过它的线程都会将该整数减1。如果计数器大于0,则访问被允许,计数器减1;如果为0,则访问被禁止,所有试图通过它的线程都将处于等待状态。计数器计算的结果是允许访问共享资源的通行证。因此,为了访问缓存池,各线程必须从信号量得到通行证,如果该信号量的计数大于0,则此线程获得一个通行证并与缓存池连接,这将导致信号量的计数递减,否则,此线程将被阻塞直到获得一个通行证为止。当此线程不再需要访问该缓存池时,它释放该通行证,这导致信号量的计数递增,如果另一个线程等待通行证,则那个线程将在那时获得通行证。
例如,信号量用于解决各线程间各种同步问题。某一缓存池为第二线程所需,信号量的初始值为0。第二线程要使用缓存池内的数据,需要等该缓存池与外部存储器之间完成数据传输以后。在缓存池与外部存储器之间进行数据传输的时候,若第二线程与缓存池连接,信号量的初始值为0,执行P操作(P操作表示申请一个资源)会把第二线程阻塞,并放入阻塞队列中,当缓存池与外部存储器之间数据传输完成,执行V操作(V操作表示释放一个资源),把第二线程从阻塞队列中放回就绪队列中,得以继续执行。同样地,当第一线程试图与某一缓存池连接时,信号量同样可以控制第一线程,当第二线程与该缓存池连接时,则不允许第一线程与该缓存池连接。
进一步地,信号量还可以处理线程互斥问题,为某一缓存池设置有实现一个第二线程与另一个第二线程互斥的信号量,每次只允许一个线程与该缓存池连接,信号量的初始值为1,当没有线程与该缓存池连接时,任意一个线程与该缓存池连接都会执行P操作,把信号量的值减为0,然后第二线程与该缓存池连接,进行计算,而当有其他第二线程想要和该缓存池连接时,由于信号量的值为0,该第二线程将会被阻塞,直至与该缓存池连接的第二线程退出连接,通过V操作,表示该缓存池目前没有与第二线程连接,则其他第二线程可以与该缓存池连接。
另外,资源锁同样也可以用在多线程多任务互斥,一个线程占用了某一个资源,那么别的线程就无法访问,直到这个线程unlock,其他的线程才开始可以利用这个资源。具体说,待处理数据读入缓存池,或缓存池中结果数据写回外部存储器文件的过程中,设置资源锁,使得第二线程不能访问该缓存池。当缓存池数据读入或写回外部存储器文件完成后,资源锁打开,第二线程才可以访问该缓存池。
或者,某个第二线程正在使用缓存池的数据进行计算,则资源锁锁定,使得无法向该缓存池内读入数据,该缓存池也不能向外部存储器写入数据。同时,第一线程可以与另一缓存池进行数据传输。直到该第二线程完成计算,资源锁打开,才允许该缓存池内读入数据或向外部存储器写入数据。而第二线程则又可以用已经读入数据的另一缓存池的数据进行计算。
图9所示为图像数据异步传输程序50的程序模块图。在本实施例中,图像数据异步传输程序50被分割为多个模块,该多个模块被存储于主存储器11中,并由处理器14执行,以完成本发明。本发明所称的模块是指能够完成特定功能的一系列计算机程序指令段。
所述图像数据异步传输程序50可以被分割为:缓存池建立模块501、线程建立模块502、I/O模块503、GPU计算模块504、终结模块505。
其中,缓存池建立模块501,用于在主存储器中设置具有一定存储空间的多个缓存池,作为数据块由外部存储器到GPU(图像处理器)显存的中转站。每一个缓存池都包含3种状态,分别是Ready_to_read、Ready_to_write以及Ready_to_process,其中:Ready_to_read状态表示该缓存池可以进行新数据读入,即可以从外部存储器读取一个数据块到该缓存空间;Ready_to_write状态表示该缓存池中的数据可以写回到磁盘文件中;Ready_to_process状态表示该缓存池中的数据已经读取完毕,可以放入GPU执行运算处理。
线程建立模块502用于建立第一线程和第二线程,使得第一线程负责主存储器按块同外部存储器中的遥感影像数据进行I/O操作,将待处理数据读入缓存池或将缓存池中结果数据写回外部存储器文件;第二线程负责主存储器与GPU显存的I/O以及调用GPU执行运算,将缓存池中数据块复制到GPU显存执行运算或将运算结果写回缓存池。或者,整个计算任务执行过程中GPU运算环节占据了整个过程中绝大部分的时间消耗,则第二线程仅负责计算,而第一线程则负责将待处理数据读入缓存池或将缓存池中结果数据写回外部存储器文件,并且还负责主存储器与GPU显存的I/O。
I/O模块503通过多个第一线程在主存储器与外部存储器之间进行数据传输,通过多个第一线程或第二线程使得图形处理器显存获取缓存池的数据。
GPU计算模块504用于执行运算。
终结模块505获取第一线程的状态,判断是否I/O数据传输结束,若为是,程序调用Pthread_join方法将第一线程终结。并且,终结模块505还获取第二线程的状态,并判断是否GPU运算执行完毕且缓冲池中无等待处理的数据,若为是,程序调用Pthread_join方法将第二线程终结。
进一步地,图像数据异步传输程序50还可以包括数据块划分模块506,根据每次读取源影像数据的像元行数对数据进行分块,形成数据块。通过动态获取可用内存空间的大小来间接设定内存的数据块的大小,进而间接获得每次读取的源影像数据的行数。其中,数据块的大小S的计算公式如下:
S=WHC (2)
其中:
S为数据块的大小;
W为数据块的宽度;
H为数据块的高度,
根据数据块的大小S,可知每次要读取的影像像元行数R为
R=M/S (3)
M为动态获取可用内存空间的大小。
进一步地,其中,数据块的宽度可以采用外存的默认宽度。
进一步地,数据块的高度可以根据实际可用内存空间进行推算,可以用下面公式计算,
M/H≥8 (4)
具体说,若内存相对于单行数据块空间足够大,则尽可能多的读取多行数据块,但为了多线程运行,单行数据块应该不超过内存的1/8,若内存相对于单行数据块空间不够大,则仅读取单行的数据块,从而确定单行数据块的高度。
此外,本发明实施例还提出一种计算机可读存储介质,所述计算机可读存储介质可以是硬盘、多媒体卡、SD卡、闪存卡、SMC、只读存储器(ROM)、可擦除可编程只读存储器(EPROM)、便携式紧致盘只读存储器(CD-ROM)、USB存储器等等中的任意一种或者几种的任意组合。所述计算机可读存储介质中包括遥感图像、图像数据异步传输程序50等,所述图像数据异步传输程序50被处理器14执行时实现如下操作:
S10,在主存储器中设置具有一定存储空间的多个缓存池。
S30,建立第一线程和第二线程,其中,第一线程负责主存储器按块同外部存储器中的遥感影像数据进行I/O操作,将待处理数据读入缓存池或将缓存池中结果数据写回外部存储器文件;第二线程负责主存储器与GPU显存的I/O以及调用GPU执行运算,将缓存池中数据块复制到GPU显存执行运算或将运算结果写回缓存池。或者,整个计算任务执行过程中GPU运算环节占据了整个过程中绝大部分的时间消耗,则第二线程仅负责计算,而第一线程则负责将待处理数据读入缓存池或将缓存池中结果数据写回外部存储器文件,并且还负责主存储器与GPU显存的I/O。
S50,通过多个第一线程在主存储器与外部存储器之间进行数据传输,通过多个第一线程或第二线程使得图形处理器显存获取缓存池的数据,并由第二线程调用图形处理器执行运算。
S70,当外部存储器数据读取完毕时,终结第一线程,当图形处理器运算执行完毕且数据块缓冲池中无等待处理的数据时,终结第二线程。
本发明之计算机可读存储介质的具体实施方式与上述图像数据异步传输方法以及电子装置1的具体实施方式大致相同,在此不再赘述。
以上所述仅为本发明的优选实施例,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种图像数据异步传输方法,应用于电子装置,其特征在于,该方法包括:
在主存储器中设置具有预设存储空间的多个缓存池;
建立第一线程和第二线程,其中,主存储器与外部存储器中数据之间的I/O操作由第一线程负责,调用图形处理器执行运算由第二线程负责,主存储器与图形处理器显存之间的I/O操作则根据图形处理器运算时间来确定由第一线程或第二线程负责;
通过多个第一线程在主存储器与外部存储器之间进行数据传输,通过多个第一线程或第二线程使得图形处理器显存获取缓存池的数据,并由第二线程调用图形处理器执行运算;
当外部存储器的数据读取完毕时,终结第一线程,当图形处理器运算执行完毕且数据块缓冲池中无等待处理的数据时,终结第二线程。
2.根据权利要求1所述的图像数据异步传输方法,其特征在于,
若图形处理器运算时间大于主存储器与外部存储器中数据进行I/O操作的时间,则主存储器与图形处理器显存之间的I/O操作由第一线程负责,
若图形处理器运算时间小于主存储器与外部存储器中数据进行I/O操作的时间,则主存储器与图形处理器显存之间的I/O操作由第二线程负责。
3.根据权利要求1所述的图像数据异步传输方法,其特征在于,
主存储器与外部存储器中数据之间的I/O操作包括将待处理数据读入缓存池和将缓存池中的运算结果数据写回外部存储器;
主存储器与图形处理器显存之间的I/O操作包括将缓存池中的数据复制到图形处理器显存和将运算结果数据写回缓存池。
4.根据权利要求1所述的图像数据异步传输方法,其特征在于,
第一线程与第二线程之间的通信和同步操作通过设置信号量和/或资源锁的方式来实现。
5.根据权利要求1所述的图像数据异步传输方法,其特征在于,
外部存储器与主存储器之间的数据传输单位是数据块,所述数据块包含一行或多行栅格像元数据,其中,
通过动态获取的可用内存空间大小M来设定一个数据块包含的栅格像元的行数,其计算公式如下:
S=WHC
其中:
S为数据块的大小;
W为数据块的宽度;
H为数据块的高度,
其中,数据块的宽度采用外部存储器的默认宽度,数据块的高度根据动态获取的可用内存空间大小M进行推算,采用下面公式推算:
M/H≥8
根据数据块的大小S、可用内存空间大小M计算影像像元行数R的公式如下:
R=M/S。
6.根据权利要求1所述的图像数据异步传输方法,其特征在于,
通过调用Pthread_join函数来使得第一线程与第二线程同步终结。
7.一种电子装置,其特征在于,该电子装置包括:主存储器、外部存储器、处理器和图形处理器,所述主存储器中存储有图像数据异步传输程序,所述图像数据异步传输程序被所述处理器执行时实现如下步骤:
在主存储器中设置具有预设存储空间的多个缓存池;
建立第一线程和第二线程,其中,主存储器与外部存储器中数据之间的I/O操作由第一线程负责,调用图形处理器执行运算由第二线程负责,主存储器与图形处理器显存之间的I/O操作则根据图形处理器运算时间来确定由第一线程或第二线程负责;
通过多个第一线程在主存储器与外部存储器之间进行数据传输,通过多个第一线程或第二线程使得图形处理器显存获取缓存池的数据,并由第二线程调用图形处理器执行运算;
当外部存储器的数据读取完毕时,终结第一线程,当图形处理器运算执行完毕且数据块缓冲池中无等待处理的数据时,终结第二线程。
8.根据权利要求7所述的电子装置,其特征在于,
若图形处理器运算时间大于主存储器与外部存储器中数据进行I/O操作的时间,则主存储器与图形处理器显存之间的I/O操作由第一线程负责,
若图形处理器运算时间小于主存储器与外部存储器中数据进行I/O操作的时间,则主存储器与图形处理器显存之间的I/O操作由第二线程负责。
9.根据权利要求7所述的电子装置,其特征在于,
外部存储器与主存储器之间的数据传输单位是数据块,所述数据块包含一行或多行栅格像元数据,其中,
通过动态获取的可用内存空间大小M来设定一个数据块包含的栅格像元的行数,其计算公式如下:
S=WHC
其中:
S为数据块的大小;
W为数据块的宽度;
H为数据块的高度,
其中,数据块的宽度采用外部存储器的默认宽度,数据块的高度根据动态获取的可用内存空间大小M进行推算,采用下面公式推算:
M/H≥8
根据数据块的大小S、可用内存空间大小M计算影像像元行数R的公式如下:
R=M/S。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中包括图像数据异步传输程序,所述图像数据异步传输程序被处理器执行时,实现如权利要求1至6中任一项所述的图像数据异步传输方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811156852.4A CN109523455A (zh) | 2018-09-30 | 2018-09-30 | 一种图像数据异步传输方法、装置及计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811156852.4A CN109523455A (zh) | 2018-09-30 | 2018-09-30 | 一种图像数据异步传输方法、装置及计算机可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109523455A true CN109523455A (zh) | 2019-03-26 |
Family
ID=65772124
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811156852.4A Pending CN109523455A (zh) | 2018-09-30 | 2018-09-30 | 一种图像数据异步传输方法、装置及计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109523455A (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111752972A (zh) * | 2020-07-01 | 2020-10-09 | 浪潮云信息技术股份公司 | 基于RocksDB的key-value存储模式下的数据关联查询方法及系统 |
CN111782367A (zh) * | 2020-06-30 | 2020-10-16 | 北京百度网讯科技有限公司 | 分布式存储方法及装置、电子设备、计算机可读介质 |
CN112445596A (zh) * | 2020-11-27 | 2021-03-05 | 平安普惠企业管理有限公司 | 基于多线程的数据导入方法、系统及存储介质 |
CN113505000A (zh) * | 2021-09-08 | 2021-10-15 | 广东卓启云链科技有限公司 | 区块链中的多线程处理方法、装置、系统和存储介质 |
CN113542822A (zh) * | 2021-07-12 | 2021-10-22 | 中国银行股份有限公司 | 影像文件传输方法及装置 |
CN113918356A (zh) * | 2021-12-13 | 2022-01-11 | 广东睿江云计算股份有限公司 | 基于cuda数据快速同步方法、装置、计算机设备及存储介质 |
WO2023284745A1 (zh) * | 2021-07-14 | 2023-01-19 | 华为技术有限公司 | 一种数据处理方法、系统及相关设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120256922A1 (en) * | 2011-04-08 | 2012-10-11 | Simon Moy | Multithreaded Processor and Method for Realizing Functions of Central Processing Unit and Graphics Processing Unit |
US20150220354A1 (en) * | 2013-11-26 | 2015-08-06 | Dynavisor, Inc. | Dynamic I/O Virtualization |
CN106991011A (zh) * | 2017-03-30 | 2017-07-28 | 武汉大学 | 一种针对大数据任务处理的基于cpu多线程与gpu多粒度并行及协同优化的方法 |
-
2018
- 2018-09-30 CN CN201811156852.4A patent/CN109523455A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120256922A1 (en) * | 2011-04-08 | 2012-10-11 | Simon Moy | Multithreaded Processor and Method for Realizing Functions of Central Processing Unit and Graphics Processing Unit |
US20150220354A1 (en) * | 2013-11-26 | 2015-08-06 | Dynavisor, Inc. | Dynamic I/O Virtualization |
CN106991011A (zh) * | 2017-03-30 | 2017-07-28 | 武汉大学 | 一种针对大数据任务处理的基于cpu多线程与gpu多粒度并行及协同优化的方法 |
Non-Patent Citations (1)
Title |
---|
李林等: "《基于GPU的生态环境遥感评价模型并行化研究》" * |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111782367A (zh) * | 2020-06-30 | 2020-10-16 | 北京百度网讯科技有限公司 | 分布式存储方法及装置、电子设备、计算机可读介质 |
CN111782367B (zh) * | 2020-06-30 | 2023-08-08 | 北京百度网讯科技有限公司 | 分布式存储方法及装置、电子设备、计算机可读介质 |
CN111752972A (zh) * | 2020-07-01 | 2020-10-09 | 浪潮云信息技术股份公司 | 基于RocksDB的key-value存储模式下的数据关联查询方法及系统 |
CN112445596A (zh) * | 2020-11-27 | 2021-03-05 | 平安普惠企业管理有限公司 | 基于多线程的数据导入方法、系统及存储介质 |
CN112445596B (zh) * | 2020-11-27 | 2024-02-02 | 上海睿量私募基金管理有限公司 | 基于多线程的数据导入方法、系统及存储介质 |
CN113542822A (zh) * | 2021-07-12 | 2021-10-22 | 中国银行股份有限公司 | 影像文件传输方法及装置 |
CN113542822B (zh) * | 2021-07-12 | 2023-01-06 | 中国银行股份有限公司 | 影像文件传输方法及装置 |
WO2023284745A1 (zh) * | 2021-07-14 | 2023-01-19 | 华为技术有限公司 | 一种数据处理方法、系统及相关设备 |
CN113505000A (zh) * | 2021-09-08 | 2021-10-15 | 广东卓启云链科技有限公司 | 区块链中的多线程处理方法、装置、系统和存储介质 |
CN113505000B (zh) * | 2021-09-08 | 2021-12-21 | 广东卓启云链科技有限公司 | 区块链中的多线程处理方法、装置、系统和存储介质 |
CN113918356A (zh) * | 2021-12-13 | 2022-01-11 | 广东睿江云计算股份有限公司 | 基于cuda数据快速同步方法、装置、计算机设备及存储介质 |
CN113918356B (zh) * | 2021-12-13 | 2022-02-18 | 广东睿江云计算股份有限公司 | 基于cuda数据快速同步方法、装置、计算机设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109523455A (zh) | 一种图像数据异步传输方法、装置及计算机可读存储介质 | |
CN106991011B (zh) | 基于cpu多线程与gpu多粒度并行及协同优化的方法 | |
US8330763B2 (en) | Apparatus and method for volume rendering on multiple graphics processing units (GPUs) | |
US6725457B1 (en) | Semaphore enhancement to improve system performance | |
US7669036B2 (en) | Direct path monitoring by primary processor to each status register in pipeline chained secondary processors for task allocation via downstream communication | |
US9619428B2 (en) | SIMD processing unit with local data share and access to a global data share of a GPU | |
CN105868031A (zh) | 一种数据传输装置和方法 | |
US20120092352A1 (en) | Method and system for performing event-matching with a graphical processing unit | |
CN108475441A (zh) | 光线追踪期间的详细级别选择 | |
US11763419B2 (en) | GPR optimization in a GPU based on a GPR release mechanism | |
CN112181657A (zh) | 视频处理方法、装置、电子设备及存储介质 | |
CN114998087B (zh) | 渲染方法及装置 | |
US8972693B2 (en) | Hardware managed allocation and deallocation evaluation circuit | |
US5513365A (en) | Display adapter interface layer | |
CN113377509A (zh) | 数据处理方法与系统 | |
US11442730B2 (en) | Ticket locks with enhanced waiting | |
EP4148571A1 (en) | Overlapped geometry processing in a multicore gpu | |
DE102023101520A1 (de) | Effizientes Starten von Aufgaben auf einem Prozessor | |
CN112346879B (zh) | 进程管理方法、装置、计算机设备及存储介质 | |
DE102022112459A1 (de) | Techniken zum effizienten synchronisieren mehrerer programmthreads | |
CN111124691B (zh) | 多进程共享的gpu调度方法、系统及电子设备 | |
AU2017422723A1 (en) | Data loading program, data loading method, and data loading apparatus | |
CN116360672A (zh) | 访问存储器的方法、装置和电子设备 | |
US20240070962A1 (en) | Graphics processing method and system | |
EP1210691B1 (en) | Method, system, and computer program product for overlapping graphics data collection and transmission using a single processor |
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 |