一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

在计算环境中提供加速器与存储装置之间的直接数据访问

2022-11-30 09:33:24 来源:中国专利 TAG:


1.本发明一般涉及计算系统,尤其涉及在计算环境中提供加速器与非易失性存储器和存储装置之间的直接访问。


背景技术:

2.一种流行的大规模计算类型是云计算,其中资源可以经由诸如计算机网络之类的通信系统来交互和/或访问。资源可以是计算设备、存储设备、应用程序、和/或在一个或多个计算设备(诸如服务器)上运行的其它计算机相关的设备和/或服务的软件渲染的模拟和/或仿真。例如,多个服务器可以传送和/或共享信息,该信息可以根据处理能力、存储空间和/或完成所请求的任务所需的其他计算资源的量来跨服务器地进行扩展和/或收缩。词语“云”是指在计算设备、计算机网络、和/或以这种布置交互的其他计算机相关的设备之间的互连性图的云状外观。


技术实现要素:

3.提供了用于在计算环境中提供对非易失性存储器的直接访问的各个方面。在一个方面,提供了一种用于再次由处理器在计算环境中提供加速器到非易失性存储器之间的直接访问的方法。可以经由应用编程接口(“api”)向一个或多个加速器(例如,图形处理单元“gpu”)提供对非易失性存储装置的直接访问,而在控制路径或数据路径上与主机中央处理单元(“cpu”)无关,从而执行数据的读操作和写操作。
附图说明
4.为了容易地理解本发明的优点,将通过参考在附图中示出的具体实施例来呈现对以上简要描述的本发明的更具体的描述。应当理解,这些附图仅描述了本发明的典型实施例,因此不应被认为是对其范围的限制,将通过使用附图来描述和解释本发明的附加特征和细节,其中:
5.图1是描绘根据本发明的实施例的示例性计算节点的框图;
6.图2是描绘根据本发明的实施例的示例性云计算环境的附加框图;
7.图3是描绘根据本发明实施例的抽象模型层的附加框图;
8.图4示出其中可以实现本发明的各个方面的云计算网络;
9.图5a-图5c是示出根据本发明的各方面的用于在计算环境中提供加速器到非易失性存储装置之间的直接访问的示例性操作的框图;
10.图6是描绘其中可以实现本发明的各个方面的示例性加速器页面缓存组织和应用编程接口(“api”)的框图;
11.图7a-图7c是描绘其中可以实现本发明的各个方面的用于加速器的应用编程接口(“api”)调用描述的表;以及
12.图8是描绘用于在计算环境中提供加速器到非易失性存储装置之间的直接访问的
示例性方法的流程图,同样在该计算环境中可实现本发明的各方面。
具体实施方式
13.当前,许多计算机系统采用加速器(例如,诸如图形处理单元(gpu)的协处理器)以增强这种系统的性能,其中,程序在中央处理单元(“cpu”)和加速器上都运行。例如,gpu可以参与执行复杂的数学计算。同样,加速器的并行结构使得它们能够对于可处理大数据块的应用/操作比cpu更有效。
14.此外,应用数据当前被存储在非易失性存储器上,因为数据通常太大而不能存储在gpu/cpu存储器中。由于非易失性存储器由cpu管理,因此,cpu管理gpu存储器(通过多个存储器副本和内核调用),或者gpu内核必须请求cpu向其提供数据,并且需要与cpu同步并对请求进行排队。假定gpu是高吞吐量设备,则同时执行大量线程。由于所有并行线程可能正在等待数据,因此,存在并出现大的延迟。一旦在gpu的流式多处理器(“sm”)上调度了块,则该块保持直到它完成为止。如果线程被迫等待数据,则执行资源被保持,并且其数据可用的块不能执行。因此,gpu资源正被低效地管理,并导致浪费的与主机cpu的同步操作和等待数据。
15.因此,以低延迟和高带宽向诸如gpu的加速器馈送或提供数据已成为数据密集应用中的瓶颈。当前,如前面所提到的,加速器(例如gpu)依赖于主机中央处理单元(“cpu”)来管理加速器的存储器,并依赖于非易失性存储器来向加速器提供数据。这不仅增加了数据复制开销,而且增加了高吞吐量加速器与cpu之间的同步形式的控制开销。此外,这不仅需要额外的主机资源,而且在给定对现代非易失性存储器快速(“nvme”)设备的亚微秒访问延迟的情况下,这可以增加一个数量级的延迟,并显著地减少数据访问带宽,如下面在图5a中所示。
16.为了充分利用大容量nvme设备的低延迟/高带宽,本发明的各种实施例允许加速器(例如gpu)直接访问它们,而在控制平面或数据平面中不涉及主机cpu。在一个方面,可以经由应用编程接口(“api”)向一个或多个加速器(例如,图形处理单元“gpu”)提供对非易失性存储装置的直接访问,而在控制路径或数据路径上与主机中央处理单元(“cpu”)无关,从而执行数据的读操作和写操作。
17.因此,本文描述的各种实施例增加了计算效率和在gpu上可用的计算单元的利用率,因为gpu存储器容量当前与gpu计算能力不匹配。而且,本发明释放cpu以并行地进行其它的有用工作,而不是仅管理gpu与存储装置之间的数据传递。本发明进一步提供对太字节的非易失性存储器的gpu线程直接访问,同时还允许gpu线程管理gpu存储器,而不是依赖于来自gpu存储器管理的cpu,以使得gpu线程可以现在直接访问它们需要的数据,从而提供成本节省和计算功耗的降低。
18.另外,即使当数据不适合gpu的存储器时,也能够使用gpu,使得gpu能够用于具有大数据的更不规则的应用(例如,大的图形处理)。本发明进一步消除了cpu与gpu之间的同步,以便获取向gpu的更多数据。此外,本文描述的预取操作允许gpu计算资源被释放,直到用于所预取的块的数据在gpu存储器中就绪(例如,用于所请求的数据块的数据以它们可以被使用的状态存在于gpu存储器中)。而且,由于现在较少依赖于cpu的事实,因此,本发明允许按比例增加更多的gpu而不引起增加主机cpu数量的额外成本。本发明进一步改进了容错
和管理,同时还使得能够在一个或多个gpu上共同调度任务和i/o以避免拥塞并利用局部性。
19.本文将进一步描述所说明的实施例的各种方面的其它实例和对应益处。
20.预先理解,尽管本公开包括关于云计算的详细描述,但是本文中所记载的教导的实现不限于云计算环境或物联网(iot)网络环境。相反,本发明的实施例能够结合现在已知或以后开发的任何其它类型的计算环境来实现。应当注意,iot是涉及可被嵌入物体(诸如电器)中并通过网络连接的计算设备的新兴概念。iot网络可包括一个或多个iot设备或“智能设备”,它们是诸如其中嵌入了计算设备的电器之类的物理对象。许多iot设备是可独立操作的,但是它们也可以与控制系统或与诸如在云计算环境上运行的分布式控制系统配对。控制系统可以包括与本文所描述的类似的端到端流监测机制。
21.云计算是一种服务交付模式,用于实现对共享的可配置计算资源(例如,网络、网络带宽、服务器、处理、存储器、存储、应用、vm和服务)池池的方便、按需的网络访问,可配置计算资源可以以最小的管理成本或与服务提供商进行最少的交互来快速供应和释放。这种云模式可以包括至少五个特性、至少三个服务模型和至少四个部署模型。
22.特征如下:
23.按需自助式服务:云的消费者可以单方面自动地按需提供计算能力(诸如服务器时间和网络存储),而无需与服务提供者进行人工交互。
24.广泛的网络接入:能力在网络上可用并通过促进异构的瘦或厚客户端平台(例如,移动电话、膝上型计算机和pda)的使用的标准机制来接入。
25.资源池:提供商的计算资源被归入资源池以使用多租户模型来服务多个消费者,其中不同的物理和虚拟资源根据需求被动态地分配和再分配。一般情况下,消费者不能控制或不知道所提供的资源的确切位置,但是可以在较高抽象程度上指定位置(例如国家、州或数据中心),因此具有位置无关性。
26.迅速弹性:可以迅速且有弹性地(在一些情况下自动地)提供能力以快速向外扩展并被迅速释放以快速缩小。对于消费者,可用于提供的能力通常看起来是无限的,并可以在任何时间以任何数量购买。
27.可测量的服务:云系统通过利用在适于服务类型(例如,存储、处理、带宽和活动用户账户)的某一抽象程度的计量能力,自动地控制和优化资源使用。可以监视、控制和报告资源使用情况,为所利用的服务的提供者和消费者双方提供透明度。
28.服务模型如下:
29.软件即服务(saas):向消费者提供的能力是使用提供者在云基础架构上运行的应用。可通过诸如网络浏览器的瘦客户机接口(例如,基于网络的电子邮件)来从各种客户机设备访问应用。除了有限的特定于用户的应用配置设置以外,消费者既不管理也不控制包括网络、服务器、操作系统、存储、或甚至单个应用能力等的底层云基础架构。
30.平台即服务(paas):向消费者提供的能力是在云基础架构上部署消费者创建或获得的应用,这些应用是使用由提供商支持的编程语言和工具创建的。消费者既不管理也不控制包括网络、服务器、操作系统或存储的底层云基础架构,但对其部署的应用具有控制权,对应用托管环境配置可能也具有控制权。
31.基础架构即服务(iaas):向消费者提供的能力是提供消费者能够在其中部署并运
行包括操作系统和应用的任意软件的处理、存储、网络和其它基础计算资源。消费者既不管理也不控制底层云基础架构,但对操作系统、存储、所部署的应用具有控制权,对所选择的网络组件(例如,主机防火墙)可能具有有限的控制权。
32.部署模型如下:
33.私有云:云基础架构单独为某个组织运行。它可以由该组织或第三方管理,并且可以存在于该组织内部或外部。
34.共同体云:云基础架构被若干组织共享,并支持具有共同利害关系(例如,任务、安全要求、政策和合规考虑)的特定共同体。它可以由该组织或第三方管理,并且可以存在于该组织内部或外部。
35.公共云:云基础架构可用于一般公众或大型产业群,并由销售云服务的组织拥有。
36.混合云:云基础架构由两个或更多云(私有云、共同体云或公共云)组成,这些云依然是独特实体,但是通过使数据和应用能够移植的标准化技术或私有技术(例如,用于云之间的负载平衡的云突发)绑定在一起。
37.云计算环境是面向服务的,特点集中在无状态性、低耦合性、模块性和语义的互操作性。计算的核心是包括互连节点网络的基础架构。
38.现在参考图1,示出了云计算节点的示例的示意图。云计算节点10仅是合适的云计算节点的一个示例,并且不旨在对本文所描述的本发明的实施例的使用范围或功能提出任何限制。无论如何,云计算节点10能够被实现和/或执行上文阐述的任何功能。
39.在云计算节点10中,存在计算机系统/服务器12,其可与许多其他通用或专用计算系统环境或配置一起操作。可适合用于计算机系统/服务器12的公知的计算系统、环境和/或配置的示例包括但不限于个人计算机系统、服务器计算机系统、瘦客户端、胖客户端、手持式或膝上型设备、多处理器系统、基于微处理器的系统、机顶盒、可编程消费电子产品、网络pc、小型计算机系统、大型计算机系统、以及包括任何上述系统或设备的分布式云计算环境等。
40.计算机系统/服务器12可以在由计算机系统执行的计算机系统可执行指令(诸如程序模块)的一般上下文中描述。通常,程序模块可以包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、逻辑、数据结构等。计算机系统/服务器12可以在分布式云计算环境中实践,其中任务由通过通信网络或iot网络链接的远程处理设备执行。在分布式云计算环境中,程序模块可以位于包括存储器存储设备的本地和远程计算机系统存储介质中。
41.如图1所示,云计算节点10中的计算机系统/服务器12被示为通用计算设备的形式。计算机系统/服务器12的组件可以包括但不限于一个或多个处理器或处理单元16、系统存储器28、以及将包括系统存储器28的各种系统组件耦合到处理器16的总线18。
42.总线18表示若干类型的总线结构中的任何一种的一个或多个,包括存储器总线或存储器控制器、外围总线、加速图形端口、以及使用各种总线体系结构中的任何一种的处理器或局部总线。作为示例而非限制,这些体系结构包括工业标准体系结构(isa)总线、微通道体系结构(mca)总线、增强型isa(eisa)总线、视频电子技术标准协会(vesa)局部总线、和外围部件互连(pci)总线。
43.计算机系统/服务器12通常包括各种计算机系统可读介质。这样的介质可以是计
算机系统/服务器12可访问的任何可用介质,并且它包括易失性和非易失性介质、可移除和不可移除介质。
44.系统存储器28可以包括采用易失性存储器形式的计算机系统可读介质,例如随机存取存储器(ram)30和/或高速缓存存储器32。计算机系统/服务器12可以进一步包括其他可移除/不可移除、易失性/非易失性计算机系统存储介质。仅作为示例,存储系统34可被提供用于从不可移除的非易失性磁介质(未示出,通常被称为“硬盘驱动器”)中读取和向其写入。尽管未示出,但是,可以提供用于从可移除的非易失性磁盘(例如,“软盘”)中读取和向其写入的磁盘驱动器,以及用于从可移除的非易失性光盘(诸如cd-rom、dvd-rom或其它光学介质等)中读取或向其写入的光盘驱动器。在这种情况下,每个都可以通过一个或多个数据介质接口被连接到总线18。如下面将进一步描绘和描述的,系统存储器28可以包括至少一个程序产品,该程序产品具有一组(例如,至少一个)程序模块,该程序模块被配置为执行本发明的实施例的功能。
45.具有一组(至少一个)程序模块42的程序/实用程序40以及(作为示例而非限制)操作系统、一个或多个应用程序、其它程序模块和程序数据可被存储在系统存储器28中。操作系统、一个或多个应用程序、其它程序模块、以及程序数据或其某种组合中的每一个可包括联网环境的实现。程序模块42通常执行本文所描述的本发明实施例的功能和/或方法。
46.计算机系统/服务器12还可以与一个或多个外部设备14(诸如键盘、指示设备、显示器24等);使得用户能够与计算机系统/服务器12交互的一个或多个设备;和/或使计算机系统/服务器12能够与一个或多个其它计算设备通信的任何设备(例如网卡、调制解调器等)通信。这种通信可以经由输入/输出(i/o)接口22发生。然而,计算机系统/服务器12可以经由网络适配器20与一个或多个网络(诸如局域网(lan)、通用广域网(wan)、iot网络和/或公共网络(例如,因特网))通信。如图所示,网络适配器20经由总线18与计算机系统/服务器12的其它组件通信。应当理解,尽管未示出,但其它硬件和/或软件组件可以与计算机系统/服务器12结合使用。示例包括但不限于:微码、设备驱动程序、冗余处理单元、外部磁盘驱动器阵列、raid系统、磁带驱动器和数据档案存储系统等。
47.现在参考图2,描绘了说明性的云计算环境50。如图所示,云计算环境50包括云消费者使用的本地计算设备可以与其通信的一个或多个云计算节点10,本地计算设备例如个人数字助理(pda)或蜂窝电话54a、台式计算机54b、膝上型计算机54c、智能床垫54d和/或汽车计算机系统54n。如在此所使用的,床垫(例如床垫5d)可以是衬垫、垫子、泡沫、或者被设计用于支撑身体的全部或部分或使身体的全部或部分斜躺的物体,例如床(或床的一部分)、沙发、躺椅、座椅、椅子或座位。
48.节点10可以彼此通信。它们可以被物理地或虚拟地分组(未示出)在一个或多个网络(诸如上文所述的私有云、共同体云、公共云或混合云或其组合)中。这允许云计算环境50提供基础架构即服务、平台即服务和/或软件即服务,而云消费者不需要为其在本地计算设备上维护资源。应当理解,图2中所示的各类计算设备54a-n仅仅是示意性的,计算节点10和云计算环境50可以在任何类型的网络和/或网络可寻址连接上(例如,使用网络浏览器)与任何类型的计算设备通信。
49.现在参考图3,示出了由云计算环境50(图2)提供的一组功能抽象层。首先应当理解,图3中所示的组件、层和功能仅仅是示意性的,本发明的实施例不限于此。如图所示,提
供了以下层和相应的功能:
50.设备层55包括被嵌入有独立的电子器件、传感器、致动器和其他对象以在云计算环境50中执行各种任务的物理和/或虚拟设备。设备层55中的每个设备将联网能力结合到其他功能抽象层,以使得从设备获得的信息可以被提供给这些层,和/或来自其他抽象层的信息可以被提供给设备。在一个实施例中,包括设备层55在内的各种设备可以并入统称为“物联网”(iot)的实体网络。如本领域普通技术人员将理解的,这样的实体网络允许数据的相互通信、收集和传播以实现各种目的。
51.如图所示,设备层55包括传感器52、致动器53、具有集成处理、传感器和联网电子设备的“学习”恒温器56、相机57、可控家用插座/插口58、以及可控电开关59。其它可能的设备可以包括但不限于各种附加的传感器设备、联网设备、电子设备(诸如遥控设备)、附加的致动器设备、所谓的“智能”电器(诸如冰箱或洗衣机/干衣机)、以及各种各样的其它可能的互连对象。
52.硬件和软件层60包括硬件和软件组件。硬件组件的示例包括:大型机61;基于risc(精简指令集计算机)架构的服务器62;服务器63;刀片服务器64;存储设备65;以及网络和联网组件66。在一些实施例中,软件组件包括网络应用服务器软件67和数据库软件68。
53.虚拟化层70提供抽象层,从该抽象层可以提供虚拟实体的以下示例:虚拟服务器71;虚拟存储器72;虚拟网络73,包括虚拟专用网络;虚拟应用程序和操作系统74;以及虚拟客户端75。
54.在一个示例中,管理层80可以提供以下描述的功能。资源供应功能81提供用于在云计算环境中执行任务的计算资源和其它资源的动态获取。计量和定价功能82提供对在云计算环境中使用资源的成本跟踪,并为这些资源的消耗提供账单或发票。在一个示例中,这些资源可以包括应用软件许可。安全功能为云消费者和任务提供身份认证,并为数据和其他资源提供保护。用户门户功能83为消费者和系统管理员提供对云计算环境的访问。服务水平管理功能84提供云计算资源分配和管理,以满足所需的服务水平。服务水平协议(sla)计划和履行功能85提供对根据sla针对其预测未来需求的云计算资源的预安排和采购。
55.工作负载层90提供可以利用云计算环境的功能的示例。在该层中,可提供的工作负载和功能的示例包括:地图绘制和导航91;软件开发及生命周期管理92;虚拟教室的教学提供93;数据分析处理94;交易处理95;以及在本发明的所示实施例的上下文中,各种用于提供加速器到非易失性存储器之间的直接访问的工作负载和功能96。此外,用于提供加速器到非易失性存储器之间的直接访问的工作负载和功能96可以包括诸如数据分析(包括来自各种环境传感器的数据收集和处理)、联网、发送/接收数据、提供虚拟化/虚拟计算、云计算通信、和/或管理功能之类的操作。本领域的普通技术人员将理解,用于提供加速器到非易失性存储器之间的直接访问的工作负载和功能96还可以结合各种抽象层的其他部分(诸如硬件和软件60、虚拟化70、管理80和其他工作负载90(诸如数据分析处理94)中的那些)来工作,以实现本发明的所示实施例的各种目的。
56.如前所述,本发明的机制提供了一种用于再次由处理器在计算环境中提供加速器到非易失性存储器之间的直接访问的新颖方法。可以经由应用编程接口(“api”)向一个或多个加速器(例如,图形处理单元“gpu”)提供对非易失性存储装置的直接访问而在控制路径或数据路径上与主机中央处理单元(“cpu”)无关,从而执行数据的读操作和写操作。
57.现在转向图4,示出了描绘根据所示实施例的各种机制的示例性功能组件400的框图。在一个方面,在图1至图3中描述的组件、模块、服务、应用和/或功能中的一个或多个可在图4中使用。示出了直接数据访问服务410,其结合处理单元420(“处理器”)以执行根据本发明的各方面的各种计算、数据处理和其它功能。在一个方面,处理器420和存储器430可以在直接数据访问服务410的内部和/或外部,并且在计算系统/服务器12的内部和/或外部。直接数据访问服务410可以被包括在计算机系统/服务器12中,如图1中所描述的。
58.在一个方面,计算机系统/服务器12可以与一个或多个加速器(例如gpu 492(仅作为示例示出))和非易失性存储器490(例如,固态驱动器“sdd”))进行通信。在一个方面,gpu492可以被包括在计算机系统/服务器12上(例如,位于计算机系统/服务器12的内部和/或外部)。另外,非易失性存储器490可以被包括在计算机系统/服务器12上(例如,地于计算机系统/服务器12的内部和/或外部),和/或非易失性存储器490可以位于计算机系统/服务器12的外部。
59.处理单元420可以与存储器430进行通信。直接数据访问服务410可以包括直接数据访问组件440、页面缓存组件450、预取组件460和/或对象管理组件470。
60.如本领域普通技术人员将理解的,直接数据访问服务410中的各种功能单元的描绘是出于说明的目的,因为功能单元可以位于直接数据访问服务410内或者在分布式计算组件内和/或之间的其他地方。
61.在一个方面,直接数据访问服务410可以经由应用编程接口(“api”)向一个或多个加速器提供对非易失性存储装置的直接访问,而在控制路径或数据路径上与主机中央处理单元(“cpu”)无关,从而执行数据的读操作和写操作。
62.直接数据访问服务410可以在一个或多个加速器的存储器地址空间中映射非易失性存储器490的一个或多个非易失性存储器快速(“nvme”)队列和寄存器。
63.页面缓存组件450可使用一个或多个加速器的存储器中的由一个或多个加速器管理的页面缓存,以利用数据中的局部性。在存在多个加速器(例如,多个gpu)的情况下,页面缓存组件450可以使用多个加速器的存储器中的由一个或多个加速器管理的分布式页面缓存,以利用数据中的局部性。
64.页面缓存组件450可将一个或多个页面从非易失性存储器490复制到页面缓存,并更新页面映射表。直接数据访问服务410可以在将数据从非易失性存储器490复制到一个或多个加速器(诸如gpu 492)时从控制路径或数据路径中移除主机cpu。
65.预取组件460可以用api预取数据,并且保存每个计算周期以重叠计算和数据的移动。
66.与页面缓存组件450和/或预取组件相关联的直接数据访问服务410可以在接收到由一个或多个加速器发起的用于数据的读操作或写操作的一个或多个api调用时确定页面缓存未命中的发生,将一个或多个页面从一个或多个非易失性存储器快速(“nvme”)数据缓冲区复制到页面缓存,和/或更新页面映射表。
67.在主机cpu(例如,计算机系统/服务器12,并且可以在gpu 492的内部和/或外部)中的对象管理组件470可以在启动应用时管理非易失性存储器490中的每个对象的对象地址。每个对象标识符(“id”)、对象起始块地址、对象大小的映射可以由主机cpu管理,并且可以在非易失性存储器490的保留区中被保持持久。800的操作可使用一个或多个api调用来
对一个或多个加速器分配每个对象的页面子范围。
68.例如,在应用开始时,主机cpu(例如,计算机系统/服务器12)使用api调用(例如,“get_object_map”api调用)来读取映射。在内核调用时,代替传递指针,主机cpu(例如,计算机系统/服务器12)传递具有其大小的每个对象的起始块地址。然后,gpu 492可以知道期望的数据结构的位置。主机cpu(例如,计算机系统/服务器12)可以使用另一个api调用(例如,“pcreate”api调用)来创建空间和新对象的映射。gpu(例如,gpu 492之一)可以被分配给每个对象的页面子范围。gpu(例如,gpu 492之一)可以被称为这些页面的家(home)(例如,如果gpu拥有该页面,则它是该页面的家庭gpu)。
69.现在转到图5a至图5c,描绘了涉及提供加速器到非易失性存储器之间的直接访问的示例性功能500的框图。如图所示,各种功能块用箭头描绘,表示块500彼此之间的关系并且示出处理流程。另外,还可以看见与每个功能块500(或“动作步骤”或简称为“步骤”)相关的描述性信息。将看出,在与先前在图1至图4中已描述的相同描述意义上,许多功能块也可以被认为是功能的“模块”。考虑到前述内容,模块500也可以被并入根据本发明的用于提供加速器到非易失性存储器之间的直接访问的系统的各种硬件和软件组件中。许多功能块500可以在各种组件(在分布式计算组件中,或在用户设备上,或在别处,但通常不为用户所知)上作为后台进程执行。为了简洁起见,省略了对在此描述的其他实施例中采用的类似元件、组件、模块、服务、应用和/或功能的重复性描述。
70.如前所述,图5a描绘了gpu 510依赖于主机文件系统“fs”(例如,主机cpu 530和cpu动态随机存取存储器“dram”)来管理gpu 510的存储器,并依赖于非易失性存储装置520来向gpu 510提供数据。这不仅增加了数据复制开销,而且增加了高吞吐量加速器与cpu 530之间的同步形式的控制开销。主机cpu 530导致步骤1和步骤2的gpu 510与非易失性存储器520之间的存储器管理开销。数据的多个副本可以在步骤3在非易失性存储装置520与cpu 530之间以及在步骤4在gpu 510与cpu 530之间被传递/馈送。此外,gpu线程、块、网格可以被停止,直到数据如在步骤4中被传送到gpu 510为止。应当注意,存在通过直接在gpu 510与非易失性存储装置520之间执行直接存储器访问(“dma”)来减少数据复制开销的尝试,但是这仍然导致来自cpu 530的cpu控制/同步开销。
71.然而,使用本发明的各种实施例,图5b描绘了用于使用单个加速器(例如,单个gpu 510)来提供加速器到非易失性存储器之间的直接访问的操作。也就是说,图5b描绘了减少访问开销/延迟并允许gpu 510的gpu线程直接访问非易失性存储装置520而与cpu 530无关。在一个方面,gpu 510用文件系统“fs”管理非易失性存储装置520(类似于简单对象存储),并利用在gpu 510上运行的nvme驱动程序(例如,使用gpu direct)。cpu 530从控制路径中移除,如在步骤1中,并且从数据路径中移除,如在步骤2中。gpu 510可访问整个非易失性存储装置520。
72.更具体地,图5b描绘了从单个加速器(诸如gpu 510)发出读请求和写请求的操作,以用于减少访问开销/延迟并允许gpu 510的gpu线程直接访问非易失性存储装置520而与cpu 530无关。在一个方面,api可以使得gpu 510的gpu线程能够使用nvme在非易失性存储装置520上读取和写入数据,而无需在控制或数据路径上具有主机cpu 530,如在以下步骤中所示的。
73.在步骤1中,主机cpu 530可初始化gpu与非易失性存储装置520之间的接口(例如,
队列和dma)(经由nvme和dma映射(诸如gpudirect/directgma))。在步骤2中,主机cpu 530可以启动对象映射从非易失性存储装置520到gpu 510的gpu存储器的转移,因此,gpu线程知道每个对象在非易失性存储装置520上的位置。在步骤2(1)中,映射中的条目可以是键值对,其中对象标识符(“id”)作为键,非易失性存储装置520上的起始地址作为值。在步骤2(2)中,主机cpu 530的应用可以通过将适当的对象id作为参数传递到gpu内核启动来向gpu510指示要使用哪个对象。在步骤3中,主机cpu 530可在诸如除了对象id作为参数(来自步骤2(2))以外的正常应用中启动gpu内核。
74.在步骤4中,gpu内核线程可使用一个或多个api调用(例如所提供的“pread”和“pwrite”api调用)来在非易失性存储装置520上读取和/或写入数据。
75.在步骤5中,当gpu线程发出pread api调用时,可由gpu线程(例如,调用api调用并且被gpu线程检查的线程)检查gpu页面缓存,以确定所请求的页面是否在gpu 510的gpu存储器中。在步骤5(1)中,如果页面在gpu 510的存储器中,则数据从页面缓存被复制到用户分配的目的地缓冲区(例如,目的地缓冲区可以是gpu存储器中用户可以读取和写入并且可以使用一个或多个api来分配的用户分配的缓冲区)。在步骤5(2)中,如果页面(或页面的子集)不位于gpu页面缓存中,则进行调用的gpu线程可以准备用于未命中页面的nvme命令,如在步骤5(2)(1)中;将nvme命令原子地添加到nvme提交队列中,并使nvme门铃振铃,如在步骤5(2)(2)中,而在控制路径中不使用cpu 530,如在步骤5(2)(2)(1)中;轮询nvme完成队列,直到请求完成为止,如在步骤5(2)(3)中,其中,gpu 510与nvme设备之间的数据直接在彼此之间被复制,而没有cpu 520的干预,如在步骤5(2)(3)(1)中;并且将数据从nvme io缓冲区复制到用户提供的缓冲区,如在步骤5(2)(4)中,以及更新页面缓存状态,如在步骤5(2)(5)中。
76.另外,在步骤6中,当gpu线程发出pwrite api时,进行调用的线程可:更新页面缓存状态,如在步骤(6)(1)中;准备将页面写入非易失性存储装置中的nvme命令,如在步骤(6)(2)中;将该命令原子地添加到nvme提交队列中,并使nvme门铃振铃,如在步骤(6)(3)中(例如,而在控制路径中不使用cpu 530),如在步骤5(2)(2)(1)中;轮询nvme完成队列,直到请求完成为止,如在步骤(6)(4)中(例如,gpu 510与nvme设备之间的数据在彼此之间直接复制,而没有cpu 520的干预),如在步骤5(2)(3)(1)中;以及释放它的缓冲区,如在步骤(6)(7)中。
77.在步骤7中,gpu线程可发出pread和pwrite api调用,然而它想要多次,并且可分别重复步骤1(5)和1(6)。
78.在多个gpu的情况下,图5c描绘了用于提供多个gpu 510(例如,图5c中的510描绘一组gpu)与非易失性存储器520之间的直接访问的操作。在访问nvme之前,gpu 510在彼此之间交换数据以验证数据是否已在不同的gpu高速缓存中存在。
79.在一个方面,对象页面被散列到一个或多个特定gpu 510。gpu 510可以拥有对象页面,在这种情况下,对象页面可以位于一个或多个特定gpu 510的高速缓存中;或者gpu 510可以负责检索对象页面。此外,gpu 510可向一组gpu510中的拥有gpu请求页面。
80.现在转到图6,框图600描绘了用于使用加速器页面缓存组织和应用编程接口(“api”)的示例性操作。在一个方面,在图1至图5a-图5c中描述的设备、组件、模块、操作和/或功能中的每一个也可应用或执行图6的一个或多个操作或动作。
81.在步骤1中,api调用(例如,pread api调用和/或pwrite api)可以被发布给gpu存储器620中的gpu页面缓存(“gpcache”)。在步骤2中,在接收到由所述一个或多个加速器(例如,gpu线程610)发起的用于数据的读操作或写操作的一个或多个api调用(例如,pread api调用和/或pwrite api)时,确定页面缓存未命中的发生,并向nvme提交队列624提交nvme请求以用于访问nvme设备630。在步骤3中,轮询使用nvme设备630的nvme请求完成被完成,并被提供给nvme完成队列626。
82.在步骤4中,页面可从nvme数据缓冲区628被复制到页面缓存622,并且可以更新页面/对象映射表。
83.在使用单个加速器(例如,图5b的单个gpu 510)提供加速器到非易失性存储器之间的直接访问的情况下,可以使用gpu存储器中的页面缓存(例如,应用/软件管理的页面缓存)来执行以下操作步骤以利用数据中的局部性。
84.在步骤1)中,可在gpu存储器620(例如,gpu全局存储器)中维持页面表,gpu存储器620存储从对象数据到gpu存储器620(例如,gpu全局存储器)的gpu全局存储器地址的页面映射。在步骤(1)(1)中,仅当页面位于gpu存储器620中时,映射才存在。
85.在步骤2中,可以在最近最少使用(“lru”)列表中保持页面缓存页面。在步骤2(1)中,在pread或pwrite api调用请求时,如果存在不足的空闲页面(例如,没有足够的空闲页面),则lru页可以在脏的情况下被写回,从先前的映射中解除映射,并且针对新的映射而被重新映射。
86.在步骤3(1)中,在pread api调用时,可以在页面缓存中检查每个所请求的页面。如果页面在页面缓存中,则数据可从该处被复制到用户提供的缓冲区,如在步骤3(2)中。在步骤3(2)中,可以针对不位于页面缓存622中的页面创建输入/输出(“i/o”)请求。在步骤3(2)(1)中,可针对新请求的页面在页面表中创建映射。
87.在步骤4(1)中,在pwrite api调用时,来自页面缓存的lru列表的页面被分配,来自用户指定的缓冲区的数据被复制到这些页面,并且用于在非易失性存储装置630上的对象中的目的地页面的页面映射可被更新以指向适当的页面。在步骤4(2)中,当写i/o请求完成时,可以在用于(一个或多个)页面的页面表条目中设置一个位。在步骤4(2)(1)中,执行附加的写回操作(来自步骤2(2)(4)(1))可在回收的情况下被执行。在步骤5中,可以执行一个或多个读/写操作。
88.应当注意,在使用多个加速器(例如,针对多gpu计算环境使用分布式页面缓存的图5c的一组gpu 510)提供加速器到非易失性存储器之间的直接访问的情况下,可以使用gpu存储器中的页面缓存(例如,应用/软件管理的页面缓存)来执行以下操作步骤以利用数据中的局部性。
89.在步骤1中,gpu(例如,图510的gpu 510)可被分配给对象的页面子范围。gpu可以被称为那些页面的家。在步骤1(1)中,每个gpu还被分配了唯一的id。
90.在步骤2中,家庭gpu 510维持/保持针对其gpu 510被指定为家的那些页面的映射。在步骤2(1)中,映射操作可映射哪些其它gpu在缓存页面。在步骤2(2)(2)中,如果页面位于gpu的页面缓存中,则gpu id和存储器地址可被维持在该组gpu中的该特定gpu的页面缓存内。在步骤2(3)中,可替代地,如果页面不位于gpu的页面缓存中,则页面位于非易失性存储装置520中。
91.在步骤3中,当gpu存储器620的pread api调用不能在本地页面缓存中定位所请求的页面时,gpu存储器620向那些页面的(一个或多个)家庭gpu提交请求。在步骤3(1)中,家庭gpu可检查页面是否位于另一个gpu的页面缓存中。在步骤3(1)(1)中,如果页面位于另一个gpu的页面缓存中,则gpu存储器620可用gpu id和页面缓存地址来响应,以使得进行请求的gpu可从该gpu的页面缓存复制该(一个或多个)页面,否则,家庭gpu允许进行请求的gpu知道该页面在非易失性存储器620中,并更新它的映射表,如在步骤3(1)(2)中,并且进行请求的gpu提交i/o请求,如在步骤3(2)(1)中。
92.在步骤4中,当gpu线程610对某些页面执行pwrite时,gpu线程610向那些页面的(一个或多个)家庭gpu提交请求。在步骤4(1)中,家庭gpu可检查其它gpu是否在其页面缓存中具有将要被覆写的页面。在步骤4(1)(1)中,如果其它gpu在其页面缓存中具有将要被覆写的页面,则家庭gpu可使那些可替代gpu的页面缓存中的所有那些页面无效,并更新它自己的映射。在步骤4(1)(2)中,如果其它gpu在其页面缓存中不具有将要被覆写的页面,则家庭gpu让进行请求的gpu知道页面在非易失性存储器630中,并在进行请求的gpu完成它的i/o请求之后使映射表被更新。在步骤4(1)(2)(1)中,进行请求的gpu可提交i/o请求。
93.在步骤5中,每个gpu上的线程可专用于处理来自其它gpu的请求。
94.应注意,可使用一个或多个操作来执行如本文所描述的预取操作(例如,图4至图5b-图5c)。例如,考虑以下用于执行预取操作的两个操作。
95.在预取操作1中,以下用于预取数据并在线程块之间传递数据的操作可以如下执行。在步骤1中,gpu(诸如gpu 510)可以启动一个或多个线程块(在下文中称为i/o块),该线程块仅负责使用pread_prefetch api调用来发出针对那些块的pread的对应i/o请求。
96.在步骤2中,i/o块中的线程可以创建并提交nvme请求。在步骤2(1)中,可以执行在步骤1(5)(2)(1)直到步骤1(5)(2)(2)中执行的针对来自单个gpu的读取和写入请求的所有相同的动作。在步骤2(2)中,线程不轮询完成(例如异步的)。在步骤2(3)中,线程可创建用于i/o请求到nvme命令id的映射。该映射稍后由gpu线程在轮询完成队列以找到用于针对预取而提交的命令的完成条目时使用。
97.在步骤3中,当调度实际计算线程块并且gpu线程发出pread api调用时,首先,可以检查映射以检查是否已经进行了请求,如在步骤3(1)中。如果已发出/进行了请求,则gpu线程使用consume_prefetch_pread api调用来在nvme完成队列626上轮询该nvme命令id,如在步骤3(2)中,否则它继续进行,如在步骤3(3)中(类似于可执行针对来自单个gpu的读取和写入请求的步骤1(5)(2)(4))。这样,gpu流式多处理器(“sm”)的一个或多个周期不会被浪费在等待i/o完成上。
98.在预取操作2中,以下用于预取数据并重叠计算和数据移动的操作可以如下执行。在步骤1中,每个gpu线程块可以被复用以执行针对多个线程块的计算。
99.在步骤2中,gpu线程块可以通过将这些块流水线化来处理被映射到它的多个线程块。
100.在步骤3中,gpu线程块可使用pread_prefetch api调用来发起针对一个块的i/o请求。
101.在步骤4中,gpu线程块可以用它在块的缓冲区中的数据来执行针对另一个线程块的计算。
102.在步骤5中,gpu线程块可以使用consume_prefetch_pread api调用来在该块的缓冲区中消耗用于针对第三块而被提交的i/o请求的数据。在步骤5(1)中,在此所描述的用于步骤3(2)(3)的i/o请求可与步骤3(2)(4)中的计算重叠。
103.在步骤6中,每个gpu线程块可执行步骤3(2)(2)直到步骤3(2)(5)以使用用于多gpu计算环境的分布式页面缓存,直到所有线程块都被用尽。
104.现在转到图7a-图7c,描绘了示出用于gpu的应用编程接口(“api”)调用描述的表700。在一个方面,在图1至图6中描述的设备、组件、模块、操作和/或功能中的每一个也可以使用图7a至图7c的一个或多个api调用。
[0105]“initialize()”api调用可用于建立gpudirect/directgma,建立nvme队列,并在gpu存储器中映射nvme队列,以及检索/取得要被传递到gpu的nvme队列指针和状态。
[0106]“get_object_map()”api调用可以读取非易失性存储装置上的对象映射,因此,gpu线程可以知道每个对象在非易失性存储装置上起始的位置。返回的映射可被传递到被调用的每个gpu内核。
[0107]“int pcreate(size_t n_bytes)”api调用可以在非易失性存储装置上创建大小为“n_bytes”数量的字节的新对象,并将该新对象添加到对象映射中。可以返回对象id。
[0108]“size_t pread(int obj_id,size_t offset,size_t n_bytes,char*buffer)”可以是读取非易失性存储装置上的对象id为“obj_id”的对象中的在所指定的“offset”处开始的“n_bytes”数量的字节并将所读取的数据存储在用户提供的缓冲区中的api调用。也就是说,对象id(例如,“obj_id”)可以是对象的唯一标识符。被存储在非易失性存储器中的每个对象可以具有唯一的标识符,以使得它可在使用通用api类pread时用于指定对象。对象id(例如,“obj_id”)可以是文件描述符或文件路径。
[0109]“int pread_prefetch(int obj_id,size_t offset,size_t n_bytes)”api调用提交针对pread的io请求,设置i/o请求与nvme命令id之间的映射。
[0110]“size_tconsume_prefetch_pread(int id,char*buffer,size_t n_bytes)”api调用等待,直到指定命令被完成并在指定缓冲区中消耗结果。
[0111]“size_t pwrite(int obj_id,size_t offset,size_t n_bytes,char*buffer)”api调用可以在非易失性存储装置上写入对象id为“obj_id”的对象中的在偏移处开始的“n_bytes”数量的字节。
[0112]“flush()”api调用可以清除nvme队列中的过时条目,并且等待,直到所有nvme写命令被完成。
[0113]
现在转到图8,描绘了用于在计算环境中提供加速器(例如,图形处理单元“gpu”)到非易失性存储器之间的直接访问的方法800。在一个方面,在图1至图7中描述的设备、组件、模块、操作和/或功能中的每一个还可应用或执行图8的一个或多个操作或动作。功能800可被实现为在机器上作为指令执行的方法,其中,这些指令被包括在至少一个计算机可读介质或一个非暂时性机器可读存储介质上。功能800可以在框802中开始。
[0114]
如在框804中,可经由应用编程接口(“api”)向一个或多个加速器提供对非易失性存储装置的直接访问而在控制路径或数据路径上与主机中央处理单元(“cpu”)无关,从而执行数据的读操作和写操作。功能800可以结束,如在框806中。
[0115]
在一个方面,结合图8的至少一个框和/或作为其一部分,操作800可包括以下中的
每一项中的一个或多个。800的操作可在一个或多个加速器的存储器地址空间中映射一个或多个非易失性存储器快速(“nvme”)队列和寄存器。800的操作可使用一个或多个加速器的存储器中的由一个或多个加速器管理的页面缓存以利用数据中的局部性,和/或使用多个加速器的存储器中的由一个或多个加速器管理的分布式页面缓存以利用数据中的局部性。
[0116]
800的操作可以将一个或多个页面从非易失性存储装置复制到页面缓存,并更新页面映射表。800的操作可在将数据从非易失性存储装置复制到一个或多个加速器时从控制路径或数据路径中移除主机cpu。800的操作可以用api预取数据,并保存计算周期以重叠计算和数据的移动。800的操作可以在接收到由所述一个或多个加速器发起的用于数据的读操作或写操作的一个或多个api调用时确定页面缓存未命中的发生,将一个或多个页面从一个或多个非易失性存储器快速(“nvme”)数据缓冲区复制到页面缓存,和/或更新页面映射表。
[0117]
800的操作可以在启动应用时接收非易失性存储装置中的每个对象的对象地址。每个对象标识符(“id”)、对象起始块地址、对象大小的映射可由主机cpu管理,并可在非易失性存储装置的保留区中被保持持久。800的操作可使用一个或多个api调用来对一个或多个加速器分配每个对象的页面子范围。
[0118]
本发明可以是系统、方法和/或计算机程序产品。计算机程序产品可以包括在其上具有计算机可读程序指令的(一个或多个)计算机可读存储介质,计算机可读程序指令用于使处理器执行本发明的各方面。
[0119]
计算机可读存储介质可以是可保持并存储由指令执行设备使用的指令的有形设备。计算机可读存储介质可以是例如但不限于电子存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备、或前述存储设备的任何合适的组合。计算机可读存储介质的更具体示例的非穷举列表包括以下:便携式计算机磁盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦除可编程只读存储器(eprom或闪存)、静态随机存取存储器(sram)、便携式光盘只读存储器(cd-rom)、数字多功能盘(dvd)、记忆棒、软盘、诸如在上面记录有指令的打孔卡或凹槽中的凸起结构的机械编码设备、以及上述设备的任何适当的组合。如本文所使用的计算机可读存储介质不应被解释为是暂时性信号本身,诸如无线电波或其他自由传播的电磁波、通过波导或其他传输介质传播的电磁波(例如,通过光纤线缆的光脉冲)、或通过导线传输的电信号。
[0120]
本文描述的计算机可读程序指令可以从计算机可读存储介质下载到相应的计算/处理设备,或者经由网络(例如互联网、局域网、广域网和/或无线网络)下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光传输光纤、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或网络接口从网络接收计算机可读程序指令,并转发计算机可读程序指令以存储在相应计算/处理设备内的计算机可读存储介质中。
[0121]
用于执行本发明的操作的计算机可读程序指令可以是汇编指令、指令集架构(isa)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、集成电路的配置数据、或者以一种或多种编程语言(包括面向对象的编程语言,例如smalltalk、c 等)和过程编程语言(例如“c”编程语言或类似的编程语言)的任意组合编写的源代码或目标代码。计
算机可读程序指令可以完全在用户的计算机上执行、部分在用户的计算机上执行、作为独立的软件包执行、部分在用户的计算机上并且部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在后一种场景下,远程计算机可以通过任何类型的网络(包括局域网(lan)或广域网(wan))连接到用户的计算机,或者可以连接到外部计算机(例如,使用互联网服务提供商通过互联网)。在一些实施例中,包括例如可编程逻辑电路、现场可编程门阵列(fpga)或可编程逻辑阵列(pla)的电子电路可以通过利用计算机可读程序指令的状态信息来执行计算机可读程序指令以使电子电路个性化,以便执行本发明的各方面。
[0122]
在此参考根据本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述本发明的各方面。将理解,流程图和/或框图的每个框以及流程图和/或框图中的框的组合可以由计算机可读程序指令来实现。
[0123]
这些计算机可读程序指令可以被提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器以产生机器,以使得经由计算机或其他可编程数据处理装置的处理器而执行的指令创建用于实现流程图和/或框图的一个或多个框中指定的功能/动作的装置。这些计算机可读程序指令还可以存储在计算机可读存储介质中,其可以引导计算机、可编程数据处理装置和/或其他设备以特定方式工作,已使得在其中存储有指令的计算机可读存储介质包括制品,该制品包括实现流程图和/或框图的一个或多个框中指定的功能/动作的各方面的指令。
[0124]
计算机可读程序指令还可以被加载到计算机、其他可编程数据处理装置或其他设备上,以使一系列操作步骤将在计算机、其他可编程装置或其他设备上执行,以产生计算机实现的过程,以使得在计算机、其他可编程装置或其他设备上执行的指令实现流程图和/或框图的一个或多个框中指定的功能/动作。
[0125]
附图中的流程图和框图示出了根据本发明的各种实施例的系统、方法和计算机程序产品的可能实现的架构、功能和操作。在这点上,流程图或框图中的每个框可以表示指令的模块、段或部分,其包括用于实现指定的逻辑功能的一个或多个可执行指令。在一些替代实施方案中,框中所注明的功能可不按图中所注明的次序发生。例如,连续示出的两个框实际上可以基本上同时执行,或者这些框有时可以以相反的顺序执行,这取决于所涉及的功能。还将注意,框图和/或流程图图示的每个框以及框图和/或流程图图示中的框的组合可以由执行指定功能或动作或执行专用硬件和计算机指令的组合的专用的基于硬件的系统来实现。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献