CN117435557A - Gpu指令流文件的访问方法、装置及存储介质 - Google Patents

Gpu指令流文件的访问方法、装置及存储介质 Download PDF

Info

Publication number
CN117435557A
CN117435557A CN202311515855.3A CN202311515855A CN117435557A CN 117435557 A CN117435557 A CN 117435557A CN 202311515855 A CN202311515855 A CN 202311515855A CN 117435557 A CN117435557 A CN 117435557A
Authority
CN
China
Prior art keywords
file
instruction stream
gpu
gpu instruction
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
Application number
CN202311515855.3A
Other languages
English (en)
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.)
Nanjing Sietium Semiconductor Co ltd
Original Assignee
Nanjing Sietium Semiconductor Co ltd
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 Nanjing Sietium Semiconductor Co ltd filed Critical Nanjing Sietium Semiconductor Co ltd
Priority to CN202311515855.3A priority Critical patent/CN117435557A/zh
Publication of CN117435557A publication Critical patent/CN117435557A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/13File access structures, e.g. distributed indices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/604Tools and structures for managing or administering access control systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/0643Management of files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/547Remote procedure calls [RPC]; Web services

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Automation & Control Theory (AREA)
  • Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • General Health & Medical Sciences (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本公开实施例公开了一种GPU指令流文件的访问方法、装置及存储介质,该方法可以包括:获取所述计算设备的操作系统对应的虚拟文件系统提供的标准文件操作接口;基于内存文件系统,将期望发送至GPU的GPU指令流以文件形式存储到系统内存中以生成GPU指令流文件;基于所述标准文件操作接口,适配并封装用于访问所述GPU指令流文件的文件操作接口;CPU通过调用文件操作接口访问所述GPU指令流文件以使得GPU执行所述GPU指令流。通过该技术方案能够利用内存文件系统的性能优势进行快速访问和执行,使得对所述GPU指令流文件的访问和操作变得简单,简化了GPU用户驱动的实现以及提高了代码的可移植性。

Description

GPU指令流文件的访问方法、装置及存储介质
技术领域
本公开实施例涉及图像处理技术领域,尤其涉及一种图形处理器(GraphicProcessing Unit,GPU)指令流文件的访问方法、装置及存储介质。
背景技术
在计算机图形和图像处理中,所述GPU指令流是在计算机图形和图像处理中由中央处理器(Central Processing Unit,CPU)发送给GPU的指令序列,用于控制GPU执行各种图形操作,例如,绘制三维模型、渲染纹理以及实现各种图形效果等。其中,所述GPU指令流包括:GPU的绘制命令、变换命令、着色器程序等,用于实现各种图形效果。所述GPU指令流必须保存在GPU可直接访问的存储器中,通常由运行在CPU上的GPU驱动程序将用户的计算或渲染任务转化成一系列特定的GPU的指令,在典型的应用场景下,用户的渲染任务是一帧一帧连续不断的,所以所述指令也像流水一样连续不断地输入给GPU执行。所述GPU指令流必须存储在GPU可直接访问的存储器中,而且该存储器的物理位置离GPU的命令处理器越近越好。
现有的GPU指令流的存储方法是通过内存映射输入输出(Memory-Mapped Input/Output,MMIO)机制直接写入随机访问存储器(Random Access Memory)。由于即使是在同一种操作系统下的不同驱动程序,也会有自身相应的GPU指令流生成逻辑,上层应用没有对GPU指令流数据操作的统一接口,导致所述上层应用无法实现对GPU指令流进行读取、查找或分析等操作,因此,可维护性和可移植性差,其中,所述上层应用为系统中的GPU驱动程序及以所述GPU指令流为输入数据的应用程序。此外,也没有对随机访问存储器设置权限保护,进程可以随意篡改所述GPU指令流,因此,安全性差。
发明内容
有鉴于此,本公开实施例期望提供一种GPU指令流文件的访问方法、装置及存储介质,能够利用内存文件系统的性能优势进行快速访问和执行,使得对所述GPU指令流文件的访问和操作变得简单,简化了GPU用户驱动的实现以及提高了代码的可移植性。
本公开实施例的技术方案是这样实现的:
第一方面,本公开实施例提供一种GPU指令流文件的访问方法,包括:
获取所述计算设备的操作系统对应的虚拟文件系统提供的标准文件操作接口;
基于内存文件系统,将期望发送至GPU的GPU指令流以文件形式存储到系统内存中以生成GPU指令流文件;
基于所述标准文件操作接口,适配并封装用于访问所述GPU指令流文件的文件操作接口;
CPU通过调用文件操作接口访问所述GPU指令流文件以使得GPU执行所述GPU指令流。
第二方面,本公开实施例提供一种GPU指令流文件的访问装置,所述装置包括:获取部分、生成部分、适配部分以及调用部分;其中,
所述获取部分,经配置为获取所述计算设备的操作系统对应的虚拟文件系统提供的标准文件操作接口;
所述生成部分,经配置为基于内存文件系统,将期望发送至GPU的GPU指令流以文件形式存储到系统内存中以生成GPU指令流文件;
所述适配部分,经配置为基于所述标准文件操作接口,适配并封装用于访问所述GPU指令流文件的文件操作接口;
所述调用部分,经配置为CPU通过调用文件操作接口访问所述GPU指令流文件以使得GPU执行所述GPU指令流。
第三方面,本公开实施例提供了一种计算设备,所述计算设备包括:通信接口,存储器和处理器;各个组件通过总线系统耦合在一起;其中,
所述通信接口,用于在与其他外部网元之间进行收发信息过程中,信号的接收和发送;
所述存储器,用于存储能够在所述处理器上运行的计算机程序;
所述处理器,用于在运行所述计算机程序时,执行第一方面所述GPU指令流文件的访问方法。
第四方面,本公开实施例提供了一种计算机存储介质,所述计算机存储介质存储有至少一条指令,所述至少一条指令用于被处理器执行以实现第一方面所述GPU指令流文件的访问方法。
本公开实施例提供了一种GPU指令流文件的访问方法、装置及存储介质,通过获取所述计算设备的操作系统对应的虚拟文件系统提供的标准文件操作接口,基于内存文件系统,将期望发送至GPU的GPU指令流以文件形式存储到系统内存中以生成GPU指令流文件,使得GPU驱动程序访问所述GPU指令流的过程不再是直接对内存进行操作,而是转换为标准的文件操作,利用所述内存文件系统的高速数据存储或读写的性能优势,以实现对所述GPU指令流文件的高效的存储和操作。基于所述标准文件操作接口,适配并封装用于访问所述GPU指令流文件的文件操作接口,由于对所述GPU指令流文件的读写等文件操作都封装在所述文件操作接口中,通过调用所述文件操作接口对所述GPU指令流文件进行操作,使得GPU用户驱动和其他用户空间中的应用程序按照统一的方式对所述GPU指令流文件的访问和操作变得简单。
附图说明
图1为本公开实施例提供的一种计算设备的组成示意图;
图2为一种将物理内存映射为虚拟地址空间的示意图;
图3为一种基于内存映射输入输出的GPU指令流存储示意图;
图4为本公开实施例提供的一种GPU指令流文件的访问方法流程图;
图5为本公开实施例提供的一种文件系统的组成示意图;
图6为本公开实施例提供的一种写GPU指令流文件的示意图;
图7为本公开实施例提供的一种GPU指令流文件的访问方法的流程图;
图8为本公开实施例提供的一种GPU指令流文件的访问装置示意图。
具体实施方式
下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述。
参见图1,其示出了能够实现本公开实施例技术方案的计算设备100的组成示意图,需注意,图1所示出的计算设备是可能的设备的仅一个示例,并且可根据需要在各种设备中的任一设备中实现本公开的实施方案。该计算设备100的组成具体可以为任意类型的计算装置,包括且不限于台式计算机、服务器、工作站、膝上计算机、基于计算机的仿真器、无线装置、移动或蜂窝电话(包含所谓的智能电话)、个人数字助理(PDA)、视频游戏控制台(包含视频显示器、移动视频游戏装置、移动视频会议单元)、膝上型计算机、桌上型计算机、电视机顶盒、平板计算装置、电子书阅读器、固定或移动媒体播放器等。如图1所示,计算设备100的组成可以包括CPU 10、GPU 20以及系统内存30。具体来说,CPU 10可包括控制计算设备100运算的通用或专用处理器,其经配置以处理供执行的计算机程序的指令。在CPU 10上执行的应用程序11可为利用GPU 20的功能性的任何应用程序,可包括图形用户接口(Graphic User Interface,GUI)应用程序、操作系统、便携式制图应用程序、用于工程或艺术应用的计算机辅助设计程序、视频游戏应用程序、文字处理器应用程序、电子邮件应用程序、电子表格应用程序、媒体播放器应用程序或使用2D、3D图形渲染应用程序等,本公开实施例以执行图形渲染应用程序为例,所述图形渲染应用程序也可以简称为应用程序或程序。此外,CPU 10上执行的图形渲染应用程序可包含一或多个图形渲染指令(也可以理解为待渲染的画面帧中包含一或多个所述图形),由于用户的渲染任务是一帧一帧连续不断的,所以图形渲染指令也像流水一样连续不断地输入给GPU 20执行,即多个所述图形渲染指令通过GPU驱动程序12生成了GPU指令流。在一些示例中,CPU 10上还运行有用户空间库13和操作系统14,其中,所述用户空间库13存储有对文件系统操作的函数,所述操作系统14运行在CPU 10上,用于实现GPU指令流文件。所述图形渲染指令可符合图形应用程序编程接口(Application Programming Interface,API),例如,开放式图形库API(OpenGL API)、开放式图形库嵌入系统(OpenGL ES)API、Direct3D API、X3D API、RenderMan API、WebGL API、开放式计算语言(OpenCLTM)、RenderScript或任何其它异构计算API或任何其它公用或专有标准图形或计算API,本公开下面的描述中将以OpenGL API为例进行说明。
GPU 20可经配置以执行图形运算,可以理解为,CPU 10通过控制GPU驱动程序12,将渲染指令翻译为GPU 20可读的渲染命令,然后GPU 20根据收到的所述GPU指令流执行所述图形渲染命令中的一些或者全部,从而将一或多个图形图元进行渲染。在一些示例中,GPU 20可不包含单独的存储器,而是经由总线利用外置的显存31。在一些情况下,GPU 20可内置有高度并行结构,其提供比CPU 10高效的对复杂图形相关运算的处理。举例来说,GPU20可包含经配置以并行方式对多个顶点或像素进行运算的多个处理元件或计算中心。在一些情况下,GPU 20的高度并行性质允许GPU 20比使用CPU 10更快速地将图形图像(例如,GUI和二维(2D)和/或三维(3D)图形场景)进行绘制。在一些情况下,可将GPU 20集成到目标设备的母板中。GPU 20可包含一或多个处理器,例如一或多个微处理器、专用集成电路(ASIC)、现场可编程门阵列(FPGA)、数字信号处理器(DSP)或其它等效的集成或离散逻辑电路。GPU 20还可包含一或多个处理器核心,如图1所示的一或多个命令处理器,使得GPU 20可被称作多核处理器,其中,所述一或多个命令处理器按照处理单元在计算中心中执行所述GPU指令流指定的操作。
系统内存30经配置用于存储能够在CPU 10上运行的应用程序指令、GPU 20执行需要的图形数据以及其运行结果数据。例如,GPU 20可将完全形成的图像存储在系统内存30中。所述系统内存30可包含一或多个易失性或非易失性存储器或存储装置,例如,随机存取存储器(RAM)、静态RAM(SRAM)、动态RAM(DRAM)、可擦除可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)、快闪存储器、磁性数据媒体或光学存储媒体。在一些示例中,具体实施过程中,显存31也可与系统内存30分离,其中,所述显存31可存储经渲染图像数据,例如,像素数据以及任何其它数据,因此,显存31还可被称为帧缓冲器。显存31存储GPU 20的目的地像素。每个目的地像素可与唯一屏幕像素位置相关联。在一些示例中,显存31可存储每个目的地像素的色彩分量和目的地α值。举例来说,显存31可存储每个像素的红色、绿色、蓝色、α(RGBA)分量,其中“RGB”分量对应于色彩值,并且“A”分量对应于目的地α值(例如,用于图像合成的不透明度值)。尽管将显存31和系统内存30说明为单独的存储器单元,但在其它示例中,显存31可以是系统内存30的一部分。本公开实施例以显存31是系统内存30的一部分为例。此外,显存31还可能够存储除像素之外的任何合适的数据。
结合图1所示的计算设备100的组成,基于现有技术中OpenGL的应用程序调用方式,CPU 10通过调用应用程序11向GPU驱动程序12发出指令,GPU驱动程序12可调配和生成指定的供GPU 20执行的GPU指令流,以用于将一或多个图形图元渲染到可显示的图形图像中。由于所述GPU指令流必须存储在GPU 20可直接访问的存储器中,而且所述存储器的物理位置离GPU 20的命令处理器越近越好。参见图2,其示出了一种将物理内存映射为虚拟地址空间的示意图,具体来说,在一些示例中,通过内存映射mmap函数将物理内存映射为虚拟地址空间。通常,操作系统负责管理物理内存,例如,分配和释放物理内存以及为不同的进程分配内存空间。所述物理内存分为用户空间和内核空间,其中,所述用户空间用于运行用户的应用程序,所述内核空间用于操作系统内核。由于所述物理内存不能直接被用户空间中的应用程序直接使用,需要将物理内存映射为虚拟地址空间。相应地,所述虚拟地址空间分为用户态虚拟地址空间和内核态虚拟地址空间,可以简称为用户空间和内核,每个进程均可以分配一个独立的虚拟地址空间,如果用户空间中的应用程序需要使用物理内存中的数据或执行需要特权级别权限的操作时,可以通过系统调用请求操作系统来执行所述操作,所述操作系统将检查请求并为应用程序分配相应的内存空间或执行相应的操作。
现有的GPU指令流的存储方法是基于MMIO实现的,所述MMIO是一种可以实现硬件和操作系统之间进行交互的机制,对于内核来说,MMIO技术提供了一种使用普通内存访问硬件的简单方法。通过该机制可以直接将所述GPU指令流写入系统内存或显存中,本公开实施例以将所述GPU指令流写入如图1所示的系统内存30为例。参见图3,其示出了一种基于内存映射输入输出的GPU指令流存储示意图,通过内存映射mmap函数将物理内存映射为虚拟地址空间,然后应用程序就可以直接写入或读取已存储的GPU指令流的数据。在一些示例中,在Linux系统中使用MMIO的进行数据存储的步骤如下:首先,通过ioctl函数将设备的物理内存映射为虚拟地址空间,其中,所述设备即为GPU可直接访问的存储器,如图1所示的系统内存30或显存31;其次,操作系统的内核将该设备物理内存映射为虚拟地址空间;接着,操作系统的内核配置页表,禁止使用者页面写时断开连接;最后,应用程序将通过虚拟地址来操作系统内存。基于上述实现方式,详细来说,如图3所示,通过MMIO将物理内存映射为虚拟地址空间后,将GPU指令流包1和GPU指令流包2以及执行GPU指令流包2时需要的相关数据存储到系统内存对应的虚拟地址空间中。
对于上述基于MMIO的GPU指令流存储方式,由于GPU指令流的存取是以字节流的形式进行存取的,因此难以追踪和反查。对于基于MMIO操作都是由应用程序直接执行,如果映射的内存块多时,对映射的多个内存块很难管理,而且由于没有对内存数据设置权限保护,进程可以随意篡改已存储的所述GPU指令流,因此,安全性差。此外,即使是在同一种操作系统下的不同驱动程序,也会有自身相应的GPU指令流生成或存储逻辑,没有提供上层应用对所述GPU指令流相关数据操作的统一接口,导致所述上层应用无法实现对所述GPU指令流进行读取、查找或分析等操作,其中,所述上层应用为系统中的GPU驱动程序及以GPU指令流为输入数据的应用程序。基于此,本公开实施例期望提供一种GPU指令流文件的访问技术方案,通过该技术方案可以基于内存文件系统实现在系统内存中直接创建GPU指令流文件,即将GPU指令流以文件的形式存储在系统内存,以利用所述内存文件系统的性能优势进行快速访问和执行,使得对所述GPU指令流文件的访问和操作变得简单,以简化GPU用户驱动的实现以及提高代码的可移植性。参见图4,其示出了本公开实施例提供的一种GPU指令流文件的访问方法,该方法应用于如图1所示的计算设备100中,该方法包括:
S401:获取所述计算设备的操作系统对应的虚拟文件系统提供的标准文件操作接口;
S402:基于内存文件系统,将期望发送至GPU的GPU指令流以文件形式存储到系统内存中以生成GPU指令流文件;
S403:基于所述标准文件操作接口,适配并封装用于访问所述GPU指令流文件的文件操作接口;
S404:CPU通过调用文件操作接口访问所述GPU指令流文件以使得GPU执行所述GPU指令流。
根据上述方案的描述,本公开实施例通过获取所述计算设备的操作系统对应的虚拟文件系统提供的标准文件操作接口,基于内存文件系统,将期望发送至GPU的GPU指令流以文件形式存储到系统内存中以生成GPU指令流文件,使得GPU驱动程序访问所述GPU指令流的过程不再是直接对内存进行操作,而是转换为标准的文件操作,利用所述内存文件系统的高速数据存储或读写的性能优势,以实现对所述GPU指令流文件的高效的存储和操作。基于所述标准文件操作接口,适配并封装用于访问所述GPU指令流文件的文件操作接口,由于对所述GPU指令流文件的读写等文件操作都封装在所述文件操作接口中,通过调用所述文件操作接口对所述GPU指令流文件进行操作,使得GPU用户驱动和其他用户空间中的应用程序按照统一的方式对所述GPU指令流文件的访问和操作变得简单。
需要说明的是,文件系统是一种存储和组织计算机数据的方法,它使得对其访问和查找变得容易,使用文件和树形目录的抽象逻辑概念代替了硬盘和光盘等物理设备使用数据块的概念,用户使用文件系统来保存数据不必关心数据实际保存在硬盘或光盘的物理位置,只需要记住文件的所属目录和文件名。在写入新数据之前,用户不必关心硬盘上的哪个物理块有没有被使用,管理物理设备的功能由文件系统自动完成,用户只需要记住数据被写入到了哪个文件中。严格来说,文件系统是一套实现了数据的存储,分级组织、访问和获取等操作的抽象数据类型。所述内存文件系统是一种基于内存的文件系统,文件数据不是保存在通常的硬盘,而是保存在计算机主存储器,即系统内存中,所述内存文件系统的性能优势包括:文件读取和访问不会有输入输出操作,只是内存访问,因此访问速度很快。操作系统通过虚拟文件系统提供一致的文件操作接口,由于不同的文件系统有自己的数据结构和方法,通过所述虚拟文件系统为上层用户屏蔽了底层的实现细节,其中,所述上层用户是指GPU用户驱动及以所述GPU指令流为输入数据的应用程序。所述虚拟文件系统为用户空间中的应用程序提供了对文件系统操作的标准文件接口。所述文件系统不但依赖所述虚拟文件系统共存,而且也依靠所述虚拟文件系统协同工作。通过所述虚拟文件系统使用标准文件接口调用对不同物理介质上的不同文件系统进行读写操作。所述虚拟文件系统可以屏蔽各种各样不同文件系统的相异操作形式,使得异构的文件系统可以在统一的形式下,以标准化的方法访问、操作。其具体实现是引入一个通用文件模型,通过该模型抽象出了文件系统的所有基本操作,比如读、写操作等,同时,文件系统如果希望利用虚拟文件系统,既被虚拟文件系统支持,也必须将自身的,例如打开文件、读写文件等操作行为以及什么是文件,什么是目录等概念适配成虚拟文件系统所要求的或定义的形式,这样才能够被虚拟文件系统支持和使用。所述标准文件接口是Linux系统中文件操作的标准系统调用接口,所述标准文件接口是Linux系统的内核提供给用户空间应用程序的,用于执行各种文件操作。
针对图4所示技术方案,在一些可能的实现方式中,所述基于内存文件系统,将期望发送至GPU的GPU指令流以文件形式存储到系统内存中以生成GPU指令流文件,包括:
基于内存文件系统,在系统内存中创建新的文件分区,将所述GPU指令流以文件形式存储到所述新的文件分区内以生成GPU指令流文件;
指定所述GPU指令流文件的目录并设置目录权限,将所述GPU指令流文件挂载到所述目录下。
对于上述实现方式,在一些示例中,所述基于内存文件系统,在系统内存中创建新的文件分区,将所述GPU指令流以文件形式存储到所述新的文件分区内以生成GPU指令流文件,包括:
在系统内存中创建新的文件分区并在所述新的文件分区内创建文件;
基于虚拟文件系统的数据结构定义所述文件的目录结构;
根据所述文件的目录结构,将所述GPU指令流存储到所述文件中以生成GPU指令流文件。
对于上述示例,具体来说,如图5所示,其示出了本公开实施例提供的一种文件系统500的组成示意图,所述文件系统500位于如图1所示的计算设备100的操作系统14中,所述计算设备100的操作系统14包括:内核以及位于所述内核之上的用户空间,其中,所述用户空间运行有GPU用户驱动、GPU指令流分析工具、应用程序以及文件管理器,其中,所述GPU用户驱动用于CPU向GPU发送GPU指令流并对所述GPU指令流进行解析;所述GPU指令流分析工具可以是benchmark工具,用于对文件系统的性能进行测试,并根据测试结果进行分析以获取性能的瓶颈,然后根据性能分析的结果,用户可以针对关键部分进行优化;所述文件管理器用于进程对文件操作时进行当前进程的文件操作相应的创建或删除。所述内核可以包括虚拟文件系统、一个或多个GPU内核驱动、GPU指令流文件系统以及其他类型的文件系统,例如,内存文件系统(RAM File System,RAMFS)、临时文件系统(Temporary File System,TMPFS)、第四代扩展文件系统(Fourth Extended File System,EXT4)、新技术文件系统(New Technology File System,NTFS),其中,所述虚拟文件系统是Linux内核中的一个组件,其为各种不同的文件系统提供了一个统一的接口,通过虚拟文件系统,不同的文件系统可以在Linux系统下工作,而不需要改变上层应用程序的代码。一个或多个GPU内核驱动与文件系统500中的各文件系统相对应。各种类型的文件系统中分别包括一个或多个相应的文件。在一些示例中,当应用程序请求对文件系统500中的目标文件执行文件操作时,内核中的所述虚拟文件系统接收应用程序发送的对文件系统500中的目标文件的文件操作请求,查找内核中与文件系统500中的目标文件相对应的GPU内核驱动,并将文件操作请求发送至相应的GPU内核驱动来处理。此外,在一些示例中,在执行进程时会调用用户空间库13中的fuse_main函数,所述fuse_main函数会调用fuse main real函数来进行一些参数的解析。由于针对每个文件实现的文件操作的函数结构体不一样,因此,需要在用户空间库13中增加对文件操作的函数结构体的解析,根据函数实现的具体功能进行相应的文件操作。在一些示例中,在对所述文件系统500进行文件操作时还需要与GPU、显存、系统内存以及硬盘进行交互。
需要说明的是,所述文件操作可以是对文件的各种操作,例如,可以包括但不限于:文件打开操作、文件读取操作,例如,读取目录、读取文件属性信息等、文件写入操作、文件删除操作中的一种或多种。当应用程序发送的文件操作请求是文件读取操作的请求时,调用与文件读取操作请求相对应的文件读取函数read来对文件系统执行相应的文件读取操作。
对于上述实现方式,在一些示例中,所述基于内存文件系统,在系统内存中创建新的文件分区,将所述GPU指令流以文件形式存储到所述新的文件分区内以生成GPU指令流文件,所述GPU指令流文件生成的过程是将GPU驱动程序向GPU提交的一次指令流将以文件的形式存在,其具体实现的伪代码如下所示:
对于上述实现方式,在一些示例中,所述指定所述GPU指令流文件的目录并设置目录权限,将所述GPU指令流文件挂载到所述目录下,包括:
指定所述GPU指令流文件的目录并利用操作系统的文件管理权限为所述目录设置权限;
将所述GPU指令流文件挂载到所述目录下,以使得应用程序根据设置的所述权限对所述GPU指令流文件执行相应的操作。
对于上述示例,具体来说,例如,指定所述GPU指令流文件的目录为/gpu-cs,其中,所述/gpu-cs表示GPU的命令流(Command Stream,CS)对应的存放目录,所述设置目录权限,对于Linux系统默认已有自带的文件权限功能,使用操作系统的用户和组权限,设置/gpu-cs目录的权限以确保只有授权的用户和应用程序可以访问和修改其中的内容,从而确保对所述GPU指令流文件的生成、读取和执行都是安全的。本公开实施例没有新增文件权限功能,只是直接使用操作系统中已有的权限功能。所述将所述GPU指令流文件挂载到所述目录下,当用户想要访问一个特定的文件时,例如,USB驱动器或网络共享,虚拟文件系统允许文件被挂载到Linux文件系统的一个目录下,然后用户和应用程序可以通过文件的挂载点来访问和操作文件内容。例如,通过命令mount–t gpuinstrfs none/gpu-cs,将所述GPU指令流文件挂载到/gpu-cs目录下,挂载完成后,/gpu-cs目录就可以用来访问和管理GPU指令流文件了。
针对图4所示的技术方案,在一些可能的实现方式中,所述基于所述标准文件操作接口,适配并封装用于访问所述GPU指令流文件的文件操作接口,包括:
基于所述虚拟文件系统提供的通用的文件和目录结构,将所述GPU指令流文件进行映射;
根据所述映射以及所述虚拟文件系统提供的标准文件操作接口,适配并封装对所述GPU指令流文件访问的文件操作接口。
对于上述实现方式,在一些示例中,所述根据所述映射以及所述虚拟文件系统提供的标准文件操作接口,适配并封装对所述GPU指令流文件访问的文件操作接口,包括:
基于所述虚拟文件系统提供的标准文件操作接口,通过定义的文件结构体,适配对所述GPU指令流文件访问的文件操作的函数集;
通过所述标准文件接口系统调用所述函数集以对所述GPU指令流文件进行相应的操作。
对于上述示例,具体来说,对所述GPU指令流文件的文件操作,需要实现的文件操作接口包括但不限于如下表1所示,其中一部分可以使用通用实现,一部分需要专门实现:
对于上述文件操作接口的实现,例如,打开文件、读文件、写文件等,具体实现的伪代码片段如下:
const struct file_operations gpufs_file_operations={
.open=gpufs_open,
.read_iter=generic_file_read_iter,
.write_iter=generic_file_write_iter,
.mmap=generic_file_mmap,
.fsync=gpufs_fsync,
.splice_read=filemap_splice_read,
.splice_write=iter_file_splice_write,
.llseek=generic_file_llseek,
.get_unmapped_area=gpufs_mmu_get_unmapped_area,
.release=gpufs_release,
}
在实现上述GPU指令流文件系统gpufs的gpufs_file_operations后,应用程序或GPU用户驱动向系统内存或显存读写指令流的过程转变成了读写文件的过程。从应用程序或GPU用户驱动的角度,完全不需要知道系统内存或显存是如何分配和回收的,只需要像读写普通文件一样打开、读写、关闭即可。
针对图4所示的技术方案,在一些示例中,所述方法还包括:
根据不同的硬件类型适配相应的上层应用,以使得适配后的上层应用通过标准文件接口访问GPU指令流文件,其中,所述上层应用为系统中的GPU驱动程序及以所述GPU指令流为输入数据的应用程序。
对于上述示例,根据GPU硬件类型开发或修改现有的上层应用,所述上层应用为系统中的GPU驱动程序及以所述GPU指令流为输入数据的应用程序,由于所述上层应用在操作系统的用户态虚拟空间中,因此,所述GPU驱动程序也可以称之为GPU用户驱动。通过虚拟文件系统提供的标准的文件接口,使其能够使用新的文件操作接口与GPU通信,从而使其能够与GPU指令流文件协同工作以确保文件系统可以在不同的GPU和内存配置上运行。
针对图4所示的技术方案,在一些可能的实现方式中,所述CPU通过调用文件操作接口访问所述GPU指令流文件以使得GPU执行所述GPU指令流,包括:
GPU通过应用程序调用所述文件操作接口以实现与所述GPU指令流文件的交互;
根据所述GPU指令流文件中的GPU指令流执行渲染以获取渲染结果。
针对上述实现方式,在一些示例中,所述GPU通过应用程序调用所述文件操作接口以实现与所述GPU指令流文件的交互,具体来说,以写GPU指令流为例,参见图6,其示出了本公开实施例提供的一种写GPU指令流的示意图,在用户空间中的应用程序调用write函数,然后调用虚拟文件系统中的sys_write,接着调用vfs_write函数,对于使用file_operations函数实现的文件操作,先判断是否有.write函数,如果没有则判断是否有.write_iter函数,如果有则调用.write_iter函数,例如,generic_file_write_iter函数。在一些示例中,在generic_file_write_iter函数中,会初始化kiocb并调用函数call_write_iter,call_write_iter函数会调用文件系统中的file->f_op->write_iter函数,通过上述操作,将所述GPU指令流写入物理介质,其中,所述物理介质可以是系统内存或显存。不同的文件系统对应有不同的写函数,例如,EXT4为ext4_write_iter函数,无文件系统默认的操作为blkdev_write_iter函数,然后根据不同的文件系统进行分支。
结合图1所示的计算设备100以及图4所示的技术方案,以具体的实施例阐述图4所示的技术方案,详细来说,参见图7,其示出了本公开实施例提供的一种GPU指令流文件的访问方法的流程图,具体步骤如下:
S701:确定操作系统类型;
根据设计需求,确定要适配的操作系统的类型,例如,Linux或Windows操作系统,本公开实施例以Linux操作系统为例,由于操作系统内核中默认提供有与操作系统相应的虚拟文件系统,用户只需要选择,不用重新开发。所述虚拟文件系统是Linux内核中的一个抽象层,隐藏了底层文件系统的差异和复杂性,为不同的文件系统提供了一个统一的接口并为上层应用程序提供了一个统一和简化的文件和目录访问接口。因此,应用程序不需要知道它们正在访问哪种文件系统,所述虚拟文件系统会负责将高级的文件操作转化为特定文件系统的低级操作。此外,所述虚拟文件系统还允许在同一时间内运行多个不同类型的文件系统。例如,一个Linux系统的根目录可以在EXT4上,同时还可以挂载一个FAT32的USB驱动器和通过NTFS访问的远程目录。
S702:确定需要实现哪些虚拟文件系统的接口;
所述虚拟文件系统定义了一套通用的文件和目录的抽象结构,例如,inodes、dentries等,各种真实文件系统将其具体实现与这些抽象结构映射。因此,需要根据设计需求确定需要适配哪些文件操作,首选需要设计文件系统的元数据结构,如inode、目录结构等,所述文件操作包括但不限于:打开文件、读文件、写文件。
S703:在GPU指令流文件中实现需要适配的接口;
根据Linux操作系统内核提供的虚拟文件系统,对每个文件操作进行适配并封装,例如,分别.open、.read_iter、.write_iter等函数实现的文件操作进行适配和封装以确保通过所述文件操作直接与GPU指令流文件进行交互。
S704:实现GPU指令流文件与GPU内核驱动的交互;
首先,根据目标GPU平台选择专门的API,例如,OpenGL或OpenCL,以使得GPU指令流文件能够直接与GPU内核驱动进行交互。其次,开发与GPU的通讯接口以实现数据在系统内存与GPU之间的传输函数。然后,对硬件进行适配,通过开放硬件抽象层,提供统一的接口,以确保文件系统可以在不同的GPU和系统内存配置上运行,并对特定硬件平台进行优化,以获得最佳性能。
S705:挂载GPU指令流文件;
当用户想要访问文件系统一个特定的文件时,所述虚拟文件系统允许这些文件系统被“挂载”到Linux文件系统的一个目录下。
S706:加载GPU内核驱动。
通过应用程序调用加载GPU内核驱动,从而通过所述GPU内核驱动对所述GPU指令流文件进行文件操作。
基于前述技术方案相同的发明构思,参见图8,其示出了本公开实施例提供的一种GPU指令流文件的访问装置800,所述装置800包括:获取部分801、生成部分802、适配部分803以及调用部分804;其中,
所述获取部分801,经配置为获取所述计算设备的操作系统对应的虚拟文件系统提供的标准文件操作接口;
所述生成部分802,经配置为基于内存文件系统,将期望发送至GPU的GPU指令流以文件形式存储到系统内存中以生成GPU指令流文件;
所述适配部分803,经配置为基于所述标准文件操作接口,适配并封装用于访问所述GPU指令流文件的文件操作接口;
所述调用部分804,经配置为CPU通过调用文件操作接口访问所述GPU指令流文件以使得GPU执行所述GPU指令流。
在一些示例中,所述生成部分802,经配置为:
基于内存文件系统,在系统内存中创建新的文件分区,将所述GPU指令流以文件形式存储到所述新的文件分区内以生成GPU指令流文件;
指定所述GPU指令流文件的目录并设置目录权限,将所述GPU指令流文件挂载到所述目录下。
在一些示例中,所述生成部分802,经配置为:
在系统内存中创建新的文件分区并在所述新的文件分区内创建文件;
基于虚拟文件系统的数据结构定义所述文件的目录结构;
根据所述文件的目录结构,将所述GPU指令流存储到所述文件中以生成GPU指令流文件。
在一些示例中,所述生成部分802,经配置为:
指定所述GPU指令流文件的目录并利用操作系统的文件管理权限为所述目录设置权限;
将所述GPU指令流文件挂载到所述目录下,以使得应用程序根据设置的所述权限对所述GPU指令流文件执行相应的操作。
在一些示例中,所述适配部分803,经配置为:
基于所述虚拟文件系统提供的通用的文件和目录结构,将所述GPU指令流文件进行映射;
根据所述映射以及所述虚拟文件系统提供的标准文件操作接口,适配并封装对所述GPU指令流文件访问的文件操作接口。
在一些示例中,所述适配部分803,经配置为:
基于所述虚拟文件系统提供的标准文件操作接口,通过定义的文件结构体,适配对所述GPU指令流文件访问的文件操作的函数集;
通过所述标准文件接口系统调用所述函数集以对所述GPU指令流文件进行相应的操作。
在一些示例中,所述调用部分804,经配置为:
GPU通过应用程序调用所述文件操作接口以实现与所述GPU指令流文件的交互;
根据所述GPU指令流文件中的GPU指令流执行渲染以获取渲染结果。
可以理解地,上述GPU指令流文件的访问装置800的示例性技术方案,与前述基于GPU指令流文件的访问方法的技术方案属于同一构思,因此,上述GPU指令流文件的访问装置800的技术方案未详细描述的细节内容,均可以参见前述GPU指令流文件的访问方法的技术方案的描述。本公开实施例对此不做赘述。
除此之外,本领域技术人员可以理解,上述附图所示出的计算设备的结构并不构成对计算设备的限定,计算设备可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。比如,计算设备中还包括显示屏、摄像组件、麦克风、扬声器、射频电路、输入单元、传感器(比如加速度传感器、角速度传感器、光线传感器等等)、音频电路、WiFi模块、电源、蓝牙模块等部件,在此不再赘述。
本公开实施例还提供了一种计算机可读存储介质,该计算机可读存储介质存储有至少一条指令,所述至少一条指令用于被处理器执行以实现如上各个实施例所述的GPU指令流文件的访问方法。
本公开实施例还提供了一种计算机程序产品,该计算机程序产品包括计算机指令,该计算机指令存储在计算机可读存储介质中;计算设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算设备执行以实现上述各个实施例所述的GPU指令流文件的访问方法。
本领域技术人员应该可以意识到,在上述一个或多个示例中,本公开实施例所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。计算机可读介质包括计算机存储介质和通信介质,其中通信介质包括便于从一个地方向另一个地方传送计算机程序的任何介质。存储介质可以是通用或专用计算机能够存取的任何可用介质。
以上所述,仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应以所述权利要求的保护范围为准。

Claims (10)

1.一种GPU指令流文件的访问方法,其特征在于,所述方法应用于计算设备,所述方法包括:
获取所述计算设备的操作系统对应的虚拟文件系统提供的标准文件操作接口;
基于内存文件系统,将期望发送至GPU的GPU指令流以文件形式存储到系统内存中以生成GPU指令流文件;
基于所述标准文件操作接口,适配并封装用于访问所述GPU指令流文件的文件操作接口;
CPU通过调用文件操作接口访问所述GPU指令流文件以使得GPU执行所述GPU指令流。
2.根据权利要求1所述方法,其特征在于,所述基于内存文件系统,将期望发送至GPU的GPU指令流以文件形式存储到系统内存中以生成GPU指令流文件,包括:
基于内存文件系统,在系统内存中创建新的文件分区,将所述GPU指令流以文件形式存储到所述新的文件分区内以生成GPU指令流文件;
指定所述GPU指令流文件的目录并设置目录权限,将所述GPU指令流文件挂载到所述目录下。
3.根据权利要求2所述方法,其特征在于,所述基于内存文件系统,在系统内存中创建新的文件分区,将所述GPU指令流以文件形式存储到所述新的文件分区内以生成GPU指令流文件,包括:
在系统内存中创建新的文件分区并在所述新的文件分区内创建文件;
基于虚拟文件系统的数据结构定义所述文件的目录结构;
根据所述文件的目录结构,将所述GPU指令流存储到所述文件中以生成GPU指令流文件。
4.根据权利要求2所述方法,其特征在于,所述指定所述GPU指令流文件的目录并设置目录权限,将所述GPU指令流文件挂载到所述目录下,包括:
指定所述GPU指令流文件的目录并利用操作系统的文件管理权限为所述目录设置权限;
将所述GPU指令流文件挂载到所述目录下,以使得应用程序根据设置的所述权限对所述GPU指令流文件执行相应的操作。
5.根据权利要求1所述方法,其特征在于,所述基于所述标准文件操作接口,适配并封装用于访问所述GPU指令流文件的文件操作接口,包括:
基于所述虚拟文件系统提供的通用的文件和目录结构,将所述GPU指令流文件进行映射;
根据所述映射以及所述虚拟文件系统提供的标准文件操作接口,适配并封装对所述GPU指令流文件访问的文件操作接口。
6.根据权利要求5所述方法,其特征在于,所述根据所述映射以及所述虚拟文件系统提供的标准文件操作接口,适配并封装对所述GPU指令流文件访问的文件操作接口,包括:
基于所述虚拟文件系统提供的标准文件操作接口,通过定义的文件结构体,适配对所述GPU指令流文件访问的文件操作的函数集;
通过所述标准文件接口系统调用所述函数集以对所述GPU指令流文件进行相应的操作。
7.根据权利要求1所述方法,其特征在于,所述CPU通过调用文件操作接口访问所述GPU指令流文件以使得GPU执行所述GPU指令流,包括:
GPU通过应用程序调用所述文件操作接口以实现与所述GPU指令流文件的交互;
根据所述GPU指令流文件中的GPU指令流执行渲染以获取渲染结果。
8.一种GPU指令流文件的访问装置,其特征在于,所述装置包括:获取部分、生成部分、适配部分以及调用部分;其中,
所述获取部分,经配置为获取所述计算设备的操作系统对应的虚拟文件系统提供的标准文件操作接口;
所述生成部分,经配置为基于内存文件系统,将期望发送至GPU的GPU指令流以文件形式存储到系统内存中以生成GPU指令流文件;
所述适配部分,经配置为基于所述标准文件操作接口,适配并封装用于访问所述GPU指令流文件的文件操作接口;
所述调用部分,经配置为CPU通过调用文件操作接口访问所述GPU指令流文件以使得GPU执行所述GPU指令流。
9.一种计算设备,其特征在于,所述计算设备包括:通信接口,处理器,存储器;各个组件通过总线系统耦合在一起;其中,
所述通信接口,用于在与其他外部网元之间进行收发信息过程中,信号的接收和发送;
所述存储器,用于存储能够在所述处理器上运行的计算机程序;
所述处理器,用于在运行所述计算机程序时,执行权利要求1至7任一项所述GPU指令流文件的访问方法。
10.一种计算机存储介质,其特征在于,所述存储介质存储有至少一条指令,所述至少一条指令用于被处理器执行以实现如权利要求1至7任一所述GPU指令流文件的访问方法。
CN202311515855.3A 2023-11-14 2023-11-14 Gpu指令流文件的访问方法、装置及存储介质 Pending CN117435557A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311515855.3A CN117435557A (zh) 2023-11-14 2023-11-14 Gpu指令流文件的访问方法、装置及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311515855.3A CN117435557A (zh) 2023-11-14 2023-11-14 Gpu指令流文件的访问方法、装置及存储介质

Publications (1)

Publication Number Publication Date
CN117435557A true CN117435557A (zh) 2024-01-23

Family

ID=89549697

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311515855.3A Pending CN117435557A (zh) 2023-11-14 2023-11-14 Gpu指令流文件的访问方法、装置及存储介质

Country Status (1)

Country Link
CN (1) CN117435557A (zh)

Similar Documents

Publication Publication Date Title
US20230033306A1 (en) Image rendering method and apparatus, computer device, and storage medium
KR101869674B1 (ko) 그래픽스 프로세싱 유닛들에 대한 하드웨어 강제 컨텐츠 보호
US8675000B2 (en) Command buffers for web-based graphics rendering
KR101649089B1 (ko) 그래픽 프로세싱 유닛들에 대한 하드웨어 강제 콘텐츠 보호
WO2020156264A1 (zh) 渲染方法及装置
CN109889875B (zh) 通信方法、装置、终端设备和计算机可读介质
US11727632B2 (en) Shader binding management in ray tracing
US11094036B2 (en) Task execution on a graphics processor using indirect argument buffers
US10672099B2 (en) Memory cache management for graphics processing
US9972065B2 (en) Resource layout randomization for GPU execution
KR20140060307A (ko) 콘텐트의 타일-기반 렌더링을 위한 방법 및 콘텐트를 렌더링하기 위한 시스템
CN114327777B (zh) 确定全局页目录的方法、装置、电子设备及存储介质
KR20180036970A (ko) 그래픽스 프로세싱 유닛들에 대한 하드웨어 강제 컨텐츠 보호
US20170358054A1 (en) Eliminating off screen passes using memoryless render target
US11500828B1 (en) Method and device for constructing database model with ID-based data indexing-enabled data accessing
CN116010296A (zh) 一种处理请求的方法、装置及系统
CN116166255B (zh) 界面生成方法及电子设备
WO2022100693A1 (zh) 一种地址转换关系的配置方法及计算机系统
WO2016053628A1 (en) Transparent pixel format converter
US20210097643A1 (en) Bindpoint Emulation
CN117435557A (zh) Gpu指令流文件的访问方法、装置及存储介质
US11372756B2 (en) Memory pool management
CN106708631B (zh) 共享内存属性修改方法及其系统
US8984446B1 (en) Sharing display spaces
TWI556167B (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