Patent Description:
A system direct memory access (SDMA) engine is a device which coordinates direct memory access (DMA) transfers of data between devices and memory, or between different locations in memory, within a computer system. A SDMA engine is typically located on a processor, such as a graphics processor (GPU), and receives commands from an application running on the processor. Based on the commands, the SDMA engine reads data from an SDMA source (e.g., a first memory buffer defined in main memory), and writes data to a SDMA destination (e.g., a second buffer defined in main memory).

A SDMA source and SDMA destination are physically located on different devices in some cases. In multiprocessor systems, the SDMA source and SDMA destination are located on different devices associated with different processors in some cases. In such cases, the SDMA engine resolves virtual addresses to obtain physical addresses, and issues remote read and/or write commands to effect the DMA transfer.

<CIT> is disclosing a distributed DMA descriptor, wherein the DMA controller is performing the logical to physical address mapping and is collecting the data distributed over a plurality of discrete memory devices.

DETAILED DESCRIPTION The invention is as defined in the independent claims <NUM> and <NUM>. Preferred embodiments are according to the dependent claims.

The invention provides a computing system configured for direct memory access. The system includes a SDMA device on a processor die. The SDMA device sends a message to a data fabric device. The message includes a physical address of a source buffer, a physical address of a destination buffer, and a size of a data transfer from the source buffer to the destination buffer. The data fabric device sends an instruction or instructions to first agent devices. The instruction includes the physical address of the source buffer, the physical address of the destination buffer, and the size of the data transfer. The first agent devices each read a portion of the source buffer from a memory device at the physical address of the source buffer. The first agent devices each also send the portion of the source buffer to one of second agent devices. The second agent devices each operate a memory controller to write the portion of the source buffer to the destination buffer.

The SDMA device receives an instruction or instructions from a processor on the processor die. The instruction or instructions indicate a virtual address of the source buffer and a virtual address of the destination buffer. The SDMA device translates the virtual address of the source buffer into the physical address of the source buffer. The SDMA device translates the virtual address of the destination buffer into the physical address of the destination buffer. In some implementations, the data fabric device includes a miscellaneous (MISC) function block of a data fabric. In some implementations, the agent devices include coherent slave devices of a data fabric. In some implementations, the first agent devices are on the processor die, and the second agent devices are on a remote processor die. In some implementations, the second agent devices are on the processor die, and the first agent devices are on the remote processor die. In some implementations, each of the first agent devices store the portion of the source buffer in a local buffer before sending the portion of the source buffer to one of the second agent devices. Some implementations include a coherent link between the processor die and a remote processor die, and the first agent devices communicate with the second agent devices over the coherent link. In some implementations, the first agent devices each operate a memory controller to read the portion of the source buffer from the memory device at the physical address of the source buffer. In some implementations, the data fabric device broadcasts the instruction or instructions to the first agent devices.

The invention provides a method for direct memory access. The method includes sending a message from a system direct memory access (SDMA) device disposed on a processor die to a data fabric device. The message includes a physical address of a source buffer, a physical address of a destination buffer, and a size of a data transfer from the source buffer to the destination buffer. The method also includes sending an instruction or instructions by the data fabric device to first agent devices. The instruction or instructions include the physical address of the source buffer, the physical address of the destination buffer, and the size of the data transfer. The method also includes each of the first agent devices reading a portion of the source buffer from a memory device at the physical address of the source buffer. The method also includes each of the first agent devices sending the portion of the source buffer to one of second agent devices. The method also includes each of the second agent devices writing the portion of the source buffer to the destination buffer.

Some implementations include the SDMA device receiving an instruction or instructions from a processor of the processor die. The instruction indicates a virtual address of the source buffer and a virtual address of the destination buffer. Some implementations include the SDMA device translating the virtual address of a source buffer into the physical address of the source buffer. Some implementations include the SDMA device translating the virtual address of the destination buffer into the physical address of the destination buffer. In some implementations, the data fabric device includes a MISC function block of a data fabric. In some implementations, the agent devices include coherent slave devices of a data fabric. In some implementations, the first agent devices are on the processor die, and the second agent devices are on a remote processor die. In some implementations, the second agent devices are on the processor die, and the first agent devices are on a remote processor die. Some implementations include each of the first agent devices storing the portion of the source buffer in a local buffer before sending the portion of the source buffer to one of the second agent devices. Some implementations include the first agent devices communicating with the second agent devices over a coherent link between the processor die and a remote processor die. Some implementations include each of the first agent devices operating a memory controller to read the portion of the source buffer from a memory device at the physical address of the source buffer. Some implementations include the data fabric device broadcasting the instruction or instructions to the first agent devices.

<FIG> is a block diagram of an example device <NUM> in which one or more features of the disclosure can be implemented. The device <NUM> can include, for example, a computer, a gaming device, a handheld device, a set-top box, a television, a mobile phone, or a tablet computer. The device <NUM> includes a processor <NUM>, a memory <NUM>, a storage <NUM>, one or more input devices <NUM>, and one or more output devices <NUM>. The device <NUM> can also optionally include an input driver <NUM> and an output driver <NUM>. It is understood that the device <NUM> can include additional components not shown in <FIG>.

In various alternatives, the processor <NUM> includes a central processing unit (CPU), a graphics processing unit (GPU), a CPU and GPU located on the same die, or one or more processor cores, wherein each processor core can be a CPU or a GPU. In various alternatives, the memory <NUM> is located on the same die as the processor <NUM>, or is located separately from the processor <NUM>. The memory <NUM> includes a volatile or non-volatile memory, for example, random access memory (RAM), dynamic RAM, or a cache.

The storage <NUM> includes a fixed or removable storage, for example, a hard disk drive, a solid state drive, an optical disk, or a flash drive. The input devices <NUM> include, without limitation, a keyboard, a keypad, a touch screen, a touch pad, a detector, a microphone, an accelerometer, a gyroscope, a biometric scanner, or a network connection (e.g., a wireless local area network card for transmission and/or reception of wireless IEEE <NUM> signals). The output devices <NUM> include, without limitation, a display, a speaker, a printer, a haptic feedback device, one or more lights, an antenna, or a network connection (e.g., a wireless local area network card for transmission and/or reception of wireless IEEE <NUM> signals).

The input driver <NUM> communicates with the processor <NUM> and the input devices <NUM>, and permits the processor <NUM> to receive input from the input devices <NUM>. The output driver <NUM> communicates with the processor <NUM> and the output devices <NUM>, and permits the processor <NUM> to send output to the output devices <NUM>. It is noted that the input driver <NUM> and the output driver <NUM> are optional components, and that the device <NUM> will operate in the same manner if the input driver <NUM> and the output driver <NUM> are not present. The output driver <NUM> includes an accelerated processing device ("APD") <NUM> which is coupled to a display device <NUM>. The APD accepts compute commands and graphics rendering commands from processor <NUM>, processes those compute and graphics rendering commands, and provides pixel output to display device <NUM> for display. As described in further detail below, the APD <NUM> includes one or more parallel processing units that perform computations in accordance with a single-instruction-multiple-data ("SIMD") paradigm. Thus, although various functionality is described herein as being performed by or in conjunction with the APD <NUM>, in various alternatives, the functionality described as being performed by the APD <NUM> is additionally or alternatively performed by other computing devices having similar capabilities that are not driven by a host processor (e.g., processor <NUM>) and provide graphical output to a display device <NUM>. For example, it is contemplated that any processing system that performs processing tasks in accordance with a SIMD paradigm may perform the functionality described herein. Alternatively, it is contemplated that computing systems that do not perform processing tasks in accordance with a SIMD paradigm performs the functionality described herein.

<FIG> is a block diagram illustrating portions of an example computing system <NUM>. In some examples, computing system <NUM> is implemented using some or all of device <NUM>, as shown and described with respect to <FIG>. Computing system <NUM> includes a first semiconductor die <NUM>. Semiconductor die <NUM> includes one or more processors 210A-N, input/output (I/O) interfaces <NUM>, interconnect <NUM>, memory controller(s) <NUM>, and network interface <NUM>. In other examples, computing system <NUM> includes further components, different components, and/or is arranged in a different manner.

In some implementations, each of processors 210A-N includes one or more processing devices. In this example, at least one of processors 210A-N includes one or more general purpose processing devices, such as CPUs. In some implementations, such processing devices are implemented using processor <NUM> as shown and described with respect to <FIG>. In this example, at least one of processors 210A-N includes one or more data parallel processors. Examples of data parallel processors include GPUs, digital signal processors (DSPs), field programmable gate arrays (FPGAs), application specific integrated circuits (ASICs), and so forth. In some implementations, such processing devices are implemented using APD <NUM> as shown and described with respect to <FIG>.

In some implementations, each processor includes a cache subsystem with one or more levels of caches. In some implementations, each core complex 210A-N includes a cache (e.g., level three (L3) cache) which is shared among multiple processor cores.

Memory controller <NUM> includes at least one memory controller accessible by core complexes 210A-N, e.g., over interconnect <NUM>. Memory controller <NUM> includes one or more of any suitable type of memory controller. Each of the memory controllers are coupled to (or otherwise in communication with) and control access to any number and type of memory devices (not shown). In some implementations, such memory devices include Dynamic Random Access Memory (DRAM), Static Random Access Memory (SRAM), NAND Flash memory, NOR flash memory, Ferroelectric Random Access Memory (FeRAM), and/or any other suitable memory device. Interconnect <NUM> includes any computer communications medium suitable for communication among the devices shown in <FIG>, such as a bus, data fabric, or the like.

I/O interfaces <NUM> include one or more I/O interfaces (e.g., peripheral component interconnect (PCI) bus, PCI-Extended (PCI-X), PCIE (PCI Express) bus, gigabit Ethernet (GBE) bus, universal serial bus (USB), and the like). In some implementations, I/O interfaces <NUM> are implemented using input driver <NUM>, and/or output driver <NUM> as shown and described with respect to <FIG>. Various types of peripheral devices can be coupled to I/O interfaces <NUM>. Such peripheral devices include (but are not limited to) displays, keyboards, mice, printers, scanners, joysticks or other types of game controllers, media recording devices, external storage devices, network interface cards, and so forth. In some implementations, such peripheral devices are implemented using input devices <NUM> and/or output devices <NUM> as shown and described with respect to <FIG>.

<FIG> is a block diagram illustrating portions of an example multiprocessor computing system <NUM>. System <NUM>, or portions thereof, is implementable using some or all of semiconductor die <NUM> (as shown and described with respect to <FIG>) and/or device <NUM> (as shown and described with respect to <FIG> and <FIG>).

System <NUM> includes one or more processors 310A-N and one or more memory controllers 340A-N in communication with processors 310A-N over interconnect <NUM> (e.g., via other components). In some examples, processors 310AN are coupled to interconnect <NUM> via coherent masters 315A-N, and memory controllers 340A-N are coupled to interconnect <NUM> via coherent slaves 345A-N. Interconnect <NUM>, coherent masters 315A-N, and coherent slaves 345A-N form parts of a data fabric which facilitates communication among components of system <NUM>.

System <NUM> includes semiconductor die <NUM> and semiconductor die <NUM> in this example, and a coherent link <NUM> extends the data fabric over both dies via interconnect <NUM> and I/O interfaces 360A-B (which also form part of the data fabric). Interconnect <NUM> includes any computer communications medium suitable for communication among the devices shown in <FIG>, such as a bus, data fabric, or the like. Each of processors 310A-N includes one or more processor cores (e.g., CPUs and/or GPUs, as discussed regarding <FIG>). Each of processors 310A-N also includes a corresponding SDMA engine 370A-N.

Each processor 310A-N communicates with a corresponding coherent master 315A-N. In some implementations, a coherent master is an agent that processes traffic flowing over an interconnect (e.g., interconnect <NUM>) and manages coherency for a connected CPU or core complex. In some implementations, to manage coherency, a coherent master receives and processes coherency-related messages and probes, and generates and transmits coherency-related requests and probes.

Each processor 310A-N communicates with one or more coherent slaves 345A-N via its corresponding coherent master 315A-N and over interconnect <NUM>. A coherent slave is an agent device that manages coherency for a memory controller (e.g., a memory controller connected to the coherent slave). In some implementations, to manage coherency, a coherent slave receives and processes requests and probes that target a corresponding memory controller.

Processor 310A communicates with coherent slave 345A through coherent master 315A and interconnect <NUM> in the example of <FIG>. Coherent slave (CS) 345A communicates with memory controller (MC) 340A, which controls a memory device (e.g., a main memory DRAM device). In some implementations, each processor 310A-N is in communication with any suitable number of memory controllers 340A-N via a corresponding coherent master 315A-N and corresponding coherent slaves 340A-N.

Probes include messages passed from a coherency point (e.g., the coherent slave) to one or more caches in the computer system to request a response indicating whether the caches have a copy of a block of data and, in some implementations, to indicate a cache state into which the cache should place the block of data. In some implementations, if a coherent slave receives a memory request targeting its corresponding memory controller (e.g., a memory request for data stored at an address or a region of addresses in a memory controlled by the memory controller for which the coherent slave manages coherency), the coherent slave performs a lookup (e.g., a tag-based lookup) to its corresponding cache directory to determine whether the request targets a memory address or region cached in at least one cache line of any of the cache subsystems.

SDMA engines 370A-N coordinate DMA transfers of data between devices and memory, or between different locations in memory, within system <NUM>. SDMA engines 370A-N are capable of receiving instructions from their corresponding processors 310A-N. Based on the received instructions, in some cases, SDMA engines 370A-N read and buffer data from any memory via the data fabric, and and write the buffered data to any memory via the data fabric. Based on the received instructions, SDMA engines 370A-N send a message to a data fabric device, such as a miscellaneous (MISC) block of the data fabric, with instructions to effect a DMA.

MISC blocks 380A-B are data fabric devices that handle miscellaneous functions. In some cases, MISC blocks 380A-B host power management and interrupt functions. In some examples, MISC blocks 380A-B host SDMA functions as discussed herein. MISC block 380A receives a message from SDMA engine 370A (e.g., via an agent device, such as coherent master 315A) with instructions to effect a DMA transfer of a specified size from a source buffer at a physical address to a destination buffer at a physical address. MISC block 380A also broadcasts a corresponding command to agent devices on the same die (e.g., coherent slaves 345A-D) to effect the DMA transfer, e.g., as further discussed herein.

In some implementations, interconnect <NUM> is connected to and/or in communication with other components, which are not shown in <FIG> for ease of description. For example, in some implementations, interconnect <NUM> includes connections to one or more network interfaces <NUM> as shown and described with respect to <FIG>).

<FIG> is a message sequence chart illustrating example direct memory access messaging <NUM>, which is implementable among devices of system <NUM> as shown and described with respect to <FIG>, for example.

SDMA 370A coordinates a DMA from a source memory buffer physically located on a memory local to processor 310A (i.e., accessible via on-die memory controllers 340A-440B) to a destination buffer physically located on a memory local to processor 310N (i.e., accessible via on-die memory controllers 340E-N). This is referred to as a "read local, write remote" DMA herein. A corresponding "read remote, write local" operation is effected by rearranging the messaging accordingly. Similarly, corresponding "read local, write local" or "read remote, write remote" operations are also effected by rearranging the messaging accordingly.

Processor 310A sends a SDMA command, which includes a virtual address of the source buffer, a virtual address of the destination buffer, and a size of the data transfer, to SDMA 370A in instruction <NUM>. It is noted that instruction <NUM> includes more than one instruction and/or message in some implementations.

SDMA 370A performs a virtual-to-physical address translation of the virtual address of the source buffer and the virtual address of the destination buffer to obtain a physical address of the source buffer and a physical address of the destination buffer, respectively, in step <NUM>.

SDMA 370A sends the physical address of the source buffer, a physical address of the destination buffer, and a size of the data transfer in a SDMA message <NUM> to MISC block 380A.

MISC block 380A sends a SDMA command broadcast <NUM> which includes the physical address of the source buffer, a physical address of the destination buffer, and a size of the data transfer to all coherent slave devices on die <NUM>. In this example, CS 345A-D are on die <NUM>.

CS 345A-D each send a read command <NUM> to their associated local MC 340A-D. Each MC 340A-D reads its corresponding portion of the source buffer in step <NUM>, and returns the source buffer data to CS 340A-D in step <NUM>. Each CS 340A-D buffers the source buffer data in a local buffer <NUM> (if and/or as needed) for transmission.

CS <NUM>-A-D each send a remote write command <NUM> to remote CS 345E-N, which each send a write command <NUM> to their associated MC 340E-N. Each MC 340E-N writes its corresponding portion of the destination buffer in step <NUM>, and returns an acknowledgement <NUM> to its respective CS 345E-N. In some implementations, an acknowledgement is requested only for the last transfer (i.e., for the last write command <NUM>), and thus only one acknowledgement <NUM> is returned for all of the write commands <NUM>.

After the destination buffer has been completely written; i.e., the final MC 340E-N has returned an acknowledgement to its respective CS 345E-N, the CS445E-N receiving the final acknowledgement (or sole acknowledgement in the case where an acknowledgement is requested only for the last write command <NUM>) returns a cumulative acknowledgement <NUM> to CS445A-D. After receiving cumulative acknowledgement <NUM>, each CS 345A-D issues a command <NUM> to MISC block 380A to indicate completion of the transfer. In some implementations, command <NUM> includes an identity of the transfer (e.g., transfer ID). Based on command <NUM>, MISC block 380A sends an indication <NUM> to SDMA 370A indicating completion of the transfer.

<FIG> is a flow chart illustrating an example method for direct memory access. Method <NUM> is implementable on system <NUM> (as shown and described with respect to <FIG>), for example, and/or using signaling <NUM> (as shown and described with respect to <FIG>) in some examples.

In block <NUM>, SDMA 370A receives an instruction from processor 310A. The instruction may be a SDMA command which includes a virtual address of the source buffer, a virtual address of the destination buffer, and a size of the data transfer, e.g., as in instruction <NUM> (as shown and described with respect to <FIG>).

In block <NUM>, SDMA 370A performs a virtual-to-physical address translation of the virtual address of the source buffer and the virtual address of the destination buffer to obtain a physical address of the source buffer and a physical address of the destination buffer, respectively (e.g., as shown and described with respect to <NUM> as shown and described with respect to <FIG>).

In block <NUM>, SDMA 370A sends the physical address of the source buffer, a physical address of the destination buffer, and a size of the data transfer, to MISC block 380A in block <NUM> (e.g., message <NUM> as shown and described with respect to <FIG>).

In block <NUM>, MISC block 380A receives the message, and in block <NUM>, sends a SDMA command broadcast (e.g., broadcast <NUM> as shown and described with respect to <FIG>) which includes the physical address of the source buffer, a physical address of the destination buffer, and a size of the data transfer to all coherent slave devices on die <NUM>. In this example, CS 345A-D are on die <NUM>. In some implementations, broadcast <NUM> includes an identification of the transfer (e.g., Transfer ID) to identify the transfer job.

On condition <NUM> that the source buffer is local and the destination buffer is remote, in block <NUM>, local CS 345A-D each send a read command (e.g., command <NUM> as shown and described with respect to <FIG>) to their associated MC 340A-D such that each MC 340A-D reads its corresponding portion of the source buffer (if any) and returns the source buffer data to CS 340A-D. Each CS 340A-D buffers the source buffer data in a local buffer (if and/or as needed) for transmission.

In block <NUM>, local CS 345A-D each send a remote write command to remote CS 345E-N to write the buffer to the remote memory. In block <NUM>, remote CS 345E-N, each send a write command to their associated MC 340E-N such that each MC 340E-N writes its corresponding portion of the source buffer data to the destination buffer in its associated memory. After writing its corresponding portion of the destination buffer, each MC 340E-N returns an acknowledgement to its respective CS 345E-N.

In block <NUM>, after the destination buffer has been completely written; i.e., the final MC 340E-N has returned an acknowledgement to its respective CS 345E-N, the CS 345E-N receiving the final acknowledgement returns a cumulative acknowledgement <NUM> to local CS 345A-D. After receiving cumulative acknowledgement <NUM>, each CS 345A-D issues a command to MISC block 380A to indicate completion of the transfer. In some implementations, command includes an identity of the transfer (e.g., transfer ID). Based on the command, MISC block 380A sends an indication to SDMA 370A indicating completion of the transfer.

On condition <NUM> that the source buffer is remote and the destination buffer is local, local CS 345A-D each send a remote read command to remote CS 345E-N in block <NUM>. Based on the remote read command, remote CS 345E-N each send a read command to their associated MC 340E-N in block <NUM> such that MC 340E-N return the source buffer data to CS 345E-N. CS 345E-N buffer the source buffer data in a local buffer (if and/or as needed) for transmission.

Remote CS 345E-N transmit the buffered data to local CS 345A-D over the coherent link in block <NUM>. Local CS 345A-D write the data to the destination buffer at the physical memory address via associated MC 340A-D in block <NUM>. After the destination buffer has been completely written; i.e., the final MC 340A-D has returned an acknowledgement to its respective CS 345A-D, the CS 345A-D receiving the final acknowledgement issues a command to MISC block 380A in block <NUM> to indicate completion of the transfer. In some implementations, the command includes an identity of the transfer (e.g., transfer ID). Based on the command, MISC block 380A sends an indication to SDMA 370A indicating completion of the transfer.

The various functional units illustrated in the figures and/or described herein (including, but not limited to, the processor <NUM>, the input driver <NUM>, the input devices <NUM>, the output driver <NUM>, the output devices <NUM>, the accelerated processing device <NUM>) may be implemented as a general purpose computer, a processor, or a processor core, or as a program, software, or firmware, stored in a non-transitory computer readable medium or in another medium, executable by a general purpose computer, a processor, or a processor core. The methods provided can be implemented in a general purpose computer, a processor, or a processor core. Suitable processors include, by way of example, a general purpose processor, a special purpose processor, a conventional processor, a digital signal processor (DSP), a plurality of microprocessors, one or more microprocessors in association with a DSP core, a controller, a microcontroller, Application Specific Integrated Circuits (ASICs), Field Programmable Gate Arrays (FPGAs) circuits, any other type of integrated circuit (IC), and/or a state machine. Such processors can be manufactured by configuring a manufacturing process using the results of processed hardware description language (HDL) instructions and other intermediary data including netlists (such instructions capable of being stored on a computer readable media). The results of such processing can be maskworks that are then used in a semiconductor manufacturing process to manufacture a processor which implements features of the disclosure.

Claim 1:
A computing system configured for direct memory access, the system comprising:
a system direct memory access, SDMA, device (370A-B) disposed on a processor die and configured to send, to a data fabric device (380A), a message which includes a physical address of a source buffer, a physical address of a destination buffer, and a size of a data transfer from the source buffer to the destination buffer;
the data fabric device configured to send, to a first plurality of agent devices (345A-D), at least one instruction which includes the physical address of the source buffer, the physical address of the destination buffer, and the size of the data transfer;
the first plurality of agent devices each configured to:
read a portion of the source buffer from a memory device at the physical address of the source buffer; and
send the portion of the source buffer to one of a second plurality of agent devices (345E-N); and
the second plurality of agent devices are each configured to operate a memory controller (340E-N) to write the portion of the source buffer to the destination buffer.