Direct memory access architectures to accelerate compute tasks

By integrating data processing modules within DMA channels to perform operations like data conversion during DMA transfers, the inefficiencies in existing computing systems are addressed, leading to improved performance and efficiency in AI computing tasks.

WO2025065725A1PCT designated stage expired Publication Date: 2025-04-03INTEL CORP +9
View PDF 5 Cites 0 Cited by

Patent Information

Application Number
PCT/CN2023/123056
Authority / Receiving Office
WO · WO
Patent Type
Applications
Current Assignee / Owner
Filing Date
2023-09-30
Publication Date
2025-04-03

AI Technical Summary

Technical Problem

Existing computing unit and DMA module designs lead to hardware idle time and additional memory or cache fetches during inference, resulting in less-than-optimal execution efficiency and potential bottlenecks in complex computing scenarios like machine learning and AI computing.

Method used

Incorporating one or more in-line data processing modules within a DMA channel to perform data processing operations such as data conversion, absolute value, and NOT operations during DMA transfers, thereby optimizing process efficiency by reducing the need for compute units to perform these operations.

Benefits of technology

This approach improves the overall performance of AI computing by reducing clock cycles, enhancing internal buffer utilization, and allowing for parallel scheduling of DMA and compute tasks, thereby accelerating compute tasks and improving execution efficiency.

✦ Generated by Eureka AI based on patent content.

Smart Images

  • Figure CN2023123056_03042025_PF_FP_ABST
    Figure CN2023123056_03042025_PF_FP_ABST
Patent Text Reader

Abstract

Technology described herein provides a direct memory access (DMA) architecture to accelerate compute tasks, including a DMA channel comprising a data processing module and logic responsive to a DMA request, the DMA request including a source address, a destination address, and a data processing operation, where the logic is to read input data from the source address at a source memory, generate output data based on performing, via the data processing module, the data processing operation on the input data, and write the output data to the destination address at a destination memory. In embodiments the data processing module comprises one or more sub-modules, a sub-module comprising logic to perform a respective data processing operation, a multiplexor coupled to the sub-modules, and a register coupled to the multiplexor to select, via the multiplexor, a logic output of one of the sub-modules.
Need to check novelty before this filing date? Find Prior Art

Description

DIRECT MEMORY ACCESS ARCHITECTURES TO ACCELERATE COMPUTE TASKSBACKGROUND

[0001] In complex computing scenarios such as machine learning and artificial intelligence (AI) computing, there are often circumstances where data is transferred and then used for calculations. For example, weights of a neural network (or portion thereof) are transferred from off-chip memory to the cache, then the precision is converted from FP32 to BF16 in preparation for further calculations. Generally, data transfer is done by direct memory access (DMA) , and computing operations are done by executing instructions in computing units such as in a CPU or other processor. Existing computing unit and DMA module designs lead to hardware idle time and / or additional memory or cache fetches during inference, resulting in less-than-optimal execution efficiency and potential bottlenecks.BRIEF DESCRIPTION OF THE DRAWINGS

[0002] The various advantages of the embodiments will become apparent to one skilled in the art by reading the following specification and appended claims, and by referencing the following drawings, in which:

[0003] FIG. 1 provides a block diagram illustrating aspects of an example computing system according to one or more embodiments;

[0004] FIG. 2A provides a block diagram illustrating an example of a DMA engine according to one or more embodiments;

[0005] FIG. 2B provides a diagram illustrating an example DMA request structure for use in a DMA engine according to one or more embodiments;

[0006] FIGs. 3A-3C provide block diagrams illustrating examples of DMA channel architectures according to according to one or more embodiments;

[0007] FIG. 4 provides a block diagram illustrating an example of a data processing module for use in a DMA channel according to one or more embodiments;

[0008] FIGs. 5A-5F provide diagrams illustrating examples of data processing operations for a data processing module according to one or more embodiments;

[0009] FIG. 6A-6B provide comparative diagrams illustrating an example of compute performance improvement according to one or more embodiments;

[0010] FIG. 7 provides a flow diagram illustrating an example method of performing a DMA transfer according to one or more embodiments;

[0011] FIG. 8 provides a flow diagram illustrating an example method for accelerating compute tasks according to one or more embodiments;

[0012] FIG. 9 provides a block diagram illustrating an example performance-enhanced computing system for accelerating compute tasks according to one or more embodiments;

[0013] FIG. 10 provides a block diagram illustrating an example semiconductor apparatus for accelerating compute tasks according to one or more embodiments;

[0014] FIG. 11 is a block diagram illustrating an example processor core according to one or more embodiments; and

[0015] FIG. 12 is a block diagram illustrating an example of a multi-processor based computing system according to one or more embodiments.DESCRIPTION OF EMBODIMENTS

[0016] Embodiments relate to DMA architectures to accelerate compute tasks. An improved computing system as described herein provides one or more in-line data processing modules within a DMA channel to perform one or more data processing operations on data as the data is being moved from source to destination as part of a DMA transfer. Data processing operations include one or more operations such as, e.g., data conversion, absolute value, not operation, etc. Data processing module (s) is / are implemented by adding combinational logic circuit in the DMA data response processing channel so as to combine it with an effective increase of internal buffer utilization. Adding data processing operations to the DMA channel enable efficiency optimization of processes involving, for example, data transfer followed by calculation. The technology described herein helps improve the overall performance of AI computing by offloading certain data operations from compute units and incorporating within the DMA transfer, providing an overall reduction in clock cycles. The technology also improves the availability of parallel scheduling of DMA tasks and compute tasks.

[0017] FIG. 1 provides a block diagram illustrating aspects of an example computing system 100 according to one or more embodiments, with reference to components and features  described herein including but not limited to the figures and associated description. As shown in FIG. 1, the system 100 includes a host processing unit (XPU) 110 and a system memory 120, which are coupled to enable data communication between the host XPU 110 and the system memory 120. The host XPU 110 includes one or more compute unit (s) 112, a local memory 114, and a DMA engine 116. The host XPU 110 can be any one of a variety of processing units such as, for example, a central processing unit (CPU) , a graphics processing unit (GPU) , a neural processing unit (NPU) , a vision processing unit (VPU) , and / or any tightly-coupled memory-based accelerator, etc.

[0018] The compute unit (s) 112 can include, e.g., execution units or other processing modules for performing data processing operations –including, for example, calculations performed in AI computing applications. The local memory 114 can include an on-chip cache memory which is used to support the compute unit (s) 112 by providing local, temporary storage during compute operations. It will be understood that while the local memory 114 is illustrated as an on-chip memory for the host XPU 110 in the example shown in FIG. 1, in some embodiments the local memory 114 can be located off-chip but nearby to the host XPU 110.

[0019] The DMA engine 116 includes one or more DMA channels for handling DMA data transfers between the local memory 114 and the system memory 120. The system memory 120 provides data storage (e.g., data and instructions) for active application (s) being executed on the host XPU 110. The system memory can include, for example, double data rate (DDR) random access memory (RAM) .

[0020] Some or all components and / or features in the system 100 can be implemented using one or more of a central processing unit (CPU) , a graphics processing unit (GPU) , an artificial intelligence (AI) accelerator, a field programmable gate array (FPGA) accelerator, an application specific integrated circuit (ASIC) , and / or via a processor with software, or in a combination of a processor with software and an FPGA or ASIC. More particularly, components of the system 100 can be implemented in one or more modules as a set of program or logic instructions stored in a machine-or computer-readable storage medium such as random access memory (RAM) , read only memory (ROM) , programmable ROM (PROM) , firmware, flash memory, etc., in hardware, or any combination thereof. For example, hardware implementations can include configurable logic, fixed-functionality logic, or any combination thereof. Examples of configurable logic include suitably configured programmable logic  arrays (PLAs) , FPGAs, complex programmable logic devices (CPLDs) , and general purpose microprocessors. Examples of fixed-functionality logic include suitably configured ASICs, combinational logic circuits, and sequential logic circuits. The configurable or fixed-functionality logic can be implemented with complementary metal oxide semiconductor (CMOS) logic circuits, transistor-transistor logic (TTL) logic circuits, or other circuits.

[0021] For example, computer program code to carry out operations by the system 100 can be written in any combination of one or more programming languages, including an object-oriented programming language such as Java, JavaScript, Python, C#, C++, Perl, Smalltalk, or the like and conventional procedural programming languages, such as the “C” programming language or similar programming languages. Additionally, program or logic instructions might include assembler instructions, instruction set architecture (ISA) instructions, machine instructions, machine dependent instructions, microcode, state-setting data, configuration data for integrated circuitry, state information that personalizes electronic circuitry and / or other structural components that are native to hardware (e.g., host processor, central processing unit / CPU, microcontroller, etc. ) .

[0022] FIG. 2A provides a block diagram illustrating an example of a DMA engine 200 according to one or more embodiments, with reference to components and features described herein including but not limited to the figures and associated description. The DMA engine 200 is used for DMA data transfers conducted responsive to DMA requests. It will be understood that a DMA data transfer, as described herein, can refer to moving or copying the subject data. The DMA engine 200 includes one or more DMA channels, such as, e.g., a first DMA channel 240 (labeled as DMA Channel 0) , and optionally a second DMA channel 241 (labeled as DMA Channel 1) . The DMA engine 200 receives host DMA requests 210 from a host processor (such as, e.g., the host XPU 110 in FIG. 1, already discussed) , which requests DMA data transfers. In some embodiments the host DMA requests 210 can be initiated on behalf of the host processor by a memory management unit or like component. A host DMA request 210 includes a source address where the data to be transferred from, a destination address where the data is to be transferred to, and one or more data processing operations (e.g., the DMA requests include identifiers for the operations) to be performed on the data during the DMA transfer. An example of a DMA request structure for an example host DMA request 210 is described herein with reference to FIG. 2B.

[0023] In some embodiments where there is more than one DMA channel, the target DMA channel to which any given host DMA request 210 is routed is determined based on a type of operation that is associated with the data operation in the respective DMA request. In some embodiments (e.g., where at least one DMA channel includes a data processing module and at least one DMA channel has no data processing module, the target DMA channel to which any given host DMA request 210 is routed is determined based on whether the DMA request includes a data processing operation (other than a no-op) .

[0024] Each of the DMA channel 240 and (when present) the DMA channel 241 includes a buffer 242, a first data processing module 244 (labeled as DPM-A) , and / or a second data processing module 246 (labeled as DPM-B) . The data buffer 242 provides a temporary storage area in the respective DMA channel 240  / 241 for data handling during a DMA transfer. The first data processing module 244 includes logic for performing a first data processing operation on input data from a source (e.g., corresponding to a source address in the DMA request and / or the DMA job) , where the results of the first data operation are provided to the data buffer 242. The second data processing module 246 includes logic for performing a second data processing operation on data from the data buffer 242, where the results of the second data operation are provided as output data to be stored in a destination (e.g., corresponding to a destination address provided in the DMA request and / or the DMA job) . Thus, as part of the DMA transfer, one or two data processing operations are performed on the data being transferred, such that when the DMA transfer is completed the data transferred has been modified based on the data processing operation (s) as performed by the respective DMA channel.

[0025] In embodiments, either or both of the data processing modules 244, 246 include logic for selecting a data processing operation among several available data processing operations. In some embodiments, one of the data processing modules (e.g., the data processing module 244) has logic for selecting among a first set of data operations, while the other data processing modules (e.g., the data processing module 246) has logic for selecting among a second set of data operations that is different from the first set. In some embodiments, either or both of the DMA channels 240  / 241 include two data processing modules (i.e., first data processing module 244 and the second data processing module 246) . In some embodiments, either or both of the DMA channels 240  / 241 include one data processing module (i.e., the first data processing module 244 or the second data processing module 246) . In some embodiments,  each of the DMA channels 240  / 241 have the same architecture (e.g., each including one or two data processing modules, and / or each data processing module having logic to select among data processing operations, etc) .

[0026] In some embodiments, the DMA channels 240  / 241 have a different architecture. As one example, one DMA channel can include two data processing modules while the other DMA channel can include zero or one data processing module. As another example, one DMA channel can include only the first data processing module while the other DMA channel can include only the second data processing module. As another example, one DMA channel can include a data processing module having logic for selecting among a set of data operations, while the other DMA channel can include a data processing module without logic for selecting among data operations or having logic for selecting among a different set of data operations.

[0027] It will be understood that in some embodiments the DMA engine 200 includes a number of DMA channels that is greater than one. For example, the DMA engine 200 can include two DMA channels, or three DMA channels, four DMA channels, etc., where each DMA channel has an architecture as described herein. Further details regarding architectures for a DMA channel are provided herein with reference to FIGs. 3A-3B, 4, and 5A-5F.

[0028] The DMA engine 200 can generally be implemented in the DMA engine 116 (FIG. 1, already discussed) . More particularly, the DMA engine 200 and / or components, features or functions thereof can be implemented as one or more modules as a set of logic instructions stored in a machine-or computer-readable storage medium such as RAM, ROM, PROM, firmware, flash memory, etc., in hardware, or any combination thereof. For example, hardware implementations can include configurable logic, fixed-functionality logic, or any combination thereof. Examples of configurable logic include suitably configured PLAs, FPGAs, CPLDs, and general purpose microprocessors. Examples of fixed-functionality logic include suitably configured ASICs, combinational logic circuits, and sequential logic circuits. The configurable or fixed-functionality logic can be implemented with CMOS logic circuits, TTL logic circuits, or other circuits.

[0029] For example, computer program code to carry out the DMA engine 200 and / or components, features or functions thereof can be written in any combination of one or more programming languages, including an object-oriented programming language such as Java, JavaScript, Python, C#, C++, Perl, Smalltalk, or the like and conventional procedural  programming languages, such as the “C” programming language or similar programming languages. Additionally, program or logic instructions might include assembler instructions, instruction set architecture (ISA) instructions, machine instructions, machine dependent instructions, microcode, state-setting data, configuration data for integrated circuitry, state information that personalizes electronic circuitry and / or other structural components that are native to hardware (e.g., host processor, central processing unit / CPU, microcontroller, etc. ) .

[0030] FIG. 2B provides a diagram illustrating an example DMA request structure 250 for use in the DMA engine 200 according to one or more embodiments, with reference to components and features described herein including but not limited to the figures and associated description. The DMA request structure 250 provides information for a DMA transfer, and, in embodiments, the DMA request structure 250 corresponds to the host DMA request 210 (FIG. 2A) or information contained in the host DMA request 210. The DMA request structure 250 includes a series of fields 255, each field occupying a set of bits and having a name (or type) . For example, the DMA request structure 250 includes a SRC field that provides a source address (i.e., where the data to be transferred from) for the DMA request, and a DST field that provides a destination address (i.e., where the data to be transferred to) for the DMA request. In the example illustrated in FIG. 2B, each of the SRC and DST fields are 64 bits, providing for 64-bit addresses. In some embodiments the fields for SRC and DST addresses can be larger or smaller than 64 bits.

[0031] The DMA request structure 250 also includes one or more an operation fields (shown as Operation A and Operation B in the illustrated example of FIG. 2B) . The operation field (s) each provide an operation code 260 (e.g., an identifier) that indicates (e.g., identifies) a selectable data processing operation to be performed by a respective DMA channel (such as the DMA channel 240 or 241) . For example, in embodiments Operation A corresponds to a first data processing operation to be performed by the first data processing module 244 (e.g., when present in the respective DMA channel) and Operation B corresponds to a second data processing operation to be performed by the second data processing module 246 (e.g., when present in the respective DMA channel) .

[0032] In the example shown in FIG. 2B, the operation code 260 can be, e.g., 0 for a default operation (or a no-op) , 1 for a CONV operation, 2 for a NEG operation, 3 for an ABS operation, etc. While each of the operation fields in the example DMA request structure 250 illustrated  in FIG. 2B is 8 bits, in some embodiments the operation fields can be larger or smaller than 8 bits. For example, in some embodiments the size of each operation field is based on the maximum number of data processing operations available for selection. As one example, if the maximum number of data processing operations available for selection is between 5 and 8, the number of bits allocated to each operation field in the DMA request structure 250 can be as little as 3 bits. Further details regarding processing operations are provided herein with reference to FIGs. 4 and 5A-5F.

[0033] FIGs. 3A-3C provide block diagrams illustrating examples of DMA channel architectures according to according to one or more embodiments, with reference to components and features described herein including but not limited to the figures and associated description. Turning to FIG. 3A, an example architecture for a DMA channel 300 is shown. In embodiments, the DMA channel 300 corresponds to the DMA channel 240 and / or the DMA channel 241 (FIG. 2A, already discussed) . As shown in the example of FIG. 3B, the DMA channel 300 includes a source module 310, a first data processing module 320 (labeled as Data Processing Module A) , a data buffer 330, a second data processing module 340 (labeled as Data Processing Module B) , and a destination module 350. The DMA channel 300 operates responsive to a DMA request 305. The DMA request 305 includes a source address, a destination address, and at least one data processing operation (e.g., a code or other identifier that indicates which data processing operation is to be performed by the DMA channel) . In embodiments, the DMA request 305 corresponds to a host DMA request 210 (FIG. 2A) having e.g. a DMA request structure 250 (FIG. 2B) .

[0034] The source module 310 operates to fetch the subject data of the DMA request. For example, the source module 310 issues a read request to a source memory 360 for data stored in the memory 360 corresponding to the source address. The subject data is read (e.g., copied) from the source memory 360 to the DMA channel 300 (e.g., via the source module 310) and provided as input data to the first data processing module 320. The first data processing module 320 includes logic to generate output data by performing a first data processing operation on the input data. In embodiments the first data processing operation is selected based on a data processing operation (e.g., Operation A) identified in the DMA request 305. In embodiments the first data processing module 320 corresponds to the first data processing module 244 (FIG. 2A) .

[0035] The output data from the first data processing module 320 (e.g., results produced by the first data processing operation) proceed to the data buffer 330, which provides temporary storage of the data before the data is further processed in the DMA channel 300. For example, in embodiments the data is held in the data buffer 330 until a sufficient amount of data is available in the buffer for further processing. In embodiments the data buffer 330 corresponds to the data buffer 242 (FIG. 2A) . From the data buffer 330, the data is presented as input data to the second data processing module 340. The second data processing module 320 includes logic to generate output data by performing a second data processing operation on the input data. In embodiments the second data processing operation is selected based on a data processing operation (e.g., Operation B) identified in the DMA request 305. In embodiments the second data processing module 340 corresponds to the second data processing module 246 (FIG. 2A) .

[0036] In some embodiments one of the first data processing module 320 or the second data processing module 340 includes logic to perform only a single fixed data processing operation (e.g., the data processing operation in such cases is non-selectable) . Further details regarding the first data processing module 320 and / or the second data processing module 340 are provided herein with reference to FIGs. 4 and 5A-5F.

[0037] The output data from the second data processing module 340 (e.g., results produced by the second data processing operation) proceed to the destination module 350. The destination module 350 operates to write the subject data of the DMA request (e.g., data fetched from the source memory and modified by the first data processing operation and / or the second data processing operation) to the destination memory. For example, destination module 350 issues a write request to a destination memory --e.g., the memory 370 --to store data in the memory corresponding to the destination address. The subject data is written (e.g., copied) to the destination memory --e.g., the memory 370 --from the DMA channel 300 via the destination module 350.

[0038] The DMA channel architecture as provided herein enables integration of data processing operations as part of the DMA transfer process, before and / or after the data buffer 330 in the DMA channel 300. In embodiments selection of a data processing operation to occur before or after the data buffer 330 can depend on the type of data processing operation. For example, some data processing operations (such as, e.g., certain data down-conversion  operations) reduce the overall data size to be written and, thus, can advantageously be performed prior to the data buffer 330. This enables increased channel buffer utilization by effectively increasing the amount of input data that can be read in and processed (e.g., size of input data is reduced by the data processing operation) before buffering in the data buffer 330 –thus enabling an increased read request rate. As another example, some data processing operations (such as, e.g., certain data up-conversion operations) increase the overall data size to be written and, thus, can advantageously be performed after the data buffer 330 without reducing the amount of input data that can be handled prior to the data buffer 330.

[0039] In some cases, the destination address can point to a memory location in the memory 360, thus in such cases the memory 360 becomes the destination memory. In some cases, such as a DMA transfer from system memory to local memory, the source memory (e.g., the memory 360) is a system memory (such as, e.g., the system memory 120 in FIG. 1) , and the destination memory (e.g., the memory 370) is a local memory (e.g., the local memory 114 in FIG. 1) . In some cases, such as a DMA transfer from local memory to system memory, the source memory (e.g., the memory 360) is a local memory (e.g., the local memory 114 in FIG. 1) , and the destination memory (e.g., the memory 370) is a system memory (such as, e.g., the system memory 120 in FIG. 1.

[0040] Turning now to FIG. 3B, another example architecture for a DMA channel 380 is shown. In embodiments, the DMA channel 380 corresponds to the DMA channel 240 and / or the DMA channel 241 (FIG. 2A, already discussed) . The DMA channel 380 operates in a manner the same as or similar to the DMA channel 300 (FIG. 3A, already discussed) and includes components and features the same as or similar to those in the DMA channel 300; those components, features and operation will not be repeated except as appropriate to describe the components and features of the DMA channel 380. As shown in the example of FIG. 3B, the DMA channel 380 includes, in contrast to the DMA channel 300, only a single data processing module –in this example, the data processing module 320. Thus, in operation the DMA channel 380 fetches the source data which is provided as input data to the data processing module 320. The output data from the data processing module 320 proceeds to the data buffer 330 and then to the destination module 350 for writing to the destination memory.

[0041] Turning now to FIG. 3C, another example architecture for a DMA channel 390 is shown. In embodiments, the DMA channel 390 corresponds to the DMA channel 240 and / or  the DMA channel 241 (FIG. 2A, already discussed) . The DMA channel 390 operates in a manner the same as or similar to the DMA channel 300 (FIG. 3A, already discussed) and includes components and features the same as or similar to those in the DMA channel 300; those components, features and operation will not be repeated except as appropriate to describe the components and features of the DMA channel 390. As shown in the example of FIG. 3C, the DMA channel 390 includes, in contrast to the DMA channel 300, only a single data processing module –in this example, the data processing module 340. Thus, in operation the DMA channel 380 fetches the source data which proceeds to the data buffer and is provided as input data to the data processing module 340. The output data from the data processing module 320 proceeds to the destination module 350 for writing to the destination memory.

[0042] The DMA channel 300, the DMA channel 380, and / or the DMA channel 390 can generally be implemented in the DMA engine 116 (FIG. 1, already discussed) and / or the DMA engine 200 (FIG. 2A, already discussed) . More particularly, the DMA channel 300, the DMA channel 380, and / or the DMA channel 390 and / or components, features or functions thereof can be implemented as one or more modules as a set of logic instructions stored in a machine-or computer-readable storage medium such as RAM, ROM, PROM, firmware, flash memory, etc., in hardware, or any combination thereof. For example, hardware implementations can include configurable logic, fixed-functionality logic, or any combination thereof. Examples of configurable logic include suitably configured PLAs, FPGAs, CPLDs, and general purpose microprocessors. Examples of fixed-functionality logic include suitably configured ASICs, combinational logic circuits, and sequential logic circuits. The configurable or fixed-functionality logic can be implemented with CMOS logic circuits, TTL logic circuits, or other circuits.

[0043] For example, computer program code to carry out the DMA channel 300, the DMA channel 380, and / or the DMA channel 390 and / or components, features or functions thereof can be written in any combination of one or more programming languages, including an object-oriented programming language such as Java, JavaScript, Python, C#, C++, Perl, Smalltalk, or the like and conventional procedural programming languages, such as the “C” programming language or similar programming languages. Additionally, program or logic instructions might include assembler instructions, instruction set architecture (ISA) instructions, machine instructions, machine dependent instructions, microcode, state-setting data, configuration data  for integrated circuitry, state information that personalizes electronic circuitry and / or other structural components that are native to hardware (e.g., host processor, central processing unit / CPU, microcontroller, etc. ) .

[0044] FIG. 4 provides a block diagram illustrating an example of a data processing module 400 for use in a DMA channel according to one or more embodiments, with reference to components and features described herein including but not limited to the figures and associated description. In embodiments, the data processing module 400 corresponds to the first data processing module 244 (FIG. 2A, already discussed) , the second data processing module 246 (FIG. 2A, already discussed) , the first data processing module 320 (FIGs. 3A and 3B, already discussed) , and / or the second data processing module 340 (FIGs. 3A and 3C, already discussed) . As shown in FIG. 4, the data processing module 400 includes logic (e.g., combinational logic circuits) to perform a plurality of data processing operations, such as, for example, a CONV operation 410, a NEG operation 412, an ABS operation 414, a SIGN operation 416, a NOT operation 418, and a rectified linear unit (RELU) operation 420, on input data. It will be understood that the data processing module 400 can include logic to perform a variety of data processing operations, including more or fewer operations, or different operations, than as illustrated in FIG. 4. Use of combinational logic circuits in the data processing module 400 to perform the data processing operations will not slow down the DMA transfer process and, thus, will not impact the DMA data transfer efficiency.

[0045] In the example of FIG. 4, the data processing operation logic provided in the data processing module 400 is arranged such that the data processing operations are performed on the input data in parallel and the results of these operations are fed to a multiplexor (MUX) 430. Based on a selection signal, e.g., from an operation select register 440, the MUX 430 selects one of the data processing results as the output data for the data processing module 400. For example, in embodiments a code is presented to and stored in the operation select register 440, which sets the MUX 430 to select a desired data processing operation. In some embodiments, the code input to the operation select register 440 corresponds to the operation code 260 (FIG. 2B, already discussed) , which is provided as part of the DMA request (e.g., the DMA request 305) . In such embodiments, the operation code 260 thus is used to select, via the MUX 230, the result of the data processing operation corresponding to the operation code 260.

[0046] The data processing module 400 can generally be implemented in the DMA engine 116 (FIG. 1, already discussed) , the DMA engine 200 (FIG. 2A, already discussed) , and / or the DMA channel 300, the DMA channel 380, and / or the DMA channel 390 (FIGs. 3A-3C, already discussed) . More particularly, the data processing module 400 and / or components, features or functions thereof can be implemented in hardware logic. For example, hardware implementations can include configurable logic, fixed-functionality logic, or any combination thereof. Examples of configurable logic include suitably configured PLAs, FPGAs, CPLDs, and general purpose microprocessors. Examples of fixed-functionality logic include suitably configured ASICs, combinational logic circuits, and sequential logic circuits. The configurable or fixed-functionality logic can be implemented with CMOS logic circuits, TTL logic circuits, or other circuits.

[0047] FIGs. 5A-5F provide diagrams illustrating examples of data processing operations for a data processing module according to one or more embodiments, with reference to components and features described herein including but not limited to the figures and associated description. In embodiments, the data processing operations illustrated in FIGs. 5A-5F correspond to operations illustrated with reference to the data processing module 400 (FIG. 4, already discussed) . In the examples of FIGs. 5A-5E the data is 32 bits, although the logic for all of the illustrated example data processing operations can be applied / modified for data having fewer or more than 32 bits. It will be understood that the examples shown in FIGs. 5A-5F provide examples of logic implementations for the referenced data processing operations, and that other logic implementations can be used to achieve the same or similar operational results. Data processing operations such as the types of operations referenced in FIG. 4 and / or FIGs. 5A-5F can typically be performed via simple bitwise operations, such as bitwise comparison and shift, so they can be implemented with combinational logic circuits.

[0048] Turning to FIG. 5A, shown is a logic diagram illustrating an example logic circuit 510 for a negative operation (NEG Op) . For a floating point number or a signed integer, the sign bit indicates whether the number is positive or negative --e.g., 0 means positive, 1 means negative. In the example of FIG. 5A, the logic circuit 510 includes a NOT gate applied to the sign bit (bit 31 in the example shown) of data input, while the remaining bits (bits 0-30 in the example shown) are passed through to the output. As a result, the logic circuit 510 changes  the sign of the input data by flipping the most significant bit (negative operation) . Equivalent execution code can be written as: neg_data = {~raw_data1 [DATAWIDTH-1] , raw_data1 [DATAWIDTH-2: 0] } .

[0049] Turning now to FIG. 5B, shown is a logic diagram illustrating an example logic circuit 520 for an absolute value operation (ABS Op) . For a floating point number or a signed integer, the absolute value is provided by all bits except for the sign bit. In the example of FIG. 5B, the logic circuit 520 passes all bits (bits 0-30 in the example shown) except for the sign bit (bit 31) to the output. The sign bit (e.g., bit 31) is set to 0 at the output. As a result, the logic circuit 520 provides the magnitude of the input data without a sign bit (absolute value operation) . Equivalent execution code can be written as: abs_data = {1′b0, raw_data2 [DATAWIDTH-2: 0] } .

[0050] Turning now to FIG. 5C, shown is a logic diagram illustrating an example logic circuit 530 for a sign operation (SIGN Op) . The sign operation can be represented as:

[0051] For a floating point number or a signed integer, the sign bit indicates whether the number is positive or negative --e.g., 0 means positive, 1 means negative. In the example of FIG. 5C, the logic circuit 530 includes logic gates to implement the sign function operation on signed input data, where bits 0-31 are presented to an OR gate, with the output of the OR gate passed to a multiplexor which selects an output (for all but the sign bit) based on the value of bit 31 (the sign bit) .

[0052] Turning now to FIG. 5D, shown is a logic diagram illustrating an example logic circuit 540 for a Not operation (NOT Op) . The Not operation can be represented as:

[0053] In the example of FIG. 5D, the logic circuit 540 includes an OR gate applied to bits 0-31, where a NOT gate is applied to the OR output. Equivalent execution code can be written as: not_data = (raw_data == 0) ? ′b1∶ ′b0.

[0054] Turning now to FIG. 5E, shown is a logic diagram illustrating an example logic circuit 550 for a rectified linear unit (ReLU) operation (RELU Op) . The ReLU operation is an activation function used in many compute applications (such as neural networks) . The ReLU operation can be represented as:

[0055] In the example of FIG. 5E, the logic circuit 550 includes logic to implement the ReLU function operation using a multiplexor having bits 0-30 of the raw data as one input and a “0” value as the other input. The output of the multiplexor is selected based on the sign bit (bit 31) , and the output sign bit is set to “0” .

[0056] Turning now to FIG. 5F, a block diagram is shown for implementing logic 560 for a data conversion operation (CONV Op) . A data conversion operation involves changing the data format from one type of data to another type of data. Data conversion operations are frequently performed in neural networks. Examples of data conversion operations include those shown in Table 1:

[0057] Some data conversion types, such as float32 to float16, int32 to int8, and int8 to int4 are referred to as down-conversions, where the size of the output element is less than the original data element being processed. Other data conversion types, such as float16 to float32, int8 to int32, and int4 toint8 are referred to as up-conversions, where the size of the output element is greater than the original data element being processed.

[0058] Data conversion operations are performed, for example, in hetero-compute scenarios where multiple units in a complex system are used to perform an overall application, and their data storage format is not natively compatible. One example of a hetero-compute scenario is a neural network application where an input image is pre-processed by another unit on system and stored into main system memory for a NPU to consume. If the image is stored in a format that is not compatible with NPU internal computation hardware, then there would be a need to use a CPU to perform data type conversions. This would increase the time required to execute the application and hence reduce overall performance and increase memory and power needed.

[0059] The problem raised in the above example hetero-compute scenario is addressed by using a DMA channel as described herein to perform the data type conversion during the DMA transfer from system memory to local VPU memory, which enables the VPU to process inputs that are not in the VPU native internal format. The added benefit is an overall reduction of application execution time, data storage requirement both at DDR and VPU internal if data is down-converted, and power reduction as the CPU is no longer required to perform the data type conversion between the different units.

[0060] In the example of FIG. 5F, the block diagram includes a plurality of logic circuits where each logic circuit implements a specific type of data conversion. For example, in embodiments each logic circuit implements one of the data conversion types shown in Table 1. In some embodiments, logic circuits can implement types of data conversions other than those listed in Table 1. As illustrated in FIG. 5F, the logic circuits are arranged in parallel with the circuits all feeding into a multiplexor 565. A desired data conversion (i.e., one of the available data conversion types) is selected as an output of the multiplexor 565 via a selection made by a conversion type select register 567. In embodiments a variety of number of data conversion logic circuits can be provided for the data conversion logic. In some embodiments, there is only a single data conversion type provided and in such cases the multiplexor 565 and conversion type select register 567 are not included.

[0061] The logic circuits 510, 520, 530, 540, 550 and / or 560 can generally be implemented in the data processing module 400 (FIG. 4, already discussed) . More particularly, the logic circuits 510, 520, 530, 540, 550 and / or 560 can be implemented in hardware logic. For example, hardware implementations can include configurable logic, fixed-functionality logic, or any combination thereof. Examples of configurable logic include suitably configured PLAs,  FPGAs, CPLDs, and general purpose microprocessors. Examples of fixed-functionality logic include suitably configured ASICs, combinational logic circuits, and sequential logic circuits. The configurable or fixed-functionality logic can be implemented with CMOS logic circuits, TTL logic circuits, or other circuits. Use of combinational logic circuits (which can be relatively simple logic circuits as shown in the examples of FIGs. 5A-5F) to perform the data processing operations will not slow down the DMA transfer process, thus providing the advantage of enhancing compute efficiency while maintaining DMA data transfer efficiency. Another advantage of using combinational logic circuits for implementing relatively non-complex data processing operations is that the logic takes up less real estate on-chip than for more complex logic functions.

[0062] FIG. 6A-6B provide comparative diagrams illustrating an example of compute performance improvement according to one or more embodiments, with reference to components and features described herein including but not limited to the figures and associated description. The diagrams compare performance for an example compute scenario involving a Sigmoid operation, a ReLU operation and an Add operation according to the following formula: Output = Sigmoid (data A) + ReLU (data B)

[0063] where at the start of this scenario the data A is located in local memory and the data B is located in system memory (e.g., DDR memory) .

[0064] Turning to FIG. 6A, the block diagram 600 illustrates in graph form how the operations are performed on the data using a conventional DMA transfer. The Sigmoid, ReLU and Add operations are all performed by a host processor, where the data B is copied from system memory to local memory via a DMA transfer before the host processor executes the ReLU operation. The Add operation is performed after the ReLU operation is finished. The diagram 610 illustrates the relative execution sequencing of the DMA and processor operations for the conventional DMA transfer per the diagram 600.

[0065] Turning now to FIG. 6B, the block diagram 650 illustrates in graph form how the operations are performed on the data with a DMA transfer performed using a DMA channel according to embodiments (e.g., the DMA channel 300, the DMA channel 380 or the DMA channel 390) . The Sigmoid and Add operations are performed by a host processor, but the ReLU operation is performed on the data B by a DMA channel (e.g., the DMA channel 300,  the DMA channel 380 or the DMA channel 390) while the data B is copied from system memory to local memory via a DMA transfer. The diagram 660 illustrates the improved relative execution sequencing of the DMA and processor operations for the DMA transfer using the DMA channel according to embodiments. For example, as illustrated in the diagram 660, the ReLU operation is performed by the DMA channel during the DMA transfer, and thus the host processor does not need to perform the ReLU operation. Instead, once the data B has been copied (with ReLU operation) to local memory, the host processor can perform the Add operation without delay. In this way, the host processor (e.g., one or more compute units of the host processor) bypasses performing the ReLU operation, because the ReLU operation has been performed by the DMA channel as part of the DMA transfer.

[0066] Comparing the conventional sequencing (diagram 610) with the improved sequencing (diagram 660) , it will be observed that the use of DMA channel according to embodiments results in accelerating the completion time of all of the operations. For example, because the ReLU operation is performed during the DMA transfer, the DMA transfer process saves at least the time that would otherwise be required for the host processor to execute the ReLU operation (since the host processor does not perform the ReLU operation) . Thus, compute efficiency is enhanced using the DMA channel technology as disclosed herein.

[0067] FIG. 7 provides a flow diagram illustrating an example method 700 of performing a DMA transfer according to one or more embodiments, with reference to components and features described herein including but not limited to the figures and associated description. The method 700 can generally be implemented in the DMA engine 116 (FIG. 1, already discussed) , the DMA engine 200 (FIG. 2A, already discussed) , and / or the DMA channel 300, the DMA channel 380, and / or the DMA channel 390 (FIGs. 3A-3C, already discussed) . More particularly, the method 700 can be implemented as one or more modules as a set of logic instructions stored in a machine-or computer-readable storage medium such as RAM, ROM, PROM, firmware, flash memory, etc., in hardware, or any combination thereof. For example, hardware implementations can include configurable logic, fixed-functionality logic, or any combination thereof. Examples of configurable logic include suitably configured PLAs, FPGAs, CPLDs, and general purpose microprocessors. Examples of fixed-functionality logic include suitably configured ASICs, combinational logic circuits, and sequential logic circuits.  The configurable or fixed-functionality logic can be implemented with CMOS logic circuits, TTL logic circuits, or other circuits.

[0068] For example, computer program code to carry out operations shown in the method 700 and / or functions associated therewith can be written in any combination of one or more programming languages, including an object-oriented programming language such as Java, JavaScript, Python, C#, C++, Perl, Smalltalk, or the like and conventional procedural programming languages, such as the “C” programming language or similar programming languages. Additionally, program or logic instructions might include assembler instructions, instruction set architecture (ISA) instructions, machine instructions, machine dependent instructions, microcode, state-setting data, configuration data for integrated circuitry, state information that personalizes electronic circuitry and / or other structural components that are native to hardware (e.g., host processor, central processing unit / CPU, microcontroller, etc. ) .

[0069] The method 700 is performed responsive to a DMA request, where the DMA request includes a source address, a destination address, and a first data processing operation. Illustrated processing block 710 provides for reading input data from a source address at a source memory. Illustrated processing block 720 provides for generating output data based on performing, via a first data processing module, the first data processing operation on the input data. Illustrated processing block 730 provides for writing the output data to a destination address at a destination memory.

[0070] In some embodiments, generating output data includes performing, via a second data processing module, a second data processing operation on intermediate data, wherein the second data processing operation is specified by the DMA request, and wherein the intermediate data is stored in a data buffer resulting from the first data processing operation. In some embodiments, the first data processing operation comprises a data conversion operation, and wherein the second data processing operation comprises an operation other than a data conversion operation.

[0071] In some embodiments, the first data processing module includes one or more sub-modules, where a sub-module of the one or more sub-modules includes logic to perform a respective data processing operation, a multiplexor coupled to the one or more sub-modules, and a register coupled to the multiplexor to select, via the multiplexor, a logic output of one of the one or more sub-modules. In some embodiments, a sub-module of the plurality of sub- modules is to perform the respective data processing operation selected from a group including a data conversion operation, a negative operation, an absolute value operation, a change sign operation, a not operation, or a ReLU operation.

[0072] FIG. 8 provides a flow diagram illustrating an example method 800 for accelerating compute tasks according to one or more embodiments, with reference to components and features described herein including but not limited to the figures and associated description. The method 800 can generally be implemented in the system 100 (FIG. 1, already discussed) and / or via components of the DMA engine 200 (FIG. 2A, already discussed) . More particularly, the method 800 can be implemented as one or more modules as a set of logic instructions stored in a machine-or computer-readable storage medium such as RAM, ROM, PROM, firmware, flash memory, etc., in hardware, or any combination thereof. For example, hardware implementations can include configurable logic, fixed-functionality logic, or any combination thereof. Examples of configurable logic include suitably configured PLAs, FPGAs, CPLDs, and general purpose microprocessors. Examples of fixed-functionality logic include suitably configured ASICs, combinational logic circuits, and sequential logic circuits. The configurable or fixed-functionality logic can be implemented with CMOS logic circuits, TTL logic circuits, or other circuits.

[0073] For example, computer program code to carry out operations shown in the method 800 and / or functions associated therewith can be written in any combination of one or more programming languages, including an object-oriented programming language such as Java, JavaScript, Python, C#, C++, Perl, Smalltalk, or the like and conventional procedural programming languages, such as the “C” programming language or similar programming languages. Additionally, program or logic instructions might include assembler instructions, instruction set architecture (ISA) instructions, machine instructions, machine dependent instructions, microcode, state-setting data, configuration data for integrated circuitry, state information that personalizes electronic circuitry and / or other structural components that are native to hardware (e.g., host processor, central processing unit / CPU, microcontroller, etc. ) .

[0074] Illustrated processing block 810 provides for issuing a direct memory access (DMA) request, where at block 810a the DMA request includes a source address, a destination address, and a first data processing operation. In some embodiments the DMA request is routed to one  of a plurality of DMA channels based on a type of operation that is associated with the first data operation.

[0075] Illustrated processing block 820 provides for accessing data from the destination address at a destination memory after the data has been transferred via a DMA engine to the destination address in response to the host DMA request. Illustrated processing block 830 provides for performing one or more compute operations on the accessed data.

[0076] Block 840 provides that one DMA channel of the DMA engine includes logic responsive to the host DMA request to perform operations including, at block 840a, reading input data from a source address at a source memory, at block 840b, generating output data based on performing the first data processing operation on the input data, and, at block 840c, writing the output data to the destination address at the destination memory. The blocks 840a-840c provide for a DMA transfer and can generally be implemented in the DMA channel 300, the DMA channel 380, and / or the DMA channel 390 (FIGs. 3A-3C, already discussed) .

[0077] Thus, the method 800 provides for bypassing, by a host processor (e.g., by one or more compute units of the host processor) performing a compute task, namely the first data processing operation, because the first data processing operation has been performed by the DMA channel as part of the DMA transfer.

[0078] FIG. 9 shows a block diagram illustrating an example performance-enhanced computing system 10 for accelerating compute tasks according to one or more embodiments, with reference to components and features described herein including but not limited to the figures and associated description. The system 10 can generally be part of an electronic device / platform having computing and / or communications functionality (e.g., a server, cloud infrastructure controller, database controller, notebook computer, desktop computer, personal digital assistant / PDA, tablet computer, convertible tablet, smart phone, etc. ) , imaging functionality (e.g., camera, camcorder) , media playing functionality (e.g., smart television / TV) , wearable functionality (e.g., watch, eyewear, headwear, footwear, jewelry, or other wearable devices) , vehicular functionality (e.g., car, truck, motorcycle) , robotic functionality (e.g., robot or autonomous robot) , Internet of Things (IoT) functionality, etc., or any combination thereof. In the illustrated example, the system 10 can include a host processor 12 (e.g., central processing unit / CPU) having an integrated memory controller (IMC) 14 that can be coupled to system memory 20. The host processor 12 can include any type of processing device, such as,  e.g., microcontroller, microprocessor, RISC processor, ASIC, etc., along with associated processing modules or circuitry. The system memory 20 can include any non-transitory machine-or computer-readable storage medium such as RAM, ROM, PROM, EEPROM, firmware, flash memory, etc., configurable logic such as, for example, PLAs, FPGAs, CPLDs, fixed-functionality hardware logic using circuit technology such as, for example, ASIC, CMOS or TTL technology, or any combination thereof suitable for storing instructions 28.

[0079] The system 10 can also include an input / output (I / O) module 16. The I / O module 16 can communicate with for example, one or more input / output (I / O) devices 17, a network controller 24 (e.g., wired and / or wireless NIC) , and storage 22. The storage 22 can be comprised of any appropriate non-transitory machine-or computer-readable memory type (e.g., flash memory, DRAM, SRAM (static random access memory) , solid state drive (SSD) , hard disk drive (HDD) , optical disk, etc. ) . The storage 22 can include mass storage. In some embodiments, the host processor 12 and / or the I / O module 16 can communicate with the storage 22 (all or portions thereof) via a network controller 24. In some embodiments, the system 10 can also include a graphics processor 26 (e.g., a graphics processing unit / GPU) . In some embodiments, the system 10 can also include a graphics processor 26 (e.g., a graphics processing unit / GPU) and / or a vision processing unit (VPU) 27 and / or a neural processing unit (NPU) (not shown) . One or more of the host processor 12, the GPU 26, the VPU 27 and / or the NPU can include a DMA channel such as, e.g., the DMA channel 300, the DMA channel 380, the DMA channel 390, to perform one or more data processing tasks as part of a DMA transfer.

[0080] The host processor 12 and the I / O module 16 can be implemented together on a semiconductor die as a system on chip (SoC) 11, shown encased in a solid line. The SoC 11 can therefore operate as a computing apparatus for accelerating compute tasks. In some embodiments, the SoC 11 can also include one or more of the system memory 20, the network controller 24, and / or the graphics processor 26 (shown encased in dotted lines) . In some embodiments, the SoC 11 can also include other components of the system 10.

[0081] The host processor 12 and / or the I / O module 16 can execute program instructions 28 retrieved from the system memory 20 and / or the storage 22 to perform one or more aspects of the method 800 as described herein with reference to FIG. 8. In some embodiments, the host processor 12 includes logic (e.g., configurable hardware, fixed-functionality hardware, etc., or  any combination thereof) to implement one or more aspects of the method 700 (FIG. 7) and / or the method 800 (FIG. 8) , already discussed. The system 10 can implement one or more aspects of the system 100 as described herein with reference to FIG. 1 The system 10 is therefore considered to be performance-enhanced at least to the extent that the technology provides the ability to accelerate compute tasks by performing a data processing operation as part of a DMA transfer.

[0082] Computer program code to carry out the processes described above can be written in any combination of one or more programming languages, including an object-oriented programming language such as JAVA, JAVASCRIPT, PYTHON, SMALLTALK, C++ or the like and / or conventional procedural programming languages, such as the “C” programming language or similar programming languages, and implemented as program instructions 28. Additionally, program instructions 28 can include assembler instructions, instruction set architecture (ISA) instructions, machine instructions, machine dependent instructions, microcode, state-setting data, configuration data for integrated circuitry, state information that personalizes electronic circuitry and / or other structural components that are native to hardware (e.g., host processor, central processing unit / CPU, microcontroller, microprocessor, etc. ) .

[0083] I / O devices 17 can include one or more of input devices, such as a touchscreen, keyboard, mouse, cursor-control device, microphone, digital camera, video recorder, camcorder, biometric scanners and / or sensors; input devices can be used to enter information and interact with system 10 and / or with other devices. The I / O devices 17 can also include one or more of output devices, such as a display (e.g., touchscreen, liquid crystal display / LCD, light emitting diode / LED display, plasma panels, etc. ) , speakers and / or other visual or audio output devices. The input and / or output devices can be used, e.g., to provide a user interface.

[0084] FIG. 10 shows a block diagram illustrating an example semiconductor apparatus 30 for accelerating compute tasks according to one or more embodiments, with reference to components and features described herein including but not limited to the figures and associated description. The semiconductor apparatus 30 can be implemented, e.g., as a chip, die, or other semiconductor package. The semiconductor apparatus 30 can include one or more substrates 32 comprised of, e.g., silicon, sapphire, gallium arsenide, etc. The semiconductor apparatus 30 can also include logic 34 comprised of, e.g., transistor array (s) and other integrated circuit (IC) components) coupled to the substrate (s) 32. The logic 34 can be  implemented at least partly in configurable logic or fixed-functionality logic hardware. The logic 34 can implement the system on chip (SoC) 11 described above with reference to FIG. 9. The logic 34 can implement one or more aspects of the processes described above, including the method 700 (FIG. 7) and / or the method 800 (FIG. 8) , already discussed. The logic 34 can implement one or more aspects of the system 100, the DMA engine 200, the DMA channel 300, the DMA channel 380, the DMA channel 390, and / or the data processing module 400 as described herein with reference to FIGs. 1, 2A-2B, 3A-3B, 4, and 5A-5F. The apparatus 30 is therefore considered to be performance-enhanced at least to the extent that the technology provides the ability to accelerate compute tasks by performing a data processing operation as part of a DMA transfer.

[0085] The semiconductor apparatus 30 can be constructed using any appropriate semiconductor manufacturing processes or techniques. For example, the logic 34 can include transistor channel regions that are positioned (e.g., embedded) within the substrate (s) 32. Thus, the interface between the logic 34 and the substrate (s) 32 may not be an abrupt junction. The logic 34 can also be considered to include an epitaxial layer that is grown on an initial wafer of the substrate (s) 34.

[0086] FIG. 11 is a block diagram illustrating an example processor core 40 according to one or more embodiments, with reference to components and features described herein including but not limited to the figures and associated description. The processor core 40 can be the core for any type of processor, such as a micro-processor, an embedded processor, a digital signal processor (DSP) , a network processor, a graphics processing unit (GPU) , or other device to execute code. Although only one processor core 40 is illustrated in FIG. 11, a processing element can alternatively include more than one of the processor core 40 illustrated in FIG. 11. The processor core 40 can be a single-threaded core or, for at least one embodiment, the processor core 40 can be multithreaded in that it can include more than one hardware thread context (or “logical processor” ) per core.

[0087] FIG. 11 also illustrates a memory 41 coupled to the processor core 40. The memory 41 can be any of a wide variety of memories (including various layers of memory hierarchy) as are known or otherwise available to those of skill in the art. The memory 41 can include one or more code 42 instruction (s) to be executed by the processor core 40. The code 42 can implement one or more aspects of the method 800 described above. The processor core 40 can  implement one or more aspects of the system 100 as described herein with reference to FIG. 1. The processor core 40 can follow a program sequence of instructions indicated by the code 42. Each instruction can enter a front end portion 43 and be processed by one or more decoders 44. The decoder 44 can generate as its output a micro operation such as a fixed width micro operation in a predefined format, or can generate other instructions, microinstructions, or control signals which reflect the original code instruction. The illustrated front end portion 43 also includes register renaming logic 46 and scheduling logic 48, which generally allocate resources and queue the operation corresponding to the convert instruction for execution.

[0088] The processor core 40 is shown including execution logic 50 having a set of execution units 55-1 through 55-N. Some embodiments can include a number of execution units dedicated to specific functions or sets of functions. Other embodiments can include only one execution unit or one execution unit that can perform a particular function. The illustrated execution logic 50 performs the operations specified by code instructions.

[0089] After completion of execution of the operations specified by the code instructions, back end logic 58 retires the instructions of code 42. In one embodiment, the processor core 40 allows out of order execution but requires in order retirement of instructions. Retirement logic 59 can take a variety of forms as known to those of skill in the art (e.g., re-order buffers or the like) . In this manner, the processor core 40 is transformed during execution of the code 42, at least in terms of the output generated by the decoder, the hardware registers and tables utilized by the register renaming logic 46, and any registers (not shown) modified by the execution logic 50.

[0090] Although not illustrated in FIG. 11, a processing element can include other elements on chip with the processor core 40. For example, a processing element can include memory control logic along with the processor core 40. The processing element can include I / O control logic and / or can include I / O control logic integrated with memory control logic. The processing element can also include one or more caches.

[0091] FIG. 12 is a block diagram illustrating an example of a multi-processor based computing system 60 according to one or more embodiments, with reference to components and features described herein including but not limited to the figures and associated description. The multiprocessor system 60 includes a first processing element 70 and a second processing  element 80. While two processing elements 70 and 80 are shown, it is to be understood that an embodiment of the system 60 can also include only one such processing element.

[0092] The system 60 is illustrated as a point-to-point interconnect system, wherein the first processing element 70 and the second processing element 80 are coupled via a point-to-point interconnect 71. It should be understood that any or all of the interconnects illustrated in FIG. 12 can be implemented as a multi-drop bus rather than point-to-point interconnect.

[0093] As shown in FIG. 12, each of the processing elements 70 and 80 can be multicore processors, including first and second processor cores (i.e., processor cores 74a and 74b and processor cores 84a and 84b) . Such cores 74a, 74b, 84a, 84b can be configured to execute instruction code in a manner similar to that discussed above in connection with FIG. 11.

[0094] Each processing element 70, 80 can include at least one shared cache 99a, 99b. The shared cache 99a, 99b can store data (e.g., instructions) that are utilized by one or more components of the processor, such as the cores 74a, 74b and 84a, 84b, respectively. For example, the shared cache 99a, 99b can locally cache data stored in a memory 62, 63 for faster access by components of the processor. In one or more embodiments, the shared cache 99a, 99b can include one or more mid-level caches, such as level 2 (L2) , level 3 (L3) , level 4 (L4) , or other levels of cache, a last level cache (LLC) , and / or combinations thereof.

[0095] While shown with only two processing elements 70, 80, it is to be understood that the scope of the embodiments is not so limited. In other embodiments, one or more additional processing elements can be present in a given processor. Alternatively, one or more of the processing elements 70, 80 can be an element other than a processor, such as an accelerator or a field programmable gate array. For example, additional processing element (s) can include additional processors (s) that are the same as a first processor 70, additional processor (s) that are heterogeneous or asymmetric to processor a first processor 70, accelerators (such as, e.g., graphics accelerators or digital signal processing (DSP) units) , field programmable gate arrays, or any other processing element. There can be a variety of differences between the processing elements 70, 80 in terms of a spectrum of metrics of merit including architectural, micro architectural, thermal, power consumption characteristics, and the like. These differences can effectively manifest themselves as asymmetry and heterogeneity amongst the processing elements 70, 80. For at least one embodiment, the various processing elements 70, 80 can reside in the same die package.

[0096] The first processing element 70 can further include memory controller logic (MC) 72 and point-to-point (P-P) interfaces 76 and 78. Similarly, the second processing element 80 can include a MC 82 and P-P interfaces 86 and 88. As shown in FIG. 12, MC’s 72 and 82 couple the processors to respective memories, namely a memory 62 and a memory 63, which can be portions of main memory locally attached to the respective processors. While the MC 72 and 82 is illustrated as integrated into the processing elements 70, 80, for alternative embodiments the MC logic can be discrete logic outside the processing elements 70, 80 rather than integrated therein.

[0097] The first processing element 70 and the second processing element 80 can be coupled to an I / O subsystem 90 via P-P interconnects 76 and 86, respectively. As shown in FIG. 12, the I / O subsystem 90 includes P-P interfaces 94 and 98. Furthermore, the I / O subsystem 90 includes an interface 92 to couple I / O subsystem 90 with a high performance graphics engine 64. In one embodiment, a bus 73 can be used to couple the graphics engine 64 to the I / O subsystem 90. Alternately, a point-to-point interconnect can couple these components.

[0098] In turn, the I / O subsystem 90 can be coupled to a first bus 65 via an interface 96. In one embodiment, the first bus 65 can be a Peripheral Component Interconnect (PCI) bus, or a bus such as a PCI Express bus or another third generation I / O interconnect bus, although the scope of the embodiments are not so limited.

[0099] As shown in FIG. 12, various I / O devices 65a (e.g., biometric scanners, speakers, cameras, and / or sensors) can be coupled to the first bus 65, along with a bus bridge 66 which can couple the first bus 65 to a second bus 67. In one embodiment, the second bus 67 can be a low pin count (LPC) bus. Various devices can be coupled to the second bus 67 including, for example, a keyboard / mouse 67a, communication device (s) 67b, and a data storage unit 68 such as a disk drive or other mass storage device which can include code 69, in one embodiment. The illustrated code 69 can implement one or more aspects of the processes described above, including the method 800. The illustrated code 69 can be similar to the code 42 (FIG. 11) , already discussed. Further, an audio I / O 67c can be coupled to second bus 67 and a battery 61 can supply power to the computing system 60. The system 60 can implement one or more aspects of the system 100 as described herein with reference to FIG. 1.

[0100] Note that other embodiments are contemplated. For example, instead of the point-to-point architecture of FIG. 12, a system can implement a multi-drop bus or another such  communication topology. Also, the elements of FIG. 12 can alternatively be partitioned using more or fewer integrated chips than shown in FIG. 12.

[0101] Embodiments of each of the above systems, devices, components, features and / or methods, including the system 100, the DMA engine 200, the DMA channel 300, the DMA channel 380, the DMA channel 390, and / or the data processing module 400, the method 700, and / or the method 800, and / or any other system components, can be implemented in hardware, software, or any suitable combination thereof. For example, hardware implementations can include configurable logic, fixed-functionality logic, or any combination thereof. Examples of configurable logic include suitably configured PLAs, FPGAs, CPLDs, and general purpose microprocessors. Examples of fixed-functionality logic include suitably configured ASICs, combinational logic circuits, and sequential logic circuits. The configurable or fixed-functionality logic can be implemented with CMOS logic circuits, TTL logic circuits, or other circuits.

[0102] Alternatively, or additionally, all or portions of the foregoing systems, devices, components, features and / or methods can be implemented in one or more modules as a set of program or logic instructions stored in a machine-or computer-readable storage medium such as RAM, ROM, PROM, firmware, flash memory, etc., to be executed by a processor or computing device. For example, computer program code to carry out the operations of the components can be written in any combination of one or more operating system (OS) applicable / appropriate programming languages, including an object-oriented programming language such as Java, JavaScript, Python, C#, C++, Perl, Smalltalk, or the like and conventional procedural programming languages, such as the “C” programming language or similar programming languages.

[0103] Additional Notes and Examples:

[0104] Example A1 includes a direct memory access engine comprising one or more substrates, and one or more direct memory access (DMA) channels, wherein one DMA channel comprises a first data processing module coupled to the one or more substrates, and logic coupled to the one or more substrates, wherein the logic is responsive to a direct memory access (DMA) request, the DMA request including a source address, a destination address, and a first data processing operation, and wherein the logic is implemented at least partly in one or more of configurable logic or fixed-functionality hardware logic, the logic to read input data from the  source address at a source memory, generate output data based on performing, via the first data processing module, the first data processing operation on the input data, and write the output data to the destination address at a destination memory.

[0105] Example A2 includes the direct memory access engine of Example A1, wherein the first data processing module comprises one or more sub-modules, a sub-module of the one or more sub-modules comprising logic to perform a respective data processing operation, a multiplexor coupled to the one or more sub-modules, and a register coupled to the multiplexor to select, via the multiplexor, a logic output of one of the one or more sub-modules.

[0106] Example A3 includes the direct memory access engine of Example A1 or A2, wherein a sub-module of the one or more sub-modules is to perform the respective data processing operation selected from a group including a data conversion operation, a negative operation, an absolute value operation, a change sign operation, a not operation, or a rectified linear unit (ReLU) operation.

[0107] Example A4 includes the direct memory access engine of any of Examples A1-A3, wherein the one DMA channel further comprises a second data processing module coupled to the one or more substrates, and a data buffer coupled to the first data processing module, the second data processing module, and the one or more substrates, wherein the data buffer is to store as intermediate data a result of the first data processing operation, and wherein to generate the output data, the logic is further to perform, via the second data processing module, a second data processing operation on the intermediate data, wherein the second data processing operation is specified by the DMA request.

[0108] Example A5 includes the direct memory access engine of any of Examples A1-A4, wherein the first data processing operation comprises a data conversion operation, and wherein the second data processing operation comprises an operation other than a data conversion operation.

[0109] Example A6 includes the direct memory access engine of any of Examples A1-A3, further comprising a data buffer, wherein the first data processing module is to perform the first data processing operation on data in the data buffer.

[0110] Example A7 includes the direct memory access engine of any of Examples A1-A3, further comprising a data buffer, wherein an output of the first data processing module is to be temporarily stored in the data buffer.

[0111] Example X1 includes a host processing unit comprising one or more compute units, a local memory, and a direct memory access (DMA) engine coupled to the local memory, wherein the DMA engine comprises one or more DMA channels, wherein one DMA channel comprises one or more substrates, a first data processing module coupled to the one or more substrates, and logic coupled to the one or more substrates, wherein the logic is responsive to a DMA request, the DMA request including a source address, a destination address, and a first data processing operation, and wherein the logic is implemented at least partly in one or more of configurable logic or fixed-functionality hardware logic, the logic to read input data from the source address at a source memory, generate output data based on performing, via the first data processing module, the first data processing operation on the input data, and write the output data to the destination address at the local memory.

[0112] Example X2 includes the host processing unit of Example X1, wherein the first data processing module comprises one or more sub-modules, a sub-module of the one or more sub-modules comprising logic to perform a respective data processing operation, a multiplexor coupled to the one or more sub-modules, and a register coupled to the multiplexor to select, via the multiplexor, a logic output of one of the one or more sub-modules.

[0113] Example X3 includes the host processing unit of Example X1 or X2, wherein a sub-module of the one or more sub-modules is to perform the respective data operation selected from selected from a group including a data conversion operation, a negative operation, an absolute value operation, a change sign operation, a not operation, or a rectified linear unit (ReLU) operation.

[0114] Example X4 includes the host processing unit of any of Examples X1-X3, wherein the one DMA channel further comprises a second data processing module coupled to the one or more substrates, and a data buffer coupled to the first data processing module, the second data processing module, and the one or more substrates, wherein the data buffer is to store as intermediate data a result of the first data processing operation, and wherein to generate the output data, the logic is further to perform, via the second data processing module, a second data processing operation on the intermediate data, wherein the second data processing operation is specified by the DMA request.

[0115] Example X5 includes the host processing unit of any of Examples X1-X4, wherein the first data processing operation comprises a data conversion operation, and wherein the second data processing operation comprises an operation other than a data conversion operation.

[0116] Example X6 includes the host processing unit of any of Examples X1-X3, wherein the DMA channel further comprises a data buffer, and wherein the first data processing module is to perform the first data processing operation on data in the data buffer.

[0117] Example X7 includes the host processing unit of any of Examples X1-X3, wherein the DMA channel further comprises a data buffer, and wherein an output of the first data processing module is to be temporarily stored in the data buffer.

[0118] Example M1 includes a method comprising issuing a direct memory access (DMA) request, the DMA request including a source address, a destination address, and a first data processing operation, accessing data from the destination address at a destination memory after the data has been transferred via a DMA engine to the destination address in response to the DMA request, and performing one or more compute operations on the accessed data, wherein the DMA engine comprises one or more DMA channels, wherein one DMA channel comprises logic responsive to the DMA request to read input data from the source address at a source memory, generate output data based on performing the first data processing operation on the input data, and write the output data to the destination address at the destination memory.

[0119] Example M2 includes the method of Example M1, further comprising routing the DMA request to one of a plurality of DMA channels based on a type of operation that is associated with the first data operation.

[0120] Example M3 includes the method of Example M1 or M2, wherein the DMA request further includes a second data operation, and wherein the DMA channel further comprises a second data processing module, and a data buffer coupled to the first data processing module and the second data processing module, wherein the data buffer is to store as intermediate data a result of the first data operation, and wherein to generate the output data, the logic is further to perform, via the second data processing module, a second data operation on the intermediate data, wherein the second data operation is specified by the DMA request.

[0121] Example M4 includes the method of any of Examples M1-M3, wherein the first data operation comprises a data conversion operation, and wherein the second data operation comprises an operation other than a data conversion operation.

[0122] Example M5 includes the method of any of Examples M1-M4, wherein the first data processing module comprises one or more sub-modules, a sub-module of the one or more sub-modules comprising logic performing a data operation, and a multiplexor coupled to the one or more sub-modules, and wherein the method further comprises selecting, via the multiplexor, a logic output of one of the one or more sub-modules.

[0123] Example M6 includes the method of any of Examples M1-M5, wherein a sub-module of the one or more sub-modules performs a respective data operation selected from a group including a data conversion operation, a negative operation, an absolute value operation, a change sign operation, a not operation, or a rectified linear unit (ReLU) operation.

[0124] Example R1 includes an apparatus comprising means for performing the method of any of Examples M1-M6.

[0125] Embodiments are applicable for use with all types of semiconductor integrated circuit ( “IC” ) chips. Examples of these IC chips include but are not limited to processors, controllers, chipset components, programmable logic arrays (PLAs) , memory chips, network chips, systems on chip (SoCs) , solid state drive (SSD)  / NAND drive controller ASICs, and the like. In addition, in some of the drawings, signal conductor lines are represented with lines. Some may be different, to indicate more constituent signal paths, have a number label, to indicate a number of constituent signal paths, and / or have arrows at one or more ends, to indicate primary information flow direction. This, however, should not be construed in a limiting manner. Rather, such added detail may be used in connection with one or more exemplary embodiments to facilitate easier understanding of a circuit. Any represented signal lines, whether or not having additional information, may actually comprise one or more signals that may travel in multiple directions and may be implemented with any suitable type of signal scheme, e.g., digital or analog lines implemented with differential pairs, optical fiber lines, and / or single-ended lines.

[0126] Example sizes / models / values / ranges may have been given, although embodiments are not limited to the same. As manufacturing techniques (e.g., photolithography) mature over time, it is expected that devices of smaller size could be manufactured. In addition, well known power / ground connections to IC chips and other components may or may not be shown within the figures, for simplicity of illustration and discussion, and so as not to obscure certain aspects of the embodiments. Further, arrangements may be shown in block diagram form in order to  avoid obscuring embodiments, and also in view of the fact that specifics with respect to implementation of such block diagram arrangements are highly dependent upon the platform within which the embodiment is to be implemented, i.e., such specifics should be well within purview of one skilled in the art. Where specific details (e.g., circuits) are set forth in order to describe example embodiments, it should be apparent to one skilled in the art that embodiments can be practiced without, or with variation of, these specific details. The description is thus to be regarded as illustrative instead of limiting.

[0127] The term “coupled” may be used herein to refer to any type of relationship, direct or indirect, between the components in question, and may apply to electrical, mechanical, fluid, optical, electromagnetic, electromechanical or other connections, including logical connections via intermediate components (e.g., device A may be coupled to device C via device B) . In addition, the terms “first” , “second” , etc. may be used herein only to facilitate discussion, and carry no particular temporal or chronological significance unless otherwise indicated.

[0128] As used in this application and in the claims, a list of items joined by the term “one or more of” may mean any combination of the listed terms. For example, the phrases “one or more of A, B or C” may mean A, B, C; A and B; A and C; B and C; or A, B and C.

[0129] Those skilled in the art will appreciate from the foregoing description that the broad techniques of the embodiments can be implemented in a variety of forms. Therefore, while the embodiments have been described in connection with particular examples thereof, the true scope of the embodiments should not be so limited since other modifications will become apparent to the skilled practitioner upon a study of the drawings, specification, and following claims.

Claims

1.A direct memory access engine comprising:one or more substrates; andone or more direct memory access (DMA) channels, wherein one DMA channel comprises:a first data processing module coupled to the one or more substrates; andlogic coupled to the one or more substrates, wherein the logic is responsive to a direct memory access (DMA) request, the DMA request including a source address, a destination address, and a first data processing operation, and wherein the logic is implemented at least partly in one or more of configurable logic or fixed-functionality hardware logic, the logic to:read input data from the source address at a source memory;generate output data based on performing, via the first data processing module, the first data processing operation on the input data; andwrite the output data to the destination address at a destination memory.2.The direct memory access engine of claim 1, wherein the first data processing module comprises:one or more sub-modules, a sub-module of the one or more sub-modules comprising logic to perform a respective data processing operation;a multiplexor coupled to the one or more sub-modules; anda register coupled to the multiplexor to select, via the multiplexor, a logic output of one of the one or more sub-modules.3.The direct memory access engine of claim 2, wherein a sub-module of the one or more sub-modules is to perform the respective data processing operation selected from a group including a data conversion operation, a negative operation, an absolute value operation, a change sign operation, a not operation, or a rectified linear unit (ReLU) operation.4.The direct memory access engine of claim 1, wherein the one DMA channel further comprises:a second data processing module coupled to the one or more substrates; anda data buffer coupled to the first data processing module, the second data processing module, and the one or more substrates;wherein the data buffer is to store as intermediate data a result of the first data processing operation, andwherein to generate the output data, the logic is further to:perform, via the second data processing module, a second data processing operation on the intermediate data, wherein the second data processing operation is specified by the DMA request.5.The direct memory access engine of claim 4, wherein the first data processing operation comprises a data conversion operation, and wherein the second data processing operation comprises an operation other than a data conversion operation.6.The direct memory access engine of any one of claims 1-3, further comprising a data buffer,wherein the first data processing module is to perform the first data processing operation on data in the data buffer.7.The direct memory access engine of any one of claims 1-3, further comprising a data buffer,wherein an output of the first data processing module is to be temporarily stored in the data buffer.8.A host processing unit comprising:one or more compute units;a local memory; anda direct memory access (DMA) engine coupled to the local memory, wherein the DMA engine comprises one or more DMA channels, wherein one DMA channel comprises:one or more substrates;a first data processing module coupled to the one or more substrates; andlogic coupled to the one or more substrates, wherein the logic is responsive to a DMA request, the DMA request including a source address, a destination address, and a first data processing operation, and wherein the logic is implemented at least partly in one or more of configurable logic or fixed-functionality hardware logic, the logic to:read input data from the source address at a source memory;generate output data based on performing, via the first data processing module, the first data processing operation on the input data; andwrite the output data to the destination address at the local memory.9.The host processing unit of claim 8, wherein the first data processing module comprises:one or more sub-modules, a sub-module of the one or more sub-modules comprising logic to perform a respective data processing operation;a multiplexor coupled to the one or more sub-modules; anda register coupled to the multiplexor to select, via the multiplexor, a logic output of one of the one or more sub-modules.10.The host processing unit of claim 9, wherein a sub-module of the one or more sub-modules is to perform the respective data operation selected from selected from a group including a data conversion operation, a negative operation, an absolute value operation, a change sign operation, a not operation, or a rectified linear unit (ReLU) operation.11.The host processing unit of claim 8, wherein the one DMA channel further comprises:a second data processing module coupled to the one or more substrates; anda data buffer coupled to the first data processing module, the second data processing module, and the one or more substrates;wherein the data buffer is to store as intermediate data a result of the first data processing operation, andwherein to generate the output data, the logic is further to:perform, via the second data processing module, a second data processing operation on the intermediate data, wherein the second data processing operation is specified by the DMA request.12.The host processing unit of claim 11, wherein the first data processing operation comprises a data conversion operation, and wherein the second data processing operation comprises an operation other than a data conversion operation.13.The host processing unit of any one of claims 8-10, wherein the DMA channel further comprises a data buffer, andwherein the first data processing module is to perform the first data processing operation on data in the data buffer.14.The host processing unit of any one of claims 8-10, wherein the DMA channel further comprises a data buffer, andwherein an output of the first data processing module is to be temporarily stored in the data buffer.15.A method comprising:issuing a direct memory access (DMA) request, the DMA request including a source address, a destination address, and a first data processing operation;accessing data from the destination address at a destination memory after the data has been transferred via a DMA engine to the destination address in response to the DMA request; andperforming one or more compute operations on the accessed data,wherein the DMA engine comprises one or more DMA channels, wherein one DMA channel comprises logic responsive to the DMA request to:read input data from the source address at a source memory;generate output data based on performing the first data processing operation on the input data; andwrite the output data to the destination address at the destination memory.16.The method of claim 15, further comprising routing the DMA request to one of a plurality of DMA channels based on a type of operation that is associated with the first data operation.17.The method of claim 15, wherein the DMA request further includes a second data operation, andwherein the one DMA channel further comprises:a second data processing module; anda data buffer coupled to the first data processing module and the second data processing module;wherein the data buffer is to store as intermediate data a result of the first data operation, andwherein to generate the output data, the logic is further to:perform, via the second data processing module, a second data operation on the intermediate data, wherein the second data operation is specified by the DMA request.18.The method of claim 17, wherein the first data operation comprises a data conversion operation, and wherein the second data operation comprises an operation other than a data conversion operation.19.The method of claim 15, wherein the first data processing module comprises:one or more sub-modules, a sub-module of the one or more sub-modules comprising logic performing a respective data operation; anda multiplexor coupled to the one or more sub-modules; andwherein the method further comprises selecting, via the multiplexor, a logic output of one of the one or more sub-modules.20.The method of any one of claims 15-19, wherein a sub-module of the one or more sub-modules performs a respective data operation selected from a group including a data conversion operation, a negative operation, an absolute value operation, a change sign operation, a not operation, or a rectified linear unit (ReLU) operation.

Citation Information

Patent Citations

  • Semiconductor structure and forming method thereof

    CN110299375A

  • Bit manipulation capable direct memory access

    CN111052100A

  • System for processing sensor data, system and method for direct memory access

    CN116610606A

  • Multi-channel DMA

    KR1020010058671A

  • Data processing device having split-mode DMA channel

    US5826101A