Systems and Methods for Virtual GPU-CPU Memory Orchestration
20220179717 · 2022-06-09
Inventors
Cpc classification
G06F2212/152
PHYSICS
G06F9/5077
PHYSICS
G06F12/0284
PHYSICS
International classification
Abstract
A server system generates a model of a first memory architecture of a client device, the model of the first memory architecture including a GPU memory portion and a CPU memory portion. The server system receives a representation of a first image asset, and stores a first texture image corresponding to the first image asset in the GPU memory portion of the model at the server system. The first texture image is stored in the GPU memory portion of the client device. The server system determines, using the model, that the GPU memory portion at the client device needs to be reallocated. The server system identifies, using the model, one or more texture images that are stored in the GPU memory portion at the client device to evict and transmits an instruction, to the client device, to evict the one or more texture images from the GPU memory portion.
Claims
1. A method comprising: at a server system: generating a model of a first memory architecture of a client device, the model of the first memory architecture including a GPU memory portion and a CPU memory portion corresponding to a GPU memory portion and a CPU memory portion, respectively, at the client device; receiving a representation of a first image asset; in response to receiving the representation of the first image asset, storing a first texture image corresponding to the first image asset in the GPU memory portion of the model at the server system, wherein the first texture image is stored in the GPU memory portion of the client device; determining, using the model, that the GPU memory portion at the client device needs to be reallocated; in response to determining that the GPU memory portion of the client device needs to be reallocated, identifying, using the model, one or more texture images that are stored in the GPU memory portion at the client device to evict; and transmitting an instruction, to the client device, to evict the one or more texture images from the GPU memory portion.
2. The method of claim 1, wherein the GPU memory portion of the client device is fixed and the CPU memory portion of the client device is fixed.
3. The method of claim 1, wherein the representation of the first image asset comprises the first image asset and is received from an application backend.
4. The method of claim 1, wherein the representation of the first image asset comprises a digest of an image asset received from the client device.
5. The method of claim 1, wherein the representation of the first image asset comprises the first image asset and is received from the client device.
6. The method of claim 1, further comprising: receiving a representation of a second image asset; and updating the model using the representation of the second image asset, including storing a second texture image corresponding to the second image asset in the GPU memory portion of the model.
7. The method of claim 1, further comprising, after transmitting the instruction to the client device to evict a respective texture image of the one or more texture images from the GPU memory portion of the client device, transmitting an instruction to the client device to restore the respective texture image.
8. The method of claim 7, further comprising, determining whether the client device can restore the respective texture image; and in accordance with a determination that the client device can restore the respective texture image, forgoing transmitting an instruction to the client device to download the respective texture image from the GPU memory portion of the client device to the CPU memory portion of the client device.
9. The method of claim 7, further comprising: determining whether the client device can restore the respective texture image; and in accordance with a determination that the client device cannot restore the respective texture image, transmitting an instruction to download the respective texture image from the GPU memory portion of the client device and store the respective texture image in the CPU memory portion of the client device.
10. The method of claim 9, wherein the instruction to download the respective texture image from the GPU memory portion of the client device to the CPU memory portion of the client device further includes an instruction for, after downloading the first respective image, removing the respective texture image from the GPU memory portion.
11. The method of claim 10, further comprising, transmitting an instruction to the client device to, after downloading the respective texture image to the CPU memory portion, compress the respective texture image into a compressed version of the respective texture image, wherein the CPU memory portion stores the compressed version of the respective texture image.
12. The method of claim 11, further comprising, transmitting an instruction to the client device to re-upload the respective texture image stored in the CPU memory portion of the client device to the GPU memory portion of the client device, wherein the compressed version of the respective texture image is uploaded to the GPU memory portion of the client device.
13. The method of claim 10, further comprising, transmitting an instruction to the client device to compress the respective texture image into a compressed image asset after the client device downloads the respective texture image to the CPU memory portion, wherein the compressed image asset is stored in the CPU memory portion.
14. The method of claim 13, further comprising, transmitting an instruction to the client device to re-upload the respective texture image stored in the CPU memory portion of the client device to the GPU memory portion of the client device, including transmitting an instruction to the CPU memory portion to decompress the compressed image asset into the respective texture image before re-uploading the respective texture image to the GPU memory portion.
15. The method of claim 1, wherein: the server system executes a virtual application; and determining that the GPU memory portion needs to be reallocated comprises, using the virtual application, predicting when the respective texture image needs to be accessible to the client device.
16. A computer readable storage medium storing one or more programs for execution by a server system, the one or more programs including instructions for: generating a model of a first memory architecture of a client device, the model of the first memory architecture including a GPU memory portion and a CPU memory portion corresponding to a GPU memory portion and a CPU memory portion, respectively, at the client device; receiving a representation of a first image asset; in response to receiving the representation of the first image asset, storing a first texture image corresponding to the first image asset in the GPU memory portion of the model at the server system, wherein the first texture image is stored in the GPU memory portion of the client device; determining, using the model, that the GPU memory portion at the client device needs to be reallocated; in response to determining that the GPU memory portion of the client device needs to be reallocated, identifying, using the model, one or more texture images that are stored in the GPU memory portion at the client device to evict; and transmitting an instruction, to the client device, to evict the one or more texture images from the GPU memory portion.
17. A server system, comprising: one or more processors; and memory storing one or more programs for execution by the one or more processors, the one or more programs including instructions for: generating a model of a first memory architecture of a client device, the model of the first memory architecture including a GPU memory portion and a CPU memory portion corresponding to a GPU memory portion and a CPU memory portion, respectively, at the client device; receiving a representation of a first image asset; in response to receiving the representation of the first image asset, storing a first texture image corresponding to the first image asset in the GPU memory portion of the model at the server system, wherein the first texture image is stored in the GPU memory portion of the client device; determining, using the model, that the GPU memory portion at the client device needs to be reallocated; in response to determining that the GPU memory portion of the client device needs to be reallocated, identifying, using the model, one or more texture images that are stored in the GPU memory portion at the client device to evict; and transmitting an instruction, to the client device, to evict the one or more texture images from the GPU memory portion.
Description
BRIEF DESCRIPTION OF THE DRAWINGS
[0012] For a better understanding of the aforementioned preferred embodiments of the invention, as well as additional embodiments thereof, reference should be made to the following drawings.
[0013]
[0014]
[0015]
[0016]
[0017]
[0018]
[0019]
[0020]
[0021]
[0022]
[0023]
[0024]
[0025]
[0026]
[0027]
[0028]
[0029]
DETAILED DESCRIPTION
[0030] A virtual machine (VM) is a software emulation of a computer system which can be customized to include a predefined amount of random access memory (RAM), storage space, operating system (OS), and graphics hardware support typically in the form of a graphics processing unit (GPU); potentially in addition to other computing resources. Such virtual machines are a close equivalent of a physical computer and provide the functionality thereof.
[0031] Computer systems, either in the form of physical hardware or virtualized as a VM, typically use one of the following three memory architectures for their CPU and GPU components: [0032] 1) A unified memory architecture, where CPU and GPU share one physically contiguous memory space or at least one contiguously addressable memory space; [0033] 2) A unified memory architecture with a fixed division between memory assigned to the CPU and memory assigned to the GPU; [0034] 3) A discrete memory architecture where CPU and GPU have their own physically separated or addressably separated memory spaces.
[0035] As used herein, an image asset is a CPU domain, two-dimensional picture, compressed in a known image compression format such as, but not limited to, PNG, JPEG, WebP.
[0036] As used herein, a texture image is a GPU domain single array of texture pixels of certain dimensionality, either in an uncompressed or compressed texture image format. In some embodiments, a texture image is further enabled to be downloaded to the CPU (e.g., a CPU can interpret texture images, whereas the GPU cannot interpret image assets). In some embodiments, when a texture image is downloaded to the CPU it is optionally compressed into a image asset (e.g., as an asset in the CPU domain). For example, the texture image can be stored in the CPU as a texture image and/or as a image asset (e.g., by compressing the texture image into an image asset, as described by step 603).
[0037] Some applications typically execute on (e.g., and are designed/programmed for) systems that have a unified memory architecture. For example, many modern compact devices such as phones and tablets employ a unified memory architecture, enabling reduced component count and the flexibility to trade GPU memory for CPU memory as fit for the application then running. In contrast, the client devices being served by the approach being taught herein, typically use either a unified fixed division regime or have a complete discrete architecture. The net result is that such devices cannot offer the same flexibility as a native system would and which the applications are coded to assume.
[0038] Because the unified architecture provides such flexibility, there is generally no incentive for applications to optimize their GPU memory usage. For example, currently it is not considered an issue if all the data for a certain graphic, such as a particular texture image on the GPU, is retained, even when it is temporarily not being used, since it is the same physical memory as the CPU's memory and the system dynamically grows the amount of logical memory assigned to the GPU. In contrast for more compact and cost-efficient systems, the novel approach being taught herein enables that function to be virtualized to a client, providing the ability it to manage its GPU memory more efficiently.
[0039] In the novel unified architecture being taught herein, GPU memory texture images can be moved to CPU memory on demand in real time. As one example, if a situation arose where an application needed space for four GPU texture images, the traditional architecture, with its fixed division or discrete architecture, might only have space for three GPU texture images. Therefore, to accommodate for the additional texture image, one or more texture images have to be evicted from the GPU memory and (temporarily) stored in the CPU's memory. In contrast, the unified architecture described herein has already assigned four texture images to GPU memory and further free memory is available to either assign to CPU or GPU.
[0040] A high-level system overview, as illustrated in
[0041] In teaching the server-side orchestration logic for the eviction, restoration and compression processes, it should be appreciated that there is a strict separation between the data plane and control plane. The data plane is the client downloading texture images from the GPU to the CPU, applying compression if necessary, optionally storing the downloaded texture images, decompression of image assets to new texture images and the process of uploading those texture images to the GPU. In some embodiments, none of the steps listed above is done by the client's own initiative. Everything happens under the orchestration of the server, the control plane. Hence, the flow charts describe the server-side logic to control the data plane.
[0042] In some embodiments, GPU texture image allocations 105 can be moved to CPU memory 110 on demand in real time. As one example, if a situation arose where an application needed space for four GPU texture image allocations, yet the traditional architecture, with its fixed division 102 or discrete architecture 103, might only have space for three GPU texture image allocations 109. Therefore, to accommodate for the additional texture image, one or more texture images would have to be evicted 107 from the GPU memory and (temporarily) stored in the CPU's memory 110. In contrast, the unified architecture being taught has already assigned four texture images to GPU memory and further free memory 104 is available to either assign to CPU or GPU.
[0043] A first embodiment of the process of downloading image assets 212 from an application backend 206 is given in
[0044] A second embodiment of the process of downloading image assets 212 from an application backend 206 is given in
[0045] In a third embodiment of the process of downloading image assets from an application backend the server downloads 401 the image assets 303 directly from the application backend 206 and the client subsequently downloads 402 the image assets 211 to its CPU memory 110, as depicted in
[0046] The net result of the three embodiments is that the client 203, has copies of image assets 212 from the application backend 206 and the server 201 either has the same image assets 303 or a digest 209 of them. The server's GPU memory model 205 tracks the client's GPU memory 109 usage and is used to decide, according to the decision logic taught in
[0047]
[0048]
[0049]
[0050] Textures images may also be stored on the GPU in a compressed format. Such texture image compression is another tool available to achieve the same goal of running an application so that it remains unaware of restrictions on available GPU memory on a GPU memory bound client.
[0051] In teaching the server-side orchestration logic for the eviction, restoration and compression processes, it should be appreciated that there is a strict separation between the data plane and control plane. The data plane is the client downloading image assets from the application backend 206 or server 201, texture images from the GPU's memory 109 to the CPU's memory 110, compressing the downloaded texture image to an image asset 605, decompression of images assets to texture images 706, and the process of uploading that data to the GPU 703. None of that is done by the client's own initiative. Everything happens under the orchestration of the server 201. Hence, the flow charts 9-14 describe the server-side logic to control the data plane.
[0052] It should further be appreciated that the server performs the same operations on its models of the client's CPU memory 210 GPU memory so that the model is always in sync with the state of the client. That way, the server can perform its orchestration solely based on its models and never has to query the client for its state.
[0053]
[0054]
[0055]
[0056]
[0057]
[0058]
[0059] The server system generates (1504) a model of a first memory architecture of a client device, the model of the first memory architecture including a GPU memory portion and a CPU memory portion corresponding to a GPU memory portion and a CPU memory portion, respectively, at the client device.
[0060] The server system receives (1506) a representation of a first image asset.
[0061] In some embodiments, the representation of the first image asset comprises (1508) the first image asset and is received from an application backend. For example, as illustrated in
[0062] In some embodiments, the representation of the first image asset comprises (1510) a digest of an image asset received from the client device. For example, as illustrated in
[0063] In some embodiments, the representation of the first image asset comprises (1512) the first image asset and is received from the client device. For example, as illustrated in
[0064] In response to receiving the representation of the first image asset, store (1514) a first texture image corresponding to the first image asset in the GPU memory portion of the model at the server system. The first texture image is stored in the GPU memory portion of the client device. In some embodiments, the model of the first memory architecture comprises emulating memory of the client device, including storing the image assets and/or texture images within the respective GPU memory portion and/or CPU memory portion of the client device.
[0065] In some embodiments, the GPU memory portion of the client device is (1516) fixed and CPU memory portion of the client device is fixed. For example, as illustrated in
[0066] The server system determines (1518), using the model, that the GPU memory portion at the client device needs to be reallocated. For example, the server system determines that the GPU memory portion of the client device needs to accommodate new texture images that will be used by the client. In some embodiments, the server system executes an application (e.g., a media-providing application), and the server system, using the application, determines when respective texture images will be displayed. For example, as used herein, a determination that the GPU memory portion of the client needs to be “reallocated” refers to a determination that one or more texture images stored in the GPU memory portion needs to be swapped out (e.g., removed from the GPU memory portion) in order to make room for another texture image to be stored in the GPU memory portion in its place (e.g., the GPU memory portion has a limited amount of available memory that the server determines how to allocate (e.g., which texture images to store in the GPU memory at a given point in time)).
[0067] In some embodiments, the server system executes (1520) a virtual application. In some embodiments, determining that the GPU memory portion needs to be reallocated comprises, using the virtual application, predicting when (e.g., and how) a respective texture image needs to be accessible (e.g., loaded in the GPU) to the client device. For example, the server system uses the model generated at the server system without querying the client for its state.
[0068] In response to determining that the GPU memory portion of the client device needs to be reallocated, the server system identifies (1522), using the model, one or more texture images that are stored in the GPU memory portion at the client device to evict.
[0069] The server system transmits (1524) an instruction, to the client device, to evict the one or more texture images from the GPU memory portion. In some embodiments, the server system continues identifying texture images to evict from the GPU memory portion until enough GPU memory is freed to accommodate the new texture image allocation.
[0070] In some embodiments, the server system receives (1526) a representation of a second image asset. For example, the server system receiving a plurality of image assets that are generated by application backend 206 (e.g., to be displayed at the client 203). In some embodiments, the server system updates the model using the representation of the second image asset, including storing a second texture image corresponding to the second image asset in the GPU memory portion of the model. In some embodiments, the model is updated (e.g., in real-time) to reflect a current state of the client device's GPU and CPU memory allocation.
[0071] In some embodiments, after transmitting the instruction to the client device to evict a respective texture image of the one or more texture images from the GPU memory portion of the client device, the server system transmits (1528) an instruction to the client device to restore the respective texture image. In some embodiments, the instruction to restore the first texture image is transmitted in accordance with a determination that the first texture image is needed in the near future (e.g., will be used in the next frame, 5 frames, etc.). In this way, texture images are restored when they are needed for use by the GPU, and the GPU memory portion is able to dynamically allocate its memory to store texture images that are needed, and evict texture images that are not needed. If the GPU needs an texture image that is not currently stored in the GPU, then the client device needs to restore the texture image.
[0072] In some embodiments, the server system determines (1530) whether the client device can restore the respective texture image (e.g., that the client device has stored the respective texture image or a compressed version of the respective texture image (e.g., as a respective compressed texture image) to restore the respective texture image). In some embodiments, determining whether the client device can restore the respective texture image comprises determining whether the texture image has been modified on the GPU, as illustrated in
[0073] In some embodiments, the server system determines (1532) whether the client device can restore the respective texture image. In accordance with a determination that the client device cannot restore the respective texture image, the server system transmits an instruction to download the respective texture image from the GPU memory portion of the client device and store it as the respective texture image in the CPU memory portion of the client device.
[0074] In some embodiments, the instruction to download the respective texture image from the GPU memory portion of the client device to the CPU memory portion of the client device further includes (1534) an instruction for, after downloading the respective texture image, removing the respective texture image from the GPU memory.
[0075] In some embodiments, the server system transmits an instruction to the client device for, after downloading the respective texture image to the CPU memory portion, compressing the respective texture image into a compressed version of the respective texture image, wherein the CPU memory portion stores the compressed version of the respective texture image (e.g., and the client device, in response to the instruction, compresses the respective texture image).
[0076] In some embodiments, transmitting an instruction to the client device to re-upload the respective texture image stored in the CPU memory portion of the client device to the GPU memory portion of the client device, wherein the compressed version of the respective texture image is uploaded to the GPU memory portion of the client device.
[0077] In some embodiments, the server system transmits (1536) an instruction to the client device to compress the respective texture image asset into a compressed image asset after the client device downloads the respective texture image to the CPU memory portion, wherein the compressed image asset is stored in the CPU memory portion (e.g., as described with reference to
[0078] In some embodiments, the server system transmits (1538) an instruction to the client device to re-upload the respective texture image stored in the CPU memory portion of the client device to the GPU memory portion of the client device, including transmitting an instruction for the CPU memory portion to decompress the compressed image asset into the respective texture image before re-uploading the respective texture image to the GPU memory portion (e.g., as described with reference to
[0079] In some embodiments, as illustrated in
[0080]
[0081] Memory 1606 includes high-speed random access memory, such as DRAM, SRAM, DDR RAM, or other random access solid-state memory devices; and may include non-volatile memory, such as one or more magnetic disk storage devices, optical disk storage devices, flash memory devices, or other non-volatile solid-state storage devices. Memory 1606, optionally, includes one or more storage devices remotely located from one or more CPUs 1602. Memory 1606, or, alternatively, the non-volatile solid-state memory device(s) within memory 1606, includes a non-transitory computer-readable storage medium. In some implementations, memory 1606, or the non-transitory computer-readable storage medium of memory 1606, stores the following programs, modules and data structures, or a subset or superset thereof: [0082] an operating system 1610 that includes procedures for handling various basic system services and for performing hardware dependent tasks; [0083] a network communication module 1612 that is used for connecting the server computer system 1600 to other computing devices via one or more network interfaces 1604 (wired or wireless) connected to one or more networks such as the Internet, other WANs, LANs, PANs, MANs, VPNs, peer-to-peer networks, content delivery networks, ad-hoc connections, and so on; [0084] one or more media assets and textures modules 1614 for enabling the server computer system 1600 to perform various functions, the media assets modules 1614 including, but not limited to: [0085] application backend modules 1616 for retrieving and/or processing media content (e.g., image assets) received, for example, from application backend 206; [0086] one or more model memory modules 1618 for generating one or more models that emulate a memory architecture of respective client devices; in some implementations, the one or more model memory modules 1618 include: [0087] GPU portion of model memory 1620 for tracking (e.g., emulating) and/or storing texture images stored in a GPU portion of the memory of the client device; [0088] CPU portion of model memory 1622 for tracking (e.g., emulating) and/or storing texture images and image assets that are stored in a CPU portion of the memory of the client device; [0089] Eviction module 1624, for determining which media assets to evict from the GPU portion of the memory (e.g., GPU portion of the model memory and/or GPU portion of the client memory); and [0090] API module(s) 1626 for calling and/or using APIs, including an API of a third-party application (e.g., an application of a media-provider).
[0091] In some implementations, the server computer system 1600 includes web or Hypertext Transfer Protocol (HTTP) servers, File Transfer Protocol (FTP) servers, as well as web pages and applications implemented using Common Gateway Interface (CGI) script, PHP Hyper-text Preprocessor (PHP), Active Server Pages (ASP), Hyper Text Markup Language (HTML), Extensible Markup Language (XML), Java, JavaScript, Asynchronous JavaScript and XML (AJAX), XHP, Javelin, Wireless Universal Resource File (WURFL), and the like.
[0092] Although
[0093]
[0094] The client device includes input/output module 1704, including output device(s) 1705, such as video output and audio output, and input device(s) 1707. In some implementations, the input devices 1707 include a keyboard, a remote controller, or a track pad. For example, output device 1705 is used for outputting video and/or audio content (e.g., to be reproduced by one or more displays and/or loudspeakers coupled with client device 1700) and/or input device 1707 is used for receiving user input (e.g., from a component of client device 1700 (e.g., keyboard, mouse, and/or touchscreen) and/or a control coupled to client device 1700 (e.g., a remote control)). Alternatively, or in addition, the client device includes (e.g., is coupled to) a display device (e.g., to display video output).
[0095] The client device includes application proxy 1703 for communicating with third-party applications that are executing on the server system. For example, instead of storing and executing the application(s) on the client device, application proxy 1703 receives commands (e.g., from a virtual machine in the server system) and, based on the received commands, instructs the client device to update the display accordingly.
[0096] In some implementations, the one or more network interfaces 1710 include wireless and/or wired interfaces for receiving data from and/or transmitting data to other client devices 1700, a server computer system 1600, and/or other devices or systems. In some implementations, data communications are carried out using any of a variety of custom or standard wired protocols (e.g., USB, Firewire, Ethernet, etc.).
[0097] Memory 1712 includes high-speed random-access memory, such as DRAM, SRAM, DDR RAM, or other random-access solid-state memory devices; and may include non-volatile memory, such as one or more magnetic disk storage devices, optical disk storage devices, flash memory devices, or other non-volatile solid-state storage devices. Memory 1712 may optionally include one or more storage devices remotely located from the CPU(s) 1706. Memory 1712, or alternately, the non-volatile memory solid-state storage devices within memory 1712, includes a non-transitory computer-readable storage medium. In some implementations, memory 1712 or the non-transitory computer-readable storage medium of memory 1712 stores the following programs, modules, and data structures, or a subset or superset thereof: [0098] an operating system 1701 that includes procedures for handling various basic system services and for performing hardware dependent tasks; [0099] network communication module(s) 1718 for connecting the client device 1700 to other computing devices (e.g., client devices 203, server computer system 160, and/or other devices) via the one or more network interface(s) 1710 (wired or wireless); [0100] a set-top service coordinator 1720 for communicating with an operator data center for handling content services provided to the client device (e.g., set-top box); [0101] a set-top application coordinator 1722 for managing a plurality of third-party applications executing at the server system, the set-top application coordinator having additional module(s), including but not limited to: [0102] one or more application proxies 1724 for communicating (e.g., graphical states) with third-party applications; [0103] API Module(s) 1726 for managing a variety of APIs, including, for example, OpenGL and/or OpenMAX; [0104] Graphics Processing Unit (GPU) 1728 for storing graphical content, including texture images, to be displayed at the client device; and [0105] An eviction module 1730 for evicting one or more texture images from the GPU in accordance with instructions received from a server (e.g., server 1600).
[0106] Features of the present invention can be implemented in, using, or with the assistance of a computer program product, such as a storage medium (media) or computer readable storage medium (media) having instructions stored thereon/in which can be used to program a processing system to perform any of the features presented herein. The storage medium (e.g., the memory 1606 and the memory 1712) can include, but is not limited to, high-speed random access memory, such as DRAM, SRAM, DDR RAM or other random access solid state memory devices, and may include non-volatile memory, such as one or more magnetic disk storage devices, optical disk storage devices, flash memory devices, or other non-volatile solid state storage devices. In some embodiments, the memory 1606 and the memory 1712 include one or more storage devices remotely located from the CPU(s) 1602 and 1706. The memory 1006 and the memory 1712, or alternatively the non-volatile memory device(s) within these memories, comprises a non-transitory computer readable storage medium.
[0107] It will be understood that, although the terms “first,” “second,” etc. may be used herein to describe various elements, these elements should not be limited by these terms. These terms are only used to distinguish one element from another.
[0108] The terminology used herein is for the purpose of describing particular embodiments only and is not intended to be limiting of the claims. As used in the description of the embodiments and the appended claims, the singular forms “a,” “an” and “the” are intended to include the plural forms as well, unless the context clearly indicates otherwise. It will also be understood that the term “and/or” as used herein refers to and encompasses any and all possible combinations of one or more of the associated listed items. It will be further understood that the terms “comprises” and/or “comprising,” when used in this specification, specify the presence of stated features, steps, operations, elements, and/or components, but do not preclude the presence or addition of one or more other features, steps, operations, elements, components, and/or groups thereof.
[0109] As used herein, the term “if” may be construed to mean “when” or “upon” or “in response to determining” or “in accordance with a determination” or “in response to detecting,” that a stated condition precedent is true, depending on the context. Similarly, the phrase “if it is determined [that a stated condition precedent is true]” or “if [a stated condition precedent is true]” or “when [a stated condition precedent is true]” may be construed to mean “upon determining” or “in response to determining” or “in accordance with a determination” or “upon detecting” or “in response to detecting” that the stated condition precedent is true, depending on the context.
[0110] The foregoing description, for purpose of explanation, has been described with reference to specific embodiments. However, the illustrative discussions above are not intended to be exhaustive or to limit the claims to the precise forms disclosed. Many modifications and variations are possible in view of the above teachings. The embodiments were chosen and described in order to best explain principles of operation and practical applications, to thereby enable others skilled in the art.