CN116108952A - 用于组合优化的并行处理 - Google Patents
用于组合优化的并行处理 Download PDFInfo
- Publication number
- CN116108952A CN116108952A CN202211385311.5A CN202211385311A CN116108952A CN 116108952 A CN116108952 A CN 116108952A CN 202211385311 A CN202211385311 A CN 202211385311A CN 116108952 A CN116108952 A CN 116108952A
- Authority
- CN
- China
- Prior art keywords
- solutions
- ppu
- data
- parallel
- processing units
- 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
- 238000012545 processing Methods 0.000 title claims abstract description 121
- 238000005457 optimization Methods 0.000 title claims abstract description 44
- 238000010845 search algorithm Methods 0.000 claims abstract description 23
- 238000000034 method Methods 0.000 claims description 90
- 230000006872 improvement Effects 0.000 claims description 45
- 230000006870 function Effects 0.000 claims description 37
- 238000004422 calculation algorithm Methods 0.000 claims description 22
- 238000012986 modification Methods 0.000 claims description 10
- 230000004048 modification Effects 0.000 claims description 10
- 238000013135 deep learning Methods 0.000 claims description 9
- 238000003780 insertion Methods 0.000 claims description 2
- 230000037431 insertion Effects 0.000 claims description 2
- 238000004088 simulation Methods 0.000 claims 2
- 239000012634 fragment Substances 0.000 description 24
- 239000011159 matrix material Substances 0.000 description 23
- 238000004891 communication Methods 0.000 description 21
- 230000008569 process Effects 0.000 description 20
- 238000005192 partition Methods 0.000 description 19
- 238000003860 storage Methods 0.000 description 18
- 239000000872 buffer Substances 0.000 description 16
- 238000013528 artificial neural network Methods 0.000 description 11
- 238000007667 floating Methods 0.000 description 11
- 238000010801 machine learning Methods 0.000 description 11
- 239000004065 semiconductor Substances 0.000 description 10
- 241001503987 Clematis vitalba Species 0.000 description 9
- 238000009826 distribution Methods 0.000 description 9
- 230000010076 replication Effects 0.000 description 8
- 238000012360 testing method Methods 0.000 description 8
- 238000012549 training Methods 0.000 description 8
- 238000013519 translation Methods 0.000 description 8
- 230000014616 translation Effects 0.000 description 8
- 238000012384 transportation and delivery Methods 0.000 description 8
- 238000010586 diagram Methods 0.000 description 5
- 238000007726 management method Methods 0.000 description 5
- 238000013473 artificial intelligence Methods 0.000 description 4
- 238000004364 calculation method Methods 0.000 description 4
- 238000012546 transfer Methods 0.000 description 4
- 230000008859 change Effects 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 238000002156 mixing Methods 0.000 description 3
- 210000002569 neuron Anatomy 0.000 description 3
- 230000002093 peripheral effect Effects 0.000 description 3
- 230000002787 reinforcement Effects 0.000 description 3
- 238000009825 accumulation Methods 0.000 description 2
- 238000007792 addition Methods 0.000 description 2
- 210000004556 brain Anatomy 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 238000007796 conventional method Methods 0.000 description 2
- 238000001816 cooling Methods 0.000 description 2
- 238000012937 correction Methods 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 238000009509 drug development Methods 0.000 description 2
- 238000011156 evaluation Methods 0.000 description 2
- 238000001914 filtration Methods 0.000 description 2
- 230000000977 initiatory effect Effects 0.000 description 2
- 239000004973 liquid crystal related substance Substances 0.000 description 2
- 230000001537 neural effect Effects 0.000 description 2
- 239000000047 product Substances 0.000 description 2
- 230000009467 reduction Effects 0.000 description 2
- 238000009877 rendering Methods 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 239000000758 substrate Substances 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 241000700605 Viruses Species 0.000 description 1
- 230000001133 acceleration Effects 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 230000002776 aggregation Effects 0.000 description 1
- 238000004220 aggregation Methods 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000004888 barrier function Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000015556 catabolic process Effects 0.000 description 1
- 230000001149 cognitive effect Effects 0.000 description 1
- 239000003086 colorant Substances 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 238000007405 data analysis Methods 0.000 description 1
- 238000000354 decomposition reaction Methods 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 238000006731 degradation reaction Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000003745 diagnosis Methods 0.000 description 1
- 201000010099 disease Diseases 0.000 description 1
- 208000037265 diseases, disorders, signs and symptoms Diseases 0.000 description 1
- 238000005286 illumination Methods 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 239000013067 intermediate product Substances 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
- 238000011068 loading method Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000006386 memory function Effects 0.000 description 1
- 238000000329 molecular dynamics simulation Methods 0.000 description 1
- 238000000302 molecular modelling Methods 0.000 description 1
- 238000012806 monitoring device Methods 0.000 description 1
- 238000003062 neural network model Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 238000005070 sampling Methods 0.000 description 1
- 230000011664 signaling Effects 0.000 description 1
- 238000002922 simulated annealing Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000000638 solvent extraction Methods 0.000 description 1
- 238000005728 strengthening Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 239000013598 vector Substances 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q10/00—Administration; Management
- G06Q10/04—Forecasting or optimisation specially adapted for administrative or management purposes, e.g. linear programming or "cutting stock problem"
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- G—PHYSICS
- G05—CONTROLLING; REGULATING
- G05D—SYSTEMS FOR CONTROLLING OR REGULATING NON-ELECTRIC VARIABLES
- G05D1/00—Control of position, course, altitude or attitude of land, water, air or space vehicles, e.g. using automatic pilots
- G05D1/02—Control of position or course in two dimensions
- G05D1/021—Control of position or course in two dimensions specially adapted to land vehicles
- G05D1/0212—Control of position or course in two dimensions specially adapted to land vehicles with means for defining a desired trajectory
- G05D1/0221—Control of position or course in two dimensions specially adapted to land vehicles with means for defining a desired trajectory involving a learning process
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3877—Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5072—Grid computing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N20/00—Machine learning
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N5/00—Computing arrangements using knowledge-based models
- G06N5/01—Dynamic search techniques; Heuristics; Dynamic trees; Branch-and-bound
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/4557—Distribution of virtual machine instances; Migration and load balancing
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Physics (AREA)
- Evolutionary Computation (AREA)
- Business, Economics & Management (AREA)
- Artificial Intelligence (AREA)
- Computing Systems (AREA)
- Data Mining & Analysis (AREA)
- Computational Linguistics (AREA)
- Strategic Management (AREA)
- Human Resources & Organizations (AREA)
- Economics (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Biomedical Technology (AREA)
- General Business, Economics & Management (AREA)
- Quality & Reliability (AREA)
- Operations Research (AREA)
- Marketing (AREA)
- Entrepreneurship & Innovation (AREA)
- Medical Informatics (AREA)
- Game Theory and Decision Science (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Tourism & Hospitality (AREA)
- Biophysics (AREA)
- Development Economics (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Aviation & Aerospace Engineering (AREA)
- Radar, Positioning & Navigation (AREA)
- Remote Sensing (AREA)
- Automation & Control Theory (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
- Devices For Executing Special Programs (AREA)
- Multi Processors (AREA)
- Image Processing (AREA)
Abstract
本发明公开了用于组合优化的并行处理。在各种示例中,组合优化问题的解是使用多个并行执行的求解器来确定的。在一个实施例中,并行执行的多个求解器执行一种或更多种搜索算法。此外,在这样的实施例中,一种或更多种搜索算法的操作也被并行执行。
Description
背景技术
寻找组合优化问题的解(solution)具有创建难以搜索的搜索空间的阶乘复杂性,特别是当所涉及的元素和约束的数量增加时。例如,对于具有阶乘复杂性的问题的一组15个对象,具有超过一万亿个可能的解的搜索空间。此外,传统***使用的算法和启发式算法可能没有并行化,或者充其量只是轻度并行化。由于传统方法提供的有限并行化,所探索的搜索空间的大小通常是可用搜索空间的相对较小的一部分,以便允许以计算有效的方式确定解。也就是说,如果搜索空间足够大,那么使用传统方法识别解可能需要太长时间或消耗太多资源来实际应用。因此,可以使用传统方法和处理技术来限制可以确定的潜在解和/或最佳解的数量。因此,通常会牺牲准确性和最佳解来降低计算强度和时间。
发明内容
本公开的实施例涉及用于组合优化问题的并行处理。公开了并行执行多个任务(例如,全球化启发式、高效通信、爬山器、计算引擎、局部优化器或其他求解器)的***和方法,其中多个任务中的特定任务的操作也可以是并行执行,以确定组合优化问题的解(例如,高质量的解)。在一个示例中,作为由一个或更多个处理器执行的结果,多个任务实施一种或更多种算法、启发式、元启发式、深度学习和/或人工智能技术以确定组合优化问题的解。
与诸如上述那些的传统***相比,本公开中描述的***和方法利用诸如图形处理单元(GPU)的一个或更多个并行处理单元(PPU)的并行处理能力来快速有效地确定各种组合优化问题和/或其他非确定性多项式时间难(NP-hard)问题的解。组合优化问题的一个示例包括路线(routing)问题(例如,旅行推销员、送货卡车、机器人等),其中输出(例如,确定的解)必须符合多个约束(例如,送货时间、订单数量,等等)。此外,与传统***相比,并行化(例如,由一个或更多个PPU执行)允许提高速度和准确性,以及由于不可预测的中断而进行的动态重新计算。例如,一条或更多条路线的重新计算可以响应于导致一条或更多条路线被关闭的天气状况而动态地被执行。
附图说明
下面结合附图详细描述用于组合优化问题的并行处理的本***和方法,其中:
图1示出了根据至少一个实施例的利用由PPU并行执行的多个求解器来确定组合优化问题的解的方法;
图2示出了根据至少一个实施例的其中并行处理单元(PPU)用于生成路线问题的解的环境的示例;
图3示出了根据至少一个实施例的由PPU执行的求解器修改组合优化问题的解的示例;
图4示出了根据至少一个实施例的利用由PPU并行执行的多个求解器来确定组合优化问题的解的方法;
图5示出了根据至少一个实施例的利用由PPU并行执行的多个求解器来逃避局部最小值的方法;
图6示出了根据一个实施例的并行处理单元;
图7A示出了根据一个实施例的图6的并行处理单元内的通用处理集群;
图7B示出了根据一个实施例的图6的并行处理单元的存储器分区单元;
图8A示出了根据一个实施例的图7A的流式多处理器;
图8B是根据一个实施例的使用图6的PPU实现的处理***的概念图;
图8C示出了可以实现各种先前实施例的各种架构和/或功能的示例性***;
图9是根据一个实施例的由图6的PPU实现的图形处理管线的概念图;以及
图10是适合用于实现本公开的一些实施例的示例数据中心的框图。
具体实施方式
公开了与用于组合优化问题的并行处理有关的***和方法。特别地,可以使用下面更详细描述的并行处理技术来确定各种类型的问题(例如,可满足性问题)的解,例如车辆路线问题、装箱问题、作业车间调度问题和其他NP-hard问题。此外,在各种实施例中,多级并行处理技术用于快速有效地计算和/或重新计算解。例如,如下文更详细描述的,多个计算引擎(例如,爬山器、局部优化器或其他求解器)由一个或更多个并行处理单元(PPU)并行执行,并且计算引擎的操作也是并行执行。
在各种实施例中,生成多个初始解并将其用于播种多个计算引擎。在一个示例中,使用***算法来生成分配给多个爬山器的多个种子。在这样的示例中,通过改变初始解,计算引擎在与计算引擎确定解所针对的组合优化问题相关联的搜索空间内的各种不同位置处被初始化。在一个实施例中,通过至少修改一组超参数来改变初始解。以此方式,根据至少一个实施例,在多维搜索空间内的不同位置开始的大量计算引擎(例如,数千个)可以增加有效计算最优解的概率。
此外,在各种实施例中,使用一个或更多个目标函数来确定最优解。例如,在确定车辆路线问题的最优解时,使用最小化车辆数量的第一目标函数和减少总行驶距离的第二目标函数来确定最优和/或改进的解。在一些实施例中,至少部分地基于诸如计算预算(例如,时间)、效率、解要求或其他约束之类的各种因素来修改(例如,增加或减少)计算引擎的数量。
如下文更详细描述的,在一个实施例中,计算引擎包括源代码或其他可执行代码,其作为由一个或更多个PPU执行的结果,使一个或更多个PPU执行包括启发式和/或元启发式的搜索算法的各种操作。在一个示例中,计算引擎计算对初始解和/或当前解的改进。在各种实施例中,计算引擎通过至少共享与执行相关联的信息(例如,搜索空间内的解)进行通信。例如,计算引擎将信息写入并共享对计算引擎被阻止做出(例如,禁止移动)的、表示局部最大值的解的修改列表(例如,惩罚列表)。回到上面的例子,在确定车辆路线问题的最佳解时,计算引擎使PPU执行操作以改进路线。
在各种实施例中,计算引擎的操作(例如,搜索算法的执行)并行执行。例如,特定的搜索算法包括路线间(inter-route)改进和路线内(intra route)改进,搜索算法的这些操作由PPU的一个或更多个组件并行执行。在一个实施例中,计算引擎对搜索算法的执行分为两个阶段,候选生成和移动执行。在这样的实施例中,在候选生成期间生成潜在的解。在各种示例中,在候选生成阶段生成可行的解以及不可行的解(例如,违反一个或更多个约束的解)。在一个实施例中,在候选生成期间使用一个或更多个轻约束。例如,诸如车辆下限、车辆容量或其他标量约束之类的轻约束用于修剪在候选生成期间生成的解。
在移动执行阶段,在至少一个实施例中,利用一个或多个重约束。在一个示例中,在移动执行阶段期间,至少部分地基于一个或更多个重约束来分类和处理候选(例如,在候选生成阶段期间生成的解)。一个或更多个重约束包括例如等待时间、交付时间、成本控制、资源限制、负载处理或其他约束。在各种实施例中,约束(例如,轻约束和重约束)由用户提供。在又一些实施例中,至少部分地由用户生成的解(例如,由机器学习模型生成的解)分配给求解器。此外,在一些示例中,初始解是在不满足所有约束的情况下生成的。此外,根据至少一个实施例,由计算引擎执行的搜索算法被执行直到超过处理预算并且选择了最优解。在一个示例中,至少部分地基于具有目标(例如,减少距离、减少路线、减少车辆等)的计算节省值来确定最佳解。在各种实施例中,由计算引擎执行的搜索算法可用于最大化或最小化组合优化问题的解。
现在参考图1、4和5,本文描述的方法100、400和500的每个框包括可以使用硬件、固件和/或软件的任何组合来执行的计算过程。例如,可以通过处理器执行存储在存储器中的指令来执行各种功能。该方法还可以体现为存储在计算机存储介质上的计算机可用指令。该方法可以由独立应用程序、服务或托管服务(独立或与另一个托管服务组合)或另一个产品的插件提供,仅举几例。此外,作为示例,方法100相对于图8A-8C和9的***被描述。然而,该方法可以附加地或替代地由任何一个***或***的任何组合执行,包括但不限于本文所述的那些。
图1是示出根据本公开的一些实施例的利用由一个或更多个并行处理单元(PPU)并行执行的多个求解器来确定组合优化问题的解的方法100的流程图。在各种实施例中,执行方法100的***在框B102生成多个种子。在一个示例中,多个种子包括组合优化问题的解,针对组合优化问题多个求解器生成解。在一个实施例中,使用***算法或其他方法来生成多个种子。在其他实施例中,多个种子是随机的。此外,在种子生成期间,种子(例如,初始解)被分配给求解器(例如,爬山器、局部优化器和/或其他求解器),并且求解器被分配标识信息(例如,求解器ID和/或块ID)。在一个示例中,***算法由以下等式定义,以确定未路由(un-routed)节点的最佳***索引:
c11(i,u,j)=diu+duj-μdij,μ≥0;
c1(i(u),u,j(u))=min[c1(ip_1,u,ip)],p=1,...,m。
此外,在这样的示例中,***算法至少部分地基于以下等式来确定要***的最佳节点:
c1(i,u,j)=α1c11(i,u,j)+α2c12(i,u,j),α1+α2=1
α1≥0,α2≥0;
其中不同的种子(例如,初始解)是通过至少改变超参数μ、α1、α2和λ来生成的。在框B104,在各种实施例中,执行方法100的***执行强化阶段,其中多个求解器执行一个或更多个搜索算法以生成解。例如,一个或更多个搜索算法包括分支定界算法、动态规划算法、***算法、Kernigan-Lin交换算法、k-opt交换算法、重定位算法、模拟退火算法、禁忌搜索算法、引导局部搜索算法、深度学习算法(例如强化学习、转换器网络等),以及其他适合搜索多维搜索空间的算法。此外,在各种实施例中,执行一个或更多个搜索算法的求解器并行地执行搜索算法的操作。在一个示例中,组合优化问题包括车辆路线问题并且多个求解器包括爬山器,爬山器并行地执行路线间改进、路线内改进、禁忌搜索和/或引导局部搜索。在各种实施例中,由于并行执行多个求解器(例如,数千个),求解器之间的信息交换可以被有效地执行。此外,在一个实施例中,一个或更多个改进(例如,特定解的良好特征)可以通过至少使节省值或目标函数增加(例如,作为惩罚一个或更多个特征的补充或替代)来奖励。
在框B106,在各种实施例中,执行方法100的***执行多样化阶段,其中多个求解器修改解以增加搜索空间的探索区域。例如,搜索可行和不可行的解。在另一个示例中,解中不需要的特征会受到惩罚。在包括车辆路线问题的各种实施例中,求解器使用单独的矩阵来进行距离惩罚,而公共矩阵(例如,在求解器可访问的存储位置中维护的矩阵)用于等待惩罚。根据至少一个实施例,可以使用各种其他技术来扩展由求解器探索的不同解的数量,例如随机化、惩罚某些特征、违反一个或更多个约束,或其他技术来改变解。
在框B106,在各种实施例中,执行方法100的***选择由求解器生成的最优解。在一个示例中,至少部分地基于目标函数来选择最优解。在各种实施例中,目标函数由一个或更多个输出组成。在一个示例中,目标函数和一个或更多个输出包括车辆数量和总行驶距离。在另一个示例中,目标函数包括违反约束的数量。
在各种实施例中,由求解器生成的候选集合被维护在排序列表中。在各种实施例中,求解器使用在迭代结束时(例如,完成候选生成阶段和改进阶段)更新的最优节省值和/或目标函数值(例如,最大值或最小值)来维护解。如以下结合图4更详细描述的,通过至少比较由多个求解器并行生成的解来确定组合优化问题的解(例如,一旦超出执行预算)。此外,如图1所示,在各种实施例中,方法100继续强化阶段(例如,框B104)和多样化阶段(例如,B106)。例如,执行方法100的***可以在强化和多样化之间交替,直到满足或超过执行预算。在一个实施例中,执行预算包括执行方法100的时间间隔。在又一些实施例中,执行预算包括与方法100的处理相关联的成本。
图2示出了根据至少一个实施例的示例200,其中并行处理单元(PPU)被用于生成对车辆路线问题的解。在各种实施例中,输入202包括一组节点(例如,目的地)和车库(例如,车辆离开和/或返回的位置)。此外,在一个实施例中,输入202包括成本矩阵206和一组约束208。在一个示例中,成本矩阵206包括表示节点和/或车库之间的距离(例如,时间、英里、努力、能量等)的全对全成本矩阵。在各种实施例中,成本矩阵206和/或距离信息可以从包括地图应用、直接计算、数据库或其他存储位置的各种位置获得。
在各种实施例中,该组约束208包括对要解决的车辆路线问题的各种约束,其可以包括例如但不限于递送时间(例如最早时间、最晚时间等)、递送持续时间、车辆容量、车辆体积、车辆重量、车辆运营成本、车队规模、轮班持续时间、返回位置、交付数量、等待时间或其他约束。在一个示例中,车辆路线问题包括任意数量的约束。此外,如图2所示,约束可以包括矩阵,并被一个或更多个求解器用来生成车辆路线问题的解。
在各种实施例中,输出204包括定义一组路线的分配210,该组路线代表车辆路线问题的解。例如,输出204包括车辆到节点(例如,停靠点)和时间信息的分配。在各种实施例中,输出204由PPU的多个计算引擎使用本公开中描述的各种技术生成。在一个示例中,使用方法100和400生成输出204。在一个实施例中,为爬山器分配至少部分地基于包括成本矩阵206和一组约束208的输入202生成的初始解。此外,在这样的实施例中,多个爬山器被实例化,被分配不同的初始解,并且并行地执行。根据至少一个实施例,在执行期间,多个爬山器通过至少修改分配210的元素来确定对初始解的改进。在一个示例中,分配给特定节点的车辆被重新分配给另一个节点,并且计算节省值(例如,距离减少、成本降低、效率提高)以确定重新分配是否导致改进(例如,更低或更高,取决于该值是被最小化还是最大化)。在各种实施例中,可以使用如本公开中描述的各种算法和启发法来改进初始解。在一个示例中,可以将车辆重新分配给新节点并且可以确定改进,直到执行预算用尽。
在各种实施例中,计算引擎指的是可用于并行处理的硬件可调度线程组。在一个示例中,线程指的是PPU(例如,图形处理单元)线程或其他处理线程(例如,中央处理单元)。在各种示例中,至少部分地使用单指令多线程(SIMT)执行模型来实现线程。根据至少一个实施例,线程还可以称为工作项、要处理的数据的基本元素、单独的通道或单指令多数据(SIMD)通道操作的序列。
可调度单元的示例包括与NVIDIA(RTM)术语相关的线程束(例如,基于计算统一的设备架构(CUDA)的技术)或与AMD(RTM)术语(例如,基于OpenCL的技术)相关的波前。例如,基于CUDA的技术包括作为示例而非限制地包括32个线程的计算引擎。在各种其他示例中,作为示例而非限制,计算引擎包括64个线程。在一个或更多个实施例中,计算引擎指的是SIMD指令的线程。在一个或更多个实施例中,计算引擎包括以锁步执行、运行相同指令并遵循相同控制流路径的操作的集合。在一些实施例中,计算引擎的单独或多组通道或线程可以被屏蔽以防止执行。在各种实施例中,本公开中描述的求解器和/或爬山器被分配给计算引擎用于并行处理。
在各种实施例中,解的各种特征(例如约束违反)受到青睐和/或其他特征受到惩罚。在一个示例中,至少部分地基于输入生成的初始解有利于更远的节点(例如,距车库或其他起始位置具有高距离值的节点)。在另一示例中,受惩罚特征选自解的一个或更多个结构特性(例如,长距离、长等待时间等)。在这样的示例中,当求解器、局部优化器和/或爬山器生成对解的改进时,更远的节点将受到惩罚。在各种实施例中,传递窗口的紧密度(例如,可以访问节点的最早时间和最晚时间)由以下等式定义:
其中l是最晚时间,e是最早时间,N是节点数。在一个示例中,至少部分地基于以上等式计算的紧密度值用于评估由计算引擎生成的解(例如,输出204)。在各种实施例中,除了其他参数(例如,距离、等待时间等)之外,交付卷绕机的紧密度(例如,至少部分地基于使用以上等式计算的值)还用于确定要惩罚的一个或更多个特征。
图3示出了根据至少一个实施例的示例300,其中由PPU执行的求解器修改组合优化问题的解。在各种实施例中,一旦使用组合优化问题的一组解来初始化一组求解器(例如,爬山器),该组求解器就确定对这组解的改进,以便确定对组合优化问题的最优或改进的解。在图3所示的示例300中,改进包括路线内306A和306B改进以及路线间改进308A-308D。
在一个实施例中,路线内306A和306B改进包括对特定路线的改进(例如,更短的距离、更少的时间、改进的终点、更低的成本等)。在一个示例中,各种路线内改进由计算引擎的一个或更多个线程并行计算。在图3所示的示例中,i和j之间的距离小于i到i+1,因此通过路线内改进306B可用的节省的值大于通过路线内改进306A可用的节省的值。在各种实施例中,生成对解的修改(例如,候选生成),然后至少部分地基于计算的节省值和/或解的一组约束来评估候选,然后通过至少将求解器分配给改进的解(例如,包括路线内改进306B的解)来对解决方案进行改进。类似地,在各种实施例中,并行计算路线间改进308A-308D。例如,如图3所示,求解器生成一组候选(例如,潜在的解决方案),其中第一条路线的i-1和j之间的距离小于第二条路线的j-1和j之间的距离;结果,求解器在第一和第二路线之间交换i和j以产生路线间改进308C。此外,在各种实施例中,并行计算路线间改进和路线内改进。
图4是示出根据本公开的一些实施例的利用由一个或更多个并行处理单元(PPU)并行执行的多个求解器来确定组合优化问题的解决方案的方法400的流程图。在各种实施例中,执行方法400的***在框B402为组合优化问题的搜索空间内的求解器生成一组起始位置。在一个示例中,***算法用于至少部分地基于一组约束来生成组合优化问题的多个解。在各种实施例中,解的数量可以由用户确定。此外,在各种实施例中,该组解(例如,搜索空间内的起始位置)被分配给一组求解器。例如,该组求解器可以包括使用可执行代码实现的爬山器,该可执行代码作为由PPU执行的结果,执行方法400的操作。
根据一个实施例,在框B404,执行方法400的***使求解器并行执行。在一个示例中,求解器由多个PPU执行。如上所述,在各种实施例中,求解器执行一种或更多种搜索算法的操作。此外,在一个实施例中,求解器可以被分配指示求解器正在执行的搜索算法的状态(例如,路线间改进、路线内改进、引导搜索、禁忌搜索等)的状态信息。求解器通过至少执行搜索算法来计算对初始解集的改进。在各种实施例中,在框B404,执行方法400的***生成候选(例如,相对于起始解可能是最优的潜在解)。
在框B406,在一个实施例中,执行方法400的***获得由求解器生成的解。在一个示例中,求解器生成解,该解被维护在数据结构中并且至少部分地基于为解计算的节省值来排序。在框B408,在一个实施例中,执行方法400的***确定解是否满足一组约束。如上所述,约束包括交付时间、车辆容量、等待时间和其他约束,例如,执行方法400的***确定特定解是否符合约束。此外,在一个实施例中,约束可以包括不能被违反的硬约束和如果满足某些条件则可以被违反的软约束。
如果特定解和/或改进不满足约束,则执行方法400的***继续到框B410并且该解被拒绝。在一个示例中,拒绝的解和/或改进不分配给求解器。然而,如果特定解和/或改进确实满足约束,则执行方法400的***继续到框B412,并确定是否超出预算。在一个示例中,在要提供解之前,允许求解器执行一段时间间隔。如果没有超出预算,则执行方法400的***返回到框B404并且计算额外的解和/或改进。
然而,在框B412,如果超出预算,则执行方法400的***继续到框B414并且提供最优解。在一个示例中,最优解包括具有最大目标函数值的解。在一个实施例中,节省值用于确定要被应用于修改(例如,改进)使用目标函数计算的值的当前解的改进(例如,一个或更多个候选)。以此方式,根据一个实施例,具有最佳目标函数(例如,至少部分地基于正解答的组合优化问题的最小值或最大值)的解被选择为最优解。尽管使用了最优解这一术语,但由于NP-hard问题的性质,不能保证最优解是最可能的解。例如,方法400的结果(例如,所选择的最优解)是最优解的近似值,其尽可能接近至少部分地基于目标函数在执行预算内获得的那个值(例如,实际最优解)。在各种实施例中,并行执行的多个求解器生成满足约束的多个不同解,多个解最小化和/或最大化组合优化问题的一个或更多个特征。在一个示例中,这些解使车辆路线问题中行驶的总距离最小化。在另一个示例中,这些解最大化了装箱问题中的利用空间量。在另一个示例中,执行一组任务所需的车辆数量被最小化。在各种实施例中,方法400可用于产生组合优化问题的多个可行解,至少一个解相对于其他解更好和/或有改进。
图5是示出根据本公开的一些实施例的利用由PPU并行执行的多个求解器来逃避局部最小值的方法500的流程图。在各种实施例中,在框B502,执行方法500的***初始化当前解。如上所述,根据至少一个实施例,求解器被分配确定和应用改进的初始解,从而生成新解。在至少一个实施例中,求解器在任意时间T处理的解被认为是在时间T的当前解。
在框B504,执行方法500的***创建当前解B504的相邻解的候选列表。在各种实施例中,搜索空间中的相邻解包括由一个有界大小的状态变量中的单个改变和/或修改分开的解。车辆路线问题中的相邻解可以包括,例如但不限于,通过对路线的单次改变而分开的路线。在一个实施例中,当前解的元素被随机化以生成候选解(例如,可能是对当前解的改进和/或恶化的解)。在另一示例中,确定路线间改进和/或路线内改进并将其包括在候选列表中。在框B506,执行方法500的***从候选列表中选择解以进行评估。在一个示例中,候选列表包含多样化的(例如,至少部分地基于节省值对当前解的恶化修改)解,并且执行方法500的***从列表中选择候选。在另一示例中,候选列表包含强化的(例如,至少部分基于节省值改进对当前解的修改)解,其至少部分基于节省值进行排序,并且执行方法500的***至少部分地基于节省值选择候选。
在框B508,执行方法500的***确定候选解是否被包括在惩罚或禁止列表中。在各种实施例中,惩罚列表包括局部最小值和/或最大值的列表,和/或搜索空间中的惩罚改进(例如,对解的修改)的列表。因此,在各种实施例中,惩罚列表用于增加由求解器评估的搜索空间的量(例如,分数)。如果候选在惩罚列表中,则执行方法500的***继续到框B510并从列表中移除该候选。然而,如果候选不在惩罚列表上,则执行方法500的***继续到框B512并更新解和惩罚列表。例如,将解分配给求解器并记录在惩罚列表中。在各种实施例中,方法500被执行直到超过执行预算。在又一实施例中,方法500被执行直到求解器的状态被修改。例如,当特定求解器的状态被设置为“禁忌搜索”时,求解器使方法500被执行,直到该特定求解器的状态被修改。
并行处理架构
图6示出了根据实施例的并行处理单元(PPU)600。在一个实施例中,PPU 600是在一个或更多个集成电路器件上实现的多线程处理器。PPU 600是设计用于并行处理许多线程的延迟隐藏体系架构。线程(即,执行线程)是被配置为由PPU 600执行的指令集的实例。在一个实施例中,PPU 600是图形处理单元(GPU),其被配置为实现用于处理三维(3D)图形数据的图形渲染管线,以便生成用于在显示装置(诸如液晶显示(LCD)设备)上显示的二维(2D)图像数据。在其他实施例中,PPU 600可以用于执行通用计算。尽管为了说明的目的本文提供了一个示例性并行处理器,但应特别指出的是,该处理器仅出于说明目的进行阐述,并且可使用任何处理器来补充和/或替代该处理器。
一个或更多个PPU 600可以被配置为加速数千个高性能计算(HPC)、数据中心和机器学***台、深度学习、高精度语音、图像和文本识别***、智能视频分析、分子模拟、药物研发、疾病诊断、天气预报、大数据分析、天文学、分子动力学模拟、金融建模、机器人技术、工厂自动化、实时语言翻译、在线搜索优化和个性化用户推荐,等等。
如图6所示,PPU 600包括输入/输出(I/O)单元605、前端单元615、调度器单元620、工作分配单元625、集线器630、交叉开关(Xbar)670、一个或更多个通用处理集群(GPC)650以及一个或更多个分区单元680。PPU 600可以经由一个或更多个高速NVLink 610互连连接到主机处理器或其他PPU 600。PPU 600可以经由互连602连接到主机处理器或其他***设备。PPU 600还可以连接到包括多个存储器设备604的本地存储器。在一个实施例中,本地存储器可以包括多个动态随机存取存储器(DRAM)设备。DRAM设备可以被配置为高带宽存储器(HBM)子***,其中多个DRAM裸晶(die)堆叠在每个设备内。
NVLink 610互连使得***能够扩展并且包括与一个或更多个CPU结合的一个或更多个PPU 600,支持PPU 600和CPU之间的高速缓存一致性,以及CPU主控。数据和/或命令可以由NVLink 610通过集线器630发送到PPU 600的其他单元或从其发送,例如一个或更多个复制引擎、视频编码器、视频解码器、电源管理单元等(未明确示出)。结合图6更详细地描述NVLink 610。
I/O单元605被配置为通过互连602从主机处理器(未示出)发送和接收通信(例如,命令、数据等)。I/O单元605可以经由互连602直接与主机处理器通信,或通过一个或更多个中间设备(诸如内存桥)与主机处理器通信。在一个实施例中,I/O单元605可以经由互连602与一个或更多个其他处理器(例如,一个或更多个PPU 600)通信。在一个实施例中,I/O单元605实现***组件互连高速(PCIe)接口,用于通过PCIe总线进行通信,并且互连602是PCIe总线。在替代的实施例中,I/O单元605可以实现其他类型的已知接口,用于与外部设备进行通信。
I/O单元605对经由互连602接收的数据包进行解码。在一个实施例中,数据包表示被配置为使PPU 600执行各种操作的命令。I/O单元605按照命令指定将解码的命令发送到PPU 600的各种其他单元。例如,一些命令可以被发送到前端单元615。其他命令可以被发送到集线器630或PPU 600的其他单元,诸如一个或更多个复制引擎、视频编码器、视频解码器、电源管理单元等(未明确示出)。换句话说,I/O单元605被配置为在PPU 600的各种逻辑单元之间和之中路由通信。
在一个实施例中,由主机处理器执行的程序在缓冲区中对命令流进行编码,该缓冲区向PPU 600提供工作量用于处理。工作量可以包括要由那些指令处理的许多指令和数据。缓冲区是存储器中可由主机处理器和PPU 600两者访问(例如,读/写)的区域。例如,I/O单元605可以被配置为经由通过互连602传输的存储器请求访问连接到互连602的***存储器中的缓冲区。在一个实施例中,主机处理器将命令流写入缓冲区,然后向PPU 600发送指向命令流开始的指针。前端单元615接收指向一个或更多个命令流的指针。前端单元615管理一个或更多个流,从流读取命令并将命令转发到PPU 600的各个单元。
前端单元615耦合到调度器单元620,其配置各种GPC 650以处理由一个或更多个流定义的任务。调度器单元620被配置为跟踪与由调度器单元620管理的各种任务相关的状态信息。状态可以指示任务被指派给哪个GPC 650,该任务是活动的还是不活动的,与该任务相关联的优先级等等。调度器单元620管理一个或更多个GPC 650上的多个任务的执行。
调度器单元620耦合到工作分配单元625,其被配置为分派任务以在GPC 650上执行。工作分配单元625可以跟踪从调度器单元620接收到的若干调度的任务。在一个实施例中,工作分配单元625为每个GPC 650管理待处理(pending)任务池和活动任务池。待处理任务池可以包括若干时隙(例如,32个时隙),其包含被指派为由特定GPC 650处理的任务。活动任务池可以包括若干时隙(例如,4个时隙),用于正在由GPC 650主动处理的任务。当GPC650完成任务的执行时,该任务从GPC 650的活动任务池中逐出,并且来自待处理任务池的其他任务之一被选择和调度以在GPC 650上执行。如果GPC 650上的活动任务已经空闲,例如在等待数据依赖性被解决时,那么活动任务可以从GPC 650中逐出并返回到待处理任务池,而待处理任务池中的另一个任务被选择并调度以在GPC 650上执行。
工作分配单元625经由XBar(交叉开关)670与一个或更多个GPC 650通信。XBar670是将PPU 600的许多单元耦合到PPU 600的其他单元的互连网络。例如,XBar 670可以被配置为将工作分配单元625耦合到特定的GPC 650。虽然没有明确示出,但PPU 600的一个或更多个其他单元也可以经由集线器630连接到XBar 670。
任务由调度器单元620管理并由工作分配单元625分派给GPC 650。GPC 650被配置为处理任务并生成结果。结果可以由GPC 650内的其他任务消耗,经由XBar 670路由到不同的GPC 650,或者存储在存储器604中。结果可以经由分区单元680写入存储器604,分区单元680实现用于从存储器604读取数据和向存储器604写入数据的存储器接口。结果可以通过NVLink610发送到另一个PPU 604或CPU。在一个实施例中,PPU 600包括数目为U的分区单元680,其等于耦合到PPU 600的独立且不同的存储器设备604的数目。下面将结合图7B更详细地描述分区单元680。
在一个实施例中,主机处理器执行实现应用程序编程接口(API)的驱动程序内核,其使得能够在主机处理器上执行一个或更多个应用程序以调度操作用于在PPU 600上执行。在一个实施例中,多个计算应用由PPU 600同时执行,并且PPU 600为多个计算应用程序提供隔离、服务质量(QoS)和独立地址空间。应用程序可以生成指令(例如,API调用),其使得驱动程序内核生成一个或更多个任务以由PPU 600执行。驱动程序内核将任务输出到正在由PPU 600处理的一个或更多个流。每个任务可以包括一个或更多个相关线程组,本文称为线程束(warp)。在一个实施例中,线程束包括可以并行执行的32个相关线程。协作线程可以指代包括执行任务的指令并且可以通过共享存储器交换数据的多个线程。结合图8A更详细地描述线程和协作线程。
图7A示出了根据一个实施例的图6的PPU 600的GPC 650。如图7A所示,每个GPC650包括用于处理任务的多个硬件单元。在一个实施例中,每个GPC 650包括管线管理器710、预光栅操作单元(PROP)715、光栅引擎725、工作分配交叉开关(WDX)780、存储器管理单元(MMU)790以及一个或更多个数据处理集群(DPC)720。应当理解,图7A的GPC 650可以包括代替图7A中所示单元的其他硬件单元或除图7A中所示单元之外的其他硬件单元。
在一个实施例中,GPC 650的操作由管线管理器710控制。管线管理器710管理用于处理分配给GPC 650的任务的一个或更多个DPC 720的配置。在一个实施例中,管线管理器710可以配置一个或更多个DPC 720中的至少一个来实现图形渲染管线的至少一部分。例如,DPC 720可以被配置为在可编程流式多处理器(SM)740上执行顶点着色程序。管线管理器710还可以被配置为将从工作分配单元625接收的数据包路由到GPC 650中适当的逻辑单元。例如,一些数据包可以被路由到PROP 715和/或光栅引擎725中的固定功能硬件单元,而其他数据包可以被路由到DPC 720以供图元引擎735或SM 740处理。在一个实施例中,管线管理器710可以配置一个或更多个DPC 720中的至少一个以实现神经网络模型和/或计算管线。
PROP单元715被配置为将由光栅引擎725和DPC 720生成的数据路由到光栅操作(ROP)单元,结合图7B更详细地描述。PROP单元715还可以被配置为执行颜色混合的优化,组织像素数据,执行地址转换等。
光栅引擎725包括被配置为执行各种光栅操作的若干固定功能硬件单元。在一个实施例中,光栅引擎725包括设置引擎、粗光栅引擎、剔除引擎、裁剪引擎、精细光栅引擎和瓦片聚合引擎。设置引擎接收变换后的顶点并生成与由顶点定义的几何图元关联的平面方程。平面方程被发送到粗光栅引擎以生成图元的覆盖信息(例如,瓦片的x、y覆盖掩码)。粗光栅引擎的输出被发送到剔除引擎,其中与未通过z-测试的图元相关联的片段被剔除,并且被发送到裁剪引擎,其中位于视锥体之外的片段被裁剪掉。那些经过裁剪和剔除后留下来的片段可以被传递到精细光栅引擎,以基于由设置引擎生成的平面方程生成像素片段的属性。光栅引擎725的输出包括例如要由在DPC 720内实现的片段着色器处理的片段。
包括在GPC 650中的每个DPC 720包括M管线控制器(MPC)730、图元引擎735和一个或更多个SM 740。MPC 730控制DPC 720的操作,将从管线管理器710接收到的数据包路由到DPC 720中的适当单元。例如,与顶点相关联的数据包可以被路由到图元引擎735,图元引擎735被配置为从存储器604提取与顶点相关联的顶点属性。相反,与着色程序相关联的数据包可以被发送到SM 740。
SM 740包括被配置为处理由多个线程表示的任务的可编程流式处理器。每个SM740是多线程的并且被配置为同时执行来自特定线程组的多个线程(例如,32个线程)。在一个实施例中,SM 740实现SIMD(单指令、多数据)体系架构,其中线程组(例如,warp)中的每个线程被配置为基于相同的指令集来处理不同的数据集。线程组中的所有线程都执行相同的指令。在另一个实施例中,SM 740实现SIMT(单指令、多线程)体系架构,其中线程组中的每个线程被配置为基于相同的指令集处理不同的数据集,但是其中线程组中的各个线程在执行期间被允许发散。在一个实施例中,为每个线程束维护程序计数器、调用栈和执行状态,当线程束内的线程发散时,使线程束和线程束中的串行执行之间的并发成为可能。在另一个实施例中,为每个单独的线程维护程序计数器、调用栈和执行状态,从而在线程束内和线程束之间的所有线程之间实现相等的并发。当为每个单独的线程维护执行状态时,执行相同指令的线程可以被收敛并且并行执行以获得最大效率。下面结合图8A更详细地描述SM740。
MMU 790提供GPC 650和分区单元680之间的接口。MMU 790可以提供虚拟地址到物理地址的转换、存储器保护以及存储器请求的仲裁。在一个实施例中,MMU 790提供用于执行从虚拟地址到存储器604中的物理地址的转换的一个或更多个转换后备缓冲器(TLB)。
图7B示出了根据一个实施例的图6的PPU 600的存储器分区单元680。如图7B所示,存储器分区单元680包括光栅操作(ROP)单元750、二级(L2)高速缓存760和存储器接口770。存储器接口770耦合到存储器604。存储器接口770可以实现用于高速数据传输的32、64、128、1024位数据总线等。在一个实施例中,PPU 600合并了U个存储器接口770,每对分区单元680有一个存储器接口770,其中每对分区单元680连接到对应的存储器设备604。例如,PPU 600可以连接到多达Y个存储器设备604,诸如高带宽存储器堆叠或图形双数据速率版本5的同步动态随机存取存储器或其他类型的持久存储器。
在一个实施例中,存储器接口770实现HBM2存储器接口,并且Y等于U的一半。在一个实施例中,HBM2存储器堆叠位于与PPU 600相同的物理封装上,提供与常规GDDR5 SDRAM***相比显著的功率高和面积节约。在一个实施例中,每个HBM2堆叠包括四个存储器裸晶并且Y等于4,其中HBM2堆叠包括每个裸晶两个128位通道,总共8个通道和1024位的数据总线宽度。
在一个实施例中,存储器604支持单错校正双错检测(SECDED)纠错码(ECC)以保护数据。对于对数据损毁敏感的计算应用程序,ECC提供了更高的可靠性。在大型集群计算环境中,PPU 600处理非常大的数据集和/或长时间运行应用程序,可靠性尤其重要。
在一个实施例中,PPU 600实现多级存储器层次。在一个实施例中,存储器分区单元680支持统一存储器以为CPU和PPU 600存储器提供单个统一的虚拟地址空间,使得虚拟存储器***之间的数据能够共享。在一个实施例中,跟踪PPU 600对位于其他处理器上的存储器的访问频率,以确保存储器页面被移动到更频繁地访问该页面的PPU 600的物理存储器。在一个实施例中,NVLink 610支持地址转换服务,其允许PPU 600直接访问CPU的页表并且提供由PPU 600对CPU存储器的完全访问。
在一个实施例中,复制引擎在多个PPU 600之间或在PPU 600与CPU之间传输数据。复制引擎可以为未映射到页表的地址生成页面错误。然后,存储器分区单元680可以服务页面错误,将地址映射到页表中,之后复制引擎可以执行传输。在常规***中,针对多个处理器之间的多个复制引擎操作固定存储器(例如,不可分页),其显著减少了可用存储器。由于硬件分页错误,地址可以传递到复制引擎而不用担心存储器页面是否驻留,并且复制过程是否透明。
来自存储器604或其他***存储器的数据可以由存储器分区单元680取回并存储在L2高速缓存760中,L2高速缓存760位于芯片上并且在各个GPC 650之间共享。如图所示,每个存储器分区单元680包括与对应的存储器设备604相关联的L2高速缓存760的一部分。然后可以在GPC 650内的多个单元中实现较低级高速缓存。例如,每个SM 740可以实现一级(L1)高速缓存。L1高速缓存是专用于特定SM 740的专用存储器。来自L2高速缓存760的数据可以被获取并存储在每个L1高速缓存中,以在SM 740的功能单元中进行处理。L2高速缓存760被耦合到存储器接口770和XBar 670。
ROP单元750执行与诸如颜色压缩、像素混合等像素颜色相关的图形光栅操作。ROP单元750还与光栅引擎725一起实现深度测试,从光栅引擎725的剔除引擎接收与像素片段相关联的样本位置的深度。测试与片段关联的样本位置相对于深度缓冲区中的对应深度的深度。如果片段通过样本位置的深度测试,则ROP单元750更新深度缓冲区并将深度测试的结果发送给光栅引擎725。将理解的是,分区单元680的数量可以不同于GPC 650的数量,并且因此每个ROP单元750可以耦合到每个GPC 650。ROP单元750跟踪从不同GPC 650接收到的数据包并且确定由ROP单元750生成的结果通过Xbar 670被路由到哪个GPC 650。尽管在图7B中ROP单元750被包括在存储器分区单元680内,但是在其他实施例中,ROP单元750可以在存储器分区单元680之外。例如,ROP单元750可以驻留在GPC 650或另一个单元中。
图8A示出了根据一个实施例的图7A的流式多处理器740。如图8A所示,SM 740包括指令高速缓存805、一个或更多个调度器单元810、寄存器文件820、一个或更多个处理核心850、一个或更多个特殊功能单元(SFU)852、一个或更多个加载/存储单元(LSU)854、互连网络880、共享存储器/L1高速缓存870。
如上所述,工作分配单元625调度任务以在PPU 600的GPC 650上执行。任务被分配给GPC 650内的特定DPC 720,并且如果该任务与着色器程序相关联,则该任务可以被分配给SM 740。调度器单元810接收来自工作分配单元625的任务并且管理指派给SM 740的一个或更多个线程块的指令调度。调度器单元810调度线程块以作为并行线程的线程束执行,其中每个线程块被分配至少一个线程束。在一个实施例中,每个线程束执行32个线程。调度器单元810可以管理多个不同的线程块,将线程束分配给不同的线程块,然后在每个时钟周期期间将来自多个不同的协作组的指令分派到各个功能单元(即,核心850、SFU 852和LSU854)。
协作组是用于组织通信线程组的编程模型,其允许开发者表达线程正在进行通信所采用的粒度,使得能够表达更丰富、更高效的并行分解。协作启动API支持线程块之间的同步性,以执行并行算法。常规的编程模型为同步协作线程提供了单一的简单结构:跨线程块的所有线程的栅栏(barrier)(例如,syncthreads()函数)。然而,程序员通常希望以小于线程块粒度的粒度定义线程组,并在所定义的组内同步,以集体的全组功能接口(collective group-wide function interface)的形式使能更高的性能、设计灵活性和软件重用。
协作组使得程序员能够在子块(例如,像单个线程一样小)和多块粒度处明确定义线程组并且执行集体操作,诸如协作组中的线程上的同步性。编程模型支持跨软件边界的干净组合,以便库和效用函数可以在他们本地环境中安全地同步,而无需对收敛进行假设。协作组图元启用合作并行的新模式,包括生产者-消费者并行、机会主义并行以及跨整个线程块网格的全局同步。
分派单元815被配置为向一个或更多个功能单元传送指令。在该实施例中,调度器单元810包括两个分派单元815,其使得能够在每个时钟周期期间调度来自相同线程束的两个不同指令。在替代实施例中,每个调度器单元810可以包括单个分派单元815或附加分派单元815。
每个SM 740包括寄存器文件820,其提供用于SM 740的功能单元的一组寄存器。在一个实施例中,寄存器文件820在每个功能单元之间被划分,使得每个功能单元被分配寄存器文件820的专用部分。在另一个实施例中,寄存器文件820在由SM 740执行的不同线程束之间被划分。寄存器文件820为连接到功能单元的数据路径的操作数提供临时存储器。
每个SM 740包括L个处理核心850。在一个实施例中,SM 740包括大量(例如128个等)不同的处理核心850。每个核心850可以包括完全管线化的、单精度、双精度和/或混合精度处理单元,其包括浮点运算逻辑单元和整数运算逻辑单元。在一个实施例中,浮点运算逻辑单元实现用于浮点运算的IEEE 754-2008标准。在一个实施例中,核心850包括64个单精度(32位)浮点核心、64个整数核心、32个双精度(64位)浮点核心和8个张量核心(tensorcore)。
张量核心被配置为执行矩阵运算,并且在一个实施例中,一个或更多个张量核心被包括在核心850中。具体地,张量核心被配置为执行深度学习矩阵运算,诸如用于神经网络训练和推理的卷积运算。在一个实施例中,每个张量核心在4×4矩阵上运算并且执行矩阵乘法和累加运算D=A×B+C,其中A、B、C和D是4×4矩阵。
在一个实施例中,矩阵乘法输入A和B是16位浮点矩阵,而累加矩阵C和D可以是16位浮点或32位浮点矩阵。张量核心在16位浮点输入数据以及32位浮点累加上运算。16位浮点乘法需要64次运算,产生全精度的积,然后使用32位浮点与4×4×4矩阵乘法的其他中间积相加来累加。在实践中,张量核心用于执行由这些较小的元素建立的更大的二维或更高维的矩阵运算。API(诸如CUDA9C++API)公开了专门的矩阵加载、矩阵乘法和累加以及矩阵存储运算,以便有效地使用来自CUDA-C++程序的张量核心。在CUDA层面,线程束级接口假定16×16尺寸矩阵跨越线程束的全部32个线程。
每个SM 740还包括执行特殊函数(例如,属性评估、倒数平方根等)的M个SFU 852。在一个实施例中,SFU 852可以包括树遍历单元,其被配置为遍历分层树数据结构。在一个实施例中,SFU 852可以包括被配置为执行纹理图过滤操作的纹理单元。在一个实施例中,纹理单元被配置为从存储器604加载纹理图(例如,纹理像素的2D阵列)并且对纹理图进行采样以产生经采样的纹理值,用于在由SM 740执行的着色器程序中使用。在一个实施例中,纹理图被存储在共享存储器/L1高速缓存770中。纹理单元实现纹理操作,诸如使用mip图(即,不同细节层次的纹理图)的过滤操作。在一个实施例中,每个SM 640包括两个纹理单元。
每个SM 740还包括N个LSU 854,其实现共享存储器/L1高速缓存870和寄存器文件520之间的加载和存储操作。每个SM 740包括将每个功能单元连接到寄存器文件820以及将LSU 854连接到寄存器文件820、共享存储器/L1高速缓存870的互连网络880。在一个实施例中,互连网络880是交叉开关,其可以被配置为将任何功能单元连接到寄存器文件820中的任何寄存器,以及将LSU 854连接到寄存器文件和共享存储器/L1高速缓存870中的存储器位置。
共享存储器/L1高速缓存870是片上存储器阵列,其允许数据存储和SM 740与图元引擎735之间以及SM 740中的线程之间的通信。在一个实施例中,共享存储器/L1高速缓存870包括128KB的存储容量并且在从SM 740到分区单元680的路径中。共享存储器/L1高速缓存870可以用于高速缓存读取和写入。共享存储器/L1高速缓存870、L2高速缓存760和存储器604中的一个或更多个是后备存储。
将数据高速缓存和共享存储器功能组合成单个存储器块为两种类型的存储器访问提供最佳的总体性能。该容量可由程序用作不使用共享存储器的高速缓存。例如,如果将共享存储器配置为使用一半容量,则纹理和加载/存储操作可以使用剩余容量。在共享存储器/L1高速缓存870内的集成使共享存储器/L1高速缓存870起到用于流式传输数据的高吞吐量管线的作用,并且同时提供对频繁重用数据的高带宽和低延迟的访问。
当被配置用于通用并行计算时,与图形处理相比,可以使用更简单的配置。具体地,图6所示的固定功能图形处理单元被绕过,创建了更简单的编程模型。在通用并行计算配置中,工作分配单元625将线程块直接指派并分配给DPC 720。块中的线程执行相同的程序,使用计算中的唯一线程ID来确保每个线程生成唯一结果,使用SM 740执行程序并执行计算,使用共享存储器/L1高速缓存870以在线程之间通信,以及使用LSU 854通过共享存储器/L1高速缓存870和存储器分区单元680读取和写入全局存储器。当被配置用于通用并行计算时,SM 740还可以写入调度器单元620可用来在DPC 720上启动新工作的命令。
PPU 600可以被包括在台式计算机、膝上型计算机、平板电脑、服务器、超级计算机、智能电话(例如,无线、手持设备)、个人数字助理(PDA)、数码相机、运载工具、头戴式显示器、手持式电子设备等中。在一个实施例中,PPU 600包含在单个半导体衬底上。在另一个实施例中,PPU 600与一个或更多个其他器件(诸如附加PPU 600、存储器、精简指令集计算机(RISC)CPU、存储器管理单元(MMU)、数字-模拟转换器(DAC)等)一起被包括在片上***(SoC)上。
在一个实施例中,PPU 600可以被包括在图形卡上,图形卡包括一个或更多个存储器设备604。图形卡可以被配置为与台式计算机的主板上的PCIe插槽接口。在又一个实施例中,PPU 600可以是包含在主板的芯片集中的集成图形处理单元(iGPU)或并行处理器。
示例性计算***
具有多个GPU和CPU的***被用于各种行业,因为开发者在应用(诸如人工智能计算)中暴露和利用更多的并行性。在数据中心、研究机构和超级计算机中部署具有数十至数千个计算节点的高性能GPU加速***,以解决更大的问题。随着高性能***内处理设备数量的增加,通信和数据传输机制需要扩展以支持该增加带宽。
图8B是根据一个实施例的使用图6的PPU 600实现的处理***800的概念图。处理***800包括CPU 830、交换机810和多个PPU 600中的每一个以及相应的存储器604。NVLink610提供每个PPU 600之间的高速通信链路。尽管图8B中示出了特定数量的NVLink 610和互连602连接,但是连接到每个PPU 600和CPU 830的连接的数量可以改变。交换机810在互连602和CPU 830之间接口。PPU 600、存储器604和NVLink 610可以位于单个半导体平台上以形成并行处理模块825。在一个实施例中,交换机810支持两个或更多个在各种不同连接和/或链路之间接口的协议。
在另一个实施例(未示出)中,NVLink 610在每个PPU 600和CPU 830之间提供一个或更多个高速通信链路,并且交换机810在互连602和每个PPU 600之间进行接口。PPU 600、存储器604和互连602可以位于单个半导体平台上以形成并行处理模块825。在又一个实施例(未示出)中,互连602在每个PPU 600和CPU 830之间提供一个或更多个通信链路,并且交换机810使用NVLink 610在每个PPU 600之间进行接口,以在PPU 600之间提供一个或更多个高速通信链路。在另一个实施例(未示出)中,NVLink 610在PPU 600和CPU 830之间通过交换机810提供一个或更多个高速通信链路。在又一个实施例(未示出)中,互连602在每个PPU 600之间直接地提供一个或更多个通信链路。可以使用与NVLink 610相同的协议将一个或更多个NVLink 610高速通信链路实现为物理NVLink互连或者片上或裸晶上互连。
在本说明书的上下文中,单个半导体平台可以指在裸晶或芯片上制造的唯一的单一的基于半导体的集成电路。应该注意的是,术语单个半导体平台也可以指具有增加的连接的多芯片模块,其模拟片上操作并通过利用常规总线实现方式进行实质性改进。当然,根据用户的需要,各种电路或器件还可以分开放置或以半导体平台的各种组合来放置。可选地,并行处理模块825可以被实现为电路板衬底,并且PPU 600和/或存储器604中的每一个可以是封装器件。在一个实施例中,CPU 830、交换机810和并行处理模块825位于单个半导体平台上。
在一个实施例中,每个NVLink 610的信令速率是20到25千兆位/秒,并且每个PPU600包括六个NVLink 610接口(如图8B所示,每个PPU 600包括五个NVLink 610接口)。每个NVLink 610在每个方向上提供25千兆位/秒的数据传输速率,其中六条链路提供600千兆位/秒。当CPU 830还包括一个或更多个NVLink 610接口时,NVLink 610可专门用于如图8B所示的PPU到PPU通信,或者PPU到PPU以及PPU到CPU的某种组合。
在一个实施例中,NVLink 610允许从CPU 830到每个PPU 600的存储器604的直接加载/存储/原子访问。在一个实施例中,NVLink 610支持一致性操作,允许从存储器604读取的数据被存储在CPU 830的高速缓存分层结构中,减少了CPU 830的高速缓存访问延迟。在一个实施例中,NVLink 610包括对地址转换服务(ATS)的支持,允许PPU 600直接访问CPU830内的页表。一个或更多个NVLink 610还可以被配置为以低功率模式操作。
图8C示出了示例性***865,其中可以实现各种先前实施例的各种体系架构和/或功能。
如图所示,提供***865,其包括连接到通信总线875的至少一个中央处理单元830。通信总线875可以使用任何合适的协议来实现,诸如PCI(***组件互连)、PCI-Express、AGP(加速图形端口)、超传输或任何其他总线或一个或更多个点对点通信协议。***865还包括主存储器840。控制逻辑(软件)和数据被存储在主存储器840中,主存储器840可以采取随机存取存储器(RAM)的形式。
***865还包括输入设备860、并行处理***825和显示设备845,例如常规CRT(阴极射线管)、LCD(液晶显示器)、LED(发光二极管)、等离子显示器等。可以从输入设备860(例如键盘、鼠标、触摸板、麦克风等)接收用户输入。前述模块和/或设备中的每一个甚至可以位于单个半导体平台上以形成***865。可选地,根据用户的需要,各个模块还可以分开放置或以半导体平台的各种组合来放置。
此外,***865可以出于通信目的通过网络接口835耦合到网络(例如,电信网络、局域网(LAN)、无线网络、广域网(WAN)(诸如因特网)、对等网络、电缆网络等)。
***865还可以包括辅助存储(未示出)。辅助存储910包括例如硬盘驱动器和/或可移除存储驱动器、代表软盘驱动器、磁带驱动器、光盘驱动器、数字多功能盘(DVD)驱动器、记录设备、通用串行总线(USB)闪存。可移除存储驱动器以众所周知的方式从可移除存储单元读取和/或写入可移除存储单元。
计算机程序或计算机控制逻辑算法可以存储在主存储器840和/或辅助存储中。这些计算机程序在被执行时使得***865能够执行各种功能。存储器840、存储和/或任何其他存储是计算机可读介质的可能示例。
各种在先附图的体系架构和/或功能可以在通用计算机***、电路板***、专用于娱乐目的的游戏控制台***、专用***和/或任何其他所需的***的上下文中实现。例如,***865可以采取台式计算机、膝上型计算机、平板电脑、服务器、超级计算机、智能电话(例如,无线、手持设备)、个人数字助理(PDA)、数字相机、运载工具、头戴式显示器、手持式电子设备、移动电话设备、电视机、工作站、游戏控制台、嵌入式***和/或任何其他类型的逻辑的形式。
虽然上面已经描述了各种实施例,但是应该理解,它们仅以示例的方式呈现,而不是限制。因此,优选实施例的宽度和范围不应受任何上述示例性实施例的限制,而应仅根据所附权利要求及其等同物来限定。
图形处理管线
在一个实施例中,PPU 600包括图形处理单元(GPU)。PPU 600被配置为接收指定用于处理图形数据的着色程序的命令。图形数据可以被定义为一组图元,例如点、线、三角形、四边形、三角形带等。典型地,图元包括指定图元的多个顶点(例如,在模型空间坐标系中)的数据以及与图元的每个顶点相关联的属性。PPU 600可以被配置为处理图元以生成帧缓冲区(例如,用于显示器的像素中的每一个的像素数据)。
应用程序将场景的模型数据(例如,顶点和属性的集合)写入存储器(诸如***存储器或存储器604)。模型数据定义可能在显示器上可见的对象中的每一个。然后应用程序对驱动程序内核进行API调用,其请求要被渲染和显示的模型数据。驱动程序内核读取模型数据并将命令写入一个或更多个流以执行操作来处理模型数据。这些命令可以参考要在PPU 600的SM 740上实现的不同着色程序,包括顶点着色、外壳着色、域着色、几何着色和像素着色中的一个或更多个。例如,SM 740中的一个或更多个可以被配置为执行顶点着色程序,其处理由模型数据定义的多个顶点。在一个实施例中,不同的SM 740可以被配置为同时执行不同的着色程序。例如,SM 740的第一子集可以被配置为执行顶点着色程序,而SM 740的第二子集可以被配置为执行像素着色程序。SM 740的第一子集处理顶点数据以产生经处理的顶点数据,并将经处理的顶点数据写入L2高速缓存760和/或存储器604。在经处理的顶点数据被光栅化(例如,从三维数据转换成屏幕空间中的二维数据)以产生片段数据之后,SM 740的第二子集执行像素着色以产生经处理的片段数据,然后将其与其他经处理的片段数据混合并被写入存储器604中的帧缓冲区。顶点着色程序和像素着色程序可以同时执行,以管线方式处理来自同一场景的不同数据,直到该场景的所有模型数据已经被渲染到帧缓冲区。然后,帧缓冲区的内容被传送到显示控制器以在显示设备上显示。
图9是根据一个实施例的由图6的PPU 600实现的图形处理管线900的概念图。图形处理管线900是被实现以从3D几何数据生成2D计算机生成图像的处理步骤的抽象流程图。众所周知,管线架构可以通过将操作分成多个阶段来更高效地执行长延迟操作,其中每个阶段的输出耦合到下一个连续阶段的输入。因此,图形处理管线900接收从图形处理管线900的一个阶段传送到下一阶段的输入数据901,以生成输出数据902。在一个实施例中,图形处理管线900可表示由API定义的图形处理管线。作为选择,图形处理管线900可以在先前附图和/或一个或更多个任何后续附图的功能和架构的上下文中实现。
如图9所示,图形处理管线900包括包含多个阶段的管线架构。这些阶段包括但不限于数据组装阶段910、顶点着色阶段920、图元组装阶段930、几何着色阶段940、视口缩放、剔除和裁剪(viewport scale,cull,and clip,VSCC)阶段950、光栅化阶段960、片段着色阶段970和光栅操作阶段980。在一个实施例中,输入数据901包括命令,其配置处理单元以实现图形处理管线900的阶段,并配置几何图元(例如,点、线、三角形、四边形、三角形带或扇形等)以由这些阶段处理。输出数据902可以包括像素数据(即,颜色数据),其被复制到存储器中的帧缓冲区或其他类型的表面数据结构中。
数据组装阶段910接收输入数据901,其指定用于高阶表面、图元等的顶点数据。数据组装阶段910收集临时存储或队列中的顶点数据,诸如通过从主机处理器接收包括指向存储器中的缓冲区的指针的命令并从该缓冲区读取顶点数据。顶点数据然后被传送到顶点着色阶段920以进行处理。
顶点着色阶段920通过对顶点中的每一个执行一次一组操作(例如,顶点着色器或程序)来处理顶点数据。顶点可以例如被指定为与一个或更多个顶点属性(例如,颜色、纹理坐标、表面法线等)相关联的4坐标向量(例如,<x,y,z,w>)。顶点着色阶段920可以操纵各个顶点属性,诸如位置、颜色、纹理坐标等。换句话说,顶点着色阶段920对与顶点相关联的顶点坐标或其他顶点属性执行操作。这些操作通常包括光照操作(例如,修改顶点的颜色属性)和变换操作(例如,修改顶点的坐标空间)。例如,可以使用对象坐标空间中的坐标来指定顶点,其通过将坐标乘以矩阵进行变换,该矩阵将坐标从对象坐标空间转换到世界空间或归一化设备坐标(normalized-device-coordinate,NCD)空间。顶点着色阶段920生成被传送到图元组装阶段930的经变换的顶点数据。
图元组装阶段930收集由顶点着色阶段920输出的顶点并且将顶点分组成几何图元以由几何着色阶段940处理。例如,图元组装阶段930可以被配置为将每三个连续顶点分组为用于传送到几何着色阶段940的几何图元(例如,三角形)。在一些实施例中,特定顶点可以被重新用于连续几何图元(例如,三角形带中的两个连续三角形可以共享两个顶点)。图元组装阶段930将几何图元(例如,相关联的顶点的集合)传送到几何着色阶段940。
几何着色阶段940通过对几何图元执行一组操作(例如,几何着色器或程序)来处理几何图元。曲面细分(tessellation)操作可以从每个几何图元生成一个或更多个几何图元。换言之,几何着色阶段940可以将每个几何图元细分为两个或更多个几何图元的更精细的网格,以由图形处理管线900的其余部分进行处理。几何着色阶段940将几何图元传送到视口SCC阶段950。
在一个实施例中,图形处理管线900可以在流式多处理器和顶点着色阶段920、图元组装阶段930、几何着色阶段940、片段着色阶段970和/或与其相关联的硬件/软件内操作,可顺序地执行处理操作。一旦顺序处理操作完成,在一个实施例中,视口SCC阶段950可以利用数据。在一个实施例中,由图形处理管线900中的阶段的一个或更多个处理的图元数据可以被写入高速缓存(例如,L1高速缓存、顶点高速缓存等)中。在这种情况下,在一个实施例中,视口SCC阶段950可以访问高速缓存中的数据。在一个实施例中,视口SCC阶段950和光栅化阶段960被实现为固定功能电路。
视口SCC阶段950执行几何图元的视口缩放、剔除和裁剪。正被渲染的每个表面都与抽象相机位置相关联。相机位置表示正观看该场景的观看者的位置并定义了包围该场景的对象的视锥体。视锥体可以包括观看平面、后平面和四个裁剪平面。完全位于视锥体之外的任何几何图元都可被剔除(例如丢弃),因为这些几何图元将不会对最终渲染的场景做出贡献。部分位于视锥体内并且部分位于视锥体外的任何几何图元可以被裁剪(例如,转换为被包围在视锥体内的新的几何图元)。此外,可以基于视锥体的深度来对每个几何图元进行缩放。然后将所有可能可见的几何图元传送到光栅化阶段960。
光栅化阶段960将3D几何图元转换成2D片段(例如,能够用于显示等)。光栅化阶段960可以被配置为利用几何图元的顶点来设置一组平面方程,从中可以内插各种属性。光栅化阶段960还可以计算多个像素的覆盖掩码,其指示像素的一个或更多个样本位置是否拦截几何图元。在一个实施例中,还可以执行z测试以确定几何图元是否被已经被光栅化的其他几何图元遮挡。光栅化阶段960生成片段数据(例如,与每个被覆盖像素的特定样本位置相关联的内插顶点属性),其被传送到片段着色阶段970。
片段着色阶段970通过对片段中的每一个执行一组操作(例如,片段着色器或程序)来处理片段数据。片段着色阶段970可以生成片段的像素数据(例如,颜色值),诸如通过使用片段的内插纹理坐标执行光照操作或采样纹理图。片段着色阶段970生成像素数据,其被发送到光栅操作阶段980。
光栅操作阶段980可对像素数据执行各种操作,诸如执行阿尔法测试、模板测试(stencil test)以及将像素数据与对应于与像素相关联的其他片段的其他像素数据混合。当光栅操作阶段980已经完成对像素数据(例如,输出数据902)的处理时,可以将像素数据写入渲染目标,诸如帧缓冲区、颜色缓冲区等。
应当领会,除上述阶段中的一个或更多个以外或代替上述阶段中的一个或更多个,一个或更多个额外的阶段可以被包括在图形处理管线900中。抽象图形处理管线的各种实现方式可以实现不同的阶段。此外,在一些实施例中,上述阶段中的一个或更多个可以从图形处理管线中排除(诸如几何着色阶段940)。其他类型的图形处理管线被认为是在本公开的范围内所构想的。此外,图形处理管线900的任何阶段可以由图形处理器(诸如PPU600)内的一个或更多个专用硬件单元来实现。图形处理管线900的其他阶段可以由可编程硬件单元(诸如PPU 600的SM 740)来实现。
图形处理管线900可以经由由主机处理器(诸如CPU)执行的应用程序来实现。在一个实施例中,设备驱动程序可以实现应用程序编程接口(API),其定义可以被应用程序利用以生成用于显示的图形数据的各种功能。设备驱动程序是软件程序,其包括控制PPU 600的操作的多个指令。API为程序员提供抽象,其允许程序员利用专用图形硬件(诸如PPU 600)来生成图形数据而不要求程序员利用PPU 600的特定指令集。应用程序可以包括被路由到PPU 600的设备驱动程序的API调用。设备驱动程序解释API调用并执行各种操作以响应API调用。在一些情况下,设备驱动程序可以通过在CPU上执行指令来执行操作。在其他情况下,设备驱动程序可以至少部分地通过利用CPU和PPU 600之间的输入/输出接口在PPU 600上启动操作来执行操作。在一个实施例中,设备驱动程序被配置为利用PPU 600的硬件来实现图形处理管线900。
可以在PPU 600内执行各种程序以便实现图形处理管线900的各个阶段。例如,设备驱动程序可以启动PPU 600上的内核以在一个SM 740(或多个SM 740)上执行顶点着色阶段920。设备驱动程序(或由PPU 600执行的初始内核)还可启动PPU 600上的其他内核以执行图形处理管线900的其他阶段,诸如几何着色阶段940和片段着色阶段970。另外,图形处理管线900的阶段中的一些可以在固定单元硬件(诸如在PPU 600内实现的光栅器或数据组装器)上实现。应当领会,在被SM 740上的后续内核处理之前,来自一个内核的结果可以由一个或更多个中间固定功能硬件单元处理。
机器学习
在处理器(诸如PPU 600)上开发的深度神经网络(DNN)已经用于各种使用情况:从自驾车到更快药物开发,从在线图像数据库中的自动图像字幕到视频聊天应用中的智能实时语言翻译。深度学习是一种技术,它建模人类大脑的神经学习过程,不断学习,不断变得更聪明,并且随着时间的推移更快地传送更准确的结果。一个孩子最初是由成人教导,以正确识别和分类各种形状,最终能够在没有任何辅导的情况下识别形状。同样,深度学习或神经学习***需要在物体识别和分类方面进行训练,以便在识别基本物体、遮挡物体等同时还有为物体分配情景时变得更加智能和高效。
在最简单的层面上,人类大脑中的神经元查看接收到的各种输入,将重要性水平分配给这些输入中的每一个,并且将输出传递给其他神经元以进行处理。人造神经元或感知器是神经网络的最基本模型。在一个示例中,感知器可以接收一个或更多个输入,其表示感知器正被训练为识别和分类的对象的各种特征,并且在定义对象形状时,这些特征中的每一个基于该特征的重要性赋予一定的权重。
深度神经网络(DNN)模型包括许多连接节点(例如,感知器、玻尔兹曼机器、径向基函数、卷积层等)的多个层,其可以用大量输入数据来训练以快速高精度地解决复杂问题。在一个示例中,DNN模型的第一层将汽车的输入图像分解为各个部分,并查找基本图案(诸如线条和角)。第二层组装线条以寻找更高水平的图案,诸如轮子、挡风玻璃和镜子。下一层识别运载工具类型,最后几层为输入图像生成标签,识别特定汽车品牌的型号。
一旦DNN被训练,DNN就可以被部署并用于在被称为推理(inference)的过程中识别和分类对象或图案。推理的示例(DNN从给定输入中提取有用信息的过程)包括识别沉积在ATM机中的支票存款上的手写数字、识别照片中朋友的图像、向超过五千万用户提供电影推荐、识别和分类不同类型的汽车、行人和无人驾驶汽车中的道路危险、或实时翻译人类言语。
在训练期间,数据在前向传播阶段流过DNN,直到产生预测为止,其指示对应于输入的标签。如果神经网络没有正确标记输入,则分析正确标签和预测标签之间的误差,并且在后向传播阶段期间针对每个特征调整权重,直到DNN正确标记该输入和训练数据集中的其他输入为止。训练复杂的神经网络需要大量的并行计算性能,包括由PPU 600支持的浮点乘法和加法。与训练相比,推理的计算密集程度比训练更低,是一个延迟敏感过程,其中经训练的神经网络应用于它以前没有见过的新的输入,以进行图像分类、翻译语音以及通常推理新的信息。
神经网络严重依赖于矩阵数学运算,并且复杂的多层网络需要大量的浮点性能和带宽来提高效率和速度。采用数千个处理核心,针对矩阵数学运算进行了优化,并传送数十到数百TFLOPS的性能,PPU 600是能够传送基于深度神经网络的人工智能和机器学***台。
示例数据中心
图10示出了可以在本公开的至少一个实施例中使用的示例数据中心1000。数据中心1000可以包括数据中心基础设施层1010、框架层1020、软件层1030和/或应用层1040。
如图10所示,数据中心基础设施层1010可以包括资源协调器1012、分组计算资源1014和节点计算资源(“节点C.R.”)1016(1)-1016(N),其中“N”代表任何整数、正整数。在至少一个实施例中,节点C.R.1016(1)-1016(N)可以包括但不限于任何数量的中央处理单元(CPU)或其他处理器(包括DPU、加速器、现场可编程门阵列(FPGA)、图形处理器或图形处理单元(GPU)等)、存储器设备(例如,动态只读存储器)、存储设备(例如,固态或磁盘驱动器)、网络输入/输出(NW I/O)设备、网络交换机、虚拟机(VM)、电源模块和/或冷却模块等。在一些实施例中,节点C.R.1016(1)-1016(N)中的一个或更多个节点C.R.s可以对应于具有一种或更多种上述计算资源的服务器。此外,在一些实施例中,节点C.R.1016(1)-10161(N)可以包括一个或更多个虚拟组件,例如vGPU、vCPU等,和/或节点C.R.1016(1)-1016(N)中的一个或更多个可以对应于虚拟机(VM)。
在至少一个实施例中,分组计算资源1014可以包括容纳在一个或更多个机架(未示出)内或容纳在不同地理位置的数据中心中的许多机架(也未示出)内的节点C.R.1016的单独分组。分组计算资源1014内的节点C.R.1016的单独分组可包括可被配置或分配以支持一个或更多个工作负载的分组计算、网络、存储器或存储资源。在至少一个实施例中,包括CPU、GPU、DPU和/或其他处理器的若干节点C.R.1016可以被分组在一个或更多个机架内以提供计算资源以支持一个或更多个工作负载。一个或更多个机架还可以包括任意组合的任意数量的电源模块、冷却模块和/或网络交换机。
资源协调器1012可以配置或以其他方式控制一个或更多个节点C.R.s 1016(1)-1016(N)和/或分组计算资源1014。在至少一个实施例中,资源协调器1012可以包括用于数据中心1000的软件设计基础设施(SDI)管理实体。资源协调器1012可以包括硬件、软件或它们的某种组合。
在至少一个实施例中,如图10所示,框架层1020可以包括作业调度器1032、配置管理器1034、资源管理器1036和/或分布式文件***1038。框架层1020可以包括支持软件层1030的软件1032和/或应用层1040的一个或多个应用程序1042的框架。软件1032或应用程序1042可分别包括基于网络的服务软件或应用程序,例如由亚马逊网络服务、谷歌云和微软Azure提供的那些。框架层1020可以是但不限于,可以利用分布式文件***1038进行大规模数据处理(例如,“大数据”)的一种免费的开源软件Web应用程序框架,例如ApacheSparkTM(以下简称“Spark”)。在至少一个实施例中,作业调度器1032可以包括Spark驱动器以促进由数据中心1000的各个层所支持的工作负载的调度。配置管理器1034可以能够配置不同的层,例如软件层1030和包括Spark和用于支持大规模数据处理的分布式文件***1038的框架层1020。资源管理器1036可以能够管理映射到或被分配用于支持分布式文件***1038和作业调度器1032的集群或分组计算资源。在至少一个实施例中,集群或分组计算资源可以包括数据中心基础设施层1010处的分组计算资源1014。资源管理器1036可以与资源协调器1012协调以管理这些映射或分配的计算资源。
在至少一个实施例中,软件层1030中包括的软件1032可以包括由节点C.R.1016(1)-1016(N)、分组计算资源1014和/或框架层1020的分布式文件***1038的至少一部分使用的软件。。一种或更多种类型的软件可以包括但不限于互联网网页搜索软件、电子邮件病毒扫描软件、数据库软件和流式视频内容软件。
在至少一个实施例中,应用层1040中包括的应用程序1042可以包括由节点C.R.1016(1)-1016(N)、分组计算资源1014和/或框架层1020的分布式文件***1038的至少一部分使用的一种或更多种类型的应用程序。一种或更多种类型的应用程序可以包括但不限于任何数量的基因组学应用程序、认知计算和机器学习应用程序,包括训练或推理软件,机器学习框架软件(例如,PyTorch、TensorFlow、Caffe等)和/或结合一个或更多个实施例使用的其他机器学习应用程序。
在至少一个实施例中,配置管理器1034、资源管理器1036和资源协调器1012中的任何一个可以基于以任何技术上可行的方式获取的任何数量和类型的数据来实施任何数量和类型的自修改动作。自修改动作可以使数据中心1000的数据中心操作员免于做出可能错误的配置决策并且可能避免数据中心的未充分利用和/或性能不佳的部分。
数据中心1000可以包括工具、服务、软件或其他资源以训练一个或更多个机器学习模型或使用根据本文描述的一个或更多个实施例的一个或更多个机器学习模型来预测或推断信息。例如,机器学习模型可以通过使用上文关于数据中心1000描述的软件和/或计算资源,根据神经网络架构计算权重参数来被训练。在至少一个实施例中,对应于一个或更多个神经网络的经训练或部署的机器学习模型可用于通过使用通过一种或更多种训练技术(例如但不限于本文所述的那些)计算的权重参数,使用上面关于数据中心1000所描述的资源来推断或预测信息。
在至少一个实施例中,数据中心1000可以使用CPU、专用集成电路(ASIC)、GPU、FPGA和/或其他硬件(或与之对应的虚拟计算资源)来使用上述资源执行训练和/或推理。此外,可以将上述一个或更多个软件和/或硬件资源配置为一种服务,以允许用户训练或执行信息推理,例如图像识别、语音识别或其他人工智能服务。
示例网络环境
适用于实现本公开的实施例的网络环境可以包括一个或更多个客户端设备、服务器、网络附加存储(NAS)、其他后端设备和/或其他设备类型。客户端设备、服务器和/或其他设备类型(例如,每个设备)可以在图6的计算设备600的一个或更多个实例上实现——例如,每个设备可以包括计算设备600的类似组件、特征和/或功能。此外,在实现后端设备(例如,服务器、NAS等)的情况下,后端设备可以包括作为数据中心1000的一部分被包括,其示例在本文中关于图10更详细地描述。
网络环境的组件可以通过一个或多个网络相互通信,该网络可以是有线的、无线的或两者兼有。网络可以包括多个网络,或者网络的网络。例如,网络可以包括一个或更多个广域网(WAN)、一个或更多个局域网(LAN)、一个或更多个公共网络,例如互联网和/或公共交换电话网络(PSTN),和/或一个或更多个专用网络。在网络包括无线电信网络的情况下,诸如基站、通信塔或甚至接入点(以及其他组件)之类的组件可以提供无线连接。
兼容的网络环境可以包括一个或更多个对等网络环境——在这种情况下,服务器可以不被包括在网络环境中——以及一个或更多个客户端-服务器网络环境——在这种情况下,一个或更多个服务器可以被包括在网络环境中。在对等网络环境中,本文关于服务器描述的功能可以在任意数量的客户端设备上实现。
在至少一个实施例中,网络环境可以包括一个或更多个基于云的网络环境、分布式计算环境、它们的组合等。基于云的网络环境可以包括框架层、作业调度器、资源管理器,以及在一个或更多个服务器上实现的分布式文件***,其可以包括一个或更多个核心网络服务器和/或边缘服务器。框架层可以包括支持软件层的软件和/或应用层的一个或多个应用程序的框架。软件或应用程序可分别包括基于网络的服务软件或应用程序。在实施例中,一个或更多个客户端设备可以使用基于网络的服务软件或应用程序(例如,通过一个或更多个应用程序编程接口(API)访问服务软件和/或应用程序)。框架层可以是但不限于例如可以使用分布式文件***进行大规模数据处理(例如,“大数据”)的一种类型的免费和开源软件Web应用程序框架。
基于云的网络环境可以提供云计算和/或云存储,其执行本文描述的计算和/或数据存储功能(或其一个或更多个部分)的任何组合。这些各种功能中的任何一个都可以从(例如,可以分布在一个州、一个地区、一个国家、全球等的一个或更多个数据中心的)中央或核心服务器分布在多个位置。如果与用户(例如,客户端设备)的连接相对靠近边缘服务器,则核心服务器可以将功能的至少一部分指定给边缘服务器。基于云的网络环境可以是私有的(例如,仅限于单个组织)、可以是公共的(例如,许多组织可用)和/或它们的组合(例如,混合云环境)。
客户端设备可以包括这里关于图6描述的示例计算设备600的组件、特征和功能中的至少一些。作为示例而非限制,客户端设备可以体现为个人计算机(PC)、膝上型计算机、移动设备、智能手机、平板电脑、智能手表、可穿戴计算机、个人数字助理(PDA)、MP3播放器、虚拟现实耳机、全球定位***(GPS)或设备、视频播放器、摄像机、监控设备或***、车辆、船、飞行器、虚拟机器、无人机、机器人、手持通信设备、医院设备、游戏设备或***、娱乐***、车载计算机***、嵌入式***控制器、遥控器、电器、消费电子设备、工作站、边缘设备、这些划定设备的任何组合或任何其他合适的设备。
可以在计算机代码或机器可用指令的一般上下文中描述本公开,包括由计算机或其他机器(例如个人数据助理或其他手持设备)执行的计算机可执行指令(例如程序模块)。通常,包括例程、程序、对象、组件、数据结构等的程序模块是指执行特定任务或实现特定抽象数据类型的代码。本公开可以在各种***配置中实施,包括手持设备、消费电子产品、通用计算机、更专业的计算设备等。本公开也可以在分布式计算环境中实施,其中任务由通过通信网络链接的远程处理设备执行。
如本文所用,关于两个或更多个元素的“和/或”的叙述应被解释为仅表示一个元素或元素的组合。例如,“元素A、元素B和/或元素C”可以仅包括元素A、仅元素B、仅元素C、元素A和元素B、元素A和元素C、元素B和元素C、或元素A、B和C。另外,“元素A或元素B中的至少一种”可以包括元素A的至少一种、元素B的至少一种、或者元素A的至少一种和元素的至少一种B。此外,“元素A和元素B中的至少一种”可以包括元素A的至少一种,元素B的至少一种,或者元素A的至少一种和元素B的至少一种。
本公开的主题在本文中被具体描述以满足法定要求。然而,描述本身并不旨在限制本公开的范围。相反,发明人已经考虑到,要求保护的主题也可以以其他方式体现,以包括与本文中描述的那些不同步骤或类似的步骤组合,并结合其他现有或未来技术。此外,尽管在本文中可以使用术语“步骤”和/或“框”来表示所采用的方法的不同元素,但这些术语不应被解释为暗示本文所公开的各个步骤之间的任何特定顺序,除非并且除了各个步骤的该顺序被明确描述。
Claims (25)
1.一种处理器,包括:
一个或更多个电路,用于:
在与组合优化问题相关联的搜索空间内生成第一组解;
操作一组计算引擎,以使用至少一个并行处理单元来并行地确定对所述第一组解的一组改进;
确定所述一组改进中的改进的子集满足与所述组合优化问题相关联的一组约束;
传输数据,所述数据使所述改进的子集被应用于所述第一组解,以在所述搜索空间内生成第二组解;以及
至少部分地基于值提供与所述第二组解相对应的解,所述值至少部分地基于优化所述组合优化问题的一个或更多个特征的目标函数而计算。
2.如权利要求1所述的处理器,其中生成所述第一组解还包括修改***算法的一组超参数。
3.如权利要求1所述的处理器,其中所述至少一个并行处理单元还包括至少一个图形处理单元GPU。
4.如权利要求1所述的处理器,其中所述组合优化问题是旅行推销员、车辆路线问题、装箱问题或作业车间调度问题中的至少一个。
5.如权利要求1所述的处理器,其中确定所述一组改进包括:
由第一计算引擎确定改进包括所述搜索空间内的局部最小值;以及
在所述搜索空间内选择所述改进的相邻解。
6.如权利要求5所述的处理器,其中确定所述改进包括所述局部最小值还包括:由所述第一计算引擎将所述改进记录在惩罚列表中。
7.如权利要求6所述的处理器,其中所述惩罚列表能够由所述一组计算引擎访问。
8.如权利要求1所述的处理器,其中所述处理器被包括在以下各项的至少一项中:
用于自主或半自主机器的控制***;
用于执行模拟操作的***;
用于执行深度学习操作的***;
使用边缘设备实现的***;
使用机器人实现的***;
合并一个或更多个虚拟机VM的***;
至少部分地在数据中心中实现的***;或者
至少部分地使用云计算资源实现的***。
9.一种***,包括:
一个或更多个处理单元;以及
一个或更多个存储器单元,其存储指令,作为由所述一个或更多个处理单元执行所述指令的结果,使所述一个或更多个处理单元执行以下操作,所述操作包括:
在一组并行处理单元上启动一组计算引擎,所述一组计算引擎被分配组合优化问题的第一组解;
传输数据,所述数据使所述一组并行处理单元并行地执行所述一组计算引擎来确定一组改进以应用于所述第一组解,以生成所述组合优化问题的第二组解;以及
至少部分地基于目标函数来确定所述组合优化问题的解,所述目标函数至少部分地基于第二组解来计算,其中所述目标函数优化所述组合优化问题的特征。
10.如权利要求9所述的***,其中所述组合优化问题包括车辆路线问题。
11.如权利要求9所述的***,其中使所述一个或更多个处理单元确定所述一组改进的指令还包括指令:作为由所述一个或更多个处理单元执行所述指令的结果,使所述一个或更多个处理单元确定一组路线内改进。
12.如权利要求9所述的***,其中使所述一个或更多个处理单元确定所述一组改进的指令还包括指令:作为由所述一个或更多个处理单元执行所述指令的结果,使所述一个或更多个处理单元确定一组路线间改进。
13.如权利要求9所述的***,其中确定所述一组改进包括:并行地确定一组路线内改进和一组路线间改进。
14.如权利要求9所述的***,其中使所述一个或更多个处理单元确定所述解的指令还包括指令:作为由所述一个或更多个处理单元执行所述指令的结果,使所述一个或更多个处理单元确定所述解满足与所述组合优化问题相关的一个或更多个约束。
15.如权利要求9所述的***,其中所述***被包括在以下各项的至少一项中:
用于自主或半自主机器的控制***;
用于执行模拟操作的***;
用于执行深度学习操作的***;
使用边缘设备实现的***;
使用机器人实现的***;
合并一个或更多个虚拟机VM的***;
至少部分地在数据中心中实现的***;或者
至少部分地使用云计算资源实现的***。
16.一种方法,包括:
传输数据,所述数据使并行处理单元执行多个计算引擎,以至少基本上并行地执行在组合优化问题的搜索空间内的搜索算法的操作;以及
从所述多个计算引擎中的计算引擎获得解。
17.如权利要求16所述的方法,其中所述计算引擎包括爬山器、局部优化器或求解器中的至少一个。
18.如权利要求16所述的方法,其中所述组合优化问题包括旅行推销员问题、车辆路线问题、装箱问题或作业车间调度问题中的至少一个。
19.如权利要求16所述的方法,其中所述搜索算法的操作中的两个或更多个操作由所述并行处理单元至少基本上并行地执行。
20.如权利要求16所述的方法,其中所述并行处理单元包括图形处理单元。
21.如权利要求16所述的方法,其中所述搜索算法的操作包括***算法以在所述搜索空间内生成初始解集。
22.如权利要求21所述的方法,其中通过至少修改与所述***算法相关联的一组超参数来改变所述初始解集。
23.如权利要求21所述的方法,其中所述初始解集中的解被分配给所述多个计算引擎中的计算引擎。
24.如权利要求16所述的方法,其中所述搜索算法的操作还包括禁忌搜索以避免局部最大值。
25.如权利要求16所述的方法,其中至少部分地基于所述计算引擎正在执行的所述搜索算法的操作的结果,为所述多个计算引擎的计算引擎分配一组法规的状态。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17/521,440 US20230145783A1 (en) | 2021-11-08 | 2021-11-08 | Parallel processing for combinatorial optimization |
US17/521,440 | 2021-11-08 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116108952A true CN116108952A (zh) | 2023-05-12 |
Family
ID=86053008
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211385311.5A Pending CN116108952A (zh) | 2021-11-08 | 2022-11-07 | 用于组合优化的并行处理 |
Country Status (3)
Country | Link |
---|---|
US (1) | US20230145783A1 (zh) |
CN (1) | CN116108952A (zh) |
DE (1) | DE102022128966A1 (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11995420B2 (en) * | 2021-08-19 | 2024-05-28 | Red Hat, Inc. | Generating a build process for building software in a target environment |
-
2021
- 2021-11-08 US US17/521,440 patent/US20230145783A1/en active Pending
-
2022
- 2022-11-02 DE DE102022128966.4A patent/DE102022128966A1/de active Pending
- 2022-11-07 CN CN202211385311.5A patent/CN116108952A/zh active Pending
Also Published As
Publication number | Publication date |
---|---|
US20230145783A1 (en) | 2023-05-11 |
DE102022128966A1 (de) | 2023-05-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11715251B2 (en) | Neural network model trained using generated synthetic images | |
CN110363294B (zh) | 利用网络中的路径来表示神经网络以提高神经网络的性能 | |
CN111143174B (zh) | 在共享功率/热约束下操作的硬件的最佳操作点估计器 | |
CN109472858B (zh) | 用于逆向图形的可微分渲染管线 | |
CN111210498B (zh) | 降低多边形网格的细节水平以减少被渲染几何的复杂度 | |
CN110766778B (zh) | 使用散列执行并行路径空间滤波的方法和*** | |
US10860859B2 (en) | Budget-aware method for detecting activity in video | |
CN112445713A (zh) | 用于对内存有效分区的技术 | |
US10810784B1 (en) | Techniques for preloading textures in rendering graphics | |
US20200175392A1 (en) | Multiple Model-Based Apparatus and Method for Inferring a Path for At Least One Target Object | |
CN111191784A (zh) | 转置的稀疏矩阵乘以稠密矩阵用于神经网络训练 | |
EP3678037A1 (en) | Neural network generator | |
CN112041894B (zh) | 渲染期间提高涉及水面的场景的真实感 | |
CN112783554A (zh) | 用于程序间数据交换的持久便签内存 | |
US20230237342A1 (en) | Adaptive lookahead for planning and learning | |
CN116736624A (zh) | 在光学接近度校正流中对演进掩模形状的并行掩模规则检查 | |
CN113822975B (zh) | 用于对图像进行有效采样的技术 | |
CN116108952A (zh) | 用于组合优化的并行处理 | |
CN115039076A (zh) | 无障碍和无围栏共享存储器同步 | |
CN113808183B (zh) | 使用扭曲的复合估计乘积积分 | |
CN115427933A (zh) | 用于虚拟机的存储器带宽限制 | |
CN111221498A (zh) | 动态方向舍入 | |
CN116521056A (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 |