Embodiments of the present invention relate to power-driven synaptic network synthesis, and more specifically, to providing fault-tolerant power minimization in a multi-core neurosynaptic network.
According to one embodiment of the present invention, a method of and computer program product for power-driven neurosynaptic network synthesis are provided. Power consumption of a neurosynaptic network is modeled as wire length. The neurosynaptic network comprises a plurality of neurosynaptic cores connected by a plurality of routers. At least one faulty core of the plurality of neurosynaptic cores is located. A placement blockage is modeled at the location of the at least one faulty core. A placement of the neurosynaptic cores is determined by minimizing the wire length.
According to another embodiment of the present invention, a method of and computer program product for power-driven neurosynaptic network synthesis are provided. Power consumption of a neurosynaptic network is modeled as wire length. The neurosynaptic network comprises a plurality of neurosynaptic cores connected by a plurality of routers. At least one faulty router of the plurality of routers is located. A placement blockage is modeled. The placement blockage includes at least a core of the plurality of cores associated with the faulty router. A placement of the neurosynaptic cores is determined by minimizing the wire length.
Power consumption and heat dissipation are major barriers to exascale computing. Arrays of extremely low power neurosynaptic processing units, called neurosynaptic cores, provide an architecture to solve exascale big data problems. These cores use spikes to encode information. While these neurosynaptic networks may be low power, significantly lower power can be achieved by rearranging the network to minimize the power cost of communication. In normal spike traffic, rearrangement according to embodiments of the present disclose does not alter program semantics in any way. The same number of spikes will be created at exactly the same times. Only the internal core arrangement will be different.
According to various embodiments of the present disclosure, a neurosynaptic program represents a neurosynaptic network. A neurosynaptic program includes information relating to the neurosynaptic network. In some embodiments, the information includes neuronal properties and dynamics that determine an electronic neuron's response to input spikes. For example, neuronal properties and dynamics can include a threshold parameter, a leak parameter, a delay parameter, or a reset parameter. In some embodiments, the neurosynaptic program information includes synaptic connections of the neuron (e.g., synaptic connections made via a synaptic crossbar. In some embodiments, the neurosynaptic program information includes axon properties (e.g., axon types). In some embodiments, the neurosynaptic program information includes one or more destinations (e.g., target axons) that the neuron's output spike should be delivered to.
According to various embodiments, a neurosynaptic network represents an instantiation of a neurosynaptic program. A neurosynaptic network may be instantiated in hardware, in simulation or in both. For example, a neurosynaptic program may give rise to one or more instances of a neurosynaptic network, wherein the instances may reside on a single core, multiple cores, or multiple chips.
According to various embodiments, a neuromorphic core circuit represents an example neurosynaptic network described by a neurosynaptic program.
According to various embodiments, a corelet or a Corelet Programming Language represent software that provide abstraction of neurosynaptic programs. A composition of neurosynaptic programs may be created by composing corelets.
A TrueNorth program is a complete specification of a network of neurosynaptic cores, along with its external inputs and outputs. In various embodiments, a divide-and-conquer approach is adopted whereby a large network of neurosynaptic cores is constructed by interconnecting a set of smaller networks of neurosynaptic cores, where each of the smaller networks, in turn, could be constructed by interconnecting a set of even smaller networks, and so on, down to a network consisting of a single neurosynaptic core, which is the fundamental non-divisible building block. This programming paradigm is referred to as Corelet Programming.
In a network of neurosynaptic cores, neurons on each core can connect to any axon of any other neurosynaptic core (including itself). When a neuron spikes, it sends a spike packet that gets delivered to a target axon on a destination core. Given an application and configured neurosynaptic a virtual graph G can be constructed, where every node represents a single core and every edge represents a connection from a set of source neurons on a source core, to a set of destination axons on a target core. The weight of the edge between any two cores represents the total number of spikes communicated between the two cores. Any self-edges (between a neuron and axon on the same core) are ignored. In a physical hardware embodiment of a neurosynaptic system, each core needs to have a unique physical address in a 2D grid on a chip. There can be any number of chips in the system.
A spike communication from a source neuron on a source core, to a target axon on a destination core, would effectively need to traverse certain number of hops via routers in a 2D grid in either the horizontal or vertical or a combination of both to be delivered to the target axon on a destination core. Each hop a spike packet traverses, consumes power and energy. Power Driven Synaptic Network Synthesis according to various embodiments of the disclosure minimize the overall power and energy consumption by producing a physical placement solution of the input application graph G. The optimization problem finds the optimal physical location (dubbed as physical mapping) of every neurosynaptic core on a chip. In some embodiments, it is assumed that the delay constraint for communication through a router between neurosynaptic cores is not an issue. In some embodiments, given up to 16 milliseconds, spikes can be sent through the router without congestion or delay.
The power driven synaptic synthesis problem can be formulated as a VLSI placement problem. According to embodiments of the present disclosure, a VLSI placement is computed to minimizing the total edge lengths of an input neurosynaptic netlist. In this approach, the shorter edge length of two connected cores implies a smaller number of router hops that each spike needs to travel resulting in less power consumption. Thus, by minimizing the total edge lengths of a given neurosynaptic netlist, the total power can be minimized.
In a multi-chip neurosynaptic application, the communication between cores in different chips consumes much higher power compared against one between cores in a same core. In some embodiments of such applications, off-chip communication costs per hop are 100× as compared to on-chip one-hop communication. Placing cores with frequent communications within a chip is a preferred placement solution than one with two cores mapped in different chips. A multilevel partitioning placement algorithm (an MLP) according to various embodiments of the present disclosure solves this problem. In an MLP, the area is partitioned into sub-regions (2 sub-regions for bi-partitioning, k sub-regions for k-way partitioning) and the crossing nets, called “cuts”, are minimized among the sub-regions. This process is repeated for each sub-region in a recursive manner until the area of the sub-region becomes small enough that the placement within the area becomes trivial. By minimizing the cuts among sub-regions, it finds the clusters of heavily connected cores and places them within a same chip leading to a better edge-length solution. The process can be iterated several times until no further improvement is made.
In some embodiments, IBM CPLACE may be used as part of a solution to this problem. CPLACE supports different flavors of global placement algorithms including analytical formulations, partitioning-driven placement and some combinations of those. In some embodiments, the multi-level recursive-partitioning algorithm is used. However, in other embodiments, another placement algorithm that minimizes the total wire length can be used to minimize overall power consumption of a given input netlist.
This optimization approach may be applied to various application networks. For example, a) Audio-Video (CUAVE) Fusion Demo (SCS), b) Optical Flow (OF), and c) Edge detection followed by classification (EC). Compared to default sequential placements of cores, CPLACE solutions show active power savings in the range between 30-83%.
As applications are developed using the Corelet Programming language, all neurosynaptic systems are composed hierarchically. Most cores, at the same level of the tree, communicate with each other as systems are built. The Corelet tree structure is extracted from the Corelet Programming Environment and simulated Compass and CPLACE utilize the extracted hierarchical information to improve the quality of a solution. For example, the Corelets that have the same level in the tree may be naturally placed together compared to Corelets that are “siblings” of their parents.
An application in TrueNorth is a network of neurosynaptic cores with its external inputs and outputs defined. Power Driven Synaptic Network Synthesis assigns a physical placement for each core in a neurosynaptic system. However, a chip can have two kinds of fault scenarios:
a. There can be faulty grid locations on a chip(s) where cores cannot be placed.
b. There can be faulty routers, via which spikes can't traverse.
Through fault-tolerant placement according to embodiments of the present disclosure, a placement is realized for every neurosynaptic core such that the overall power and energy consumption is minimized and all fault scenarios are avoided. The fault tolerant physical mapping of cores can be addressed within a placement process as well. As long as the faulty grid locations are provided for the placement optimization, the placer can easily avoid the allocation of cores to faulty grid locations via placement blockage technique. By marking faulty grid locations as blocked area where any core can be placed, no active cores will be physically placed at those locations. The faulty router problem can be addressed in a similar manner. When a routing graph is generated, any path passing through a fault router is blocked out and no routing solution via faulty router will be generated.
Fault-tolerant placement can be extended to minimize the number of chips as well. For example, the following steps will find a placement solution with minimum power consumption with minimum number of chips.
With reference now to
In some embodiments a plurality of neurosynaptic cores are tiled on a chip. In an exemplary embodiments, a 64 by 64 grid of cores is tiled, yielding 4,096 cores, for a total of 1,048,576 neurons and 268,435,456 synapses. In such embodiments, neurons, synapses, and short-distance connectivity are physical. Long-distance connectivity is logical. An exemplary embodiment is depicted in
Given an application and the configured neurosynaptic system, there is a virtual graph G=(V, E). In this formulation, V={vi} where vi represents a single core. In an exemplary embodiment, each chip has 4096 cores comprising a 64 by 64 2D array. Each node can have an out-degree of 256 and in-degree of 256. In this formulation, E={e} where e denotes an edge. Edge e=(vi, vj) represents a connection from a set of source neurons on core vi, to a set of destination axons on core vj. N (e) represents the number of source neurons in e. The weight of the edge w (e) is the sum of the firing frequencies of the source neurons. It ranges from 0 to 1000N (e). In one embodiment it is between 0 and 20N (e). In some embodiments, all self-loops are ignored.
Given an application virtual graph G=(V, E) and the edge weighting function, W: E R, a physical mapping F: V→L is found such that the power P is minimized over all cores. In the physical mapping function F: V L, L is a pair representation of the physical mapping. For each core vi, li=(ki, xi, yi), where ki is the chip index, xi is the relative horizontal coordinate, and yi is the relative vertical coordinate. The reference point is the top left corner. Assuming a board with a 2D arrangement of chips, the chip index ki=(ri, ci), where ri is the chip row index, and ci is the chip column index on a board.
According to the notation used herein, K denotes the number of chips. Eh and Ev are the power consumed for one hop of spike packet sent in the horizontal and vertical distances, respectively. Ep is the power consumed when a spike packet travels across chip boundaries. In some embodiments, Ep=(63Eh+63Ev)*M, since this power is roughly M times more than the power consumed by the intra-chip spike communication. In embodiments with 64 cores per chip, 63 is the maximum number of horizontal and vertical hops within a chip. The horizontal distance of edge e after mapping is given by h(e). For an edge inside the chip, h(e)=|xi−xj|. For an edge across chips, the distance is h(e)=|xi−R(ki)|+|xj−L(kj)|, where (i<j), R and L are the horizontal boundaries of the chips, and ki and kj are the chip indices. The same definition applies to compute V(e).
The inter-chip hop length on a board is Hp=|r(ki)−r(kj)|+|c(ki)−c(kj)|. Total power is given by Equation 1.
According to embodiments of the present disclosure, methods and systems for power driven synthesis are provided with respect to logic to physical mapping. In some embodiments, a method is provided to map the power minimization of the spike communication cost problem to the wirelength minimization problem in VLSI Placement. Various exemplary embodiments of the method include one or more of: modeling the power as the wirelength; modeling the spike frequency as the edge weight; modeling the core as a node in the placement graph; modeling the neuron→axon connection as the edge in the placement graph; aggregating all edges between cores as one edge to reduce the graph size; ignoring connections of neuron connecting to the same ores; and using partitioning or another placement algorithm that minimize the weighted wirelength to minimize the power for TrueNorth.
According to embodiments of the present disclosure, the logic to physical mapping problem is transformed into the VLSI placement problem. Multi-level partitioning approaches are then used. As defined above, Ep, Ev, EH are parameters and can be fixed with actual hardware measurements. Delay constraints due to the router spike packet delivery across chips are ignored. It can be addressed by adding repeaters after a certain number of chips.
CPLACE is an IBM placer that may be used for many ASIC/Server designs. CPLACE supports many different placement (algorithmic) mode. According to embodiments of the present disclosure, a partitioning-based placement mode is used with CPLACE.
Referring now to
Exemplary test results are depicted below in Table 1. In this table, the CPLACE solution for various use cases is compared to the default solution with actual spiking inputs. In the default solution, all cells are placed in a serial manner based on their index number. Schematic views of physical layouts are provided in
(30%)
According to various other embodiments of the present disclosure, power driven synthesis is applied to multi-chip and multi-boards. According to various embodiments, methods and systems are provided for mapping the multi-chips (board level) power minimization as a special placement wirelength minimization problem. In some embodiments, the methods include modeling the I/O constraints at board level as the fixed PI/PO pseudo nets in the placement graph, and translation of the input/output spike frequency as the PI/PO net weight in the placement. In some embodiments, the methods include adding pseudo large blockage to mimic the behavior of across chip transportation power penalty, where the blockage size is proportional to the energy cost between chips. In such embodiments, the whole board is treated as the entire placement image and the placement algorithm is run against it. In some embodiments, the methods include first finding how many chips need to be used for a given number of cores, and enumerating the possible chip configurations (horizontal shape, vertical shape, T shape, L shape, Z shape, W shape, etc.) on a given board layout, and for each configuration, running the placement algorithm to find the best one. In some embodiments, the methods include using Corelet information to pre-partitioning the cores to a set of chips, or run a coarse level (at chip level) partitioning algorithm to find the layout of chips, and then map the cores to each chip. Some embodiments employ multi-level hierarchical clustering optimization.
In certain embodiments of the present disclosure, the placement is directly run for the whole instance. This naturally minimizes the edges across chip since the blockage size is large. In such embodiments, pseudo placement blockages are provided between chips. The size of these blockages is proportional to EpV, EpV, which is the power across the chip boundary. In order to handle board I/O constraints, new pseudo nets are added between I/O ports to cores. This is similar to the constraints from the macro boundary pin and PI/PO in the VLSI placement. In various embodiments, I/O ports are only connected to logic cores. In such embodiments, placement is free to find the best physical mapping of logic core to the physical cores that connect to I/O ports. In alternative embodiments, the mapping for certain number of cores receiving I/O are defined and given as an initial condition to the placement. This is equivalent to fixed cells in the placement.
In some embodiments, chip configurations are enumerated to determine the optimal arrangement. Assuming the application needs K cores, then ┌K/4096┐ chips are required. Given a certain board configuration, all possible chip configurations are enumerated, and the placement for each instance is run. This approach guarantees a minimum number of chips, without isolated cores placed outside. Isolated cores may arise if the placement is run for the entire instance as described above. If the board configuration has a small number of chips (e.g., 16, 25, 36), the possible combinations are still constant.
According to various embodiments of the present disclosure, methods and systems for fault-tolerant power minimization given a set of faulty (un-functional) cores and routers is provided.
In some embodiments, the faulty cores and placement blockage are modeled and the instance is passed to a placement algorithm, where the placement minimizes the wirelength without using the bad cores. In cases where there are single or multiple core failures in a chip, re-routing is required to avoid the faulty cores. Placement blockage specification is used to handle core placement. The faulty cores locations are marked as placement blockages. Accordingly, CPLACE won't allocate any cores on those locations.
In some embodiments, only the router portion (only affecting one core) of the chip is modeled as the routing blockage if the router can choose which L shape to send the spike packets. Such embodiments release more cores to be used for the physical mapping than the previously described methods, assuming that the router has more flexibility.
Referring to
In some embodiments, a faulty router is modeled by mapping the entire rows and columns occupied by the bad router as placement blockage. In such embodiments, the placement is performed under the new graph instance, such that no cores on those rows/columns are used, which prevents the routing edge passing through the faulty router. In some embodiments, either the row or the column of the faulty router is modeled as routing blockage only. In such embodiments, the use of any cores on those rows/columns is not blocked subject to the fact that the placement will not generate an instance that has edge crossing the faulty router. Such embodiments release more cores to use for the physical mapping than the previously described method.
Referring to
In some embodiments, the placement methodologies described herein are used to provide a fault tolerant placement given a minimum number of chips. In such embodiments, a number of logic cores is provided along with a specification of faulty locations. A minimum number of chips is calculated given the chip capacity and the number of cores. A placement is computed given the faulty locations as described above. If the placement is unsuccessful, then the number of chips is incremented and the placement is repeated.
According to various embodiments of the present disclosure, methods and systems to map the power minimization of spike communication cost problem to the wire-length minimization problem in VLSI Placement are provided. Thereby, a given latency constraint is met.
In some embodiments, a method to minimize the maximum latency as the maximum wirelength between every two gates in the placement graph is provided. Given the length constraints, for any paths that violates the length constraints, the net weight is increased artificially. In some embodiments, the increase in net weight is equivalent to an increase in the spike frequency. The placement is incrementally run to minimize the new weighted wirelength. The result is that gates are replaced to meet the latency constraints. In some embodiments, the latency is modeled as a cost function as well for the extension.
An exemplary linear programming-based formulation with a maximum length constraint includes minimizing the overall length without creating an overlap among and core pair. More particularly, Σnet
Referring now to
The active power required to route a spike between two cores is a function of the Manhattan distance between the grid locations of the two cores. The power becomes much higher if a spike traverses the chip boundaries and flows between different chips. According to the systems and methods of the present disclosure, placement optimization minimizes the overall active power of the system. In various embodiments, this minimization includes the spike bandwidth between multiple chips.
Exemplary test results are depicted below in Table 2. In this table, the CPLACE solution for various use cases is compared to the default solution with actual spiking inputs. This table summarizes the optimization in power for a 1, 2, and 4 chip NeoVision Tower System when evaluated using Compass (C3). In one exemplary embodiment, these solutions execute on a 4×1 board. In another exemplary embodiment, these solutions execute on a 2-4×1 slice board. In yet another exemplary embodiment, the cores are laid out on a 4×4 board (a 16 chips NeoVision Tower System).
Further exemplary test results are depicted below in Table 3. In this table, the CPLACE solutions for various application networks are summarized using Compass (C3).
Referring now to
Further exemplary test results are depicted below in Table 4. In this table, the CPLACE solutions for various application networks are summarized using Compass (C3).
Referring now to
In computing node 10 there is a computer system/server 12, which is operational with numerous other general purpose or special purpose computing system environments or configurations. Examples of well-known computing systems, environments, and/or configurations that may be suitable for use with computer system/server 12 include, but are not limited to, personal computer systems, server computer systems, thin clients, thick clients, handheld or laptop devices, multiprocessor systems, microprocessor-based systems, set top boxes, programmable consumer electronics, network PCs, minicomputer systems, mainframe computer systems, and distributed cloud computing environments that include any of the above systems or devices, and the like.
Computer system/server 12 may be described in the general context of computer system-executable instructions, such as program modules, being executed by a computer system. Generally, program modules may include routines, programs, objects, components, logic, data structures, and so on that perform particular tasks or implement particular abstract data types. Computer system/server 12 may be practiced in distributed cloud computing environments where tasks are performed by remote processing devices that are linked through a communications network. In a distributed cloud computing environment, program modules may be located in both local and remote computer system storage media including memory storage devices.
As shown in
Bus 18 represents one or more of any of several types of bus structures, including a memory bus or memory controller, a peripheral bus, an accelerated graphics port, and a processor or local bus using any of a variety of bus architectures. By way of example, and not limitation, such architectures include Industry Standard Architecture (ISA) bus, Micro Channel Architecture (MCA) bus, Enhanced ISA (EISA) bus, Video Electronics Standards Association (VESA) local bus, and Peripheral Component Interconnect (PCI) bus.
Computer system/server 12 typically includes a variety of computer system readable media. Such media may be any available media that is accessible by computer system/server 12, and it includes both volatile and non-volatile media, removable and non-removable media.
System memory 28 can include computer system readable media in the form of volatile memory, such as random access memory (RAM) 30 and/or cache memory 32. Computer system/server 12 may further include other removable/non-removable, volatile/non-volatile computer system storage media. By way of example only, storage system 34 can be provided for reading from and writing to a non-removable, non-volatile magnetic media (not shown and typically called a “hard drive”). Although not shown, a magnetic disk drive for reading from and writing to a removable, non-volatile magnetic disk (e.g., a “floppy disk”), and an optical disk drive for reading from or writing to a removable, non-volatile optical disk such as a CD-ROM, DVD-ROM or other optical media can be provided. In such instances, each can be connected to bus 18 by one or more data media interfaces. As will be further depicted and described below, memory 28 may include at least one program product having a set (e.g., at least one) of program modules that are configured to carry out the functions of embodiments of the invention.
Program/utility 40, having a set (at least one) of program modules 42, may be stored in memory 28 by way of example, and not limitation, as well as an operating system, one or more application programs, other program modules, and program data. Each of the operating system, one or more application programs, other program modules, and program data or some combination thereof, may include an implementation of a networking environment. Program modules 42 generally carry out the functions and/or methodologies of embodiments of the invention as described herein.
Computer system/server 12 may also communicate with one or more external devices 14 such as a keyboard, a pointing device, a display 24, etc.; one or more devices that enable a user to interact with computer system/server 12; and/or any devices (e.g., network card, modem, etc.) that enable computer system/server 12 to communicate with one or more other computing devices. Such communication can occur via Input/Output (I/O) interfaces 22. Still yet, computer system/server 12 can communicate with one or more networks such as a local area network (LAN), a general wide area network (WAN), and/or a public network (e.g., the Internet) via network adapter 20. As depicted, network adapter 20 communicates with the other components of computer system/server 12 via bus 18. It should be understood that although not shown, other hardware and/or software components could be used in conjunction with computer system/server 12. Examples, include, but are not limited to: microcode, device drivers, redundant processing units, external disk drive arrays, RAID systems, tape drives, and data archival storage systems, etc.
The present invention may be a system, a method, and/or a computer program product. The computer program product may include a computer readable storage medium (or media) having computer readable program instructions thereon for causing a processor to carry out aspects of the present invention.
The computer readable storage medium can be a tangible device that can retain and store instructions for use by an instruction execution device. The computer readable storage medium may be, for example, but is not limited to, an electronic storage device, a magnetic storage device, an optical storage device, an electromagnetic storage device, a semiconductor storage device, or any suitable combination of the foregoing. A non-exhaustive list of more specific examples of the computer readable storage medium includes the following: a portable computer diskette, a hard disk, a random access memory (RAM), a read-only memory (ROM), an erasable programmable read-only memory (EPROM or Flash memory), a static random access memory (SRAM), a portable compact disc read-only memory (CD-ROM), a digital versatile disk (DVD), a memory stick, a floppy disk, a mechanically encoded device such as punch-cards or raised structures in a groove having instructions recorded thereon, and any suitable combination of the foregoing. A computer readable storage medium, as used herein, is not to be construed as being transitory signals per se, such as radio waves or other freely propagating electromagnetic waves, electromagnetic waves propagating through a waveguide or other transmission media (e.g., light pulses passing through a fiber-optic cable), or electrical signals transmitted through a wire.
Computer readable program instructions described herein can be downloaded to respective computing/processing devices from a computer readable storage medium or to an external computer or external storage device via a network, for example, the Internet, a local area network, a wide area network and/or a wireless network. The network may comprise copper transmission cables, optical transmission fibers, wireless transmission, routers, firewalls, switches, gateway computers and/or edge servers. A network adapter card or network interface in each computing/processing device receives computer readable program instructions from the network and forwards the computer readable program instructions for storage in a computer readable storage medium within the respective computing/processing device.
Computer readable program instructions for carrying out operations of the present invention may be assembler instructions, instruction-set-architecture (ISA) instructions, machine instructions, machine dependent instructions, microcode, firmware instructions, state-setting data, or either source code or object code written in any combination of one or more programming languages, including an object oriented programming language such as Smalltalk, C++ or the like, and conventional procedural programming languages, such as the “C” programming language or similar programming languages. The computer readable program instructions may execute entirely on the user's computer, partly on the user's computer, as a stand-alone software package, partly on the user's computer and partly on a remote computer or entirely on the remote computer or server. In the latter scenario, the remote computer may be connected to the user's computer through any type of network, including a local area network (LAN) or a wide area network (WAN), or the connection may be made to an external computer (for example, through the Internet using an Internet Service Provider). In some embodiments, electronic circuitry including, for example, programmable logic circuitry, field-programmable gate arrays (FPGA), or programmable logic arrays (PLA) may execute the computer readable program instructions by utilizing state information of the computer readable program instructions to personalize the electronic circuitry, in order to perform aspects of the present invention.
Aspects of the present invention are described herein with reference to flowchart illustrations and/or block diagrams of methods, apparatus (systems), and computer program products according to embodiments of the invention. It will be understood that each block of the flowchart illustrations and/or block diagrams, and combinations of blocks in the flowchart illustrations and/or block diagrams, can be implemented by computer readable program instructions.
These computer readable program instructions may be provided to a processor of a general purpose computer, special purpose computer, or other programmable data processing apparatus to produce a machine, such that the instructions, which execute via the processor of the computer or other programmable data processing apparatus, create means for implementing the functions/acts specified in the flowchart and/or block diagram block or blocks. These computer readable program instructions may also be stored in a computer readable storage medium that can direct a computer, a programmable data processing apparatus, and/or other devices to function in a particular manner, such that the computer readable storage medium having instructions stored therein comprises an article of manufacture including instructions which implement aspects of the function/act specified in the flowchart and/or block diagram block or blocks.
The computer readable program instructions may also be loaded onto a computer, other programmable data processing apparatus, or other device to cause a series of operational steps to be performed on the computer, other programmable apparatus or other device to produce a computer implemented process, such that the instructions which execute on the computer, other programmable apparatus, or other device implement the functions/acts specified in the flowchart and/or block diagram block or blocks.
The flowchart and block diagrams in the Figures illustrate the architecture, functionality, and operation of possible implementations of systems, methods, and computer program products according to various embodiments of the present invention. In this regard, each block in the flowchart or block diagrams may represent a module, segment, or portion of instructions, which comprises one or more executable instructions for implementing the specified logical function(s). In some alternative implementations, the functions noted in the block may occur out of the order noted in the figures. For example, two blocks shown in succession may, in fact, be executed substantially concurrently, or the blocks may sometimes be executed in the reverse order, depending upon the functionality involved. It will also be noted that each block of the block diagrams and/or flowchart illustration, and combinations of blocks in the block diagrams and/or flowchart illustration, can be implemented by special purpose hardware-based systems that perform the specified functions or acts or carry out combinations of special purpose hardware and computer instructions.
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.
This invention was made with Government support under contract number HR0011-09-C-0002 awarded by the Defense Advanced Research Projects Agency (DARPA). The Government has certain rights to this invention.