Method to map convolutional layers of deep neural network on a plurality of processing elements with SIMD execution units, private memories, and connected as a 2D systolic processor array

12141513 ยท 2024-11-12

Assignee

Inventors

Cpc classification

International classification

Abstract

A method for improving performance of a predefined Deep Neural Network (DNN) convolution processing on a computing device includes inputting parameters, as input data into a processor on a computer that formalizes a design space exploration of a convolution mapping, on a predefined computer architecture that will execute the predefined convolution processing. The parameters are predefined as guided by a specification for the predefined convolution processing to be implemented by the convolution mapping and by a microarchitectural specification for the processor that will execute the predefined convolution processing. The processor calculates performance metrics for executing the predefined convolution processing on the computing device, as functions of the predefined parameters, as proxy estimates of performance of different possible design choices to implement the predefined convolution processing.

Claims

1. A method for improving performance of a predefined Deep Neural Network (DNN) convolution processing on a computing device, the method comprising: inputting parameters as input data into a processor configured to, on a computer, formalize a design space exploration of a convolution mapping on a predefined DNN computer architecture that will execute the predefined DNN convolution processing, wherein the parameters are predefined as guided by a specification for the predefined DNN convolution processing to be implemented by the convolution mapping and by a microarchitectural specification for the processor that will execute the predefined DNN convolution processing; calculating, by the processor, performance metrics for executing the predefined DNN convolution processing on a two-dimensional systolic processor, as functions of the parameters, as proxy estimates of performance of different possible design choices to implement the predefined DNN convolution processing for output, wherein the calculating, by the processor, of the performance metrics for executing the predefined DNN convolution processing is to prune invalid mapping options having calculated performance metrics that are less than minimum expected performance metrics, and architecture configurations to achieve desired performance goals, including low energy and high throughput; determining an optimal convolution mapping onto a three-dimensional (3D) processor array for the predefined DNN convolution processing from the calculating, wherein the optimal convolution mapping includes calculated performance metrics that are greater than maximum expected performance metrics; and performing the predefined convolution processing onto a plurality of processing elements connected as the three-dimensional processor array, wherein three data arrays in the predefined DNN convolution processing includes input, kernel, output, such that another set is defined with three dimensions.

2. The method of claim 1, wherein possible convolution mappings are mappings onto a predetermined accelerator architecture configuration.

3. The method of claim 1, further comprising: receiving input data defining one or more constraints; and identifying invalid convolution mapping options based on the constraints.

4. The method of claim 1, as implemented on a second computer different from the computing device that will execute the predefined DNN convolution processing.

5. The method of claim 4, as implemented on one of: a server remote from the computing device; and as a cloud service.

6. The method of claim 1, as embodied as a set of machine-readable instructions on a non-transitory memory device.

7. A method for exploring a design space for mapping convolutional layers of a Deep Neural Network (DNN) onto a plurality of processing elements connected as a 2-dimensional (2D) or a 3-dimensional (3D) systolic processor array, the method comprising: inputting parameter values into a processor from a microarchitecture specification that defines configuration aspects of the processing elements; inputting parameter values into the processor from a specification that defines a convolutional processing; calculating, by the processor, performance metrics for executing a predefined DNN convolution processing on the 2D systolic processor array or the 3D systolic processor array, as functions of the parameter values, as proxy estimates of performance of different possible design choices to implement the predefined DNN convolution processing for output, wherein the calculating, by the processor, of the performance metrics for executing the predefined DNN convolution processing is to prune invalid mapping options having calculated performance metrics that are less than minimum expected performance metrics, and architecture configurations to achieve desired performance goals, including low energy and high throughput; determining an optimal convolution mapping based on the calculating, wherein the optimal convolution mapping includes calculated performance metrics that are greater than maximum expected performance metrics; and performing the predefined DNN convolution processing onto a plurality of processing elements connected as the 2D systolic processor array or the 3D systolic processor array, wherein three data arrays in the predefined DNN convolution processing includes input, kernel, output, such that another set is defined with three dimensions or two dimensions.

8. The method of claim 7, further comprising determining an optimal configuration for implementing the predefined DNN convolution processing.

9. The method of claim 7, further comprising: receiving data for one or more constraints; and identifying invalid convolution mapping options based on the constraints.

10. The method of claim 7, as implemented on a computer different from a computing device comprising the 2D systolic processor array that will execute the predefined DNN convolution processing.

11. The method of claim 7, as implemented on a computer different from a computing device comprising the 2D systolic processor array.

12. The method of claim 11, as implemented on one of: a server remote from the computing device; and as a cloud service.

13. The method of claim 7, as implemented as a software tool on a computing device comprising the 2D systolic processor array that will execute the predefined DNN convolution processing.

14. The method of claim 7, as embodied as a set of machine-readable instructions on a non-transitory memory device.

15. An apparatus, comprising: a processor; and a memory device accessible by the processor, the memory device storing a set of instructions that permit the processor to execute a method of optimizing a mapping of convolutional layers of a Deep Neural Network (DNN) onto a plurality of processing elements connected as a 2-dimensional (2D) systolic processor array or a 3-dimensional (3D) system processor array, the method executed by the processor, comprising: inputting parameter values into the processor from a microarchitecture specification that defines configuration aspects of the processing elements; inputting parameter values into the processor from a specification that defines a predefined DNN convolution processing; calculating, by the processor, performance metrics for executing the predefined DNN convolution processing on the 2D systolic processor array or the 3D systolic processor array, as functions of the parameter values, as proxy estimates of performance of different possible design choices to implement the predefined DNN convolution processing, wherein the calculating, by the processor, of the performance metrics for executing the predefined DNN convolution processing is to prune invalid mapping options having calculated performance metrics that are less than minimum expected performance metrics, and architecture configurations to achieve desired performance goals, including low energy and high throughput; inputting one or more constraints that permit the processor to eliminate invalid design choices; determining an optimal convolution mapping onto the 2D systolic processor array or the 3D systolic processor array for the predefined DNN convolution processing for processing of images, wherein the optimal convolution mapping includes calculated performance metrics that are greater than maximum expected performance metrics; and performing the predefined DNN convolution processing onto a plurality of processing elements connected as the 2D systolic processor array or the 3D systolic processor array, wherein three data arrays in the predefined DNN convolution processing includes input, kernel, output, such that another set is defined with three dimensions.

16. The apparatus of claim 15, wherein the method is implemented as a software tool that automatically configures an optimal configuration for performing the predefined DNN convolution processing.

17. The method of claim 1, as implemented as a software tool on the computing device that will execute the predefined DNN convolution processing, wherein the convolution mapping is implemented onto a hardware accelerator, and wherein mapped dimensions follow a predetermined rule to avoid replication of data based on edges of the plurality of processing elements.

18. The method of claim 7, as implemented as a software tool on a computing device that will execute the predefined DNN convolution processing, wherein the mapping is implemented onto a hardware accelerator, and wherein mapped dimensions follow a predetermined rule to avoid replication of data based on edges of the plurality of processing elements.

Description

BRIEF DESCRIPTION OF THE DRAWINGS

(1) Aspects of the invention will be better understood from the following detailed description of the exemplary embodiments of the invention with reference to the drawings, in which:

(2) FIG. 1 exemplarily shows the goal of the present invention as finding the optimal convolutional mapping for image groups onto a 2D systolic processor grid;

(3) FIG. 2 depicts in flowchart format an exemplary embodiment of the present invention;

(4) FIG. 3 exemplarily shows the convolutional processing;

(5) FIG. 4 exemplarily shows the 2D PE array to implement a convolutional processing;

(6) FIG. 5 shows a flow chart of the process of an exemplary embodiment of the present invention;

(7) FIG. 6 shows an analysis using the present invention for one exemplary 2D PE array configuration using the VGG Con4-2 CNN;

(8) FIG. 7 shows analysis using the present invention for the same exemplary 2D PE array configuration using the VGG FC CNN;

(9) FIG. 8 shows exemplary pseudocode for pruning invalid design choices;

(10) FIG. 9 shows exemplary pseudocode for determining the optimal MicroArch configuration;

(11) FIG. 10 depicts a cloud computing environment according to an embodiment of the present invention; and

(12) FIG. 11 depicts abstraction model layers according to an embodiment of the present invention.

DETAILED DESCRIPTION

(13) The invention will now be described with reference to FIG. 1, which exemplarily demonstrates the present invention as developed as a method to discover the best mapping 102 for convolutional processing 100 of a group of images onto a 2D-systolic array 104 of processing elements (PE).

(14) As an overview of the method underlying the present invention, FIG. 2 shows in flowchart format the stages of the method 200 underlying the present invention. The method of the present invention develops a convolution processing model by defining parameters based on 1) the convolution specification 202 and 2) the MicroArch specification 204 to represent design spaces for Cony mappings. In the method of the invention, the design spaces are represented as a set of Rules 208 and Constraints 214 (as derived from parameters from the MicroArch specification 204 and a User specification 206) expressed using the parameters.

(15) Estimated performances 210, 212 are then formulated using these parameters to quantify the benefits of each design choice. The Rules 208 are used to formulate the performance per mapping, and the Constraints 214 (using parameters from the MicroArch specification 204 and possibly user inputs 206) are used to prune the invalid mapping options.

(16) These performance estimates can then be used for 1) performance analysis 216, 2) design space pruning 218, and 3) proposal of the best MicroArch configuration 220. The method of the present invention could also be incorporated into a software runtime program that controls mapping of convolution computation into a 2-D hardware accelerator.

The CNN Specification Parameters

(17) As explained exemplarily in FIG. 3, the present invention involves convolutional processing 300 of input images 302, typically in groups of images in N channels. A kernel bank 304 provides different functions such as sharpening, blurring, edge detection, etc., that can be convoluted with each image 302 to provide convoluted output images 306 in accordance with the implemented convolution function 300. Each kernel function 304 can have different size windows for each function.

(18) From the convolution equation 300 in FIG. 3, as follows:
Out[mb][ij]=.sub.in,kijInp[in][mb][ij+kij]*Ker[out][in][kij],
the present inventors recognized that the convolution process can be modeled for quantification of performance as including a set having five dimensions.
[Def]CONV={in,out,ij,kij,mb}.

(19) Thus, the notation {in, mb, ij, kij, out} corresponds to {number of input feature maps, number of samples in a minibatch, rows and columns of the output feature map size, number of output feature maps}, respectively. From the pictorial view in FIG. 1, these elements correspond to the dimensions of cubes, so it is common to call them dimensions.

(20) Moreover, from FIG. 3, it can be seen that there are three data arrays in the convolution process: Input, Kernel, Output, so that another set can be defined with three dimensions:
[Def]ArrayType={Ker,Inp,Out}.

(21) Additionally, another set of dimensions can then also be defined: [Def] DIM.sub.x: a set of dimensions that an array xArrayType is involved.

(22) For example, DIM.sub.Ker={in, out, kij}, DIM.sub.Inp={in, ij, mb, kij}, DIM.sub.Out={out, ij, mb}. Thus, DIM_x is defined as a set of dimensions associated with x, meaning, for example, DIM_Ker={in, out, kij}, where the three elements of the set define sizes of different dimensions associated with the Kernel Ker. The number of input feature maps (in), number of output feature maps (out), and the row and column of kernel (kij) compose the kernel, as depicted in FIG. 1.

(23) The MicroArch Specification Parameters

(24) As further illustrated in FIG. 4, the PE array of the exemplary embodiment of the present invention is SIMD-based (single input, multiple data), exemplarily presumed to have a PE array of (RC) PEs with S SIMD lanes and L LRFs. The term LRF stands for a Local Register File, which is used for temporary data storage within the PE. LRF has a number of slots, each slot containing SIMD elements of data that would be consumed as operands of a parallel arithmetic unit called an FPU (floating-point processing unit). For example, if SIMD=8, FPU can take two sets of operands from two LRF slots, each including 8 floating-point elements, to compute element-wise multiplication and produce a vector of 8 product values. This result can be stored back to a slot of LRF.

(25) In the context of describing mapping in this discussion, LRF refers to the dimension corresponding to the number of slots. For example, if given map {in} to LRF, data corresponding to in=0 to in =7 will be stored into each slot of the LRF. The size of the LRF and the SIMD is independent. That is, each slot in LRF can store SIMD elements in it. Thus, the total elements can be stored in LRF would be LRF*SIMD.

(26) Therefore, the model of the convolution processing on this exemplary machine architecture can be further developed as incorporating parameters of the MicroArch specification using a SIMD architecture on a 2-D systolic array, defined as follows: [Def] X: a data array kept inside the LRFs of the PE array, [Def] H, V: data arrays flowing horizontally and vertically, respectively [Def] AvailBW: available bandwidth (BW); W: word length (e.g., 2 bytes); #Proc=C*R*S [De] PEcol: a set of CONV={in, out, ij, kij, mb} mapped to columns of the PE array [Def] PErow: a set of CONV mapped to rows of the PE array [Def] LRF: a set of CONV mapped to the number of entries used inside each PE [Def] SIMD: a set of CONV mapped to the SIMD lane of each PE [Def] ITER: dimensions mapped for repetition while reusing X kept in the PE array
The Rules and Constraints

(27) RULES: mapped dimensions PEcol, PErow, LRF, SIMD are chosen from given sets, as follows:
PEcol.Math.DIM.sub.XDIM.sub.V
PErow.Math.DIM.sub.XDIM.sub.H

(28) The above two rules avoid replication of data in X, since edges of a 2-D PE should be mapped to a conjunction of dimensions of the adjacent data structures. This guarantees that PEcolPErow, since DIM_X intersect DIM_H intersect DIM_V is a null set from the problem definition.

(29) LRF = { LRF X .Math. V .Math. DIM X .Math. DIM V or LRF X .Math. H .Math. DIM X .Math. DIM H or LRF H .Math. V .Math. DIM X .Math. DIM H .Math. DIM V =

(30) Since X is kept in LRF, LRF dimension should be one of the dimensions in X. The above three rules signify that there can be three possible choices, where the last case, DIM_X intersect DIM_H intersect DIM_V is a null set from the problem definition.

(31) SIMD = { SIMD X .Math. V .Math. DIM X .Math. DIM V or SIMD X .Math. H .Math. DIM X .Math. DIM H or SIMD H .Math. V .Math. DIM H .Math. DIM V

(32) The above three rules signify that the SIMD dimension is mapped in manner similar as LRF. One difference is that in the 3.sup.rd choice (of SIMD_H-intersect-V), DIM_X is not involved, since X can be replicated over SIMD times for each slot.
ITER.Math.(DIM.sub.HDIM.sub.V)DIM.sub.X

(33) The above rule signifies a set of dimensions independent to X, thus X can be reused over these dimensions.

(34) CONSTRAINTS: Each dim mapped to {PEcol, PErow, LRF, SIMD} is associated with size{N.sub.in, N.sub.out, N.sub.ij, N.sub.mb, N.sub.kij} constrained by MicroArch {R,C,L,S} For example, the exemplary MicroArch configuration of FIG. 4 would have constraints: |PEcol|C, |PErow|R, |LRF|L, |SIMD|S, |ITER|=I [Def] |Y|: product of sizes of all the dimensions in a set
Y.Math.{in,out,ij,kij,mb}.

(35) In the above expression, |Y| merely explains the concept of the total assigned dimension size. For example, if PEcol={in, out}, then |PEcol| is the product of dimensions mapped to in and out, each of which would be smaller than Nin and Nout, respectively.

(36) Other constraints defined by a specific MicroArch or by users can be added. For example, in a specific MicroArch, the banked memory, PEcol or PErow may not be able to include indexing ij, since Inp requires all to all access across the banks. A possible user specification might be a user to specify a MinExpectedPEUtil, AvailBW, {R.sub.max, C.sub.max, L.sub.max, S.sub.max}, etc.

The Performance Estimations

(37) Based on the parameters defined above, performance metrics can now be quantified, as indicated below for the exemplary embodiment described above. PE utilization (as a preferred embodiment, but can be extended to other metrics) [Def] Overhead(X): Required cycles to bring in/out data array kept in LRF

(38) Overhead ( X ) = ( X == Out ) ? 2 * R * C * S * L * W AvailBW : R * C * S * L * W AvailBW ( cycles ) [ Def ] MinCycles = TotalSize = N i n * N out * N ij * N mb * N kij # Proc = C * R * S [ Def ] EstmCycles = .Math. N i n P i n .Math. * .Math. N out P out .Math. * .Math. N ij P ij .Math. * .Math. N mb P mb .Math. * .Math. N k ij P kij .Math. * LRF + MinCycles RF ( X ) * Overhead ( X ) P.sub.dim: product of sizes of dim mapped in any of {PEcol, PErow, LRF, SIMD} For example, if in dimension is mapped only in PEcol={in}, then P.sub.in=|PECOl|

(39) [ Def ] PEUtil = MinCycles EstmCycles Required memory bandwidth and overhead [Def] RF(A): Reuse factor of data array AArrayType
[Def] RF(X)=I*|SIMD.sub.HV|
[Def] RF(H)=C*|SIMD.sub.XV|*|LRF.sub.XV|
[Def] RF(V)=H*|SIMD.sub.XH|*|LRF.sub.XH| [Def] ReqBW(A): Required memory bandwidth to read/write

(40) data array A ArrayType ReqBW ( A ) = ( A ) = ( A == Out ) ? 2 * ( # Proc * W ) RF ( A ) : ( # Proc * W ) RF ( A ) bytes / cycle )

(41) The above equation doubles the Output data structure size for determining the required bandwidth. This is because a typical convolution computation looks like: Out=Out+Inp*Ker. As can be seen, Out is first loaded, then updated with Inp*Ker, requiring twice larger bandwidth.

(42) Procedure

(43) FIG. 5 shows a flowchart for the basic process of applying the present invention for a simple analysis in which a user makes selections to set up the tool for a single analysis. In step 502 the data arrays are configured by choosing which data array to be kept in LRF, and which to flow horizontally or vertically.

(44) In step 504, the Rules specification provides the mapped dimensions PEcol, PErow, LRF, SIMD for the specified CNN.

(45) In step 506 a dimension and size are chosen from each of PEcol, PErow, LRF, SIMD, in view of any constraints such as whether banked memory, PEcol or PErow cannot include ij, since Inp requires all to all access across the banks.

(46) In step 508, PEUtil, ReqBW(A) are calculated, for use for calculating 1) performance analysis, 2) design space pruning, and 3) proposal of the best MicroArch configuration. Steps 506 and 508 can be repeated by the user or iterated automatically if the tool is set up for a complete evaluation. FIG. 6 and FIG. 7 show example analyses for two CNNs, VGG Conv4-2 in FIG. 6 and VGG FC in FIG. 7. Both analyses show performance PEUtil=0.99 at the exemplary selected dimensions for PEcol, PErow, LRF, and SIMD.

(47) In step 512, constraints provide input data that permit the possible design choices to be pruned out, and determination of optimal design in step 514. FIG. 8 provides exemplary pseudocode for pruning based on minimum expected PEUtil. FIG. 9 provides exemplary pseudocode for determining optimal design by determining the best performance PEUtil.

(48) The present invention is used to explore the convolution mapping space for any desired convolutional processing, including a determination of an optimal configuration. The method can be implemented as an application program in which a user enters parameters and monitors calculations. The method can also be implemented as a software component that automatically extracts parameter data from one or more databases and automatically determines optimal design choices. Another possibility is a software tool that automatically determines the optimal design and automatically configures the system to implement the optimal design.

(49) The software to implement the method of the present invention could be located on the same computer that will execute the convolution processing or could be located remotely on a server accessible via a network. The method could also be implemented using a cloud service, as described below.

(50) It is to be understood that although this disclosure includes a detailed description on cloud computing, implementation of the teachings recited herein are not limited to a cloud computing environment. Rather, embodiments of the present invention are capable of being implemented in conjunction with any other type of computing environment now known or later developed.

(51) Cloud computing is a model of service delivery for enabling convenient, on-demand network access to a shared pool of configurable computing resources (e.g., networks, network bandwidth, servers, processing, memory, storage, applications, virtual machines, and services) that can be rapidly provisioned and released with minimal management effort or interaction with a provider of the service. This cloud model may include at least five characteristics, at least three service models, and at least four deployment models.

(52) Characteristics are as follows:

(53) On-demand self-service: a cloud consumer can unilaterally provision computing capabilities, such as server time and network storage, as needed automatically without requiring human interaction with the service's provider.

(54) Broad network access: capabilities are available over a network and accessed through standard mechanisms that promote use by heterogeneous thin or thick client platforms (e.g., mobile phones, laptops, and PDAs).

(55) Resource pooling: the provider's computing resources are pooled to serve multiple consumers using a multi-tenant model, with different physical and virtual resources dynamically assigned and reassigned according to demand. There is a sense of location independence in that the consumer generally has no control or knowledge over the exact location of the provided resources but may be able to specify location at a higher level of abstraction (e.g., country, state, or datacenter).

(56) Rapid elasticity: capabilities can be rapidly and elastically provisioned, in some cases automatically, to quickly scale out and rapidly released to quickly scale in. To the consumer, the capabilities available for provisioning often appear to be unlimited and can be purchased in any quantity at any time.

(57) Measured service: cloud systems automatically control and optimize resource use by leveraging a metering capability at some level of abstraction appropriate to the type of service (e.g., storage, processing, bandwidth, and active user accounts). Resource usage can be monitored, controlled, and reported, providing transparency for both the provider and consumer of the utilized service.

(58) Service Models are as follows:

(59) Software as a Service (SaaS): the capability provided to the consumer is to use the provider's applications running on a cloud infrastructure. The applications are accessible from various client devices through a thin client interface such as a web browser (e.g., web-based e-mail). The consumer does not manage or control the underlying cloud infrastructure including network, servers, operating systems, storage, or even individual application capabilities, with the possible exception of limited user-specific application configuration settings.

(60) Platform as a Service (PaaS): the capability provided to the consumer is to deploy onto the cloud infrastructure consumer-created or acquired applications created using programming languages and tools supported by the provider. The consumer does not manage or control the underlying cloud infrastructure including networks, servers, operating systems, or storage, but has control over the deployed applications and possibly application hosting environment configurations.

(61) Infrastructure as a Service (IaaS): the capability provided to the consumer is to provision processing, storage, networks, and other fundamental computing resources where the consumer is able to deploy and run arbitrary software, which can include operating systems and applications. The consumer does not manage or control the underlying cloud infrastructure but has control over operating systems, storage, deployed applications, and possibly limited control of select networking components (e.g., host firewalls).

(62) Deployment Models are as follows:

(63) Private cloud: the cloud infrastructure is operated solely for an organization. It may be managed by the organization or a third party and may exist on-premises or off-premises.

(64) Community cloud: the cloud infrastructure is shared by several organizations and supports a specific community that has shared concerns (e.g., mission, security requirements, policy, and compliance considerations). It may be managed by the organizations or a third party and may exist on-premises or off-premises.

(65) Public cloud: the cloud infrastructure is made available to the general public or a large industry group and is owned by an organization selling cloud services.

(66) Hybrid cloud: the cloud infrastructure is a composition of two or more clouds (private, community, or public) that remain unique entities but are bound together by standardized or proprietary technology that enables data and application portability (e.g., cloud bursting for load-balancing between clouds).

(67) A cloud computing environment is service oriented with a focus on statelessness, low coupling, modularity, and semantic interoperability. At the heart of cloud computing is an infrastructure that includes a network of interconnected nodes.

(68) Referring now to FIG. 10, illustrative cloud computing environment 50 is depicted. As shown, cloud computing environment 50 includes one or more cloud computing nodes 10 with which local computing devices used by cloud consumers, such as, for example, personal digital assistant (PDA) or cellular telephone 54A, desktop computer 54B, laptop computer 54C, and/or automobile computer system 54N may communicate. Nodes 10 may communicate with one another. They may be grouped (not shown) physically or virtually, in one or more networks, such as Private, Community, Public, or Hybrid clouds as described hereinabove, or a combination thereof. This allows cloud computing environment 50 to offer infrastructure, platforms and/or software as services for which a cloud consumer does not need to maintain resources on a local computing device. It is understood that the types of computing devices 54A-N shown in FIG. 10 are intended to be illustrative only and that computing nodes 10 and cloud computing environment 50 can communicate with any type of computerized device over any type of network and/or network addressable connection (e.g., using a web browser).

(69) Referring now to FIG. 11, a set of functional abstraction layers provided by cloud computing environment 50 (FIG. 10) is shown. It should be understood in advance that the components, layers, and functions shown in FIG. 11 are intended to be illustrative only and embodiments of the invention are not limited thereto. As depicted, the following layers and corresponding functions are provided:

(70) Hardware and software layer 60 includes hardware and software components. Examples of hardware components include: mainframes 61; RISC (Reduced Instruction Set Computer) architecture based servers 62; servers 63; blade servers 64; storage devices 65; and networks and networking components 66. In some embodiments, software components include network application server software 67 and database software 68.

(71) Virtualization layer 70 provides an abstraction layer from which the following examples of virtual entities may be provided: virtual servers 71; virtual storage 72; virtual networks 73, including virtual private networks; virtual applications and operating systems 74; and virtual clients 75.

(72) In one example, management layer 80 may provide the functions described below. Resource provisioning 81 provides dynamic procurement of computing resources and other resources that are utilized to perform tasks within the cloud computing environment. Metering and Pricing 82 provide cost tracking as resources are utilized within the cloud computing environment, and billing or invoicing for consumption of these resources. In one example, these resources may include application software licenses. Security provides identity verification for cloud consumers and tasks, as well as protection for data and other resources. User portal 83 provides access to the cloud computing environment for consumers and system administrators. Service level management 84 provides cloud computing resource allocation and management such that required service levels are met. Service Level Agreement (SLA) planning and fulfillment 85 provide pre-arrangement for, and procurement of, cloud computing resources for which a future requirement is anticipated in accordance with an SLA.

(73) Workloads layer 90 provides examples of functionality for which the cloud computing environment may be utilized. Examples of workloads and functions which may be provided from this layer include: mapping and navigation 91; software development and lifecycle management 92; virtual classroom education delivery 93; data analytics processing 94; transaction processing 95; and the DNN mapping tool 96 described in the present invention.

(74) The descriptions of the various embodiments of the present invention have been presented for purposes of illustration but are not intended to be exhaustive or limited to the embodiments disclosed. Many modifications and variations will be apparent to those of ordinary skill in the art without departing from the scope and spirit of the described embodiments. The terminology used herein was chosen to best explain the principles of the embodiments, the practical application or technical improvement over technologies found in the marketplace, or to enable others of ordinary skill in the art to understand the embodiments disclosed herein.

(75) Further, Applicants' intent is to encompass the equivalents of all claim elements, and no amendment to any claim of the present application should be construed as a disclaimer of any interest in or right to an equivalent of any element or feature of the amended claim.