WO2005038560A2 - Method for providing physics simulation data - Google Patents

Method for providing physics simulation data Download PDF

Info

Publication number
WO2005038560A2
WO2005038560A2 PCT/US2004/030687 US2004030687W WO2005038560A2 WO 2005038560 A2 WO2005038560 A2 WO 2005038560A2 US 2004030687 W US2004030687 W US 2004030687W WO 2005038560 A2 WO2005038560 A2 WO 2005038560A2
Authority
WO
WIPO (PCT)
Prior art keywords
ppu
data
physics
host
memory
Prior art date
Application number
PCT/US2004/030687
Other languages
French (fr)
Other versions
WO2005038560A3 (en
Inventor
Curtis Davis
Manju Hegde
Otto A. Schmid
Monier Maher
Jean Pierre Bordes
Original Assignee
Ageia Technologies, Inc.
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Ageia Technologies, Inc. filed Critical Ageia Technologies, Inc.
Publication of WO2005038560A2 publication Critical patent/WO2005038560A2/en
Publication of WO2005038560A3 publication Critical patent/WO2005038560A3/en

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • A63F13/10
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/45Controlling the progress of the video game
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/55Controlling game characters or game objects based on the game progress
    • A63F13/57Simulating properties, behaviour or motion of objects in the game world, e.g. computing tyre load in a car race game
    • A63F13/577Simulating properties, behaviour or motion of objects in the game world, e.g. computing tyre load in a car race game using determination of contact between game characters or objects, e.g. to avoid collision between virtual racing cars
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F2300/00Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game
    • A63F2300/60Methods for processing data by generating or executing the game program
    • A63F2300/6009Methods for processing data by generating or executing the game program for importing or creating game content, e.g. authoring tools during game development, adapting content to different platforms, use of a scripting language to create content
    • A63F2300/6018Methods for processing data by generating or executing the game program for importing or creating game content, e.g. authoring tools during game development, adapting content to different platforms, use of a scripting language to create content where the game content is authored by the player, e.g. level editor or by game device at runtime, e.g. level is created from music data on CD
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F2300/00Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game
    • A63F2300/60Methods for processing data by generating or executing the game program
    • A63F2300/64Methods for processing data by generating or executing the game program for computing dynamical parameters of game objects, e.g. motion determination or computation of frictional forces for a virtual car

Definitions

  • the present invention relates generally to a hardware-based physics and animation processing unit finding application in interactive environments, for example, in the field of Personal Computer (PC) or console games.
  • PC Personal Computer
  • Game players have a great appetite for sophisticated entertainment that accurately simulates reality.
  • a high degree of computer animated realism requires lifelike interaction between game objects. For example, people intuitively understand that a ball reacts very differently when bouncing across a concrete surface as compared with a grassy surface.
  • a lifelike digital simulation of the ball bouncing across these disparate surfaces must account for the different physical properties (friction, rigidity, etc.) of the respective surfaces, and their influence on the ball's animated motion.
  • the physics simulation must run in real-time.
  • conventional processors running available software are capable of simulating and visually displaying only relatively simple physics-based interactions, such as a lifelike animation of a ball bouncing across a driveway and onto a lawn in real-time.
  • internal and external are used to generally differentiate between various memories in relation to the other computational components in a system. Such differentiation is clearly relative, since an internal memory can be turned into an external memory by removing the internal memory from a system, board, or chip containing related computational components and exporting it to another system, board, or chip. The converse is true for changing an external memory into an internal memory. Generally speaking, however, an internal memory will typically be co- located on the same chip as related computational component(s), while external memory will typically be implemented using a separate chip or chip set.
  • GPUs are well know in the industry and are specifically designed to run in cooperation with a CPU to create, for example, animations having a three dimensional (3-D) quality.
  • Main game program 20 is resident in external memory 11 and/or peripheral 13 (e.g., a CD and/or floppy disk drive). Game assets, such as artist illustrations, are also routinely stored in external memory 11 and/or peripheral 13. Game program 20 uses various Application Programming Interfaces (APIs) to access blocks of specialty software associated with various program functions.
  • APIs Application Programming Interfaces
  • An API is a well understood programming technique used to establish a lexicon of sorts by which one piece of software may "call” another piece of software.
  • Data instructions often in a prescribed packet form and referred to hereafter a "commands," are generally used to initiate calls between one or more software or hardware components.
  • Execution i.e., "running" of software, in any of its various forms including micro-code, occurs upon receipt of an appropriate command.
  • Typical software resources implementing contemporary computer games include game program 20 and GPU driver 23, each with an associated API.
  • GPU driver 23 configures the hardware registers and memory associated with CPU 10 to effect bi-directional data communication (i.e., data or command transfer) between CPU 10 and GPU 12.
  • physics middleware companies like HA.NOK, MathEngine, ⁇ ovodex and Meqon Research have developed specialty software that may be called by a game program to better incorporate natural looking, physics-based interactions into game play.
  • Physics middleware applications may be called by game program 20 through an associated API.
  • Conventional software based physics engines allow game programmers increased latitude to assign, for example, virtual mass and coefficients of friction to game objects. Similarly, virtual forces, impulses, and torques may be applied to game objects.
  • software-based physics engines provide programmers with a library of procedures to simplify the visual creation of game scenes having physics-based interaction between game objects.
  • Contemporary software-based physics engines have significant limitations as to the number of objects in a game scene, and more particularly, the number of interacting objects.
  • Realistic visual images of simulated physics interaction must account for constraints placed upon many or all of the game objects.
  • a constraint is a restriction on the possible movement or interaction of an object (e.g., a contact, a door hinge, a knee joint, a dog on a leash).
  • Increasing complexity of tenain geometry greatly increases the difficulty of simulating object interactions with the terrain.
  • the complexity of collision detection and resolution also increases with the complexity of an object's surface geometry (i.e., its surface detail). When depicting clothing on a character, for example, the frequent collision between the character and the clothing needs to be modeled.
  • CPU and external memory is too limited and data latency is too high.
  • Data pipeline flushes are too frequent.
  • Data caches are too small and their set-associative nature further limits the amount of them that is utilizable.
  • CPUs have too few registers.
  • CPUs lack specialized instructions (e.g., cross product, dot product, vector normalization).
  • specialized instructions e.g., cross product, dot product, vector normalization.
  • the general purpose architecture and instruction set associated with conventional CPUs are insufficient to run complex, real-time physics simulations.
  • the limitations inherent in a general purpose CPU running conventional, software-based physics engines are readily manifest when one considers a typical resolution cycle for a rigid body simulation.
  • the exemplary resolution cycle 9 illustrated in Figure 2 consists of a sequence of eight functions. Each function must be repeated by the software-based physics engine one per time-step, typically 60 per second, for each active object in an animation.
  • broad phase collision detection (9a) is followed by narrow phase collision detection (9b), contact generation (9c), island generation (9d), force solver (9e), numerical integration (9f), and resolution of fast moving objects (9g) before state updates are communicated to the game program, game engine, and/or CPU.
  • the functions are executed largely, if not entirely, in sequence since many functions are dependent on the results computed by one or more previous functions.
  • the final step in the resolution cycle results in bi-directional communication between the software-based physics engine and one or more application processes controlling it and/or using its data results (hereafter generally referred to as "the controlling/requesting application”).
  • the controlling/requesting application results in bi-directional communication between an controlling/requesting application and the physics engine between function steps in the resolution cycle, for example, between steps 9b, “Narrow Phase Collision Detection,” and 9c, "Contact Generation,”
  • the physics engine software When the physics engine software is running on the same device (i.e., CPU) as the controlling/requesting application, as is the case for a conventional software-based physics engine, this communication process is relatively straightforward.
  • the controlling/requesting application simply calls in sequence each functional component of the resolution cycle. Between function calls, the application can directly access simulation data structures, which are resident in either internal memory or external memory, make additional function calls to the physics engine API, or communicate data externally.
  • the efficient calculation of floating point data in and of itself is not enough.
  • the physics simulation data must be efficiently communicated from the calculation means to the host device (e.g., a PC or game console with its associated applications).
  • the host device e.g., a PC or game console with its associated applications.
  • a well conceived architecture is required that incorporates the specialized hardware resources and data transfer mechanisms required to efficiently calculate physics simulation data and communicate it to the host.
  • the architecture must provide not only increased floating point operations, but also the right mix of floating point operations capability and data throughput. It must also avoid data stalls, and long latency periods during which data is loaded and unloaded from the circuitry executing the floating point operations.
  • the present invention provides a game system comprising a Central Processing Unit (CPU) operatively connected to an external memory, one or more peripherals, and a Physics Processing Unit (PPU).
  • the PPU is preferably a separate chip designed to efficiently provide physics simulation data and communicate this data to the CPU.
  • the PPU may be viewed in this aspect much like a Graphics Processing Unit (GPU).
  • GPUs are typically separate co-processors designed to efficiently render graphics data from a CPU.
  • the present invention fully contemplates the combination of a PPU wi t h a GPU within a game system. This combination of PPU and GPU may take to form of two chips on a single board or a single chip implementing both PPU and GPU functionality.
  • the PPU is flexibly designed to communicate with the CPU (or host device generally) via one or more conventional physical interfaces, such as USB, USB2, Firewire, PCI, PCI-X, PCI-Express, and Ethernet (e.g., 10/100 Ethernet, Gigabit Ethernet).
  • USB Universal Serial Bus
  • Firewire Firewire
  • PCI Peripheral Component Interconnect
  • PCI-X Peripheral Component Interconnect
  • PCI-Express Peripheral Component Interconnect
  • Ethernet e.g. 10/100 Ethernet, Gigabit Ethernet
  • the PPU includes a PPU Control Engine (PCE) controlling the operation of the PPU and communication of physics simulation data with the host.
  • PCE PPU Control Engine
  • the PPU also includes a Data Movement Engine (DME) responsive to commands received from the PCE and executing programs adapted to perform data movement operations.
  • DME Data Movement Engine
  • the PPU also includes a Floating Point Engine (FPE), responsive to commands from the DME and executing floating point calculations.
  • a high-speed data bus is preferably provided to connect a high-speed memory to the DME and FPE.
  • the currently contemplated FPE includes a plurality of floating point execution units selectively grouped together to form a parallel vector floating point unit.
  • the FPE performs floating point operations in response to a Very Long Instruction Word (VLIW).
  • VLIW Very Long Instruction Word
  • the present invention provides a method of incorporating physics simulation data into a game running on a host.
  • the method is characterized by running a main game program on the host and calling a PPU driver from the main game program.
  • PPU driver By means of the PPU driver, operation of the PPU is initiated and physics simulation data is calculated. Once calculated, the physics simulation date is communicated from the PPU to the host.
  • a multi-thread or ultra-threading processing and data movement technique is preferably used to maximize efficiency of t he FPE.
  • the present invention finds present and particular application in the field of PC or console based games. However, it is not limited to such game systems. Any application benefiting from the incorporation of physics simulation data is susceptible to the benefits of the present invention.
  • the present invention provides a hardware-based PPU connected to a host CPU via a physical interface.
  • the stand alone (i.e., separate chip) PPU comprises the PCE, DME, and FPE described in the exemplary embodiment that follows.
  • the PPU may further comprise an internal memory operatively connected to the DME, and a high-speed memory bus operatively connecting an external, highspeed memory with the DME and FPE.
  • the internal memory preferably comprises multiple banks allowing multiple data threading operations under the control of the PCE and DME.
  • Figure 1 is a conceptual illustration of the principal hardware and software components forming a conventional game system including a software-based physics engine;
  • Figure 2 is an exemplary flowchart showing a conventional sequence of functions called by a CPU to update rigid body information in a software-based physics simulation
  • FIG. 3 is a conceptual block diagram showing the principal hardware components forming a game system according to the present invention.
  • Figure 4 further illustrates selected physical interfaces to the PPU of Figure 3;
  • Figure 5 is a conceptual illustration of the principal hardware and software components forming a game system including a PPU according to the present invention;
  • Figure 6 illustrates in some additional detail a presently preferred embodiment for the PPU of Figures 3, 4, andor 5.
  • Figure 7 further illustrates the DCQ/DRQ connection between the PCE and
  • FIG. 8 further illustrates the relationship between the DME and FPE of
  • Figure 9 further illustrates the relationship between the DME, FPE, and IER of Figure 8;
  • Figure 10 illustrates an exemplary embodiment of the FPE where appearing in the above Figures in some additional detail;
  • FIG 11 further illustrates the FPE of Figure 10
  • Figure 12 illustrates in relation to another embodiment of the present invention the implementation and relation between the FPE and DME of the PPU;
  • FIG. 13 illustrates in some additional detail the VPE shown in Figure 12;
  • Figure 14 illustrates in some additional detail the NPU shown in Figure 13;
  • FIG. 15 illustrates in some additional detail the MCU shown in Figure 12;
  • Figure 16 illustrates various functions and data structures of an exemplary PPU designed in accordance with one or more aspects of the present invention.
  • Figure 17 illustrates a multi-level API structure, whereby PPU driver is variously called to initiate operation of a PPU accordance with one or more aspects of the present invention.
  • the present invention recognizes that conventional software-based solutions to physics simulations have limits that affect their practical application. For example, next generation games would benefit considerably by including many more active objects and related forces than could be reasonably simulated using specialty software run on a general purpose CPU.
  • the present invention approaches the problem of generating visually realistic physics interactions between animated objects from an entirely different perspective.
  • the present invention proposes a hardware-based Physics Processing Unit (PPU).
  • a PPU implemented in accordance with the dictates of the present invention may be viewed in one aspect as a specialty co-processor.
  • the PPU provides the enormous, additional, and highly specialized processing capabilities required to implement complex, real-time, physics effects in next generation games.
  • a PPU may be incorporated into the conventional PC environment as conceptually shown in Figure 3.
  • CPU 10 having internal memory cache(s) 15 is connected to external memory 11, one or more peripherals 13, and Graphics Processing Unit (GPU) 12. Additionally, CPU 10 is connected to PPU 16. Exemplary interconnections, to PPU 16 are shown in further detail in Figure 4 .
  • PPU 16 is connected to a dedicated external memory 33.
  • a dedicated external memory 33 is preferred since the conventional, external (DRAM) memory 11 normally associated with CPU 10 is not usually configured to provide the data bandwidth and data throughput presently contemplated by the architecture of a game system inco ⁇ orating a PPU. Such data transfer considerations will be discussed in greater detail below.
  • DDR double data rate
  • PPU 16 need not be universally configured with its own dedicated, external memory 33. It is very possible that PPU 16 might share an external memory with GPU 12 and/or CPU 10. This possibility is particularly relevant, given continued improvements to the data throughput of DDR memory systems and their likely progeny.
  • connections between PPU 16 and a PC may consist of, for example, a USB2 connection 35, a IEEE 1394 (Firewire) connection 36, and/or one or more of several PCI Interfaces 34, including as examples, PCI, PCI-X, and/or PCI-Express.
  • PPU 16 also includes an asynchronous serial interface 31 which allows debugging over an RS-232 link, additional general pu ⁇ ose I/Os 30 provided for low level debugging and status reporting, and/or an IEEE 1149.1 (JTAG) interface 32 provided for the debugging of software running on the PPU 16.
  • JTAG IEEE 1149.1
  • Physical inco ⁇ oration of PPU 16 into a PC may be accomplished using of several approaches.
  • a PPUs may be inco ⁇ orated using a standard PC Interface (PCI) card optionally inserted within the PC.
  • PCI-Express Interface card might be used.
  • a USB2 or Firewire connection to an externally packaged PPU module might be used instead of a internally configured interface card.
  • a PPU and a GPU will be combined on a single interface card. That is, both chips will be physically mounted on the same card (AGP or PCI-Express), but not directly interfaced with one another.
  • a single interface card having a directly interfaced PPU-GPU combination is expected, but such a combination is probably a generation away. So too is a combination within a single chip of PPU and
  • FIG. 5 Exemplary hardware/software relationships for a game system incorporating a PPU, as compared with the conventional relationships shown in Figure 1, are shown in Figure 5.
  • a PC environment adapted for use with a PPU is conceptually illustrated with hardware elements shown in solid line and software elements shown in dotted line.
  • CPU 10 having internal memory cache(s) 15 is conventionally connected to one or more peripherals 13 and an external memory 11.
  • a main game program is typically stored in external memory 11 and/or a peripheral 13.
  • the present invention provides for the operative connection of PPU 16 to CPU 10.
  • GPU 12 will also be typically connected to CPU 10.
  • the present invention provides a PPU driver 24 with an associated API.
  • PPU operation is directed through the PPU driver by at least game program 20
  • game physics are principally (if not solely) implemented in a dedicated hardware device designed specifically to provide physics simulation data. This contrasts sha ⁇ ly with the conventional approach of implementing physics completely in software run on the general pu ⁇ ose CPU.
  • PPU 16 further comprises a PPU Control Engine (PCE) 17, a Data Movement Engine (DME) 18, and Floating Point Engine (FPE) 19.
  • PCE PPU Control Engine
  • DME Data Movement Engine
  • FPE Floating Point Engine
  • PCE 17 comprises a microprocessor (e.g., RISC) core controlling overall operation of the PPU.
  • PCE 17 controls the physics simulation and communicates with the PPU driver running on the host CPU, but performs only operations that are not computationally intensive or bandwidth demanding.
  • PCE 17 issues appropriate commands to D>ME 18 and/or FPE 19. These commands preferably instruct DME 18 to execute programs to perform data movement operations, and include the necessary parameters for these programs.
  • the DME programs can also call FPE programs to perform any required data computations.
  • PPU 16 provides a library of common linear algebra and physics related algorithms implemented using the DME and FPE. However, application specific or custom algorithms may also be defined within PPU 16 for execution by the DME and FPE.
  • Peripheral bus 40 allows connection of the PPU to general I/Os 30 and UART 31 , as examples, using a peripheral bus arbitration circuit 41 and timer circuit 42.
  • Processor bus 44 facilitates connection of the PPU to a host (a PC or stand alone game console) via one or more physical interfaces, such as PCI interface 34, USB2 controller 35, and/or an IEEE 1394 Firewire Interface.
  • the RISC cores forming PPU Control Engine (PCE) 17 also connect to processor bus 44, along with a processor bus arbitration circuit 45 and DMA controller 46.
  • a DCQ/DRQ circuit 56 connects processor bus 44 directly with Data Movement Engine (DME) 18.
  • DME 18 and FPE 19 provide the high-speed computational platform necessary to provide complex, real-time physics simulation data.
  • processor bus 44 issues read/write requests to bridge 47 connecting processor bus 44 with HSB 48.
  • DMA channels are contemplated to allow simultaneous data transfer from one or more of the host interfaces (PCI, USB, Firewire) to/from the PPU external high-speed memory.
  • memory transfers may occur between the PPU external high-speed memory and DME Instruction Memory (DIM) 51, or the FPE Instruction Memory (FIM) 54.
  • DIM DME Instruction Memory
  • FPE FPE Instruction Memory
  • the HSB 48 provides a priority access scheduling between these various memories using HSB arbitration circuit 49.
  • Inter-engine memory (IEM) 52 and inter-engine registers (IER) 53 allow data communication directly between DME 18 and FPE 19.
  • DME 18 may be viewed as a programmable engine designed to efficiently move data between the external high-speed memory and one or more PPU internal memories (e.g., SPM 55 or IEM 52).
  • PPU internal memories e.g., SPM 55 or IEM 52.
  • PPU uses ultra-threading data transfer techniques to facilitate simultaneous memory use by both the DME and FPE.
  • the memory banks formed by IEM 52 and IER 53 also support two parallel threads of execution. At any given time, one thread is able to run on the FPE, and the other on the DME.
  • PCE PPU Control Engine 17 manages all aspects of the operation of the PPU. It communicates with the host over one or more of the physical interfaces. It manages the definition and allocation of all internal and external memories, and controls execution of DME programs through the DME control interface 56.
  • PCE 17 communicates with DME 18 via a pair of memory-resident queues (60 and 61).
  • the queues are implemented in dual-ported memory, one port on the processor bus and the other directly connected to DME 18, to form circular buffers with read/write pointers.
  • PCE 17 writes DME command packets to the DME Command Queue (DCQ) 60 when it wishes to execute a DME program.
  • DCQ DME Command Queue
  • Each DME command packet contains a starting address for the DME program to be run, along with various parameters and control flags.
  • DME 18 When DME 18 is ready to execute another program, it removes the next DME command packet from DCQ 60.
  • DME 18 Following execution of a DME command packet, DME 18 generates a DME response packet and transmits it to the DME Response Queue (DRQ) 61.
  • Each DME response packet contains relevant computational results and/or status information.
  • DME 18 uses a data-driven programming model, i.e., the basic structure and control flow of DME programming is largely fixed. More particularly, DME programming contains a list of parameters controlling data transfer operations, calling FPE programs, and initiating context switches. As presently contemplated, DME programming consists of a combination of two data elements types; those that control memory movement, and those that control ultra-threading.
  • Ultra-threading techniques allows DME 18 and FPE 19 to operate simultaneously.
  • the preferred dual bank structure of IEM 52 and IER 53 allow DME 18 to transfer data to/from one bank while FPE 19 operates on data stored in the other bank.
  • FPE 19 and DME 18 have both completed their respective operations, a context switch occurs, and each engine can subsequently access the other bank of IEM 52 and or IER 53.
  • Ultra-threading thus allows FPE 19 to operate continuously, without waiting for data to be transferred to/from internal or external memory.
  • FPE 19 is further illustrated in Figure 9.
  • IER 53 consists of two register banks (X and Y), each register bank comprising at least two registers (S and A), where all registers default to zero upon DME program initialization, or upon an explicit initialization by PCE 17.
  • DME 18 accesses Bank Y registers and FPR 19 accesses Bank X registers during a given cycle.
  • Address Generation Register (AGR) control 73 can load either IER register (S or A). Further, DME loop variables may be loaded by a DME program flow controller 72. Address Generation Unit (AGU) 70 and associated Address Generation Registers 71 within DME 18 cooperate to define program addressing commands for FPE 19. pair of nested loops with programmable step sizes and iteration increments. This exemplary configuration allows a PPU programmer great flexibility in moving data in and out of IEM 52. For example, data can be simultaneously moved between 16 pairs of IEM ports, or data can be simultaneously moved between PMM 65 and 8 IEM ports and between SPM 55 and another 8 IEM ports.
  • AGU Address Generation Unit
  • DME programs may contain multiple data movement instructions. Each instruction specifies the source(s) and destination(s) of the data transfer, and provides control registers associated with the AGUs with the necessary input values. This designed readily facilitates bi-directional data transfers between PMM 65 and IEM 52, between SPM 55 and IEM 52, and between PPM 65 and SPM 55.
  • Data movement instructions must either specify an actual value for the required AGU registers, or may specify a S-register or A-register for use. This approach allows dynamic control over addressing since initial values for these registers are provided by the PCE, and the SIU of the FPE can modify these registers between context switches.
  • up to three data transfers can be programmed to occur simultaneously.
  • a PMM to SPM transfer and a SPM to PMM transfer can run in parallel with several IEM to IEM transfers.
  • FPE 19 When IER 53 and the Inter-Engine Memory (IEM) 52, it sends an instruction to FPE 19 to begin executing a microcode procedure.
  • This FPE start instruction may contain, for example, an address in FPE Instruction Memory (FIM) 54 indicating the start of an FPE program.
  • FEM FPE Instruction Memory
  • a Scalar Integer Unit (SIU) 80, a Scalar Floating- point Unit (SFU) 81 , and a Vector Floating-point Unit (VFU) 82 are illustrated in Figure 9 as common constituents of FPE 19 having access to IER registers.
  • DME data movement is preferably accomplished in the prefened embodiment by means of a l6 x l33 unidirectional crossbar 90, a 133 x 16 unidirectional cross bar 91, and a 4 x 4 bi-directional crossbar 92.
  • each port of the two unidirectional crossbars (90 and 91) carries 32 bits of data and 8 bits of IEM address data.
  • Each port of the bidirectional crossbar 92 carries 256 bits of data.
  • each unidirectional crossbar is connected to a currently active (i.e., accessible) bank of IEM 52.
  • a currently active bank of IEM 52 On the other side of the crossbars, two groups of eight input and eight output ports are connected to the 4 x 4 bi-directional crossbar 92.
  • the 4 x 4 bi-directional crossbar 92 allows each group of eight input and output ports to be connected to each other, SPM 55, or PMM 65.
  • AGU Thirty-two Address Generation Units (AGU) (70 B and 70E) control the unidirectional crossbars. In any given clock cycle, they select 16 of 133 IEM's to use for input, and 16 of 133 IEM's to use for output. Another 32 AGU's (70A and 70D) generate addresses for the selected IEM ports (16 read addresses and 16 write addresses). Two more AGU's (70C and 70E) generate addresses for SPM 55 and PMM 65, respectively.
  • AGU Address Generation Units
  • AGU Address Generation Unit
  • Ultra-threading techniques allow the PPU programmer to achieve a near 100% utilization of FPE 19.
  • a DME program first begins execution, it has access to only one bank of IER 53 and IEM 52, respectively.
  • FPE 19 will either be idle, or running a procedure for a previous DME program and using the other banks of IER 53 and IEM 52.
  • the DME program will load data from PPU Main Memory (PPM) 65 into a current IEM bank.
  • PPM PPU Main Memory
  • the DME program will issue a FPE start instruction.
  • the DME program While an FPE program is running, the DME program also continues running, but now DME 18 has access only to the other IERIEM banks. Only after the DME program and FPE program both indicate completion does another context switch occur.
  • the DME program can then transfer the physics simulation data generated by the first FPE program from the first IEM bank back to an internal or external memory. This cycle repeats as often as necessary to complete a DME program-.
  • FPE 19 is a hybrid Nector/Nery Long Instruction Word (NLIW) processor.
  • FPE 19 executes microcode procedures once all necessary operations on Inter-Engine Registers (IER) 53 and the Interface Engine Memory (IEM) 52 have been completed by DME 18 and a FPE start instruction is issued.
  • the FPE start instruction contains an address stored in FPE Instruction Memory (FIM) 54 that indicates the beginning of the requested FPE procedure.
  • FPE Instruction Memory FPE Instruction Memory
  • FPE 19 provides ultra-high performance, single precision vector floating point operations as well as scalar floating point and integer operations. It preferably uses a VLIW architecture to perform multiple vector and ' scalar operations during each clock cycle. FPE 19 provides the computational power to run t he numerically intensive algorithms required in physics simulations.
  • FPE 19 comprises a Scalar Integer Unit (SIU) 80 with direct read/write access to the S-registers and A-registers in the ultra-threading activated IER bank, four Scalar Floating Point units (SFU) 81 and four Vectors (SIU) 80 with direct read/write access to the S-registers and A-registers in the ultra-threading activated IER bank, four Scalar Floating Point units (SFU) 81 and four Vector
  • VFU Floating Point unit
  • Each instruction word contains opcodes and operands for one or more of the following modules: Program Flow Unit (PFU) 100, Scalar Integer Unit (SIU) 80, Global Register Unit (GRU) 105, Scalar Floating-point Unit (SFU) 81, and or Vector Floating-point Unit (VFU) 82.
  • Program Flow Unit (PFU) 100 computes the new instruction pointer based on predicate registers and explicit jump requests. Only selected predicate registers from SIU 80 and SFU 81 may be accessed by PFU 100.
  • the Inter-Engine Memory (IEM) 52 provides high-speed dedicated data storage for each of the execution units in FPE 19. When an execution unit of the FPE accesses its dedicated data storage element it automatically gets directed to the active bank for the currently executed program thread.
  • IEM 52 preferably comprises 128 storage elements for VFU 82, 4 storage elements for SFU 81, and 1 storage element for SIU 80.
  • a typical storage element is composed of two, 2-port memories, each with 512 32-bit fields. One read and one write can be executed during every clock cycle to this memory.
  • FPE 19 preferably implements a load/store architecture for each of the execution units. Associated address registers are managed by SIU 80. The contents of the registers are distributed to all execution units and can be used in order to address data in the date storage elements of IEM 52 associated with the corresponding execution unit. Local registers, shared registers (VFU only), global registers can be addressed in order to move data between them or to/ from IEM 52.
  • SIU 80 preferably comprises a 16-bit integer-processing unit.
  • the unit's main pu ⁇ ose is to enable loop processing and address computation for VFU 82 and SFU 81.
  • SIU 80 is able to access the active bank of IER 53 and IEM 52 respectively for the cunently executed programming thread in FPE 19.
  • SIU 80 inco ⁇ orates eight 16-bit Arithmetic Logic Units (ALUs), thirty-two 16-bit registers, and eight predicate registers.
  • IER 53 provides an additional eight address registers and eight shared registers.
  • SIU 80 thus enables eight ALU operations, including one load and one store operation, during each clock cycle.
  • VFU Vector Floating-point Unit
  • VFU Vector Floating-point Units
  • Each FPU contains 16 local registers and 8 shared registers.
  • the shared registers are shared among the 4 different VPU blocks, that means VPU0.1, VPU1.1, VPU2.1 and VPU3.1 have access to the same shared register.
  • the shared registers are mainly used during physics integration processes in which the position of all active objects is updated.
  • the FPUs have access to global registers in GRU 105. These global registers may be used as an operand for arithmetic operations, but the result has to be stored in a local register.
  • Each FPU can handle one load, one store, one addition/subtraction/comparis ⁇ n and one multiplication instruction every clock cycle. In addition, a predicate logic operation is available to operate on predicate registers.
  • Each FPU also contains predicate registers, which can be used to perform conditional operations on the cunent vector.
  • the load, store, add/subtract and multiplication instructions can be performed conditionally on any of these predicate registers.
  • the predicate registers can be either set through the comparison command, through exceptions or individually through SIU 80.
  • predicated register logic is available to set a particular predicate register based on logical operations of two other predicate registers. In the working example illustrated in Figure 11, there are four separate Scalar
  • SFU Floating-Point Units
  • SFU 81 which are used to perform additional scalar arithmetic floating point operations.
  • the operations provided in SFU 81 are a superset of the operations provided by an individual execution unit (FPU) within VFU 82.
  • SFU 81 contains 16 local registers and in addition to the load, store, add/subtraction and multiplication blocks, the SFU includes a hardware division block and a square root block.
  • SFU 81 also contains 8 predicate registers. Selected predicate registers are forwarded to SIU 80 and PFU 100 to allow conditional operations. Additional shared registers 101 and address registers 102 are available to all four SFUs 81.
  • SFU 81 and VFU 82 have access to a set of eight global floating-point registers, GRU 105. These registers can used as a source operand in place of a local register. However, SFU 81 and VFU 82 cannot use the global registers as destination operands. Rather, a separate module must be programmed to move data into the global registers. This module can move data from any local floating-point register of SFU 81 or VFU 82 modules into a global register. It can also transfer data between global registers.
  • FIG. 12 Another presently prefened embodiment is illustrated in relevant part in Figures 12 through 15.
  • the internal configuration of FPE 19 and DME 18 have changed, as compared with the foregoing.
  • MTU 50 and PCI 34 interface blocks have been inco ⁇ orated into DME 18.
  • High Speed Bus (HSB) 48, HSB Arbiter 49, and Bridge 47 have been removed.
  • DME 18 is connected to the Processor Bus 44 instead of to HSB 48.
  • FPE 19 comprises, for example, four Vector Processing Engines (VPE), 19a, 19b, 19c, and 19d, instead of the configuration shown in Figure 11, including a SIU, and a plurality of SFU and VFU units.
  • DME 18 further comprises a Switch Fabric 150, five MCU (151a through 151d and 152), PCI 34 and MIU 50.
  • the five MCUs, PCI 34, and MIU 50 interface with Switch Fabric 150 which provides bi-directional communication between these units.
  • Four of the MCUs (151a, 151b, 151c, and 151d) interface respectively with the four VPEs (19a, 19b, 19c, and 19d) in FPE 19.
  • the fifth MCU, 152 interfaces with Processor Bus 44 to enable communication between
  • each VPE preferably comprises four Vector Processing Units (VPU), 153a, 153b, 153c, and 153d, which respectively interface with a VPE Bus 155.
  • VPE Bus is preferably 256 bits wide, and provides each VPU with bi-directional communication with a corresponding MCU and with the other associated VPU's.
  • each VPU comprises two banks of memory 160a and 160b formed by an IEM and a bank of the FPE Instruction Memory (FIM) 170.
  • Each VPU further comprises a bank of Registers 162, an Execution Unit 163, a Load/Store Unit 162, a Decode Unit 164, and a Fetch Unit 165.
  • Registers 162 include sixteen 32-bit floating-point registers and eight 32-bit integer registers.
  • Execution Unit 163 preferably includes six Floating-point Multiply- Accumulate units (FMAC) and an integer Arithmetic Logic Unit (ALU).
  • FMAC Floating-point Multiply- Accumulate units
  • ALU integer Arithmetic Logic Unit
  • each MCU comprises a bank of Random Access Memory (RAM) 180 and a Direct Memory Access (DMA) controller 181.
  • DMA controller 181 can be configured to transfer data bi-directionally between RAM 180 and devices connected to VPE Bus 155.
  • DMA controller 181 can further be configured to transfer data, bi-directionally, between RAM 180 and Switch Fabric 150.
  • each MCU further comprises a programmable Processing Controller Unit (PCU) 182 and a PCU Instruction Memory 183.
  • Software programs may be stored in PCU Instruction Memory 183 and executed on PCU 182 for the pu ⁇ ose of configuring DMA controller 181 to transfer data to and from RAM 180.
  • Each MCU may be viewed as a programmable engine designed to efficiently move data bi-directionally between RAM 180 and devices connected to VPE Bus 155, or between RAM 180 and Switch Fabric 150.
  • VPE Data Movement Engine
  • PCE PPU Control Engine
  • a Switch Fabric facilitates the bi-directional transfer of data between the attached modules (e.g., MCUs, PCI, MIU).
  • Switch Fabric 150 comprises seven bi-directional 256 bit ports. The Switch Fabric may simultaneously transfer data between any one or more pairs of modules attached to its ports.
  • a PCI or similar interface e.g.: PCI-X, PCI-Express, S-Bus, USB2, IEEE 1394 Firewire
  • PCI-X PCI-X
  • PCI-Express PCI-Express
  • S-Bus S-Bus
  • USB2 USB2
  • IEEE 1394 Firewire is preferably attached to one port of the Switch Fabric, and facilitates connection of the PPU to an attached host computer (a PC or stand alone game console).
  • a Memory Interface Unit is preferably attached to another port of the Switch Fabric, and forms the connection between the PPU and an External Memory (not shown).
  • MIU Memory Control Units
  • DMA Direct Memory Access
  • MCU Memory Control Units
  • DMA Direct Memory Access
  • FIG. 16 illustrates in one embodiment an exemplary physics simulation for a
  • the physics simulation consists of one or more hardware module(s) shown in relation to and one or more software module(s).
  • the present invention seeks to shift execution responsibility for computationally intensive tasks to a hardware module.
  • the software module provides the interface between the hardware and a controlling/requesting application.
  • the software module also provides a variety of non-computationally intensive functions.
  • the particular embodiment described below is a presently prefened example. Numerous design alternatives and modifications will be apparent to those of ordinary skill in the art. For example, the designation of a software/hardware boundaries as per individual functionality is clearly subject to individual adaptation.
  • the architecture of the physics simulation can be conveniently described in terms of its data structures and functional blocks.
  • the rigid and soft body data structures are at the heart of the architecture. They contain all of the physical parameters and state information for every simulated object. Physical parameters describe the geometry (which is used for detecting collisions between objects), as well as the kinematics and dynamics (which are used in the physical simulation) of the bodies. They are initially configured by the application, but can also be accessed and modified while a physics simulation is running. Other data structures that are configured by the application include, as examples, force objects and constraint objects. Likewise, these data structures can also be modified as the physics simulation is running. The contact data structures are automatically re-generated at every simulation time step by the collision detection block, but can be accessed by the application as the simulation is running.
  • the simulation in the example illustrated in Figure 16 includes four major functional areas: a host interface 110, collision detections (e.g., rigid body collision detection 111 and particle collision detection 112), force computation 113, and dynamics simulation (e.g., ODE solvers 114 and 115, timing controller 116, and differentiation blocks 117 and 118).
  • a host interface 110 collision detections (e.g., rigid body collision detection 111 and particle collision detection 112)
  • force computation 113 e.g., force computation 113
  • dynamics simulation e.g., ODE solvers 114 and 115, timing controller 116, and differentiation blocks 117 and 118.
  • Each of these functional areas consists, in turn, of one or more functional blocks.
  • Host interface 110 provides the controlling/requesting application(s) with access to the data structures as well communication with, and configuration of, all hardware units. It is also responsible for providing event notification to the application(s), (e.g.: monitoring an object for collisions).
  • Collision detection is responsible for detecting collisions between objects during a physics simulation.
  • the collision detection blocks update the contact data structures.
  • the contact force computation unit uses this information to calculate the forces necessary to prevent the bodies from inte ⁇ enetrating. It can also be accessed by software through the host interface.
  • Collision detection as presently prefened, is divided into two basic forms rigid body (e.g., hard surfaces, moving solid bodies, etc.) collision detection 111, and particle (i.e., soft bodies such as water, smoke, cloth, etc.) collision detection 112.
  • Force computation generally consists of three functional blocks which, for each time step, calculate various components of force and torque that are being applied to each rigid body or particle set.
  • contact forces are computed as the result of contact (collision or resting contact) between bodies.
  • application defined forces are computed by evaluating the force objects configured by the application.
  • constraint forces are computed in order to guarantee that bodies will not move in ways that would not violate the constraints configured by the application through the use of constraint objects. These various forces and torques are added into the force and torque accumulators for each object.
  • some exemplary force computation functions 113 include: colliding contact forces, constraint resting contact forces, general force and torque, particle constraint forces, contact forces, and inter-particle forces.
  • Dynamics simulation components consists of a collection of ODE solvers (114 and 115), a timing control 116, and a differentiation block (117 and 118).
  • ODE solvers including explicit Euler, midpoint, and Runge-Kutta, are typically required in order to various levels of simulation precision.
  • an implicit integration method e.g., Back Euler
  • Timing control 116 is responsible for determining and communicating the size of the next simulation time step. This can be affected by collisions, as well as ercor estimates generated by one or more of the ODE solvers.
  • Differentiation block 117/118 is responsible for calculating the cunent time derivative (slope) of each body's state vector.
  • the state vector contains the cunent position, rotation, linear momentum, and angular momentum of a rigid body. For particles, it contains only the cunent position and linear momentum.
  • Rigid body data structures 121 contain all the physical parameters and state information for every simulated object.
  • Physical parameters describe the geometry (which is used for detecting collisions between objects), as well as the kinematics and dynamics (which are used in the physical simulation) of the bodies. They are initially configured by the application, but can also be accessed and even modified as the simulation is running.
  • Geometry Objects 121 A describe the shape of a rigid body, are used exclusively for computing collisions with rigid bodies. They are associated with dynamics objects. As presently contemplated, the following types of geometry objects are supported: simple primitive (e.g., sphere, box, plane, cylinder, particle), polygonal mesh (e.g., concave, convex), and geometry group.
  • a polygonal mesh geometry object contains a pointer to a list of vertices and a pointer to a list of faces. Faces can be represented as a triangle strip, or as individual triangles.
  • Hierarchies of geometry objects can be created using' the geometry group primitive to represent complex rigid bodies. All geometry objects include a transform (e.g., translation, rotation, scale) that relates the object's local coordinate system to a parent object's coordinate system, or to a world coordinate system, if the object lacks a parent.
  • transform e.g., translation, rotation, scale
  • the following fields are preferably stored in a geometry object: object type, parent geometry object or dynamics object pointer, transformation (e.g., a 4 x 4 matrix), parameters for simple primitives, triangle vertex list pointer, and a triangle face list pointer.
  • object type object type
  • parent geometry object or dynamics object pointer transformation (e.g., a 4 x 4 matrix)
  • transformation e.g., a 4 x 4 matrix
  • parameters for simple primitives e.g., triangle vertex list pointer, and a triangle face list pointer.
  • Ghost geometry objects can be created that are not associated with a dynamic object. These geometry objects are only used by the collision detection block, and collisions with these objects do not affect the physical simulation. Ghost objects are useful for generating events that notify the application when a body has moved into or out of a defined space.
  • Dynamics Objects 12 IB contain all the data associated with a rigid body, other than its shape. This data is initially configured by the application, but is automatically updated at every simulation time step.
  • the following fields are stored: physical constants (e.g., inverse of mass, inverse of inertia tensor), state vector (e.g., position, rotation, linear momentum, angular momentum), derived quantities (e.g., inverse of inertia tensor, linear velocity, angular velocity, rotation matrix), and computed quantities (e.g., force accumulator, torque accumulator).
  • physical constants e.g., inverse of mass, inverse of inertia tensor
  • state vector e.g., position, rotation, linear momentum, angular momentum
  • derived quantities e.g., inverse of inertia tensor, linear velocity, angular velocity, rotation matrix
  • computed quantities e.g., force accumulator, torque accumulator
  • Soft bodies 122 are used for simulating particle meshes or lattices such as cloth, rope, smoke, water, and fire. Each soft body consists of a mesh or lattice of particles, connected with simple damped springs. Unlike rigid bodies, soft bodies do not require geometry objects, since the geometry of a soft body is implicitly defined by the positions of the particles in the mesh or lattice.
  • Particle Dynamics Objects 122 A are soft body analogs to rigid body dynamics objects discussed above.
  • each soft body particle has data associated with it, but since particles are point masses there is no need for storing moment, of inertia, rotation, angular momentum/velocity, or torque.
  • the following fields are stored: state vector (e.g., position, velocity), and other quantities (e.g., inverse of mass, force accumulator).
  • Deflector objects 122B For compatibility with a conventional software-based physics engine, collisions are calculated between soft body objects and special Deflector Objects 122B.
  • Deflector objects 122B only represent geometry and hence do not participate in the physical simulation.
  • Force Objects are configured by the application in order to apply forces to the rigid and soft bodies that have been created. Although an application can modify force objects at each time-step, even the data-driven force objects are sophisticated enough that for most forces, an object can be created, and allowed operate without intervention for the duration of its existence. Force objects can be used to easily simulate gravity, viscous drag, springs, and spatial interactions (e.g., field forces).
  • Each force object can be configured to exert a force, and thereby possibly producing torque, on a single rigid body (i.e., an unary force), or equal but opposite forces on two rigid bodies (i.e., a binary force).
  • a force object can also be configured to exert a force on every rigid body in a physics simulation. Force objects can also act on soft bodies. In such cases, a force can be made to act on a single particle, every particle in a single soft body, or every particle in every soft body.
  • Data driven force objects are a simple way for the application to control standard types of forces acting on various bodies.
  • the simplest data-driven force object is the constant force. At each time step, this object will exert a constant force and/or torque on a specified object.
  • a constant force object may be updated periodically, possibly at every time step, by the application, or may be left alone until deleted.
  • Data-driven force objects can also exert forces that are simple mathematical functions of the parameters in the dynamics object (e.g.: position, velocity, angular momentum, etc).
  • the application can provide a procedure to compute a force (i.e., a procedural force object) that will be applied to a body or between bodies.
  • Constraint objects are applied to both rigid and soft bodies.
  • Rigid body constraints allow the application to configure various restrictions on the way rigid bodies move. These constraints are also known as "joints".
  • the following types of constraints are typically supported: ball and socket, hinge/axle, slider/piston, universal, springs, fixed, angular motor.
  • Constraint objects allow configuration of limits on the relative motions and orientations of the constrained bodies. These limits allow constraints such as hinges to only twist through a limited angle, or for rag doll limbs to ensure that they always maintain realistic poses.
  • the collision detection blocks (111 and 112) generate contact data at every simulation step.
  • Contact data represents the input to the contact force computation blocks, but can also be accessed by the application, through the host interface.
  • the most common contacts are vertex/face contacts and edge/edge contacts.
  • a vertex/face contact occurs when a vertex of one polyhedron is in contact with a face on another polyhedron.
  • An edge/edge contact occurs when a pair of edged contact. It is assumed in this case that the two edges are not collinear.
  • the contact data structure typically contains the following information: Body "A”(containing vertex), Body “B” (containing face), contact point (world space), outward pointing normal of face, edge direction for "A", edge direction for "B”, and Boolean to identify vertex/face or edge/edge contact.
  • the Host Interface block 110 manages all communication between the PPU and the controlling/requesting application. As presently prefened, the Host Interface is formed by an operative combination including a PPU driver resident in the host and one or more hardware or software components resident in the PPU. Host Interface 110 is responsible for managing event notification and filtering. This allows the application to be notified only of events that it cares about. It provides t he mechanism for the application to create, modify, and delete rigid body, force and constraint objects. It allows the application to periodically access all position and orientation data for bodies that have moved. The simulation Timing Control 116 is responsible for determining and communicating the size of the next simulation time step.
  • Coherence is the use of information from previous time-step to reduce work. For example, when processing two objects, A and B, if a separating plane can be found for which all of the vertices of A lie on one side, and all of the vertices on B lie on the other side, the equation of the plane can be stored and used in subsequent time steps to easily verify that the objects have not collided with each other. Additional work only need to be performed if separating plane test fails.
  • bounding boxes can be used, such as Axis Aligned Bounding Boxes (AABB's), Object-aligned Bounding Boxes (OBB's), and spherical bounding boxes.
  • AABB's Axis Aligned Bounding Boxes
  • OOB's Object-aligned Bounding Boxes
  • spherical bounding boxes Another algorithm uses a multi-resolution hash table to detect collisions in 0(n). The three dimensional world is divided into a regular grid. Lower resolution (larger cell size) grid levels are superimposed on the initial grid. When each object is added to the hash table, a grid level is selected such that the object occupies no more than eight cells (voxels) of the grid. For each occupied cell, a conesponding entry is added to the hash table.
  • the hash function is computed using the X, Y, and Z coordinates of the cell, as well as the grid level. Once all objects are added to the hash table, a second pass is made through all objects, and only objects which are found to occupy the same grid cells are candidates for collision.
  • the application can call functions to apply forces to the rigid body. These forces are added to "force accumulators" in the rigid body dynamics object. When the next integrator step happens, the sum of all the applied forces is used to push the body around.
  • the forces accumulators are set to zero after each integrator step.
  • the simplest force objects are the data driven force objects. Whenever the application wishes to apply a force to one or more objects, it creates a force object. If the force is constant or can be expressed as a simple mathematical function of parameters in the dynamics object (such as position or velocity), a data-driven force object can be used.
  • the application identifies one or two bodies that the force should be applied to (e.g.: gravitational attraction, magnetic forces, etc.), or specifies that the force should be applied to all bodies (e.g.: gravity, air resistance, etc.). When more sophisticated forces are required, the application can create procedural force objects. The application provides a procedure that can be executed at each time step to compute the force that should be applied.
  • Colliding contact occurs when two bodies are in contact at some point and they have a velocity toward each other. Colliding contact requires an instantaneous change in velocity. Whenever a collision occurs, the state of a body, which describes both position and velocity (actually the momentum is stored in the state vector, but momentum is a constant function of velocity), undergoes a discontinuity in velocity.
  • the methods for numerically solving ODE's require that the state Y(t) always varies smoothly. Clearly requiring Y(t) to change discontinuously when a collision occurs violates that assumption.
  • This problem may, however, be avoided as follows. If a collision occurs at time t c , the ODE solver is instructed to stop (or backup to t c ). Using the state at this time, Y(t c ), the new velocities of the bodies involved in the collision are computed, and Y is updated. Then, the numerical ODE solver is restarted, with the new state, Y(t c ), and simulates forward from tc.
  • n'(to) is the unit surface normal.
  • v rel n'(to) • (d/dtp a (to) - d/dtp b (t ) )
  • An impulse is a vector quantity, just like a force, but it has units of momentum. Applying an impulse produces an instantaneous change in the velocity of a body. Constraint and resting contact force must also be computed.
  • the ODE solver blocks (114 and 115) perform numerical integration of ordinary differential equations.
  • Several explicit and implicit methods are available conventionally, with different levels of accuracy, however, increased accuracy requires additional computation. They support adaptive time-step sizes by, at each step, calculating and sending an estimate of the integration enor to the simulation timing control block.
  • the differentiation block(s) (117 and 118) is responsible for calculating the cunent time derivative (slope) of each body's state vector.
  • the state vector, Y contains the cunent position, rotation, linear momentum, and angular momentum of a rigid body. For particles, it contains only the cunent position and linear momentum.
  • This unit calculates: d/dt Y(t), where Y(t) is the state at time "t".
  • the inputs to this block are the state vector and the force and torque accumulators stored in the dynamics object.
  • d/dt Y(t) [ v(t), '/ 2 ⁇ (t) q(t), F(t), ⁇ (t) ].
  • d/dt Y(t) [ v(t), F(t) I m ].
  • the foregoing embodiment, including its constituent functional blocks, is one prefened embodiment of a PPU designed in accordance with the present invention.
  • some conventional tools and solutions have been brought to bear on the problem of implementing a so-called "hardware-based" physics engine having expanded capability over conventional software-based solutions.
  • the physics processor architecture of the present invention addresses specific requirements of complex physics simulations while avoiding the limitations inherent in conventional CPU.
  • the PPU architecture of the present invention is characterized by the use of multiple, parallel, task-specific processing modules.
  • the Floating Point Engine described in exemplary form above provides this capacity using vector processing units which operate on parallel, ultra-high bandwidth, low latency Inter Engine Memories (IEM). By avoiding the use of conventional caches and the associated processor stalls, the FPE is able to approach its theoretical maximum performance, even when operating on large data structures.
  • IEM Inter Engine Memories
  • DME Inter Engine Memories
  • the DME is able to operate in parallel with the FPE without blocking FPE access to the Inter Engine Memories (IEM).
  • the RISC CPU type architecture proposed, at least in the presently prefened embodiment, for the DME provides for general pu ⁇ ose processing of miscellaneous operations that are not computationally or bandwidth intensive.
  • RISC CPUs use off the shelf cores and come with standard programming tools such as a C compiler, debugger, etc.
  • the PPU of the present invention may be viewed as a hybrid vector processor adapted to use a Very Long Instruction Word (VLIW) Sets. That is, the DME and FPE engines presently prefened use custom instruction sets which are a hybrid between vector processing and VLIW architecture.
  • VLIW Very Long Instruction Word
  • Vector processing is needed to allow hundreds of floating point and data movement operations to be performed per clock cycle.
  • the VLIW instruction word allows multiple vector and non-vector operations to occur with each other. This prevents stalling the vector units while other non- vector operations are executed. Careful analysis of the algorithms required for physics simulation has resulted in an instruction word format that can always provide the necessary non- vector processing in parallel with the vector instructions.
  • VLIW instruction word includes instructions for special pu ⁇ ose execution units such as the global register unit, and the branching unit.
  • Explicit parallelism in VLIW also reduces the requirement for hardware pipelining, therefore, more silicon is available for instantiating additional floating point arithmetic units and for larger Inter Engine Memories (IEM).
  • IEM Inter Engine Memories
  • the PPU of the present invention makes use of large, parallel, on-chip Inter Engine Memories (IEM).
  • IEM Inter Engine Memories
  • LRU Least Recently Used
  • the DME can be explicitly programmed to load the exact data set that the FPE will need to operate on.
  • the FPE and DME engines exchange Inter Engine Memories (IEM) in a zero-latency context switch.
  • IEM Inter Engine Memories
  • each function defined by the software-based physics engine is called once per time-step by the host CPU, and physics related data computations are returned directly to the CPU.
  • a physical simulation is running on the same device (CPU) as the controlling/requesting application, as is the case for a traditional software-based physics engine, the communication process between application and physics engine is straightforward. That is, the application simply calls each functional component of the physical simulation sequentially, and between calls, can directly access simulation data structures which are resident in the CPU's main memory, as well as make calls to the API associated with the physics engine.
  • a dedicated hardware device is used to develop physics simulation data, a different method of communication is required.
  • APIs are provided for use by the controlling/requesting application. These API's, and their underlying software, preferably run on the same device as the application, i.e., the host CPU. As shown in Figure 17, the lowest level API 133 provides access a PPU Driver, which manages all communication between the CPU running application 130 and PPU hardware 134.
  • the higher level APIs may be associated with, for example, a software-based physics engine, and/or a 3-D effects engine , here, shown combined as an Effects Engine 131.
  • PPU Driver 133 is preferably able to communicate with PPU 134 over a number of different physical interfaces, including as examples, USB, USB2, FireWire, PCI, PCI-X, PCI-Express, and Ethernet. It preferably supports asynchronous event notification to the controlling/requesting application using, for example, polling or interrupts communicated via signals or messages as required by the host. It also allows the application to make changes to the simulation in response to a received event notifications (e.g.: create/delete/modify rigid bodies or contact points).
  • a received event notifications e.g.: create/delete/modify rigid bodies or contact points.
  • Communication between PPU driver 133 and the PPU 134 may occur through a DMA or memory mapped I/O (or PIO).
  • the communication mechanism preferably provides data to the application in a format that facilitates display data renderings using a 3D API, such as Direct3D or OpenGL. Further, it should also support optional (lossy or loss-less) compression of the data.
  • the PPU described thus far provides a number of remarkable benefits and overcomes the deficiencies of conventional, software-based physics engines.
  • the present invention provides in one aspect a PPU architecture specifically designed to run physics algorithms that otherwise threaten to bottleneck a host CPU.
  • Such capability is provided within a PPU architecture that preferably provides collision detection for rigid and soft bodies, a Linear Complementarity Problem (LCP) solver, and numeric integration of ordinary differential equations.
  • LCP Linear Complementarity Problem
  • the PPU architecture is characterized in a related aspect by the use of parallel, task-specific processing modules.
  • the modules include a PPU Control Engine (PCE).
  • PCE PPU Control Engine
  • the PCE preferably provides general pu ⁇ oses processing for various operations that are not computationally or bandwidth intensive. In one suggested embodiment is may be readily implemented with off the shelf RISC cores, and may make use of commercially available compilers and debugging tools.
  • the modules also include a Data Movement Engine (DME).
  • DME Data Movement Engine
  • this module is preferably a massively parallel device capable of efficiently moving large and/or numerous data blocks. It is preferable operated according to a data- driven programming model and flexibly allows data transfers (i.e., movements) between an external, high-speed memory and internal memory units.
  • the DME should always move data sufficiently fast to avoid blocking or operation of the Floating Point Engine (FPE).
  • FPE Floating Point Engine
  • the FPE is preferably a massively parallel floating point engine. As prefened, it uses no caches. It takes the form of a vector processor enabling up to hundreds of floating point and data movement operations per clock cycle. It also assumes the form of a Very Long Instruction Word (VLIW) architecture. This VLIW architecture allows multiple non-vector operations to occur in parallel with vector operations. Explicit parallelism in VLIW reduces requirements for hardware pipelining. Accordingly, more PPU chip space may be allocated to arithmetic units.
  • VLIW Very Long Instruction Word
  • the PPU according to the present invention makes use of large, parallel, internal memories (i.e., Inter-Engine Memories - IEMs).
  • IEMs eliminate the need for memory caches. Rather, explicit control in maintained over the contents of the internal memories . For example, 2 Terabits/second of bandwidth is presently contemplated for internal memories facilitating data movement to/from the FPE.
  • the internal memory structure has no "set associativity" limitations.
  • multi thread or ultia-threading data transfer techniques further contribute to the unique efficiencies provided by the present invention.
  • partitioning the IEMs into multiple banks each floating point execution unit in the FPE has access to at least two independent IEMs. While the FPE execution units operate on one IEM bank, the DME has access to another bank. Zero-latency context switching between IEM banks precludes data stalls.

Abstract

A method of providing physics data within a game program or simulation using a hardware-based physics processing unit having unique architecture designed to efficiently calculate physics related data.

Description

Method for Providing Physics Simulation Data
This application claims the benefit of U.S. Provisional Application No. 60/507,527 filed October 2, 2003
BACKGROUND OF THE INVENTION The present invention relates generally to a hardware-based physics and animation processing unit finding application in interactive environments, for example, in the field of Personal Computer (PC) or console games.
Game players have a great appetite for sophisticated entertainment that accurately simulates reality. A high degree of computer animated realism requires lifelike interaction between game objects. For example, people intuitively understand that a ball reacts very differently when bouncing across a concrete surface as compared with a grassy surface. A lifelike digital simulation of the ball bouncing across these disparate surfaces must account for the different physical properties (friction, rigidity, etc.) of the respective surfaces, and their influence on the ball's animated motion. In addition, for interactive applications, the physics simulation must run in real-time. Within the contemporary personal computing (PC) environment, conventional processors running available software are capable of simulating and visually displaying only relatively simple physics-based interactions, such as a lifelike animation of a ball bouncing across a driveway and onto a lawn in real-time.
The conventional resources typically brought to bear on the problem of physics-based simulations are conceptually illustrated in Figure 1. Within Figure 1, resources primarily based in hardware are shown in solid outline while software resources are shown in dotted outline. Those of ordinary skill in the art will recognize that such hardware/software designations are relatively arbitrary. For example, computational logic may be fully implemented in software or hardwired into a logic device at a system designer's discretion. However, some logical distinction between hardware and software, as exemplified by current best practices, is useful in the description that follows. In Figure 1, a Central Processing Unit (CPU) 10, such as a Pentium® microprocessor, together with its associated drivers and internal memory, access data from an external memory 11, and/or one or more peripheral devices 13. The terms "internal" and "external" are used to generally differentiate between various memories in relation to the other computational components in a system. Such differentiation is clearly relative, since an internal memory can be turned into an external memory by removing the internal memory from a system, board, or chip containing related computational components and exporting it to another system, board, or chip. The converse is true for changing an external memory into an internal memory. Generally speaking, however, an internal memory will typically be co- located on the same chip as related computational component(s), while external memory will typically be implemented using a separate chip or chip set.
Most contemporary computer games include significant graphical content and are thus intended to run with the aid of separate Graphics Processing Unit (GPU) 12. GPUs are well know in the industry and are specifically designed to run in cooperation with a CPU to create, for example, animations having a three dimensional (3-D) quality.
Main game program 20 is resident in external memory 11 and/or peripheral 13 (e.g., a CD and/or floppy disk drive). Game assets, such as artist illustrations, are also routinely stored in external memory 11 and/or peripheral 13. Game program 20 uses various Application Programming Interfaces (APIs) to access blocks of specialty software associated with various program functions. An API is a well understood programming technique used to establish a lexicon of sorts by which one piece of software may "call" another piece of software. The term "call" as variously used hereafter broadly describes any interaction by which one piece of software causes the retrieval, storage, indexing, update, execution, etc., of another piece of software. .
Data instructions, often in a prescribed packet form and referred to hereafter a "commands," are generally used to initiate calls between one or more software or hardware components. Execution (i.e., "running") of software, in any of its various forms including micro-code, occurs upon receipt of an appropriate command. Typical software resources implementing contemporary computer games include game program 20 and GPU driver 23, each with an associated API. GPU driver 23 configures the hardware registers and memory associated with CPU 10 to effect bi-directional data communication (i.e., data or command transfer) between CPU 10 and GPU 12. With the recent and growing appetite for realism, so-called physics engines have been added to the program code implementing PC games. Indeed, a market has recently emerged directed to the development of physics engines or so-called "physics middleware." Companies like HA.NOK, MathEngine, Νovodex and Meqon Research have developed specialty software that may be called by a game program to better incorporate natural looking, physics-based interactions into game play. Physics middleware applications may be called by game program 20 through an associated API. Conventional software based physics engines allow game programmers increased latitude to assign, for example, virtual mass and coefficients of friction to game objects. Similarly, virtual forces, impulses, and torques may be applied to game objects. In effect, software-based physics engines provide programmers with a library of procedures to simplify the visual creation of game scenes having physics-based interaction between game objects.
Unfortunately, such procedures remain fairly limited in both content and application. Simply put, the continuing appetite for game realism can not be met by merely providing additional specialty software, and thereby layering upon the CPU additional processing requirements. This is true regardless of the relative sophistication of the specialty software.
Contemporary software-based physics engines have significant limitations as to the number of objects in a game scene, and more particularly, the number of interacting objects. Realistic visual images of simulated physics interaction must account for constraints placed upon many or all of the game objects. A constraint is a restriction on the possible movement or interaction of an object (e.g., a contact, a door hinge, a knee joint, a dog on a leash). Increasing complexity of tenain geometry greatly increases the difficulty of simulating object interactions with the terrain. The complexity of collision detection and resolution also increases with the complexity of an object's surface geometry (i.e., its surface detail). When depicting clothing on a character, for example, the frequent collision between the character and the clothing needs to be modeled. When portraying agitated bodies of water, the wake of boats, surface foam, swirling water, waves, as examples, must to be modeled and simulated. Along with an increasing number of active game objects, cutting edge computer games demand an increased number of forces being applied to the objects. These aggregate demands are further aggravated by the increasing number of "time steps" per second being used in PC games, (i.e., the frequency with which the animated world with all its objects and forces is updated in real time). All of the foregoing, when resolved by specialty software, place enormous additional demands upon the already overburdened CPU. The CPU time spent processing the numbers required to implement physics effects further reduces the amount of CPU time available for other game play requirements like graphics processing and communications. Indeed, the primary source of limitation upon the realization of software-based physics simulations is the CPU architecture itself. General purpose CPUs, like Pentium, are simply not designed to provide real-time physics simulation data.
Conventional CPUs lack the numerous parallel execution units needed to run complex, real-time physics simulations. The data bandwidth provided between the
CPU and external memory is too limited and data latency is too high. Data pipeline flushes are too frequent. Data caches are too small and their set-associative nature further limits the amount of them that is utilizable. CPUs have too few registers.
CPUs lack specialized instructions (e.g., cross product, dot product, vector normalization). In sum, the general purpose architecture and instruction set associated with conventional CPUs are insufficient to run complex, real-time physics simulations.
The limitations inherent in a general purpose CPU running conventional, software-based physics engines are readily manifest when one considers a typical resolution cycle for a rigid body simulation. The exemplary resolution cycle 9 illustrated in Figure 2 consists of a sequence of eight functions. Each function must be repeated by the software-based physics engine one per time-step, typically 60 per second, for each active object in an animation.
Within the exemplary resolution cycle 9 shown in Figure 2, broad phase collision detection (9a) is followed by narrow phase collision detection (9b), contact generation (9c), island generation (9d), force solver (9e), numerical integration (9f), and resolution of fast moving objects (9g) before state updates are communicated to the game program, game engine, and/or CPU. The functions are executed largely, if not entirely, in sequence since many functions are dependent on the results computed by one or more previous functions.
The final step in the resolution cycle, labeled "Updates to/from application" (9h), results in bi-directional communication between the software-based physics engine and one or more application processes controlling it and/or using its data results (hereafter generally referred to as "the controlling/requesting application"). In some situations, however, bi-directional communication between an controlling/requesting application and the physics engine is required between function steps in the resolution cycle, for example, between steps 9b, "Narrow Phase Collision Detection," and 9c, "Contact Generation,"
When the physics engine software is running on the same device (i.e., CPU) as the controlling/requesting application, as is the case for a conventional software-based physics engine, this communication process is relatively straightforward. The controlling/requesting application simply calls in sequence each functional component of the resolution cycle. Between function calls, the application can directly access simulation data structures, which are resident in either internal memory or external memory, make additional function calls to the physics engine API, or communicate data externally.
While straightforward, this approach, to complex rigid body simulations is limited. The sequentially calculated and functionally interdependent nature of the physics simulation data obtained by the con-ventional resolution cycle is ill-suited to a realistic visual display of numerous, high-quality game objects with their associated forces. More and more CPU processing time is required to calculate data related to the physics interaction of rigid bodies in the game.
While the foregoing example has been drawn to rigid body simulations, other types of physical simulation, like cloth, particles, and/or fluid simulations, have a similar structure and flow between functional components. Such simulations also conventionally require once per step-time communication between the software physics engine implementing the physics simulation and the controlling/requesting application.
So, in addition to the noted deficiencies with general purpose CPUs and their associated memory system architectures and capabilities, the current PC based game environment is ill suited to the efficient calculation of physics simulation data and the communication of this data between applications.
SUMMARY OF THE INVENTION
The digital calculation of physics simulation data involves a considerable quantity of mathematical procedures referred to as "floating point" operations. Ideally, the great multiplicity of floating point operations required to calculate physics simulation data would done efficiently and at a greatly reduced price point over the conventional, software-based practice. That is, a maximum number of floating point operation per unit cost is highly desired.
However, the efficient calculation of floating point data in and of itself is not enough. Once calculated, the physics simulation data must be efficiently communicated from the calculation means to the host device (e.g., a PC or game console with its associated applications). Thus, a well conceived architecture is required that incorporates the specialized hardware resources and data transfer mechanisms required to efficiently calculate physics simulation data and communicate it to the host. In other words, the architecture must provide not only increased floating point operations, but also the right mix of floating point operations capability and data throughput. It must also avoid data stalls, and long latency periods during which data is loaded and unloaded from the circuitry executing the floating point operations.
Thus, in one aspect, the present invention provides a game system comprising a Central Processing Unit (CPU) operatively connected to an external memory, one or more peripherals, and a Physics Processing Unit (PPU). The PPU is preferably a separate chip designed to efficiently provide physics simulation data and communicate this data to the CPU. The PPU may be viewed in this aspect much like a Graphics Processing Unit (GPU). GPUs are typically separate co-processors designed to efficiently render graphics data from a CPU. In a related aspect, the present invention fully contemplates the combination of a PPU with a GPU within a game system. This combination of PPU and GPU may take to form of two chips on a single board or a single chip implementing both PPU and GPU functionality.
In another aspect of the present invention, the PPU is flexibly designed to communicate with the CPU (or host device generally) via one or more conventional physical interfaces, such as USB, USB2, Firewire, PCI, PCI-X, PCI-Express, and Ethernet (e.g., 10/100 Ethernet, Gigabit Ethernet).
Good use of APIs and a dedicated PPU driver will further enhance the utility of the PPU within the game system. Where a main game program and PPU driver are co-resident in a host, program calls are efficient.
In a more detailed and exemplary aspect of the resent invention, the PPU includes a PPU Control Engine (PCE) controlling the operation of the PPU and communication of physics simulation data with the host. The PPU also includes a Data Movement Engine (DME) responsive to commands received from the PCE and executing programs adapted to perform data movement operations. The PPU also includes a Floating Point Engine (FPE), responsive to commands from the DME and executing floating point calculations. A high-speed data bus is preferably provided to connect a high-speed memory to the DME and FPE.
The currently contemplated FPE includes a plurality of floating point execution units selectively grouped together to form a parallel vector floating point unit. In a related aspect, the FPE performs floating point operations in response to a Very Long Instruction Word (VLIW).
In another aspect, the present invention provides a method of incorporating physics simulation data into a game running on a host. The method is characterized by running a main game program on the host and calling a PPU driver from the main game program. By means of the PPU driver, operation of the PPU is initiated and physics simulation data is calculated. Once calculated, the physics simulation date is communicated from the PPU to the host.
In each of the foregoing aspects, a multi-thread or ultra-threading processing and data movement technique is preferably used to maximize efficiency of the FPE. The present invention finds present and particular application in the field of PC or console based games. However, it is not limited to such game systems. Any application benefiting from the incorporation of physics simulation data is susceptible to the benefits of the present invention. Thus, in another aspect, the present invention provides a hardware-based PPU connected to a host CPU via a physical interface. The stand alone (i.e., separate chip) PPU comprises the PCE, DME, and FPE described in the exemplary embodiment that follows.
The PPU may further comprise an internal memory operatively connected to the DME, and a high-speed memory bus operatively connecting an external, highspeed memory with the DME and FPE. The internal memory preferably comprises multiple banks allowing multiple data threading operations under the control of the PCE and DME.
The detailed description and related drawings that follow set forth a presently preferred embodiment with its multiple and variously related aspects. A primary purpose for this written description is the presentation of an example illustrating the making and use of a more general and broadly applicable invention. The claims that follow define the scope of the present invention. BRT F DESCRIPTION OF THE PR A W NTOR
In the drawings, like reference characters indicate like elements. The drawings, taken together with the foregoing discussion, the detailed description that follows, and the claims, describe a preferred embodiment of the present invention. The drawings include the following:
Figure 1 is a conceptual illustration of the principal hardware and software components forming a conventional game system including a software-based physics engine;
Figure 2 is an exemplary flowchart showing a conventional sequence of functions called by a CPU to update rigid body information in a software-based physics simulation;
Figure 3 is a conceptual block diagram showing the principal hardware components forming a game system according to the present invention;
Figure 4 further illustrates selected physical interfaces to the PPU of Figure 3; Figure 5 is a conceptual illustration of the principal hardware and software components forming a game system including a PPU according to the present invention;
Figure 6 illustrates in some additional detail a presently preferred embodiment for the PPU of Figures 3, 4, andor 5. Figure 7 further illustrates the DCQ/DRQ connection between the PCE and
DME of Figure 6;
Figure 8 further illustrates the relationship between the DME and FPE of
Figures 5 and/or 6 and various memories;
Figure 9 further illustrates the relationship between the DME, FPE, and IER of Figure 8; Figure 10 illustrates an exemplary embodiment of the FPE where appearing in the above Figures in some additional detail;
Figure 11 further illustrates the FPE of Figure 10;
Figure 12 illustrates in relation to another embodiment of the present invention the implementation and relation between the FPE and DME of the PPU;
Figure 13 illustrates in some additional detail the VPE shown in Figure 12;
Figure 14 illustrates in some additional detail the NPU shown in Figure 13;
Figure 15 illustrates in some additional detail the MCU shown in Figure 12;
Figure 16 illustrates various functions and data structures of an exemplary PPU designed in accordance with one or more aspects of the present invention; and,
Figure 17 illustrates a multi-level API structure, whereby PPU driver is variously called to initiate operation of a PPU accordance with one or more aspects of the present invention.
DETAILED DESCRIPTION OF THE PREFERRED KMRODIMENT(S')
The present invention recognizes that conventional software-based solutions to physics simulations have limits that affect their practical application. For example, next generation games would benefit considerably by including many more active objects and related forces than could be reasonably simulated using specialty software run on a general purpose CPU.
Thus, the present invention approaches the problem of generating visually realistic physics interactions between animated objects from an entirely different perspective. Unlike conventional software-based solutions, the present invention proposes a hardware-based Physics Processing Unit (PPU). A PPU implemented in accordance with the dictates of the present invention may be viewed in one aspect as a specialty co-processor. In cooperation with a general purpose CPU, the PPU provides the enormous, additional, and highly specialized processing capabilities required to implement complex, real-time, physics effects in next generation games. From a hardware perspective, a PPU may be incorporated into the conventional PC environment as conceptually shown in Figure 3. CPU 10 having internal memory cache(s) 15 is connected to external memory 11, one or more peripherals 13, and Graphics Processing Unit (GPU) 12. Additionally, CPU 10 is connected to PPU 16. Exemplary interconnections, to PPU 16 are shown in further detail in Figure 4 .
Here, PPU 16 is connected to a dedicated external memory 33. A dedicated external memory 33 is preferred since the conventional, external (DRAM) memory 11 normally associated with CPU 10 is not usually configured to provide the data bandwidth and data throughput presently contemplated by the architecture of a game system incoφorating a PPU. Such data transfer considerations will be discussed in greater detail below. However, 128 bit data transfers between PPU 16 and a dedicated 512 MB double data rate (DDR) external memory 33 are currently contemplated. Clearly, PPU 16 need not be universally configured with its own dedicated, external memory 33. It is very possible that PPU 16 might share an external memory with GPU 12 and/or CPU 10. This possibility is particularly relevant, given continued improvements to the data throughput of DDR memory systems and their likely progeny.
Returning to Figure 4, connections between PPU 16 and a PC (or a stand alone game console, both not shown) may consist of, for example, a USB2 connection 35, a IEEE 1394 (Firewire) connection 36, and/or one or more of several PCI Interfaces 34, including as examples, PCI, PCI-X, and/or PCI-Express. As presently contemplated, PPU 16 also includes an asynchronous serial interface 31 which allows debugging over an RS-232 link, additional general puφose I/Os 30 provided for low level debugging and status reporting, and/or an IEEE 1149.1 (JTAG) interface 32 provided for the debugging of software running on the PPU 16.
Physical incoφoration of PPU 16 into a PC may be accomplished using of several approaches. First, a PPUs may be incoφorated using a standard PC Interface (PCI) card optionally inserted within the PC. Alternatively, a PCI-Express Interface card might be used. A USB2 or Firewire connection to an externally packaged PPU module might be used instead of a internally configured interface card. It is readily foreseeable that a PPU and a GPU will be combined on a single interface card. That is, both chips will be physically mounted on the same card (AGP or PCI-Express), but not directly interfaced with one another. Ultimately, a single interface card having a directly interfaced PPU-GPU combination is expected, but such a combination is probably a generation away. So too is a combination within a single chip of PPU and
GPU functionalities.
Exemplary hardware/software relationships for a game system incorporating a PPU, as compared with the conventional relationships shown in Figure 1, are shown in Figure 5. A PC environment adapted for use with a PPU is conceptually illustrated with hardware elements shown in solid line and software elements shown in dotted line. CPU 10 having internal memory cache(s) 15 is conventionally connected to one or more peripherals 13 and an external memory 11. A main game program is typically stored in external memory 11 and/or a peripheral 13. Additionally, as shown in Figure 3, the present invention provides for the operative connection of PPU 16 to CPU 10. GPU 12 will also be typically connected to CPU 10.
In addition to game engine 21 and GPU driver 23, and their associated APIs, the present invention provides a PPU driver 24 with an associated API. PPU operation is directed through the PPU driver by at least game program 20 With this anangement, game physics are principally (if not solely) implemented in a dedicated hardware device designed specifically to provide physics simulation data. This contrasts shaφly with the conventional approach of implementing physics completely in software run on the general puφose CPU.
In one exemplary embodiment as shown in Figure 5, PPU 16 further comprises a PPU Control Engine (PCE) 17, a Data Movement Engine (DME) 18, and Floating Point Engine (FPE) 19. The functionality currently provided by conventional software-based physics engines is separated across the PCE, DME, and FPE engines in PPU 16.
Generically, PCE 17 comprises a microprocessor (e.g., RISC) core controlling overall operation of the PPU. For example, PCE 17 controls the physics simulation and communicates with the PPU driver running on the host CPU, but performs only operations that are not computationally intensive or bandwidth demanding. Whenever such operations are needed, PCE 17 issues appropriate commands to D>ME 18 and/or FPE 19. These commands preferably instruct DME 18 to execute programs to perform data movement operations, and include the necessary parameters for these programs. The DME programs can also call FPE programs to perform any required data computations.
As currently contemplated, conventional software-based physics engines may be adapted to run on (i.e., "be ported to") PCE 17, and may call microcode routines running on DME 18 and FPE 19. PPU 16 provides a library of common linear algebra and physics related algorithms implemented using the DME and FPE. However, application specific or custom algorithms may also be defined within PPU 16 for execution by the DME and FPE.
The exemplary PPU architectures shown in Figures 3-5 are shown in some additional detail beginning with Figure 6. The various elements described below connect to a peripheral bus 40 and processor bus 44 to form a processor architecture similar to conventional embedded system on a chip (SOC) designs. Within this expanded architecture, processor bus 44 is respectively connected with peripheral bus 40 and high-speed data bus (HSB) 48 via conventional bus bridges 43 and 47. Peripheral bus 40 allows connection of the PPU to general I/Os 30 and UART 31 , as examples, using a peripheral bus arbitration circuit 41 and timer circuit 42. Processor bus 44 facilitates connection of the PPU to a host ( a PC or stand alone game console) via one or more physical interfaces, such as PCI interface 34, USB2 controller 35, and/or an IEEE 1394 Firewire Interface. The RISC cores forming PPU Control Engine (PCE) 17 also connect to processor bus 44, along with a processor bus arbitration circuit 45 and DMA controller 46. A DCQ/DRQ circuit 56 connects processor bus 44 directly with Data Movement Engine (DME) 18.
A High-Speed data Bus (HSB) 48 together with a Memory Interface Unit (MTU) 50 form the connection between the PPU and an external high-speed memory (not shown). DME 18 and FPE 19 provide the high-speed computational platform necessary to provide complex, real-time physics simulation data. In order to access external memory, as managed by MTU 50, processor bus 44 issues read/write requests to bridge 47 connecting processor bus 44 with HSB 48.
To enable efficient data movement, eight DMA channels are contemplated to allow simultaneous data transfer from one or more of the host interfaces (PCI, USB, Firewire) to/from the PPU external high-speed memory. In addition, memory transfers may occur between the PPU external high-speed memory and DME Instruction Memory (DIM) 51, or the FPE Instruction Memory (FIM) 54. The HSB 48 provides a priority access scheduling between these various memories using HSB arbitration circuit 49. Inter-engine memory (IEM) 52 and inter-engine registers (IER) 53 allow data communication directly between DME 18 and FPE 19. In one aspect, DME 18 may be viewed as a programmable engine designed to efficiently move data between the external high-speed memory and one or more PPU internal memories (e.g., SPM 55 or IEM 52). As presently preferred, the external high-speed memory associated with the
PPU uses ultra-threading data transfer techniques to facilitate simultaneous memory use by both the DME and FPE. The memory banks formed by IEM 52 and IER 53 also support two parallel threads of execution. At any given time, one thread is able to run on the FPE, and the other on the DME. As noted above, the PPU Control Engine (PCE) 17 manages all aspects of the operation of the PPU. It communicates with the host over one or more of the physical interfaces. It manages the definition and allocation of all internal and external memories, and controls execution of DME programs through the DME control interface 56.
The communication role of the DME control interface 56 between PCE 17 and DME 18 is further illustrated in Figure 7. In this exemplary embodiment, PCE 17 communicates with DME 18 via a pair of memory-resident queues (60 and 61). The queues are implemented in dual-ported memory, one port on the processor bus and the other directly connected to DME 18, to form circular buffers with read/write pointers. PCE 17 writes DME command packets to the DME Command Queue (DCQ) 60 when it wishes to execute a DME program. Each DME command packet contains a starting address for the DME program to be run, along with various parameters and control flags. When DME 18 is ready to execute another program, it removes the next DME command packet from DCQ 60. Following execution of a DME command packet, DME 18 generates a DME response packet and transmits it to the DME Response Queue (DRQ) 61. Each DME response packet contains relevant computational results and/or status information.
The exemplary relationship described above between DME 18, FPE 19, and the various internal and external memories is further illustrated in Figure 8. External, high-speed, main PPU memory (PMM) 65 and Scratch Pad Memory (SPM) 55 receive/send data transfers under the control of DME 18.
Programs associated with DME 18 control three important aspects of PPU operation. First, they specify how data is to be moved between PMM 65 and various internal memories such as IEM 52 and SPM 55. Second, they control execution of programs associated with FPE 19. Finally, they schedule ultra-threading context switches. As presently prefened, DME 18 uses a data-driven programming model, i.e., the basic structure and control flow of DME programming is largely fixed. More particularly, DME programming contains a list of parameters controlling data transfer operations, calling FPE programs, and initiating context switches. As presently contemplated, DME programming consists of a combination of two data elements types; those that control memory movement, and those that control ultra-threading.
Ultra-threading techniques allows DME 18 and FPE 19 to operate simultaneously. The preferred dual bank structure of IEM 52 and IER 53 allow DME 18 to transfer data to/from one bank while FPE 19 operates on data stored in the other bank. When FPE 19 and DME 18 have both completed their respective operations, a context switch occurs, and each engine can subsequently access the other bank of IEM 52 and or IER 53. Ultra-threading thus allows FPE 19 to operate continuously, without waiting for data to be transferred to/from internal or external memory. The operation of the Inter-Engine Registers (IER) 53 between DME 18 and
FPE 19 is further illustrated in Figure 9. As presently preferred, IER 53 consists of two register banks (X and Y), each register bank comprising at least two registers (S and A), where all registers default to zero upon DME program initialization, or upon an explicit initialization by PCE 17. In the illustrated example, DME 18 accesses Bank Y registers and FPR 19 accesses Bank X registers during a given cycle.
Address Generation Register (AGR) control 73 can load either IER register (S or A). Further, DME loop variables may be loaded by a DME program flow controller 72. Address Generation Unit (AGU) 70 and associated Address Generation Registers 71 within DME 18 cooperate to define program addressing commands for FPE 19. pair of nested loops with programmable step sizes and iteration increments. This exemplary configuration allows a PPU programmer great flexibility in moving data in and out of IEM 52. For example, data can be simultaneously moved between 16 pairs of IEM ports, or data can be simultaneously moved between PMM 65 and 8 IEM ports and between SPM 55 and another 8 IEM ports.
Thus, DME programs may contain multiple data movement instructions. Each instruction specifies the source(s) and destination(s) of the data transfer, and provides control registers associated with the AGUs with the necessary input values. This designed readily facilitates bi-directional data transfers between PMM 65 and IEM 52, between SPM 55 and IEM 52, and between PPM 65 and SPM 55.
Data movement instructions must either specify an actual value for the required AGU registers, or may specify a S-register or A-register for use. This approach allows dynamic control over addressing since initial values for these registers are provided by the PCE, and the SIU of the FPE can modify these registers between context switches.
Depending on the configuration of 4 x 4 bi-direction crossbar 92, up to three data transfers can be programmed to occur simultaneously. For example, a PMM to SPM transfer and a SPM to PMM transfer can run in parallel with several IEM to IEM transfers. After a DME program has performed all necessary operations on Inter-Engine
Registers (IER) 53 and the Inter-Engine Memory (IEM) 52, it sends an instruction to FPE 19 to begin executing a microcode procedure. This FPE start instruction may contain, for example, an address in FPE Instruction Memory (FIM) 54 indicating the start of an FPE program.
21 Once DME 18 has loaded addressing instructions and variable definitions, access to banks X and Y in IER 53 is switched, and FPE 19 is able to access the information loaded by DME 18 and/or load corresponding floating point data for transmission back to DME 18. A Scalar Integer Unit (SIU) 80, a Scalar Floating- point Unit (SFU) 81 , and a Vector Floating-point Unit (VFU) 82 are illustrated in Figure 9 as common constituents of FPE 19 having access to IER registers.
DME data movement, as further illustrated in Figure 10, is preferably accomplished in the prefened embodiment by means ofa l6 x l33 unidirectional crossbar 90, a 133 x 16 unidirectional cross bar 91, and a 4 x 4 bi-directional crossbar 92. As presently contemplated, each port of the two unidirectional crossbars (90 and 91) carries 32 bits of data and 8 bits of IEM address data. Each port of the bidirectional crossbar 92 carries 256 bits of data.
The 133-port side of each unidirectional crossbar is connected to a currently active (i.e., accessible) bank of IEM 52. On the other side of the crossbars, two groups of eight input and eight output ports are connected to the 4 x 4 bi-directional crossbar 92. The 4 x 4 bi-directional crossbar 92 allows each group of eight input and output ports to be connected to each other, SPM 55, or PMM 65.
Thirty-two Address Generation Units (AGU) (70 B and 70E) control the unidirectional crossbars. In any given clock cycle, they select 16 of 133 IEM's to use for input, and 16 of 133 IEM's to use for output. Another 32 AGU's (70A and 70D) generate addresses for the selected IEM ports (16 read addresses and 16 write addresses). Two more AGU's (70C and 70E) generate addresses for SPM 55 and PMM 65, respectively.
In the illustrated example, data transfers through the crossbars are controlled by up to 66 Address Generation Units (AGUs). Each AGU preferably implements a
20 Ultra-threading techniques allow the PPU programmer to achieve a near 100% utilization of FPE 19. When a DME program first begins execution, it has access to only one bank of IER 53 and IEM 52, respectively. During this time FPE 19 will either be idle, or running a procedure for a previous DME program and using the other banks of IER 53 and IEM 52. Typically, the DME program will load data from PPU Main Memory (PPM) 65 into a current IEM bank. When this transfer is complete, the DME program will issue a FPE start instruction. While an FPE program is running, the DME program also continues running, but now DME 18 has access only to the other IERIEM banks. Only after the DME program and FPE program both indicate completion does another context switch occur. The DME program can then transfer the physics simulation data generated by the first FPE program from the first IEM bank back to an internal or external memory. This cycle repeats as often as necessary to complete a DME program-.
The major programming elements associated with FPE 19 are conceptually illustrated in Figure 11. In one presently preferred embodiment, FPE 19 is a hybrid Nector/Nery Long Instruction Word (NLIW) processor. FPE 19 executes microcode procedures once all necessary operations on Inter-Engine Registers (IER) 53 and the Interface Engine Memory (IEM) 52 have been completed by DME 18 and a FPE start instruction is issued. The FPE start instruction contains an address stored in FPE Instruction Memory (FIM) 54 that indicates the beginning of the requested FPE procedure.
FPE 19 provides ultra-high performance, single precision vector floating point operations as well as scalar floating point and integer operations. It preferably uses a VLIW architecture to perform multiple vector and' scalar operations during each clock cycle. FPE 19 provides the computational power to run the numerically intensive algorithms required in physics simulations.
In one embodiment, FPE 19 comprises a Scalar Integer Unit (SIU) 80 with direct read/write access to the S-registers and A-registers in the ultra-threading activated IER bank, four Scalar Floating Point units (SFU) 81 and four Vector
Floating Point unit (VFU). PFU 100 controls the program flow based on the content of predicate registers managed by either SIU 80 or SFU 81.
Since the preferred embodiment of FPE 19 uses a VLIW architecture, multiple instructions can be explicitly issued to parallel execution modules during any given clock cycle. Each instruction word, as provided by instruction fetch and decode circuitry 103 and 104, contains opcodes and operands for one or more of the following modules: Program Flow Unit (PFU) 100, Scalar Integer Unit (SIU) 80, Global Register Unit (GRU) 105, Scalar Floating-point Unit (SFU) 81, and or Vector Floating-point Unit (VFU) 82. Within FPE 19, the Program Flow Unit (PFU) 100 computes the new instruction pointer based on predicate registers and explicit jump requests. Only selected predicate registers from SIU 80 and SFU 81 may be accessed by PFU 100.
The Inter-Engine Memory (IEM) 52 provides high-speed dedicated data storage for each of the execution units in FPE 19. When an execution unit of the FPE accesses its dedicated data storage element it automatically gets directed to the active bank for the currently executed program thread.
IEM 52 preferably comprises 128 storage elements for VFU 82, 4 storage elements for SFU 81, and 1 storage element for SIU 80. A typical storage element is composed of two, 2-port memories, each with 512 32-bit fields. One read and one write can be executed during every clock cycle to this memory. FPE 19 preferably implements a load/store architecture for each of the execution units. Associated address registers are managed by SIU 80. The contents of the registers are distributed to all execution units and can be used in order to address data in the date storage elements of IEM 52 associated with the corresponding execution unit. Local registers, shared registers (VFU only), global registers can be addressed in order to move data between them or to/ from IEM 52.
SIU 80 preferably comprises a 16-bit integer-processing unit. The unit's main puφose is to enable loop processing and address computation for VFU 82 and SFU 81. In order to communicate with DME 18, SIU 80 is able to access the active bank of IER 53 and IEM 52 respectively for the cunently executed programming thread in FPE 19.
As presently contemplated, SIU 80 incoφorates eight 16-bit Arithmetic Logic Units (ALUs), thirty-two 16-bit registers, and eight predicate registers. IER 53 provides an additional eight address registers and eight shared registers. SIU 80 thus enables eight ALU operations, including one load and one store operation, during each clock cycle. Exemplary ALU operations provided by each of the eight ALUs in SIU 80 include, as examples: bitwise operators (AND, OR, XOR, and complement); arithmetic operators (increment, addition, decrement, subtraction, multiply, and left/right shifts); and logic operators (<, >, ≤, >, =, and ≠). As presently preferred, Vector Floating-point Unit (VFU) 82 comprises 32
IEEE 754 compliant, single precision, floating point units (FPUs). Four Vector Floating-point Units (VFU) 82 are grouped together as shown in Figure 11 and are controlled through a single instruction word. Different FPUs are indexed as VFU m:n, where m ranges from 0 to 3 and denotes the different VFU blocks (VFU0, 1, 2 and 3) and ranges from 0 to 31 and denotes the different FPU's within each VPU block.
Each FPU contains 16 local registers and 8 shared registers. The shared registers are shared among the 4 different VPU blocks, that means VPU0.1, VPU1.1, VPU2.1 and VPU3.1 have access to the same shared register. The shared registers are mainly used during physics integration processes in which the position of all active objects is updated. The FPUs have access to global registers in GRU 105. These global registers may be used as an operand for arithmetic operations, but the result has to be stored in a local register. Each FPU can handle one load, one store, one addition/subtraction/comparisόn and one multiplication instruction every clock cycle. In addition, a predicate logic operation is available to operate on predicate registers. Each FPU also contains predicate registers, which can be used to perform conditional operations on the cunent vector. The load, store, add/subtract and multiplication instructions can be performed conditionally on any of these predicate registers. The predicate registers can be either set through the comparison command, through exceptions or individually through SIU 80. In order to allow more complex conditional operations, predicated register logic is available to set a particular predicate register based on logical operations of two other predicate registers. In the working example illustrated in Figure 11, there are four separate Scalar
Floating-Point Units (SFU) 81 which are used to perform additional scalar arithmetic floating point operations. The operations provided in SFU 81 are a superset of the operations provided by an individual execution unit (FPU) within VFU 82. SFU 81 contains 16 local registers and in addition to the load, store, add/subtraction and multiplication blocks, the SFU includes a hardware division block and a square root block. SFU 81 also contains 8 predicate registers. Selected predicate registers are forwarded to SIU 80 and PFU 100 to allow conditional operations. Additional shared registers 101 and address registers 102 are available to all four SFUs 81. In addition to their local registers, SFU 81 and VFU 82 have access to a set of eight global floating-point registers, GRU 105. These registers can used as a source operand in place of a local register. However, SFU 81 and VFU 82 cannot use the global registers as destination operands. Rather, a separate module must be programmed to move data into the global registers. This module can move data from any local floating-point register of SFU 81 or VFU 82 modules into a global register. It can also transfer data between global registers.
Another presently prefened embodiment is illustrated in relevant part in Figures 12 through 15. As shown in Figure 12, the internal configuration of FPE 19 and DME 18 have changed, as compared with the foregoing. MTU 50 and PCI 34 interface blocks have been incoφorated into DME 18. High Speed Bus (HSB) 48, HSB Arbiter 49, and Bridge 47 have been removed. DME 18 is connected to the Processor Bus 44 instead of to HSB 48.
FPE 19 comprises, for example, four Vector Processing Engines (VPE), 19a, 19b, 19c, and 19d, instead of the configuration shown in Figure 11, including a SIU, and a plurality of SFU and VFU units. DME 18 further comprises a Switch Fabric 150, five MCU (151a through 151d and 152), PCI 34 and MIU 50. The five MCUs, PCI 34, and MIU 50 interface with Switch Fabric 150 which provides bi-directional communication between these units. Four of the MCUs (151a, 151b, 151c, and 151d) interface respectively with the four VPEs (19a, 19b, 19c, and 19d) in FPE 19. The fifth MCU, 152, interfaces with Processor Bus 44 to enable communication between
DME 18 and PCE 17.
As shown in Figure 13 (VPE 19a is illustrated), each VPE preferably comprises four Vector Processing Units (VPU), 153a, 153b, 153c, and 153d, which respectively interface with a VPE Bus 155. VPE Bus is preferably 256 bits wide, and provides each VPU with bi-directional communication with a corresponding MCU and with the other associated VPU's.
An exemplary configuration for the VPUs is shown in Figure 14. Here, each VPU comprises two banks of memory 160a and 160b formed by an IEM and a bank of the FPE Instruction Memory (FIM) 170. Each VPU further comprises a bank of Registers 162, an Execution Unit 163, a Load/Store Unit 162, a Decode Unit 164, and a Fetch Unit 165. In one presently preferred embodiment, Registers 162 include sixteen 32-bit floating-point registers and eight 32-bit integer registers. Execution Unit 163 preferably includes six Floating-point Multiply- Accumulate units (FMAC) and an integer Arithmetic Logic Unit (ALU).
As shown in Figure 15, each MCU comprises a bank of Random Access Memory (RAM) 180 and a Direct Memory Access (DMA) controller 181. DMA controller 181 can be configured to transfer data bi-directionally between RAM 180 and devices connected to VPE Bus 155. DMA controller 181 can further be configured to transfer data, bi-directionally, between RAM 180 and Switch Fabric 150. As presently preferred, each MCU further comprises a programmable Processing Controller Unit (PCU) 182 and a PCU Instruction Memory 183. Software programs may be stored in PCU Instruction Memory 183 and executed on PCU 182 for the puφose of configuring DMA controller 181 to transfer data to and from RAM 180. Each MCU may be viewed as a programmable engine designed to efficiently move data bi-directionally between RAM 180 and devices connected to VPE Bus 155, or between RAM 180 and Switch Fabric 150.
In a presently prefened embodiment of a Data Movement Engine (DME), four MCUs are each interfaced through VPE Bus 155 with a Vector Processing Engine (VPE). Each Vector Processing Engine further comprises four Vector Processing Units, each of which is preferably interfaced to the VPE Bus. As noted, the fifth MCU is interfaced to Processor Bus 44 for the puφose of providing bi-directional communication with the PPU Control Engine (PCE) 17. A Switch Fabric facilitates the bi-directional transfer of data between the attached modules (e.g., MCUs, PCI, MIU). As presently prefened, Switch Fabric 150 comprises seven bi-directional 256 bit ports. The Switch Fabric may simultaneously transfer data between any one or more pairs of modules attached to its ports.
A PCI or similar interface (e.g.: PCI-X, PCI-Express, S-Bus, USB2, IEEE 1394 Firewire) is preferably attached to one port of the Switch Fabric, and facilitates connection of the PPU to an attached host computer (a PC or stand alone game console).
A Memory Interface Unit (MIU) is preferably attached to another port of the Switch Fabric, and forms the connection between the PPU and an External Memory (not shown). In order to access external memory, as managed by MIU 152, Memory Control Units (MCU) issue Direct Memory Access (DMA) data transfers requests to the MTU, through the Switch Fabric. In addition, memory transfers may occur between External Memory and PCI, between an MCU and PCI, and between individual MCUs. Figure 16 illustrates in one embodiment an exemplary physics simulation for a
PPU designed and or implemented in accordance with present invention. Conceptually, the physics simulation consists of one or more hardware module(s) shown in relation to and one or more software module(s). Wherever possible, the present invention seeks to shift execution responsibility for computationally intensive tasks to a hardware module. The software module provides the interface between the hardware and a controlling/requesting application. The software module also provides a variety of non-computationally intensive functions. The particular embodiment described below is a presently prefened example. Numerous design alternatives and modifications will be apparent to those of ordinary skill in the art. For example, the designation of a software/hardware boundaries as per individual functionality is clearly subject to individual adaptation.
The architecture of the physics simulation can be conveniently described in terms of its data structures and functional blocks. The rigid and soft body data structures are at the heart of the architecture. They contain all of the physical parameters and state information for every simulated object. Physical parameters describe the geometry (which is used for detecting collisions between objects), as well as the kinematics and dynamics (which are used in the physical simulation) of the bodies. They are initially configured by the application, but can also be accessed and modified while a physics simulation is running. Other data structures that are configured by the application include, as examples, force objects and constraint objects. Likewise, these data structures can also be modified as the physics simulation is running. The contact data structures are automatically re-generated at every simulation time step by the collision detection block, but can be accessed by the application as the simulation is running. The simulation in the example illustrated in Figure 16 includes four major functional areas: a host interface 110, collision detections (e.g., rigid body collision detection 111 and particle collision detection 112), force computation 113, and dynamics simulation (e.g., ODE solvers 114 and 115, timing controller 116, and differentiation blocks 117 and 118). Each of these functional areas consists, in turn, of one or more functional blocks.
Host interface 110 provides the controlling/requesting application(s) with access to the data structures as well communication with, and configuration of, all hardware units. It is also responsible for providing event notification to the application(s), (e.g.: monitoring an object for collisions).
Collision detection, just as its name implies, is responsible for detecting collisions between objects during a physics simulation. At each time step of the simulation, the collision detection blocks update the contact data structures. The contact force computation unit uses this information to calculate the forces necessary to prevent the bodies from inteφenetrating. It can also be accessed by software through the host interface. Collision detection, as presently prefened, is divided into two basic forms rigid body (e.g., hard surfaces, moving solid bodies, etc.) collision detection 111, and particle (i.e., soft bodies such as water, smoke, cloth, etc.) collision detection 112. Force computation generally consists of three functional blocks which, for each time step, calculate various components of force and torque that are being applied to each rigid body or particle set. First, contact forces are computed as the result of contact (collision or resting contact) between bodies. Second, application defined forces are computed by evaluating the force objects configured by the application. Third, constraint forces are computed in order to guarantee that bodies will not move in ways that would not violate the constraints configured by the application through the use of constraint objects. These various forces and torques are added into the force and torque accumulators for each object. Accordingly, some exemplary force computation functions 113 include: colliding contact forces, constraint resting contact forces, general force and torque, particle constraint forces, contact forces, and inter-particle forces.
Dynamics simulation components consists of a collection of ODE solvers (114 and 115), a timing control 116, and a differentiation block (117 and 118). Several ODE solvers, including explicit Euler, midpoint, and Runge-Kutta, are typically required in order to various levels of simulation precision. In addition, an implicit integration method (e.g., Back Euler) is also-required for simulating the particle meshes used in soft bodies. Timing control 116 is responsible for determining and communicating the size of the next simulation time step. This can be affected by collisions, as well as ercor estimates generated by one or more of the ODE solvers. Differentiation block 117/118 is responsible for calculating the cunent time derivative (slope) of each body's state vector. The state vector contains the cunent position, rotation, linear momentum, and angular momentum of a rigid body. For particles, it contains only the cunent position and linear momentum.
Rigid body data structures 121 contain all the physical parameters and state information for every simulated object. Physical parameters describe the geometry (which is used for detecting collisions between objects), as well as the kinematics and dynamics (which are used in the physical simulation) of the bodies. They are initially configured by the application, but can also be accessed and even modified as the simulation is running. Geometry Objects 121 A describe the shape of a rigid body, are used exclusively for computing collisions with rigid bodies. They are associated with dynamics objects. As presently contemplated, the following types of geometry objects are supported: simple primitive (e.g., sphere, box, plane, cylinder, particle), polygonal mesh (e.g., concave, convex), and geometry group. A polygonal mesh geometry object contains a pointer to a list of vertices and a pointer to a list of faces. Faces can be represented as a triangle strip, or as individual triangles. Hierarchies of geometry objects can be created using' the geometry group primitive to represent complex rigid bodies. All geometry objects include a transform (e.g., translation, rotation, scale) that relates the object's local coordinate system to a parent object's coordinate system, or to a world coordinate system, if the object lacks a parent.
The following fields are preferably stored in a geometry object: object type, parent geometry object or dynamics object pointer, transformation (e.g., a 4 x 4 matrix), parameters for simple primitives, triangle vertex list pointer, and a triangle face list pointer.
Special "ghost" geometry objects can be created that are not associated with a dynamic object. These geometry objects are only used by the collision detection block, and collisions with these objects do not affect the physical simulation. Ghost objects are useful for generating events that notify the application when a body has moved into or out of a defined space.
Dynamics Objects 12 IB contain all the data associated with a rigid body, other than its shape. This data is initially configured by the application, but is automatically updated at every simulation time step. The following fields are stored: physical constants (e.g., inverse of mass, inverse of inertia tensor), state vector (e.g., position, rotation, linear momentum, angular momentum), derived quantities (e.g., inverse of inertia tensor, linear velocity, angular velocity, rotation matrix), and computed quantities (e.g., force accumulator, torque accumulator).
Dynamics Objects 121B can be temporarily disabled by the application. While disabled, they do not participate in the physical simulation. Soft bodies 122 are used for simulating particle meshes or lattices such as cloth, rope, smoke, water, and fire. Each soft body consists of a mesh or lattice of particles, connected with simple damped springs. Unlike rigid bodies, soft bodies do not require geometry objects, since the geometry of a soft body is implicitly defined by the positions of the particles in the mesh or lattice. Particle Dynamics Objects 122 A are soft body analogs to rigid body dynamics objects discussed above. Much like a rigid body, each soft body particle has data associated with it, but since particles are point masses there is no need for storing moment, of inertia, rotation, angular momentum/velocity, or torque. The following fields are stored: state vector (e.g., position, velocity), and other quantities (e.g., inverse of mass, force accumulator).
For compatibility with a conventional software-based physics engine, collisions are calculated between soft body objects and special Deflector Objects 122B. Deflector objects 122B only represent geometry and hence do not participate in the physical simulation. Force Objects are configured by the application in order to apply forces to the rigid and soft bodies that have been created. Although an application can modify force objects at each time-step, even the data-driven force objects are sophisticated enough that for most forces, an object can be created, and allowed operate without intervention for the duration of its existence. Force objects can be used to easily simulate gravity, viscous drag, springs, and spatial interactions (e.g., field forces). Each force object can be configured to exert a force, and thereby possibly producing torque, on a single rigid body (i.e., an unary force), or equal but opposite forces on two rigid bodies (i.e., a binary force). A force object can also be configured to exert a force on every rigid body in a physics simulation. Force objects can also act on soft bodies. In such cases, a force can be made to act on a single particle, every particle in a single soft body, or every particle in every soft body.
Data driven force objects are a simple way for the application to control standard types of forces acting on various bodies. The simplest data-driven force object is the constant force. At each time step, this object will exert a constant force and/or torque on a specified object. A constant force object may be updated periodically, possibly at every time step, by the application, or may be left alone until deleted. Data-driven force objects can also exert forces that are simple mathematical functions of the parameters in the dynamics object (e.g.: position, velocity, angular momentum, etc). For more sophisticated forces, instead of just providing a mathematical function, the application can provide a procedure to compute a force (i.e., a procedural force object) that will be applied to a body or between bodies. This allows reduced communication with the application at each time step, since the procedural object can calculate the proper force, instead of requiring the application to provide it. Constraint objects are applied to both rigid and soft bodies. Rigid body constraints allow the application to configure various restrictions on the way rigid bodies move. These constraints are also known as "joints". The following types of constraints are typically supported: ball and socket, hinge/axle, slider/piston, universal, springs, fixed, angular motor. Constraint objects allow configuration of limits on the relative motions and orientations of the constrained bodies. These limits allow constraints such as hinges to only twist through a limited angle, or for rag doll limbs to ensure that they always maintain realistic poses. Joints with friction lose energy as the joint is manipulated, so that rotations around constraints eventually come to rest. Soft body constraints allow the application to configure various restrictions on the way soft bodies move. The position of individual particles or strips of adjacent particles can be constrained relative to a specified reference frame.
The collision detection blocks (111 and 112) generate contact data at every simulation step. Contact data represents the input to the contact force computation blocks, but can also be accessed by the application, through the host interface. For rigid bodies, the most common contacts are vertex/face contacts and edge/edge contacts. A vertex/face contact occurs when a vertex of one polyhedron is in contact with a face on another polyhedron. An edge/edge contact occurs when a pair of edged contact. It is assumed in this case that the two edges are not collinear. For example, a cube resting on a table, but with its bottom face hanging over the edge would still be described as four contacts; two vertex face contacts for the vertices on the table, and two edge/edge contacts, one on each edge of the cube that crosses over an edge of the table. The contact data structure typically contains the following information: Body "A"(containing vertex), Body "B" (containing face), contact point (world space), outward pointing normal of face, edge direction for "A", edge direction for "B", and Boolean to identify vertex/face or edge/edge contact.
The Host Interface block 110 manages all communication between the PPU and the controlling/requesting application. As presently prefened, the Host Interface is formed by an operative combination including a PPU driver resident in the host and one or more hardware or software components resident in the PPU. Host Interface 110 is responsible for managing event notification and filtering. This allows the application to be notified only of events that it cares about. It provides the mechanism for the application to create, modify, and delete rigid body, force and constraint objects. It allows the application to periodically access all position and orientation data for bodies that have moved. The simulation Timing Control 116 is responsible for determining and communicating the size of the next simulation time step. This can be affected by collisions, as well as the ercor estimate generated by the ODE solver (115 and/or 117). It communicates with the ODE Solver to determine the enor estimate, and if the estimate exceeds a configured threshold, it reduces the time step, and restarts the solver. It also communicates with the Collision Detection unit (111 or 112), and when a collision occurs near the middle of a large time step, it approximates the actual collision time, and backs-up the simulation closer to the time when the two bodies first came into contact.
A lot of research has been done in the field of collision detection, and many good algorithms have been developed. Many algorithms can exploit "coherence" to reduce the amount of work that must be performed at each time step. Coherence is the use of information from previous time-step to reduce work. For example, when processing two objects, A and B, if a separating plane can be found for which all of the vertices of A lie on one side, and all of the vertices on B lie on the other side, the equation of the plane can be stored and used in subsequent time steps to easily verify that the objects have not collided with each other. Additional work only need to be performed if separating plane test fails.
Many algorithms use bounding box hierarchies to reduce the complexity of collision detection processing. See, e.g., U.S. Patent Application No. 2002/0154128. Typically, the hierarchy is defined by the application, however, at the cost of some additional processing, it could be created automatically by the physics simulation.
Various types of bounding boxes can be used, such as Axis Aligned Bounding Boxes (AABB's), Object-aligned Bounding Boxes (OBB's), and spherical bounding boxes. Another algorithm uses a multi-resolution hash table to detect collisions in 0(n). The three dimensional world is divided into a regular grid. Lower resolution (larger cell size) grid levels are superimposed on the initial grid. When each object is added to the hash table, a grid level is selected such that the object occupies no more than eight cells (voxels) of the grid. For each occupied cell, a conesponding entry is added to the hash table. The hash function is computed using the X, Y, and Z coordinates of the cell, as well as the grid level. Once all objects are added to the hash table, a second pass is made through all objects, and only objects which are found to occupy the same grid cells are candidates for collision.
In a conventional software-based physics engine, between each integrator step, the application can call functions to apply forces to the rigid body. These forces are added to "force accumulators" in the rigid body dynamics object. When the next integrator step happens, the sum of all the applied forces is used to push the body around. The forces accumulators are set to zero after each integrator step.
By moving the implementation of the physical simulation onto hardware, the host CPU is freed from a large computational burden. However, opportunity for the controlling/requesting application to control the forces exerted on the various bodies in the simulation must be provided. This is accomplished through force objects and the force and torque computation block.
The simplest force objects are the data driven force objects. Whenever the application wishes to apply a force to one or more objects, it creates a force object. If the force is constant or can be expressed as a simple mathematical function of parameters in the dynamics object (such as position or velocity), a data-driven force object can be used. The application identifies one or two bodies that the force should be applied to (e.g.: gravitational attraction, magnetic forces, etc.), or specifies that the force should be applied to all bodies (e.g.: gravity, air resistance, etc.). When more sophisticated forces are required, the application can create procedural force objects. The application provides a procedure that can be executed at each time step to compute the force that should be applied. These procedures can make use of local variables to store data, and can also access parameters in the dynamics object. Colliding contact occurs when two bodies are in contact at some point and they have a velocity toward each other. Colliding contact requires an instantaneous change in velocity. Whenever a collision occurs, the state of a body, which describes both position and velocity (actually the momentum is stored in the state vector, but momentum is a constant function of velocity), undergoes a discontinuity in velocity. The methods for numerically solving ODE's require that the state Y(t) always varies smoothly. Clearly requiring Y(t) to change discontinuously when a collision occurs violates that assumption.
This problem may, however, be avoided as follows. If a collision occurs at time tc, the ODE solver is instructed to stop (or backup to tc). Using the state at this time, Y(tc), the new velocities of the bodies involved in the collision are computed, and Y is updated. Then, the numerical ODE solver is restarted, with the new state, Y(tc), and simulates forward from tc.
Consider two bodies, A and B, that collide at time to. Let ρa(t) denote the particular point on body A that satisfies pa(t ) = p. Similarly, let pb(t) denote the point on body B that coincides with ρa(t0) = p at time to. Although ρa(t) and ρb(t) are coincident at time to, the velocity of the two points may be quite different. The velocity of the point pa(t) is: d/dt pa(to) = va(to) + ωa(t ) x ( a(to) - xa(to) ) In the following equation, n'(to) is the unit surface normal. Clearly, vreι gives the component of the relative velocity in the direction of the surface normal: vrel = n'(to) • (d/dtpa(to) - d/dtpb(t ) )
When vrel < 0, the bodies are colliding. If the velocities of the bodies don't immediately undergo a change, inter-penetration will result. Any force that might be applied at P, no matter how strong would require at least a small amount of time to completely halt the relative motion between the bodies. Therefore, a new quantity J, called an impulse is used. An impulse is a vector quantity, just like a force, but it has units of momentum. Applying an impulse produces an instantaneous change in the velocity of a body. Constraint and resting contact force must also be computed. Whenever bodies are resting on one another at some point (for example, a particle or rigid body in contact with the floor with zero velocity), they are said to be in "resting contact." In this case, a force must be computed that prevents the body from accelerating downward. Unlike colliding contact, resting contact does not require a discontinuity in velocity.
Consider a configuration with n contact points. At each contact point, bodies are in resting contact, that is, the relative velocity vreι is zero (to within a numerical tolerance threshold). The distance between the each pair of contact points at future timesit > to may be expressed as : di(to) = n'(t) • (pa(t) - pb(t) ) At each contact point, there must be some forced n'j(t0), where^ is an unknown scalar, and n'i(to) is the normal at the z'-th contact point. The goal is to determine what each^ is. In computing them's, they must all be determined at the same time, since the force at the z'-th contact point may influence on or both of the bodies of the -th contact point.
The ODE solver blocks (114 and 115) perform numerical integration of ordinary differential equations. Several explicit and implicit methods are available conventionally, with different levels of accuracy, however, increased accuracy requires additional computation. They support adaptive time-step sizes by, at each step, calculating and sending an estimate of the integration enor to the simulation timing control block.
The differentiation block(s) (117 and 118) is responsible for calculating the cunent time derivative (slope) of each body's state vector. The state vector, Y, contains the cunent position, rotation, linear momentum, and angular momentum of a rigid body. For particles, it contains only the cunent position and linear momentum. This unit calculates: d/dt Y(t), where Y(t) is the state at time "t". The inputs to this block are the state vector and the force and torque accumulators stored in the dynamics object. For rigid bodies, d/dt Y(t) = [ v(t), '/2 ω(t) q(t), F(t), τ(t) ]. For particles, d/dt Y(t) = [ v(t), F(t) I m ]. The foregoing embodiment, including its constituent functional blocks, is one prefened embodiment of a PPU designed in accordance with the present invention. As has been noted above some conventional tools and solutions have been brought to bear on the problem of implementing a so-called "hardware-based" physics engine having expanded capability over conventional software-based solutions. Yet, the physics processor architecture of the present invention addresses specific requirements of complex physics simulations while avoiding the limitations inherent in conventional CPU. For example, in one aspect the PPU architecture of the present invention is characterized by the use of multiple, parallel, task-specific processing modules. Extreme parallelism is advantageous since it provides the necessary floating point computational capacity required for solving the systems of equations inherent in a physics simulation. The Floating Point Engine (FPE) described in exemplary form above provides this capacity using vector processing units which operate on parallel, ultra-high bandwidth, low latency Inter Engine Memories (IEM). By avoiding the use of conventional caches and the associated processor stalls, the FPE is able to approach its theoretical maximum performance, even when operating on large data structures. In order to keep the Inter Engine Memories (IEM) loaded with the data required by the FPE a massively parallel, crossbar-based, Data Movement Engine
(DME) is provided. It transfers data between Inter Engine Memories (IEM), as well as to and from memory. Because each FPE floating point unit is given two Inter
Engine Memories (IEM), the DME is able to operate in parallel with the FPE without blocking FPE access to the Inter Engine Memories (IEM).
In addition, the RISC CPU type architecture proposed, at least in the presently prefened embodiment, for the DME provides for general puφose processing of miscellaneous operations that are not computationally or bandwidth intensive. Such
RISC CPUs use off the shelf cores and come with standard programming tools such as a C compiler, debugger, etc.
In another related aspect, the PPU of the present invention may be viewed as a hybrid vector processor adapted to use a Very Long Instruction Word (VLIW) Sets. That is, the DME and FPE engines presently prefened use custom instruction sets which are a hybrid between vector processing and VLIW architecture. Vector processing is needed to allow hundreds of floating point and data movement operations to be performed per clock cycle. The VLIW instruction word allows multiple vector and non-vector operations to occur with each other. This prevents stalling the vector units while other non- vector operations are executed. Careful analysis of the algorithms required for physics simulation has resulted in an instruction word format that can always provide the necessary non- vector processing in parallel with the vector instructions. For example, the VLIW instruction word includes instructions for special puφose execution units such as the global register unit, and the branching unit. Explicit parallelism in VLIW also reduces the requirement for hardware pipelining, therefore, more silicon is available for instantiating additional floating point arithmetic units and for larger Inter Engine Memories (IEM).
In yet another related aspect, the PPU of the present invention makes use of large, parallel, on-chip Inter Engine Memories (IEM). The use of two banks of large Inter Engine Memories (IEM)eliminate the need for traditional caches. These Inter Engine Memories (IEM)combine the size of a traditional L2 cache with the low latency of an LI cache. They also provide many times the bandwidth of an on-chip LI cache, and do not incur any of the limitations of "set associativity". Rather than using a Least Recently Used (LRU) algorithm and "set associativity" to determine what data should be kept in cache, the DME can be explicitly programmed to load the exact data set that the FPE will need to operate on. Through the use of ultra-threading technology, the FPE and DME engines exchange Inter Engine Memories (IEM) in a zero-latency context switch. The FPE can immediately begin operating on the newly loaded data, while the DME writes the results of the previous floating point operation(s) to memory, and loads the data for the next floating point operation(s).
The method of communication between a controlling/requesting application and a PPU designed according to the present invention bear some additional discussion at this point. The conventional programming mechanism whereby the application derives physics simulation data from a software-based physics engine is described above in relation to Figure 2 in the context of a typical rigid body physical simulation.
Within this simulation sequence, each function defined by the software-based physics engine is called once per time-step by the host CPU, and physics related data computations are returned directly to the CPU. When a physical simulation is running on the same device (CPU) as the controlling/requesting application, as is the case for a traditional software-based physics engine, the communication process between application and physics engine is straightforward. That is, the application simply calls each functional component of the physical simulation sequentially, and between calls, can directly access simulation data structures which are resident in the CPU's main memory, as well as make calls to the API associated with the physics engine. However, when a dedicated hardware device is used to develop physics simulation data, a different method of communication is required. In one prefened embodiment consistent with the present invention, multi-level
APIs are provided for use by the controlling/requesting application. These API's, and their underlying software, preferably run on the same device as the application, i.e., the host CPU. As shown in Figure 17, the lowest level API 133 provides access a PPU Driver, which manages all communication between the CPU running application 130 and PPU hardware 134. The higher level APIs may be associated with, for example, a software-based physics engine, and/or a 3-D effects engine , here, shown combined as an Effects Engine 131.
PPU Driver 133 is preferably able to communicate with PPU 134 over a number of different physical interfaces, including as examples, USB, USB2, FireWire, PCI, PCI-X, PCI-Express, and Ethernet. It preferably supports asynchronous event notification to the controlling/requesting application using, for example, polling or interrupts communicated via signals or messages as required by the host. It also allows the application to make changes to the simulation in response to a received event notifications (e.g.: create/delete/modify rigid bodies or contact points).
Communication between PPU driver 133 and the PPU 134 may occur through a DMA or memory mapped I/O (or PIO). The communication mechanism preferably provides data to the application in a format that facilitates display data renderings using a 3D API, such as Direct3D or OpenGL. Further, it should also support optional (lossy or loss-less) compression of the data.
The PPU described thus far provides a number of remarkable benefits and overcomes the deficiencies of conventional, software-based physics engines. For example, the present invention provides in one aspect a PPU architecture specifically designed to run physics algorithms that otherwise threaten to bottleneck a host CPU. Such capability is provided within a PPU architecture that preferably provides collision detection for rigid and soft bodies, a Linear Complementarity Problem (LCP) solver, and numeric integration of ordinary differential equations.
The PPU architecture is characterized in a related aspect by the use of parallel, task-specific processing modules. The modules include a PPU Control Engine (PCE). The PCE preferably provides general puφoses processing for various operations that are not computationally or bandwidth intensive. In one suggested embodiment is may be readily implemented with off the shelf RISC cores, and may make use of commercially available compilers and debugging tools.
The modules also include a Data Movement Engine (DME). In one aspect, this module is preferably a massively parallel device capable of efficiently moving large and/or numerous data blocks. It is preferable operated according to a data- driven programming model and flexibly allows data transfers (i.e., movements) between an external, high-speed memory and internal memory units. The DME should always move data sufficiently fast to avoid blocking or operation of the Floating Point Engine (FPE).
In one related aspect, the FPE is preferably a massively parallel floating point engine. As prefened, it uses no caches. It takes the form of a vector processor enabling up to hundreds of floating point and data movement operations per clock cycle. It also assumes the form of a Very Long Instruction Word (VLIW) architecture. This VLIW architecture allows multiple non-vector operations to occur in parallel with vector operations. Explicit parallelism in VLIW reduces requirements for hardware pipelining. Accordingly, more PPU chip space may be allocated to arithmetic units.
In yet another aspect, the PPU according to the present invention makes use of large, parallel, internal memories (i.e., Inter-Engine Memories - IEMs). Large IEMs eliminate the need for memory caches. Rather, explicit control in maintained over the contents of the internal memories . For example, 2 Terabits/second of bandwidth is presently contemplated for internal memories facilitating data movement to/from the FPE. The internal memory structure has no "set associativity" limitations. In a related aspect, multi thread or ultia-threading data transfer techniques further contribute to the unique efficiencies provided by the present invention. By partitioning the IEMs into multiple banks, each floating point execution unit in the FPE has access to at least two independent IEMs. While the FPE execution units operate on one IEM bank, the DME has access to another bank. Zero-latency context switching between IEM banks precludes data stalls.
As has been noted, the foregoing sets forth a number of teaching embodiments. The present invention is broader than these exemplary embodiments. Indeed, the scope of the present invention is defined by the attached claims.

Claims

What is claimed is:
1. A method of incoφorating physics data into a game running on a host, wherein the host comprises a memory, a peripheral, and a Physics Processing Unit (PPU) operatively connected to a Central Processing Unit (CPU), the method comprising: running a main game program on the host; calling a PPU driver from the main game program; by means of the PPU driver, initiating operation of the PPU to calculate the physics data.
2. The method of claim 1, further comprising: communicating the physics data from the PPU to the host.
3. The method of claim 1, further comprising: storing the PPU driver in the host.
4. The method of claim 2, wherein the physics data is communicated from the i ^
PPU to the host via at least one physical interface selected from a group of physical interfaces consisting of: USB, USB2, Firewire, PCI, PCI-X, PCI-Express, and
Ethernet.
5. The method of claim 1, wherein the PPU comprises; an internal PPU memory; a Program Control Engine (PCE) controlling operation of the PPU and managing communication with the host; a Data Movement Engine (DME) performing data movement operations; and, a Floating Point Engine (FPE) performing data calculations; and wherein the method further comprises: communicating a command from the PCE to the DME; in response to the command., moving data from an external memory and storing the data in the internal PPU memory.
6. The method of claim 5, further comprising: allowing the FPE access to the data stored in the internal PPU memory.
7. The method of claim 6, wherein the internal PPU memory comprises multiple banks, and wherein steps of moving data from the external memory to the i - internal PPU memory and allowing the FPE access to the data moved into the internal PPU memory comprise steps in a ultra-threading technique.
8. The method of claim 1, wherein the host further comprises a Graphics Processing Unit (GPU), and the method further comprises: storing a game engine in the host; storing an effects engine in the host; wherein the PPU driver is callable by at least one of the main game program, the game engine, and the effects engine.
9. The method of claim 8, wherein the operation of the PPU is initiated only by means of the PPU driver.
10. A method, comprising: executing a main game program on a host comprising a Central Processing Unit (CPU) and a Physics Processing Unit (PPU); calling a PPU driver from the main game program; initiating operation of the PPU through the PPU driver; and, calculating physics data in the PPU.
11. The method of claim 10, further comprising: communicating the physics data from the PPU to the CPU.
12. The method of claim 11, wherein physics data is communicated from the PPU to the CPU according to a protocol selected from a group of data communication protocols defined in relation to USB, USB2, Firewire, PCI, PCI-X, PCI-Express, and Ethernet.
13. The method of claim 10, further comprising: executing a game engine routine on the host; and, calling the PPU driver from the game engine routine.
14. The method of claim 10, wherein the host further comprises a Graphics Processing Unit (GPU), and the method further comprises: executing an effects engine routine associated with the GPU; and calling the PPU driver from the effects engine routine.
15. A method for use on a host comprising a Central Processing Unit (CPU) and a Physics Processing Unit (PPU), the method comprising: executing a main game program on the CPU; during the execution of the main game program, making a request for physics data; in response to the request, initiating operation of the PPU to calculate the physics data.
16. The method of claim 15, wherein initiating operation of the PPU comprises: moving data from an external memory and storing the data in a memory internal to the PPU.
17. The method of claim 16, further comprising: executing multiple, parallel floating point operations on the data stored in the internal memory.
18. The method of claim 17, wherein the execution of multiple, floating point operations comprises a multi-thread operation.
19. The method of claim 17, wherein the PPU comprises a Processing Control Engine (PCE) controlling operation of the PPU, and wherein making a request for physics data further comprises: communicating a command packet from the host to the PCE.
20. The method of claim 19, wherein the PPU further comprises a Data
Movement Engine (DME) and a Floating Point Engine (FPE) and wherein the method further comprises: in response to the command packet, communicating an instruction from the PCE to the DME and storing data from the external memory in the internal memory; and, generating the requested physics data in the FPE by executing multiple, parallel floating point operations on the data stored in the internal memory.
21. The method of claim 20, further comprising: communicating the requested physics data from the PPU to the host in response to the command packet.
22. The method of claim 21, wherein the requested physics data is communicated from the PPU to the host via at least one physical interface selected from a group of physical interfaces consisting of: USB, USB2, Firewire, PCI, PCI-X, PCI-Express, and Ethernet.
23. A method of implementing a system capable of generating large quantities of physics data for the puφose of constructing a physically realistic animation within the context of a game program, the method comprising: providing a hardware platform adapted to run the game program, the hardware platform comprising at least a memory and a general puφose microprocessor; and, providing a dedicated, hardware based Physics Processing Unit (PPU) adapted to generate the physics data.
24. The method of claim 23, wherein the step of providing a dedicated, hardware based PPU further comprises: connecting an expansion board comprising the PPU within the hardware platform.
25. The method of claim 23, wherein the step of providing a dedicated, hardware based PPU further comprises: providing a physical data communication path between the general puφose microprocessor and the PPU within the hardware platform.
26. The method of claim 23, further comprising: providing a dedicated, hardware based Graphics Processing Unit (GPU) adapted to generate graphics data for use within the context of the game program.
27. The method of claim 26, wherein the step of providing a dedicated, hardware based PPU further comprises connecting a first expansion board comprising the PPU within the hardware platform; and, wherein the step of providing a dedicated, hardware based GPU further comprises connecting a second expansion board comprising the GPU within the hardware platform.
28. The method of claim 26, wherein the step of providing a dedicated, hardware based PPU and the step of providing a dedicated, hardware based GPU are both accomplished by connecting a single expansion board comprising the PPU and GPU within the hardware platform.
29. The method of claim 28, wherein the PPU and GPU are capable of communicating data across a physical connection on the single expansion card.
PCT/US2004/030687 2003-10-02 2004-09-20 Method for providing physics simulation data WO2005038560A2 (en)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US50752703P 2003-10-02 2003-10-02
US60/507,527 2003-10-02
US10/715,370 2003-11-19
US10/715,370 US7739479B2 (en) 2003-10-02 2003-11-19 Method for providing physics simulation data

Publications (2)

Publication Number Publication Date
WO2005038560A2 true WO2005038560A2 (en) 2005-04-28
WO2005038560A3 WO2005038560A3 (en) 2006-05-18

Family

ID=34396352

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/US2004/030687 WO2005038560A2 (en) 2003-10-02 2004-09-20 Method for providing physics simulation data

Country Status (2)

Country Link
US (1) US7739479B2 (en)
WO (1) WO2005038560A2 (en)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101782930B (en) * 2009-01-21 2012-08-22 国际商业机器公司 Method and device for carrying out molecular dynamics simulation on multiprocessor system

Families Citing this family (52)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9626824B2 (en) * 2000-10-11 2017-04-18 Igt Game result graphical verification on remote clients
US7353149B2 (en) * 2001-04-25 2008-04-01 Telekinesys Research Limited Method and apparatus for simulating dynamic contact of objects
US7363199B2 (en) * 2001-04-25 2008-04-22 Telekinesys Research Limited Method and apparatus for simulating soft object movement
US7526456B2 (en) * 2004-01-22 2009-04-28 Nvidia Corporation Method of operation for parallel LCP solver
US20080119278A1 (en) * 2004-09-28 2008-05-22 Gadacz Nicholas M Database Communications for a Gaming Network
ES2317607T3 (en) 2004-10-12 2009-04-16 S.C. JOHNSON &amp; SON, INC. METHOD FOR DRIVING A DISTRIBUTION UNIT.
US8061562B2 (en) 2004-10-12 2011-11-22 S.C. Johnson & Son, Inc. Compact spray device
US7475001B2 (en) * 2004-11-08 2009-01-06 Nvidia Corporation Software package definition for PPU enabled system
US7620530B2 (en) * 2004-11-16 2009-11-17 Nvidia Corporation System with PPU/GPU architecture
US7788071B2 (en) * 2004-12-03 2010-08-31 Telekinesys Research Limited Physics simulation apparatus and method
US20060142079A1 (en) * 2004-12-29 2006-06-29 Igt Universal progressive game pool
US7289941B2 (en) * 2005-03-07 2007-10-30 Ageia Technologies, Inc. System and method providing variable complexity in a physics simulation
US7565279B2 (en) * 2005-03-07 2009-07-21 Nvidia Corporation Callbacks in asynchronous or parallel execution of a physics simulation
US7580821B2 (en) 2005-08-10 2009-08-25 Nvidia Corporation Application programming interface for fluid simulations
US20070067517A1 (en) * 2005-09-22 2007-03-22 Tzu-Jen Kuo Integrated physics engine and related graphics processing system
US7643753B2 (en) 2005-09-29 2010-01-05 Broadlight Ltd. Enhanced passive optical network (PON) processor
US9059946B2 (en) * 2005-09-29 2015-06-16 Broadcom Corporation Passive optical network (PON) packet processor
US7590137B1 (en) * 2005-11-22 2009-09-15 Xilinx, Inc. Parameterizable compact network processor for low-level communication with an integrated circuit
WO2007089271A2 (en) * 2006-01-27 2007-08-09 Ageia Technologies, Inc. Application programming interface for fluid simulations
EP2038026A1 (en) * 2006-06-19 2009-03-25 AMBX UK Limited Game enhancer
US8223159B1 (en) * 2006-06-20 2012-07-17 Nvidia Corporation System and method for transferring data between unrelated API contexts on one or more GPUs
US7583262B2 (en) * 2006-08-01 2009-09-01 Thomas Yeh Optimization of time-critical software components for real-time interactive applications
US8206215B2 (en) * 2006-08-31 2012-06-26 Igt Gaming machine systems and methods with memory efficient historical video re-creation
US20100029377A1 (en) * 2006-10-03 2010-02-04 Canterbury Stephen A Shared physics engine in a wagering game system
US7933858B2 (en) * 2007-03-23 2011-04-26 Autodesk, Inc. General framework for graphical simulations
US20090005138A1 (en) * 2007-06-28 2009-01-01 Microsoft Corporation User Creatable Machines
US8040351B1 (en) 2007-07-31 2011-10-18 Nvidia Corporation Using a geometry shader to perform a hough transform
US8065127B2 (en) * 2007-09-24 2011-11-22 Siemens Corporation Particle system architecture in a multi-body physics simulation
US8069124B2 (en) 2008-03-26 2011-11-29 Intel Corporation Combining speculative physics modeling with goal-based artificial intelligence
US20090326888A1 (en) * 2008-06-30 2009-12-31 Bader Aleksey A Vectorized parallel collision detection pipeline
US20100178644A1 (en) * 2009-01-15 2010-07-15 Simquest Llc Interactive simulation of biological tissue
US8745494B2 (en) * 2009-05-27 2014-06-03 Zambala Lllp System and method for control of a simulated object that is associated with a physical location in the real world environment
US20100306825A1 (en) * 2009-05-27 2010-12-02 Lucid Ventures, Inc. System and method for facilitating user interaction with a simulated object associated with a physical location
US8303387B2 (en) * 2009-05-27 2012-11-06 Zambala Lllp System and method of simulated objects and applications thereof
US20110081959A1 (en) * 2009-10-01 2011-04-07 Wms Gaming, Inc. Representing physical state in gaming systems
EP2494454A4 (en) * 2009-10-30 2013-05-15 Intel Corp Two way communication support for heterogeneous processors of a computer platform
US9119655B2 (en) 2012-08-03 2015-09-01 Stryker Corporation Surgical manipulator capable of controlling a surgical instrument in multiple modes
US8909506B2 (en) * 2011-05-31 2014-12-09 Sony Corporation Program, information storage medium, information processing system, and information processing method for controlling a movement of an object placed in a virtual space
US9984489B2 (en) 2011-07-27 2018-05-29 Dreamworks Animation L.L.C. Fluid dynamics framework for animated special effects
US8881945B2 (en) 2011-09-19 2014-11-11 S.C. Johnson & Son, Inc. Spray dispenser
US20130293580A1 (en) 2012-05-01 2013-11-07 Zambala Lllp System and method for selecting targets in an augmented reality environment
EP4316409A2 (en) 2012-08-03 2024-02-07 Stryker Corporation Systems for robotic surgery
US9226796B2 (en) 2012-08-03 2016-01-05 Stryker Corporation Method for detecting a disturbance as an energy applicator of a surgical instrument traverses a cutting path
US9108782B2 (en) 2012-10-15 2015-08-18 S.C. Johnson & Son, Inc. Dispensing systems with improved sensing capabilities
US9317112B2 (en) 2013-11-19 2016-04-19 Microsoft Technology Licensing, Llc Motion control of a virtual environment
US11397694B2 (en) 2019-09-17 2022-07-26 Micron Technology, Inc. Memory chip connecting a system on a chip and an accelerator chip
US11416422B2 (en) 2019-09-17 2022-08-16 Micron Technology, Inc. Memory chip having an integrated data mover
US11163490B2 (en) * 2019-09-17 2021-11-02 Micron Technology, Inc. Programmable engine for data movement
US11836529B2 (en) 2019-12-17 2023-12-05 Red Hat, Inc. Iterative workload processing having a mandatory processing task and a preferred processing task
US11376502B2 (en) * 2020-05-28 2022-07-05 Microsoft Technology Licensing, Llc Adjudicating fault in a virtual simulation environment
US11726817B2 (en) 2020-09-25 2023-08-15 Red Hat, Inc. Scheduling multiple processes with varying delay sensitivity
US11847743B2 (en) * 2021-05-04 2023-12-19 Sony Interactive Entertainment Inc. Voice driven modification of physical properties and physics parameterization in a closed simulation loop for creating static assets in computer simulations

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5664162A (en) * 1994-05-23 1997-09-02 Cirrus Logic, Inc. Graphics accelerator with dual memory controllers
US5938530A (en) * 1995-12-07 1999-08-17 Kabushiki Kaisha Sega Enterprises Image processing device and image processing method
US20050041031A1 (en) * 2003-08-18 2005-02-24 Nvidia Corporation Adaptive load balancing in a multi-processor graphics processing system

Family Cites Families (56)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4887235A (en) 1982-12-17 1989-12-12 Symbolics, Inc. Symbolic language data processing system
JPS62226257A (en) 1986-03-27 1987-10-05 Toshiba Corp Arithmetic processor
US5010477A (en) 1986-10-17 1991-04-23 Hitachi, Ltd. Method and apparatus for transferring vector data between parallel processing system with registers & logic for inter-processor data communication independents of processing operations
US4933846A (en) 1987-04-24 1990-06-12 Network Systems Corporation Network communications adapter with dual interleaved memory banks servicing multiple processors
US5123095A (en) 1989-01-17 1992-06-16 Ergo Computing, Inc. Integrated scalar and vector processors with vector addressing by the scalar processor
US5966528A (en) 1990-11-13 1999-10-12 International Business Machines Corporation SIMD/MIMD array processor with vector processing
CA2069711C (en) 1991-09-18 1999-11-30 Donald Edward Carmon Multi-media signal processor computer system
DE69223772D1 (en) 1991-12-26 1998-02-05 Altera Corp EPROM-BASED CROSS-RAIL SWITCHES WITH ZERO REST POWER CONSUMPTION
AU3616793A (en) 1992-02-18 1993-09-03 Apple Computer, Inc. A programming model for a coprocessor on a computer system
US5666497A (en) * 1995-03-08 1997-09-09 Texas Instruments Incorporated Bus quieting circuits, systems and methods
US5748983A (en) 1995-06-07 1998-05-05 Advanced Micro Devices, Inc. Computer system having a dedicated multimedia engine and multimedia memory having arbitration logic which grants main memory access to either the CPU or multimedia engine
WO1996041279A1 (en) 1995-06-07 1996-12-19 Advanced Micro Devices, Inc. Computer system having a dedicated multimedia engine including multimedia memory
US5818452A (en) 1995-08-07 1998-10-06 Silicon Graphics Incorporated System and method for deforming objects using delta free-form deformation
US5796400A (en) 1995-08-07 1998-08-18 Silicon Graphics, Incorporated Volume-based free form deformation weighting
US5692211A (en) 1995-09-11 1997-11-25 Advanced Micro Devices, Inc. Computer system and method having a dedicated multimedia engine and including separate command and data paths
US5765022A (en) * 1995-09-29 1998-06-09 International Business Machines Corporation System for transferring data from a source device to a target device in which the address of data movement engine is determined
US6331856B1 (en) 1995-11-22 2001-12-18 Nintendo Co., Ltd. Video game system with coprocessor providing high speed efficient 3D graphics and digital audio signal processing
US5870627A (en) 1995-12-20 1999-02-09 Cirrus Logic, Inc. System for managing direct memory access transfer in a multi-channel system using circular descriptor queue, descriptor FIFO, and receive status queue
US6317819B1 (en) 1996-01-11 2001-11-13 Steven G. Morton Digital signal processor containing scalar processor and a plurality of vector processors operating from a single instruction
KR100269106B1 (en) * 1996-03-21 2000-11-01 윤종용 Multiprocessor graphics system
US5898892A (en) 1996-05-17 1999-04-27 Advanced Micro Devices, Inc. Computer system with a data cache for providing real-time multimedia data to a multimedia engine
US6058465A (en) 1996-08-19 2000-05-02 Nguyen; Le Trong Single-instruction-multiple-data processing in a multimedia signal processor
US5812147A (en) 1996-09-20 1998-09-22 Silicon Graphics, Inc. Instruction methods for performing data formatting while moving data between memory and a vector register file
US5892691A (en) 1996-10-28 1999-04-06 Reel/Frame 8218/0138 Pacific Data Images, Inc. Method, apparatus, and software product for generating weighted deformations for geometric models
JP3681026B2 (en) 1997-03-27 2005-08-10 株式会社ソニー・コンピュータエンタテインメント Information processing apparatus and method
US6324623B1 (en) * 1997-05-30 2001-11-27 Oracle Corporation Computing system for implementing a shared cache
JPH1165989A (en) 1997-08-22 1999-03-09 Sony Computer Entertainment:Kk Information processor
US6223198B1 (en) * 1998-08-14 2001-04-24 Advanced Micro Devices, Inc. Method and apparatus for multi-function arithmetic
JP3597360B2 (en) 1997-11-17 2004-12-08 株式会社リコー Modeling method and recording medium
US6317820B1 (en) 1998-06-05 2001-11-13 Texas Instruments Incorporated Dual-mode VLIW architecture providing a software-controlled varying mix of instruction-level and task-level parallelism
US6366998B1 (en) 1998-10-14 2002-04-02 Conexant Systems, Inc. Reconfigurable functional units for implementing a hybrid VLIW-SIMD programming model
JP3017986B1 (en) * 1998-11-26 2000-03-13 コナミ株式会社 Game system and computer-readable storage medium
JP2000222590A (en) * 1999-01-27 2000-08-11 Nec Corp Method and device for processing image
US6266998B1 (en) * 1999-04-01 2001-07-31 DRäGERWERK AKTIENGESELLSCHAFT System for measuring the concentration of gases
US6341318B1 (en) 1999-08-10 2002-01-22 Chameleon Systems, Inc. DMA data streaming
JP2001188748A (en) 1999-12-27 2001-07-10 Matsushita Electric Ind Co Ltd Data transferring device
GB0005750D0 (en) 2000-03-10 2000-05-03 Mathengine Plc Image display apparatus and method
US6608631B1 (en) 2000-05-02 2003-08-19 Pixar Amination Studios Method, apparatus, and computer program product for geometric warps and deformations
US7058750B1 (en) 2000-05-10 2006-06-06 Intel Corporation Scalable distributed memory and I/O multiprocessor system
WO2001099048A2 (en) 2000-06-22 2001-12-27 Lifef/X Networks, Inc. Non-linear morphing of faces and their dynamics
US6867770B2 (en) 2000-12-14 2005-03-15 Sensable Technologies, Inc. Systems and methods for voxel warping
US6779049B2 (en) 2000-12-14 2004-08-17 International Business Machines Corporation Symmetric multi-processing system with attached processing units being able to access a shared memory without being structurally configured with an address translation mechanism
DE10106023A1 (en) 2001-02-09 2002-08-29 Fraunhofer Ges Forschung Method and device for collision detection of objects
US6526491B2 (en) 2001-03-22 2003-02-25 Sony Corporation Entertainment Inc. Memory protection system and method for computer architecture for broadband networks
US7231500B2 (en) 2001-03-22 2007-06-12 Sony Computer Entertainment Inc. External data interface in a computer architecture for broadband networks
US6966837B1 (en) * 2001-05-10 2005-11-22 Best Robert M Linked portable and video game systems
US6754732B1 (en) 2001-08-03 2004-06-22 Intervoice Limited Partnership System and method for efficient data transfer management
US7120653B2 (en) * 2002-05-13 2006-10-10 Nvidia Corporation Method and apparatus for providing an integrated file system
US20040075623A1 (en) * 2002-10-17 2004-04-22 Microsoft Corporation Method and system for displaying images on multiple monitors
GB2399900B (en) 2003-03-27 2005-10-05 Micron Technology Inc Data reording processor and method for use in an active memory device
US20050086040A1 (en) * 2003-10-02 2005-04-21 Curtis Davis System incorporating physics processing unit
US7421303B2 (en) 2004-01-22 2008-09-02 Nvidia Corporation Parallel LCP solver and system incorporating same
US7236170B2 (en) 2004-01-29 2007-06-26 Dreamworks Llc Wrap deformation using subdivision surfaces
US20050251644A1 (en) 2004-05-06 2005-11-10 Monier Maher Physics processing unit instruction set architecture
US7386636B2 (en) 2005-08-19 2008-06-10 International Business Machines Corporation System and method for communicating command parameters between a processor and a memory flow controller
JP2007293533A (en) 2006-04-24 2007-11-08 Toshiba Corp Processor system and data transfer method

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5664162A (en) * 1994-05-23 1997-09-02 Cirrus Logic, Inc. Graphics accelerator with dual memory controllers
US5938530A (en) * 1995-12-07 1999-08-17 Kabushiki Kaisha Sega Enterprises Image processing device and image processing method
US20050041031A1 (en) * 2003-08-18 2005-02-24 Nvidia Corporation Adaptive load balancing in a multi-processor graphics processing system

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101782930B (en) * 2009-01-21 2012-08-22 国际商业机器公司 Method and device for carrying out molecular dynamics simulation on multiprocessor system

Also Published As

Publication number Publication date
US20050075154A1 (en) 2005-04-07
US7739479B2 (en) 2010-06-15
WO2005038560A3 (en) 2006-05-18

Similar Documents

Publication Publication Date Title
US7739479B2 (en) Method for providing physics simulation data
US7895411B2 (en) Physics processing unit
US20050086040A1 (en) System incorporating physics processing unit
US7620530B2 (en) System with PPU/GPU architecture
US8327388B2 (en) Cloth application programmer interface
Slusallek et al. State of the art in interactive ray tracing
US8098255B2 (en) Graphics processing system with enhanced memory controller
KR100878424B1 (en) Method and apparatus for particle manipulation using graphics processing
CN116391207A (en) Apparatus and method for efficient graphics processing including ray tracing
CN114119336A (en) Deep learning based selection of samples for adaptive supersampling
Fatahalian et al. GPUs: A Closer Look: As the line between GPUs and CPUs begins to blur, it’s important to understand what makes GPUs tick.
EP3869334B1 (en) Concurrent workload scheduling with multiple level of dependencies
CN113448759A (en) High speed recovery of GPU applications
WO2005074423A2 (en) Method of operation for parallel lcp solver
CN112132939A (en) System and method for avoiding duplicate processing during generation of process textures
CN116302107A (en) Self-tuning thread dispatch policies
CN116339739A (en) Kernel source adaptation for execution on a graphics processing unit
US7475001B2 (en) Software package definition for PPU enabled system
Woulfe et al. Hardware accelerated broad phase collision detection for realtime simulations
CN113870087A (en) Apparatus and method for near-trilinear interpolation for scene reconstruction
WO2006052750A2 (en) Asynchronous and parallel execution by physics processing unit
CN102665836B (en) Graphical simulation of objects in a virtual environment
CN115861032A (en) Out-of-order execution of graphics processing unit texture sampler operations
JP2022151634A (en) Tessellation redistribution for reducing latencies in processors
Friedrich Ray tracing techniques for computer games and isosurface visualization

Legal Events

Date Code Title Description
AK Designated states

Kind code of ref document: A2

Designated state(s): AE AG AL AM AT AU AZ BA BB BG BR BW BY BZ CA CH CN CO CR CU CZ DE DK DM DZ EC EE EG ES FI GB GD GE GH GM HR HU ID IL IN IS JP KE KG KP KR KZ LC LK LR LS LT LU LV MA MD MG MK MN MW MX MZ NA NI NO NZ OM PG PH PL PT RO RU SC SD SE SG SK SL SY TJ TM TN TR TT TZ UA UG US UZ VC VN YU ZA ZM ZW

AL Designated countries for regional patents

Kind code of ref document: A2

Designated state(s): GM KE LS MW MZ NA SD SL SZ TZ UG ZM ZW AM AZ BY KG KZ MD RU TJ TM AT BE BG CH CY CZ DE DK EE ES FI FR GB GR HU IE IT LU MC NL PL PT RO SE SI SK TR BF BJ CF CG CI CM GA GN GQ GW ML MR NE SN TD TG

121 Ep: the epo has been informed by wipo that ep was designated in this application
122 Ep: pct application non-entry in european phase