Data transfer mechanism using unidirectional pull bus and push bus

Information

  • Patent Grant
  • 7610451
  • Patent Number
    7,610,451
  • Date Filed
    Friday, January 25, 2002
    22 years ago
  • Date Issued
    Tuesday, October 27, 2009
    15 years ago
Abstract
A method for transferring data between programming agents and memory resources. The method includes transferring data between a processing agent and a memory resource, designating the memory resource for pushing the data to the processing agent via a push bus having a plurality of sources that arbitrate use of the push bus, and designating the memory resource for receiving the data from the processing agent via a pull bus having a plurality of destinations that arbitrate use of the pull bus.
Description
BACKGROUND

Typical computer processing systems have buses that enable various components to communicate with each other. Bus communication between these components allow transfer of data commonly through a data path. Generally, the datapath interconnects a processing agent, e.g., a central processing unit (CPU) or processor, with other components such as hard disk drives, device adapters, and the like.





BRIEF DESCRIPTION OF THE DRAWINGS


FIG. 1 is a block diagram of a processing system.



FIG. 2 is a detailed block diagram of the processing system of FIG. 1.



FIG. 3 is a flow chart of a read process in the processing system of FIG. 1.



FIG. 4 is a flow chart of a write process in the processing system of FIG. 1.



FIG. 5 is a flow chart of a push operation of the processing system of FIG. 1.



FIG. 6 is a flow chart of a pull operation of the processing system of FIG. 1.





DESCRIPTION

Architecture:


Referring to FIG. 1, a computer processing system 10 includes a parallel, hardware-based multithreaded network processor 12. The hardware-based multithreaded processor 12 is coupled to a memory system or memory resource 14. Memory system 14 includes dynamic random access memory (DRAM) 14a and static random access memory 14b (SRAM). The processing system 10 is especially useful for tasks that can be broken into parallel subtasks or functions. Specifically, the hardware-based multithreaded processor 12 is useful for tasks that are bandwidth oriented rather than latency oriented. The hardware-based multithreaded processor 12 has multiple microengines or programming engines 16 each with multiple hardware controlled threads that are simultaneously active and independently work on a specific task.


The programming engines 16 each maintain program counters in hardware and states associated with the program counters. Effectively, corresponding sets of context or threads can be simultaneously active on each of the programming engines 16 while only one is actually operating at any one time.


In this example, eight programming engines 16 are illustrated in FIG. 1. Each programming engine 16 has capabilities for processing eight hardware threads or contexts. The eight programming engines 16 operate with shared resources including memory resource 14 and bus interfaces. The hardware-based multithreaded processor 12 includes a dynamic random access memory (DRAM) controller 18a and a static random access memory (SRAM) controller 18b. The DRAM memory 14a and DRAM controller 18a are typically used for processing large volumes of data, e.g., processing of network payloads from network packets. The SRAM memory 14b and SRAM controller 18b are used in a networking implementation for low latency, fast access tasks, e.g., accessing look-up tables, memory for the core processor 20, and the like.


Push buses 26a-26b and pull buses 28a-28b are used to transfer data between the programming engines 16 and the DRAM memory 14a and the SRAM memory 14b. In particular, the push buses 26a-26b are unidirectional buses that move the data from the memory resources 14 to the programming engines 16 whereas the pull buses 28a-28b move data from the programming engines 16 to the memory resources 14.


The eight programming engines 16 access either the DRAM memory 14a or SRAM memory 14b based on characteristics of the data. Thus, low latency, low bandwidth data are stored in and fetched from SRAM memory 14b, whereas higher bandwidth data for which latency is not as important, are stored in and fetched from DRAM 14a. The programming engines 16 can execute memory reference instructions to either the DRAM controller 18a or SRAM controller 18b.


The hardware-based multithreaded processor 12 also includes a processor core 20 for loading microcode control for other resources of the hardware-based multithreaded processor 12. In this example, the processor core 20 is an XScale™ based architecture.


The processor core 20 performs general purpose computer type functions such as handling protocols, exceptions, and extra support for packet processing where the programming engines 16 pass the packets off for more detailed processing such as in boundary conditions. The processor core 20 has an operating system (not shown). Through the operating system (OS), the processor core 20 can call functions to operate on programming engines 16. The processor core 20 can use any supported OS, in particular a real time OS. For the core processor 20 implemented as an XScale™ architecture, operating systems such as Microsoft NT real-time, VXWorks and μCOS, or a freeware OS available over the Internet can be used.


Advantages of hardware multithreading can be explained by SRAM or DRAM memory accesses. As an example, an SRAM access requested by a context (e.g., Thread_0), from one of the programming engines 16 will cause the SRAM controller 18b to initiate an access to the SRAM memory 14b. The SRAM controller 18b accesses the SRAM memory 14b, fetches the data from the SRAM memory 14b, and returns data to a requesting programming engine 16.


During an SRAM access, if one of the programming engines 16 had only a single thread that could operate, that programming engine would be dormant until data was returned from the SRAM memory 14b.


By employing hardware context swapping within each of the programming engines 16, the hardware context swapping enables other contexts with unique program counters to execute in that same programming engine. Thus, another thread e.g., Thread_1 can function while the first thread, Thread_0 , is awaiting the read data to return. During execution, Thread_1 may access the DRAM memory 14a. While Thread_1 operates on the DRAM unit, and Thread_0 is operating on the SRAM unit, a new thread, e.g., Thread_2 can now operate in the programming engine 16. Thread—2 can operate for a certain amount of time until it needs to access memory or perform some other long latency operation, such as making an access to a bus interface. Therefore, simultaneously, the processor 12 can have a bus operation, SRAM operation and DRAM operation all being completed or operated upon by one of the programming engines 16 and have one more thread available to process more work.


The hardware context swapping also synchronizes completion of tasks. For example, two threads could hit the shared memory resource, e.g., the SRAM memory 14b. Each one of the separate functional units, e.g., the SRAM controller 18b, and the DRAM controller 18a, when they complete a requested task from one of the programming engine thread or contexts reports back a flag signaling completion of an operation. When the programming engine 16 receives the flag, the programming engine 16 can if determine which thread to turn on.


One example of an application for the hardware-based multithreaded processor 12 is as a network processor. As a network processor, the hardware-based multithreaded processor 12 interfaces to network devices such as a Media Access Controller (MAC) device, e.g., a 10/100BaseT Octal MAC 13a or a Gigabit Ethernet device (not shown). In general, as a network processor, the hardware-based multithreaded processor 12 can interface to any type of communication device or interface that receives or sends large amount of data. The computer processing system 10 functioning in a networking application could receive network packets and process those packets in a parallel manner.


Programming Engine Contexts:


As described above, each of the programming engines 16 supports multi-threaded execution of eight contexts. This allows one thread to start executing just after another thread issues a memory reference and must wait until that reference completes before doing more work. Multi-threaded execution is critical to maintaining efficient hardware execution of the programming engines 16 because memory latency is significant. Multi-threaded execution allows the programming engines 16 to hide memory latency by performing useful independent work across several threads.


Each of the eight contexts of the programming engines 16, to allow for efficient context swapping, has its own register set, program counter, and context specific local registers. Having a copy per context eliminates the need to move context specific information to and from shared memory and programming engine registers for each context swap. Fast context swapping allows a context to perform computations while other contexts wait for input-output (I/O), typically, external memory accesses to complete or for a signal from another context or hardware unit.


For example, the programming engines 16 execute eight contexts by maintaining eight program counters and eight context relative sets of registers. A number of different types of context relative registers, such as general purpose registers (GPRs), inter-programming agent registers, Static Random Access Memory (SRAM) input transfer registers, Dynamic Random Access Memory (DRAM) input transfer registers, SRAM output transfer registers, DRAM output transfer registers. Local memory registers can also be used.


For example, GPRs are used for general programming purposes. GPRs are read and written exclusively under program control. The GPRs, when used as a source in an instruction, supply operands to an execution datapath (not shown). When used as a destination in an instruction, the GPRs are written with the result of the execution box datapath. The programming engines 16 also include IO transfer registers as discussed above. The IO transfer registers are used for transferring data to and from the programming engines 16 and locations external to the programming engines 16, e.g., the DRAM memory 14a and the SRAM memory 14b etc.


Bus Architecture:


Referring to FIG. 2, the hardware-based multithreaded processor 12 is shown in greater detail. The DRAM memory 14a and the SRAM memory 14b are connected to the DRAM memory controller 18a and the SRAM memory 18b, respectively. The DRAM controller 18a is coupled to a pull bus arbiter 30a and a push bus arbiter 32a, which are coupled to a programming engines 16a. The SRAM controller 18b is coupled to a pull bus arbiter 30b and a push bus arbiter 32b, which are coupled to a programming engine 16b. Buses 26a-26b and 28a-28b make up the major buses for transferring data between the programming engines 16a-16b and the DRAM memory 14a and the SRAM memory 14b. Any thread from any of the programming engines 16a-16b can access the DRAM controller 18a and the SRAM controller 18a.


In particular, the push buses 26a-26b have multiple sources of memory such as memory controller channels and internal read registers (not shown) which arbitrate via the push arbiters 32a-32b to use the push buses 26a-26b. The destination (e.g., programming engine 16) of any push data transfer recognizes when the data is being “pushed” into it by decoding the Push_ID, which is driven or sent with the push data. The pull buses 28a-28b also have multiple destinations (e.g., writing data to different memory controller channels or writeable internal registers) that arbitrate to use the pull buses 28a-28b. The pull buses 28a-28b have a Pull_ID, which is driven or sent, for example, two cycles before the pull data.


Data functions are distributed amongst the programming engines 16. Connectivity to the DRAM memory 14a and the SRAM memory 14b is performed via command requests. A command request can be a memory request. For example, a command request can move data from a register located in the programming engine 16a to a shared resource, e.g., the DRAM memory 14a, SRAM memory 14b. The commands or requests are sent out to each of the functional units and the shared resources. Commands such as I/O commands (e.g., SRAM read, SRAM write, DRAM read, DRAM write, load data from a receive memory buffer, move data to a transmit memory buffer) specify either context relative source or destination registers in the programming engines 16.


In general, the data transfers between programming engines and memory resources designate the memory resource for pushing the data to a processing agent via the push bus having a plurality of sources that arbitrate use of the push bus, and designate the memory resource for receiving the data from the processing agent via the pull bus having a plurality of destinations that arbitrate use of the pull bus.


Read Process:


Referring to FIG. 3, a data read process 50 is executed during a read phase of the programming engines 16 by the push buses 26a-26b. As part of the read process 50 the programming engine executes (52) a context. The programming engine 16 issues (54) a read command to the memory controllers 18a-18b, and the memory controllers 18a-18b processes (56) the request for-one of the memory resources, i.e., the DRAM memory 14a or the SRAM memory 14b. For read commands, after the read command is issued (54), the programming engines 16 check (58) if the read data is required to continue the program context. If the read data is required to continue the program context or thread, the context is swapped out (60). The programming engine 16 checks (62) to ensure that the memory controllers 18a-18b have finished the request. When the memory controllers have finished the request, the context is swapped back in (64).


If the request is not required to continue the execution of the context, the programming engine 16 checks (68) if the memory controllers 18a-18b have finished the request. If the memory controllers 18a-18b have not finished the request, a loop back occurs and further checks (58) take place. If the memory controllers 18a-18b have finished the request, when the read data has been acquired from the memory resources, the memory controllers 18a-18b push (70) the data into the context relative input transfer register specified by the read command. The memory controller sets a signal in the programming engine 16 that enables the context that issued the read to become active. The programming engine 16 reads (72) the requested data in the input transfer register and continues (74) the execution of the context.


Write Process:


Referring to FIG. 4, a data write process 80 is executed during a write phase of the programming engines 16 by the pull buses 28a-28b. During the write process 80 the programming engine executes (82) a context. The programming engine 16 loads (84) the data into the output transfer register and issues (86) a write command or request to the memory controllers 18a-18b. The output transfer register is set (88) to a read-only state. For write commands from the programming engines 16, after the output transfer register is set (88) to a read-only state, the programming engine 16 checks (90) if the request is required to continue the program context or thread. If yes, the context is swapped out (92).


If the write request is not required to continue the program context or thread, the memory controllers 18a-18b extracts or pulls (94) the data from the output transfer registers and signals (96) to the programming engines 16 to unlock the output transfer registers. The programming engine 16 then checks (98) if the context was swapped out. If so, the context is swapped back (100) and if not, the programming engine 16 continues (102) the execution of the context. Thus, the signaled context can reuse the output transfer registers. The signal may also be used to enable the context to go active if it swapped out (100) on the write command.


Data Push Operation:


Referring to FIG. 5, a data push operation 110 that occurs in the push buses 26a-26b of the computer processing system 10, is shown in different processing cycles, e.g., cycle 0 through cycle 5. Each target, e.g., the DRAM memory 14a or the SRAM memory 14b, sends or drives (112) a Target_#_Push_ID to the push arbiters where the # indicates the number of different contexts such as context #0 through context #7. The Target_#_Push_ID is derived from the read command and a data error bit (e.g., the numbers following the target represent the source address incrementing in the Push_ID) for information it would like to push to the push arbiters 32a-32b. For Push_IDs, each letter indicates a push operation to a particular destination. A Push_ID destination of “none” indicates that the Push_ID is null. The target also sends the Target_#_Push_Data to the Push Arbiter.


The Push_ID and Push_Data are registered (114) and enqueued (116) into first-in, first-outs (FIFOs) in the push arbiters 32a-32b unless the Target_#_Push_Q_Full signal is asserted. This signal indicates that the Push_ID and Push_Data FIFOs for that specific target are almost full in the push arbiters 32a-32b. In this case, the push arbiters 32a-32b have not registered a Push_ID or Push_Data and the target does not change it. The channel changes the Push_ID and Push_Data that is taken by the push arbiters 32a-32b to those for the next word transfer or to null if it has no other valid transfer. Due to latency in the Push_Q_Full signal, the push arbiters 32a-32b should accommodate the worst case number of in-flight Push_IDs and Push_Data per target.


The push arbiters 32a-32b will arbitrate (118) every cycle between all valid Push_IDs and send intermediate Push_ID. The arbitration policy can be round robin, a priority scheme or even programmable. Multiple pushes of data from the push arbiters 32a-32b to the destination are not guaranteed to be in consecutive cycles. The push arbiters 32a-32b send (12) intermediate Push_Data and Push_ID is forwarded (120) to the destination. It is up to the target to update the destination address of each Push_ID it issues for each word of data it wishes to push. The Push_Data is forwarded (122) to the destination. At the destination, the time from the destination getting the Push_ID to the destination getting Push_Data is fixed by one processing cycle.


Data Pull Operation:


Referring to FIG. 6, a data pull operation 130 that occurs in the pull buses 28a-28b of the computer processing system 10, is shown in different processing cycles (e.g., cycle 0 through cycle 7). Each target, e.g., the DRAM memory 14a or the SRAM memory 14b , sends or drives (132) the full Target_#_Pull_ID (i.e., the numbers following the target represents the source address incrementing in the Pull_ID) and length (derived from the write command) for information it would like to pull to the target. For Pull_IDs, each letter indicates a pull operation from a particular source, e.g., the memory resource 14. A Pull_ID source of “none” indicates that the Pull_ID is null. The target must have buffer space available for the pull data when it asserts its Pull_ID.


The Pull_ID is registered (134) and enqueued (136) into fist-in, first-outs (FIFO) in the pull arbiters 30a-30b, unless the Target_#_Pull_Q_Full signal is asserted. This signal indicates that the Pull_ID queue for that specific target is almost full in the pull arbiters 30a-30b. In this case, the pull arbiters 30a-30b have not registered the Pull_ID and the target does not change it. The target changes a Pull_ID that is taken by the pull arbiters 30a-30b to that for the next burst transfer or to null if it has no other valid Pull_ID. Due to latency in the Pull_Q_Full signal, the pull arbiters 30a-30b should accommodate the worst case number of in-flight Pull_IDs per target.


The pull arbiters 30a-30b arbitrate (138) every cycle among the currently valid Pull_IDs. The arbitration policy can be round robin, a priority scheme or even programmable.


The pull arbiters 30a-30b forwards (140) the selected Pull_ID to the source. The time from the pull arbiters 30a-30b sending the Pull_ID to the source providing data is fixed in three processing cycles. The pull arbiters 30a-30b update the “source address” field of the Pull_ID for each new data item. The Pull_Data is pulled (142) from the source and sent to the targets.


The pull arbiters 30a-30b also assert (146) a Target_#_Take_Data to the selected target. This signal is asserted for each cycle a valid word of data is sent to the target. However, the assertions are not guaranteed to be on consecutive processing cycles. The pull arbiters 30a-30b only assert at most one Target_#_Take_Data signal at a time.


For example, a computer program product residing on a computer readable medium for causing a parallel processor to perform a function includes instructions causing the processor to designate the memory resource for pushing the data to the processing agent using a push bus having a plurality of sources that arbitrate use of the push bus; and designate the memory resource for receiving the data from the processing agent using a pull bus having a plurality of destinations that arbitrate use of the pull bus. The computer program product can include instructions causing the processor to establish a plurality of contexts on the programming agent and maintaining program counters and context relative registers. The programming agent in a read phase can execute a context and issue a read command to a memory controller. The memory controller can process the read command to be sent to the memory resource and the context can be swapped out if the read command is required to continue the execution of the context.


For transfers between targets and masters with different bus widths, the pull arbiters 30a-30b are required to do the adjusting. For example, the DRAM controller 18b may accept eight bytes of data per processing cycle but the programming engine 16 may only deliver four bytes per cycle. In this case, the pull arbiters 30a-30b can be used to accept four bytes per processing cycle, merge and pack them into eight bytes, and send the data to the DRAM controller 18a.


Other Embodiments

It is to be understood that while the example above has been described in conjunction with the detailed description thereof, the foregoing description is intended to illustrate and not limit the scope of the invention, which is defined by the scope of the At appended claims. Other aspects, advantages, and modifications are within the scope of the following claims.

Claims
  • 1. A method comprising: identifying a plurality of memory resources for pushing data to and pulling data from a processing agent;when pushing data to the processing agent, using a push bus arbiter to arbitrate requests for use of a push bus by the memory resources in which the requests for using the push bus are sent from the memory resources, andpushing data from the memory resources to the processing agent through the push bus, the memory resources obtaining access to the push bus based on arbitration by the push bus arbiter;when pulling data from the processing agent, using a pull bus arbiter to arbitrate requests for use of a pull bus by the memory resources in which the requests for using the pull bus are sent from the memory resources,executing a context,issuing a write command,loading data into an output transfer memory of the processing agent,setting the output transfer memory to a read-only state, andpulling the data from the output transfer memory and transferring to the memory resources through the pull bus, the memory resources obtaining access to the pull bus based on arbitration by the pull bus arbiter; andestablishing a plurality of contexts on the processing agent and maintaining program counters and context relative registers;wherein the processing agent executes a context and issues a read command to a memory controller in a read phase.
  • 2. The method of claim 1 wherein the memory controller processes the read command to be sent to one of the memory resources.
  • 3. The method of claim 2 wherein the context executed by the processing agent is swapped out if the read data is required to continue the execution of the swapped out context.
  • 4. The method of claim 3 wherein after the memory controller has completed the processing of the read command, the memory controller pushes the data from the memory resources to an input transfer memory of the processing agent.
  • 5. The method of claim 4 wherein the input transfer memory comprises an input transfer register.
  • 6. The method of claim 5 wherein after the data from the memory resources has been pushed, the processing agent reads the data in the input transfer register and the processing agent continues the execution of the context.
  • 7. The method of claim 1 wherein the context executed by the processing agent is swapped out if the write command is required to continue the execution of the swapped out context.
  • 8. The method of claim 7, wherein the memory controller pulls the data from the output transfer memory and the memory controller sends a signal to the processing agent to unlock the output transfer memory.
  • 9. The method of claim 8 wherein if the context executed by the processing agent has been swapped out after the output transfer memory has been unlocked, the swapped out context is swapped back in and the processing agent continues the execution of the swapped out context.
  • 10. The method of claim 1, wherein the memory resources comprise memory controller channels.
  • 11. The method of claim 1 wherein the output transfer memory comprises an output transfer register.
  • 12. A system comprising: a plurality of memory resources, each memory resource being associated with a memory controller;a processing agent to access the memory resources;a unidirectional push bus to push data from the memory resources to the processing agent;a push bus arbiter to arbitrate requests for use of the push bus by the memory resources in which the requests for using the push bus are sent from the memory resources, the memory resources obtaining access to the push bus based on arbitration by the push bus arbiter;a unidirectional pull bus to receive data from the processing agent and to transfer the received data to the memory resources;a pull bus arbiter to arbitrate requests for use of the pull bus by the memory resources in which the requests for using the pull bus are sent from the memory resources, the memory resources obtaining access to the pull bus based on arbitration by the pull bus arbiter; anda plurality of program counters and a plurality of context relative registers, the context relative registers being selected from a group comprising of general purpose registers, inter-programming agent registers, static random access memory (SRAM) input transfer registers, dynamic random access memory (DRAM) input transfer registers, SRAM output transfer registers, DRAM output transfer registers, and local memory registers;in which the processing agent is to execute a context and issue a read command to the memory controller.
  • 13. The system of claim 12 in which the memory controller is to process the read command to be sent to the memory resources.
  • 14. The system of claim 13 in which the processing agent is to swap the context out if the read command is required to continue the execution of the context.
  • 15. The system of claim 14 in which after the read command is processed, the memory controller is to push the received data to an input transfer register of the processing agent and the processing agent is to read the data in the input transfer register and to continue the execution of the context.
  • 16. The system of claim 12, wherein the memory resources comprise memory controller channels.
  • 17. The system of claim 12 wherein the memory resources comprise random access memory devices.
  • 18. The system of claim 12 wherein each of the requests for use of the push bus or pull bus sent from the memory resources comprises a target identifier identifying a target to receive data pushed from or pulled to the memory resources.
  • 19. A computer readable medium, which when accessed results in a machine performing operations comprising: identifying a plurality of memory resources for pushing data to and pulling data from a processing agent, each memory resource being associated with a memory controller;when pushing data to the processing agent, using a push bus arbiter to arbitrate requests for use of a push bus by the memory resources in which the requests for using the push bus are sent from the memory resources,pushing data from the memory resources to the processing agent through the push bus, the memory resources obtaining access to the push bus based on arbitration by the push bus arbiter; andwhen pulling data from the processing agent, using a pull bus arbiter to arbitrate requests for use of a pull bus by the memory resources in which the requests for using the pull bus are sent from the memory resources, andpulling data from the output transfer memory and transferring the pulled data to the memory resources through the pull bus, the memory resources obtaining access to the pull bus based on arbitration by the pull bus arbiter;wherein the processing agent in a read phase executes a context and issues a read command to a memory controller.
  • 20. The computer readable medium of claim 19, which when accessed further results in the machine performing operations comprising establishing a plurality of contexts on the processing agent and maintaining program counters and context relative registers.
  • 21. The computer readable medium of claim 19, wherein the memory resources comprise memory controller channels.
  • 22. The computer readable medium of claim 19 wherein the output transfer memory comprises an output transfer register.
  • 23. A computer readable medium, which when accessed results in a machine performing operations comprising: identifying a plurality of memory resources for pushing data to and pulling data from a processing agent, each memory resource being associated with a memory controller;when pushing data to the processing agent, using a push bus arbiter to arbitrate requests for use of a push bus by the memory resources in which the requests for using the push bus are sent from the memory resources,pushing the data from the memory resources to the processing agent through the push bus, the memory resources obtaining access to the push bus based on arbitration by the push bus arbiter; andwhen pulling data from the processing agent, using a pull bus arbiter to arbitrate requests for use of a pull bus by the memory resources in which the requests for using the pull bus are sent from the memory resources, andpulling data from an output transfer memory and transferring the pulled data to the memory resources through the pull bus, the memory resources obtaining access to the pull bus based on arbitration by the pull bus arbiter;wherein the memory controller processes a read command to be sent to the memory resources and a context is swapped out if the read command is required to continue the execution of the context.
  • 24. A method comprising: identifying a plurality of memory resources for pushing data to and pulling data from a processing agent;using a push bus arbiter to arbitrate use of a unidirectional push bus by the memory resources in which requests for using the unidirectional push bus are sent from the memory resources;pushing data from the memory resources to the processing agent through the push bus, the memory resources obtaining access to the push bus based on arbitration by the push bus arbiter;using a pull bus arbiter to arbitrate use of a unidirectional pull bus by the memory resources in which requests for using the unidirectional pull bus are sent from the memory resources; andpulling data from the processing agent and transferring to the memory resources through the pull bus, the memory resources obtaining access to the pull bus based on arbitration by the pull bus arbiter; andexecuting a context and issuing a read command to a memory controller to read data from one of the memory resources.
  • 25. The method of claim 24, further comprising swapping out the context if the data to be read is required to continue the execution of the context.
  • 26. The method of claim 24, further comprising executing a second context and issuing a write command to the memory controller to write data to one of the memory resources.
  • 27. The method of claim 26, further comprising swapping out the second context if completion of the write command is required to continue the execution of the second context.
  • 28. The method of claim 24 wherein the memory resources comprise random access memory devices.
  • 29. The method of claim 24 wherein each of the requests for use of the push bus or pull bus sent from the memory resources comprises a target identifier identifying a target to receive data pushed from or pulled to the memory resources.
US Referenced Citations (328)
Number Name Date Kind
3373408 Ling Mar 1968 A
3478322 Evans Nov 1969 A
3792441 Wymore et al. Feb 1974 A
3881173 Larsen et al. Apr 1975 A
3913074 Homberg et al. Oct 1975 A
3940745 Sajeva Feb 1976 A
4023023 Bourrez et al. May 1977 A
4045782 Anderson et al. Aug 1977 A
4130890 Adam Dec 1978 A
4189767 Ahuja Feb 1980 A
4392758 Bowles et al. Jul 1983 A
4400770 Chan et al. Aug 1983 A
4514807 Nogi Apr 1985 A
4523272 Fukunaga et al. Jun 1985 A
4569016 Hao et al. Feb 1986 A
4724521 Carron et al. Feb 1988 A
4742451 Bruckert et al. May 1988 A
4745544 Renner et al. May 1988 A
4777587 Case et al. Oct 1988 A
4833657 Tanaka May 1989 A
4866664 Burkhardt, Jr. et al. Sep 1989 A
4868735 Moller et al. Sep 1989 A
4992934 Portanova et al. Feb 1991 A
5008808 Fries et al. Apr 1991 A
5073864 Methvin et al. Dec 1991 A
5113516 Johnson May 1992 A
5140685 Sipple et al. Aug 1992 A
5142676 Fried et al. Aug 1992 A
5142683 Burkhardt, Jr. et al. Aug 1992 A
5155831 Emma et al. Oct 1992 A
5155854 Flynn et al. Oct 1992 A
5165025 Lass Nov 1992 A
5166872 Weaver et al. Nov 1992 A
5168555 Byers et al. Dec 1992 A
5173897 Schrodi et al. Dec 1992 A
5247671 Adkins et al. Sep 1993 A
5255239 Taborn et al. Oct 1993 A
5263169 Genusov et al. Nov 1993 A
5274770 Yeoh et al. Dec 1993 A
5347648 Stamm et al. Sep 1994 A
5357617 Davis et al. Oct 1994 A
5363448 Koopman, Jr. et al. Nov 1994 A
5367678 Lee et al. Nov 1994 A
5390329 Gaertner et al. Feb 1995 A
5392391 Caulk, Jr. et al. Feb 1995 A
5392411 Ozaki Feb 1995 A
5392412 McKenna Feb 1995 A
5404464 Bennett Apr 1995 A
5404482 Stamm et al. Apr 1995 A
5428809 Coffin et al. Jun 1995 A
5432918 Stamm Jul 1995 A
5436626 Fujiwara et al. Jul 1995 A
5442756 Grochowski et al. Aug 1995 A
5448702 Garcia, Jr. et al. Sep 1995 A
5450351 Heddes Sep 1995 A
5450603 Davies Sep 1995 A
5452437 Richey et al. Sep 1995 A
5459842 Begun et al. Oct 1995 A
5463625 Yasrebi Oct 1995 A
5467452 Blum et al. Nov 1995 A
5481683 Karim Jan 1996 A
5487159 Byers et al. Jan 1996 A
5517628 Morrison et al. May 1996 A
5517648 Bertone et al. May 1996 A
5541920 Angle et al. Jul 1996 A
5542070 LeBlanc et al. Jul 1996 A
5542088 Jennings, Jr. et al. Jul 1996 A
5544236 Adruska et al. Aug 1996 A
5550816 Hardwick et al. Aug 1996 A
5557766 Takiguchi et al. Sep 1996 A
5568617 Kametani Oct 1996 A
5574922 James Nov 1996 A
5574939 Keckler et al. Nov 1996 A
5592622 Isfeld et al. Jan 1997 A
5600812 Park Feb 1997 A
5606676 Grochowski et al. Feb 1997 A
5610864 Manning Mar 1997 A
5613071 Rankin et al. Mar 1997 A
5613136 Casavant et al. Mar 1997 A
5623489 Cotton et al. Apr 1997 A
5627829 Gleeson et al. May 1997 A
5630130 Perotto et al. May 1997 A
5640538 Dyer et al. Jun 1997 A
5644623 Gulledge Jul 1997 A
5649109 Griesmer et al. Jul 1997 A
5649157 Williams Jul 1997 A
5652583 Kang Jul 1997 A
5659687 Kim et al. Aug 1997 A
5659722 Blaner et al. Aug 1997 A
5680641 Sidman Oct 1997 A
5689566 Nguyen Nov 1997 A
5692167 Grochowski et al. Nov 1997 A
5699537 Sharangpani et al. Dec 1997 A
5701435 Chi Dec 1997 A
5717760 Satterfield Feb 1998 A
5717898 Kagan et al. Feb 1998 A
5721870 Matsumoto Feb 1998 A
5724563 Hasegawa Mar 1998 A
5742587 Zornig et al. Apr 1998 A
5742782 Ito et al. Apr 1998 A
5742822 Motomura Apr 1998 A
5745913 Pattin et al. Apr 1998 A
5751987 Mahant-Shetti et al. May 1998 A
5761507 Govett Jun 1998 A
5761522 Hisanga et al. Jun 1998 A
5781774 Krick Jul 1998 A
5784649 Begur et al. Jul 1998 A
5784712 Byers et al. Jul 1998 A
5790813 Whittaker Aug 1998 A
5796413 Shipp et al. Aug 1998 A
5797043 Lewis et al. Aug 1998 A
5809235 Sharma et al. Sep 1998 A
5809530 Samra et al. Sep 1998 A
5812799 Zuravleff et al. Sep 1998 A
5812839 Hoyt et al. Sep 1998 A
5812868 Moyer et al. Sep 1998 A
5813031 Chou et al. Sep 1998 A
5815714 Shridhar et al. Sep 1998 A
5819080 Dutton et al. Oct 1998 A
5828746 Ardon Oct 1998 A
5828863 Barrett et al. Oct 1998 A
5829033 Hagersten et al. Oct 1998 A
5832215 Kato et al. Nov 1998 A
5832258 Kiuchi et al. Nov 1998 A
5835755 Stellwagen, Jr. Nov 1998 A
5835928 Auslander et al. Nov 1998 A
5854922 Gravenstein et al. Dec 1998 A
5860158 Pai et al. Jan 1999 A
5886992 Raatikainen et al. Mar 1999 A
5887134 Ebrahim Mar 1999 A
5890208 Kwon Mar 1999 A
5892979 Shiraki et al. Apr 1999 A
5893162 Lau et al. Apr 1999 A
5905876 Pawlowski et al. May 1999 A
5905889 Wilhelm, Jr. et al. May 1999 A
5915123 Mirsky et al. Jun 1999 A
5933627 Parady Aug 1999 A
5937187 Kosche et al. Aug 1999 A
5938736 Muller et al. Aug 1999 A
5940612 Brady et al. Aug 1999 A
5940866 Chisholm et al. Aug 1999 A
5946487 Dangelo Aug 1999 A
5948081 Foster Sep 1999 A
5951679 Anderson et al. Sep 1999 A
5958031 Kime Sep 1999 A
5961628 Nguyen et al. Oct 1999 A
5970013 Fischer et al. Oct 1999 A
5978838 Mohammed et al. Nov 1999 A
5978874 Singhal et al. Nov 1999 A
5983274 Hyder et al. Nov 1999 A
5996068 Dwyer, III et al. Nov 1999 A
6002881 York et al. Dec 1999 A
6009505 Thayer et al. Dec 1999 A
6009515 Steele, Jr. Dec 1999 A
6012151 Mano Jan 2000 A
6014729 Lannan et al. Jan 2000 A
6023742 Ebeling et al. Feb 2000 A
6029170 Garger et al. Feb 2000 A
6029228 Cai et al. Feb 2000 A
6047334 Langendorf et al. Apr 2000 A
6058168 Braband May 2000 A
6058465 Nguyen May 2000 A
6067585 Hoang May 2000 A
6070231 Ottinger May 2000 A
6072781 Feeney et al. Jun 2000 A
6073215 Snyder Jun 2000 A
6076129 Fenwick et al. Jun 2000 A
6076158 Sites et al. Jun 2000 A
6079008 Clery, III Jun 2000 A
6079014 Papworth et al. Jun 2000 A
6085215 Ramakrishnan et al. Jul 2000 A
6085294 Van Doren et al. Jul 2000 A
6088783 Morton Jul 2000 A
6092127 Taushek Jul 2000 A
6092158 Harriman et al. Jul 2000 A
6092175 Levy et al. Jul 2000 A
6112016 MacWilliams et al. Aug 2000 A
6115811 Steele, Jr. Sep 2000 A
6134665 Klein et al. Oct 2000 A
6141348 Muntz Oct 2000 A
6141689 Yasrebi Oct 2000 A
6141765 Sherman Oct 2000 A
6144669 Williams et al. Nov 2000 A
6145054 Mehotra et al. Nov 2000 A
6145123 Torrey et al. Nov 2000 A
6157955 Narad et al. Dec 2000 A
6160562 Chin et al. Dec 2000 A
6173349 Qureshi et al. Jan 2001 B1
6182177 Harriman Jan 2001 B1
6195676 Spix et al. Feb 2001 B1
6199133 Schnell Mar 2001 B1
6201807 Prasanna Mar 2001 B1
6212542 Kahle et al. Apr 2001 B1
6212602 Wicki et al. Apr 2001 B1
6212604 Tremblay Apr 2001 B1
6212611 Nizar et al. Apr 2001 B1
6216220 Hwang Apr 2001 B1
6223207 Lucovsky et al. Apr 2001 B1
6223238 Meyer et al. Apr 2001 B1
6223277 Karguth Apr 2001 B1
6223279 Nishimura et al. Apr 2001 B1
6230119 Mitchell May 2001 B1
6230261 Henry et al. May 2001 B1
6233599 Nation et al. May 2001 B1
6247025 Bacon Jun 2001 B1
6247040 Born et al. Jun 2001 B1
6247086 Allingham Jun 2001 B1
6249829 Bloks et al. Jun 2001 B1
6256713 Audityan et al. Jul 2001 B1
6272616 Fernando et al. Aug 2001 B1
6275505 O'Laughlin et al. Aug 2001 B1
6278289 Guccione et al. Aug 2001 B1
6279113 Vaidya Aug 2001 B1
6289011 Seo et al. Sep 2001 B1
6298370 Tang et al. Oct 2001 B1
6307789 Wolrich et al. Oct 2001 B1
6311256 Halligan et al. Oct 2001 B2
6324624 Wolrich et al. Nov 2001 B1
6345334 Nakagawa et al. Feb 2002 B1
6347344 Baker et al. Feb 2002 B1
6351808 Joy et al. Feb 2002 B1
6356692 Ido et al. Mar 2002 B1
6356962 Kasper et al. Mar 2002 B1
6357016 Rodgers et al. Mar 2002 B1
6360262 Guenthner et al. Mar 2002 B1
6366978 Middleton et al. Apr 2002 B1
6373848 Allison et al. Apr 2002 B1
6378124 Bates et al. Apr 2002 B1
6381668 Lunteren Apr 2002 B1
6389449 Nemirovsky et al. May 2002 B1
6393483 Latif et al. May 2002 B1
6401149 Dennin et al. Jun 2002 B1
6408325 Shaylor Jun 2002 B1
6415338 Habot Jul 2002 B1
6426940 Seo et al. Jul 2002 B1
6427196 Adiletta et al. Jul 2002 B1
6430626 Witkowski et al. Aug 2002 B1
6430646 Thusoo et al. Aug 2002 B1
6434145 Opsasnick et al. Aug 2002 B1
6449289 Quicksall Sep 2002 B1
6457078 Magro et al. Sep 2002 B1
6463072 Wolrich et al. Oct 2002 B1
6480943 Douglas et al. Nov 2002 B1
6490642 Thekkath et al. Dec 2002 B1
6496925 Rodgers et al. Dec 2002 B1
6505229 Turner et al. Jan 2003 B1
6505281 Sherry Jan 2003 B1
6513089 Hofmann et al. Jan 2003 B1
6523108 James et al. Feb 2003 B1
6529999 Keller et al. Mar 2003 B1
6532509 Wolrich et al. Mar 2003 B1
6539439 Nguyen et al. Mar 2003 B1
6552826 Adler et al. Apr 2003 B2
6560667 Wolrich et al. May 2003 B1
6570877 Kloth et al. May 2003 B1
6577542 Wolrich et al. Jun 2003 B2
6577625 Chiou et al. Jun 2003 B1
6581124 Anand Jun 2003 B1
6584522 Wolrich et al. Jun 2003 B1
6587905 Correale et al. Jul 2003 B1
6587906 Wolrich et al. Jul 2003 B2
6606704 Adiletta et al. Aug 2003 B1
6625654 Wolrich et al. Sep 2003 B1
6628652 Chrin et al. Sep 2003 B1
6629237 Wolrich et al. Sep 2003 B2
6631430 Wolrich et al. Oct 2003 B1
6631462 Wolrich et al. Oct 2003 B1
6633938 Rowlands et al. Oct 2003 B1
6643726 Patkar et al. Nov 2003 B1
6654836 Misra et al. Nov 2003 B1
6661794 Wolrich et al. Dec 2003 B1
6661795 Adas et al. Dec 2003 B1
6667920 Wolrich et al. Dec 2003 B2
6668311 Hooper et al. Dec 2003 B2
6668317 Bernstein et al. Dec 2003 B1
6671761 Kim Dec 2003 B2
6671827 Guilford et al. Dec 2003 B2
6678248 Haddock et al. Jan 2004 B1
6681300 Wolrich et al. Jan 2004 B2
6684361 Tong et al. Jan 2004 B2
6694380 Wolrich et al. Feb 2004 B1
6697923 Chen et al. Feb 2004 B2
6724767 Chong et al. Apr 2004 B1
6725313 Wingard et al. Apr 2004 B1
6728845 Adiletta et al. Apr 2004 B2
6738831 Wolrich et al. May 2004 B2
6754662 Li Jun 2004 B1
6754795 Chen et al. Jun 2004 B2
6781992 Rana et al. Aug 2004 B1
6785843 McRae et al. Aug 2004 B1
6823399 Horiguchi et al. Nov 2004 B2
6826180 Bergantino et al. Nov 2004 B1
6847645 Potter et al. Jan 2005 B1
6868476 Rosenbluth et al. Mar 2005 B2
6889319 Rodgers et al. May 2005 B1
6941438 Wolrich et al. Sep 2005 B2
6958973 Chen et al. Oct 2005 B1
7028118 Smith et al. Apr 2006 B2
7051329 Boggs et al. May 2006 B1
7089379 Sharma et al. Aug 2006 B1
7216204 Rosenbluth et al. May 2007 B2
7225281 Rosenbluth et al. May 2007 B2
7337275 Wolrich et al. Feb 2008 B2
20010043614 Viswanadham et al. Nov 2001 A1
20020053017 Adiletta et al. May 2002 A1
20020056037 Wolrich et al. May 2002 A1
20030012198 Kaganoi et al. Jan 2003 A1
20030041216 Rosenbluth et al. Feb 2003 A1
20030041228 Rosenbluth et al. Feb 2003 A1
20030046488 Rosenbluth et al. Mar 2003 A1
20030065862 Wyland Apr 2003 A1
20030078950 Abernathy et al. Apr 2003 A1
20030105899 Rosenbluth et al. Jun 2003 A1
20030145155 Wolrich et al. Jul 2003 A1
20030145159 Adiletta et al. Jul 2003 A1
20030191866 Wolrich et al. Oct 2003 A1
20040034743 Wolrich et al. Feb 2004 A1
20040039895 Wolrich et al. Feb 2004 A1
20040054880 Bernstein et al. Mar 2004 A1
20040071152 Wolrich et al. Apr 2004 A1
20040073728 Wolrich et al. Apr 2004 A1
20040073778 Adiletta et al. Apr 2004 A1
20040098496 Wolrich et al. May 2004 A1
20040109369 Wolrich et al. Jun 2004 A1
20040139290 Wolrich et al. Jul 2004 A1
20040205747 Bernstein et al. Oct 2004 A1
20050132132 Rosenbluth et al. Jun 2005 A1
20050185437 Wolrich et al. Aug 2005 A1
Foreign Referenced Citations (38)
Number Date Country
0 379 709 Aug 1990 EP
0 464 715 Jan 1992 EP
0 633 678 Jan 1995 EP
0 745 933 Dec 1996 EP
0 809 180 Nov 1997 EP
0 953 897 Nov 1999 EP
1 191 445 Mar 2002 EP
2 344 665 Jun 2000 GB
59-111533 Jun 1984 JP
00374967 Nov 1999 TW
WO 9415287 Jul 1994 WO
WO 9738372 Oct 1997 WO
WO 0033195 Jun 2000 WO
WO 0101614 Jan 2001 WO
0116782 Mar 2001 WO
WO 0115718 Mar 2001 WO
WO 0116697 Mar 2001 WO
WO 0116698 Mar 2001 WO
WO 0116702 Mar 2001 WO
WO 0116703 Mar 2001 WO
WO 0116713 Mar 2001 WO
WO 0116714 Mar 2001 WO
WO 0116715 Mar 2001 WO
WO 0116716 Mar 2001 WO
WO 0116718 Mar 2001 WO
WO 0116722 Mar 2001 WO
WO 0116758 Mar 2001 WO
WO 0116769 Mar 2001 WO
WO 0116770 Mar 2001 WO
WO 0116782 Mar 2001 WO
WO 0118646 Mar 2001 WO
WO 0141530 Jun 2001 WO
WO 0148596 Jul 2001 WO
WO 0148599 Jul 2001 WO
WO 0148606 Jul 2001 WO
WO 0148619 Jul 2001 WO
WO 0150247 Jul 2001 WO
WO 0150679 Jul 2001 WO
Related Publications (1)
Number Date Country
20030145155 A1 Jul 2003 US