IP Library › Granted Patent US 10,540,584
Granted Patent B2
US 10,540,584 · App. 15/702,311 · Granted Jan 21, 2020

Queue management for direct memory access

Inventors: Chad Balling McBride (North Bend, WA); Amol Ashok Ambardekar (Redmond, WA); Kent D. Cedola (Bellevue, WA); George Petre (Redmond, WA); Larry Marvin Wall (Seattle, WA); Boris Bobrov (Seattle, WA)
Assignee: Microsoft Technology Licensing, LLC
G06N3/04G06F1/324G06F1/3275G06F3/0604G06F3/067G06F3/0631G06F9/3887G06F12/0207G06F12/08G06F12/10G06F13/1673G06F13/1689G06F13/28G06F15/8007G06F17/15G06N3/049G06N3/06G06N3/063G06N3/0635G06N3/08G06N3/10H03M7/6005H03M7/6011H03M7/70H04L45/04H04L67/02H04L67/1002G06F2212/657H04L45/50
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 10,540,584
App. No.
15/702,311
Granted
Jan 21, 2020
Kind
B2
Abstract

A direct memory access (DMA) engine may be responsible to enable and control DMA data flow within a computing system. The DMA engine moves blocks of data, associated with descriptors in a plurality of queues, from a source to a destination memory location or address, autonomously from control by a computer system's processor. Based on analysis of the data blocks linked to the descriptors in the queues, the DMA engine and its associated DMA fragmenter ensure that data blocks stored linked to descriptors in the queues do not remain idle for an exorbitant period of time. The DMA fragmenter may divide large data blocks into smaller data blocks to ensure that the processing of large data blocks does not preclude the timely processing of smaller data blocks associated with one or more descriptors in the queues. The data blocks stored may be two-dimensional data blocks.

Claims (40)

1. A system for managing a plurality of queues, the system comprising:

at least one processor; and

at least one memory in communication with the at least one processor, the at least one memory having computer readable instructions stored thereupon that, when executed by the at least one processor, cause the at least one processor to:

determine a data block is ready for transfer based on a descriptor in a first queue, the descriptor including a first dimension of the data block and a second dimension of the data block, each of the first and second dimensions being individual byte values;

analyze the descriptor in the first queue to determine a dimension of the data block based on at least one of the first and second dimensions included in the descriptor; and

compare the dimension of the data block to a data threshold:

when the dimension of the data block is greater than the data threshold, fragment the data block to generate at least a plurality of fragmented data blocks from the data block and send at least one of the plurality of fragmented data blocks to a destination memory location,

determine a second data block, identified by an operation descriptor in a second queue, is ready for transfer, and

send at least a portion of the second data block identified by the operation descriptor to a memory location after the at least one of the plurality of fragmented data blocks is sent to the destination memory location, and

when the dimension of the data block is less than the data threshold, send the data block to the destination memory location unfragmented.

2. The system according to claim 1 , wherein the data block has an X dimension in bytes and the data threshold is a byte value threshold, when the X dimension in bytes is less than or equal to the byte value threshold, fragment the data block to generate at least the plurality of fragmented data blocks from the data block and send the at least one of the plurality of fragmented data blocks to the destination memory location.

3. The system according to claim 2 , wherein the data block has a Y dimension, and when the X dimension in bytes is less than or equal to the byte value threshold, fragment the data block in the Y dimension to generate the plurality of fragmented data blocks, each of the plurality of fragmented data blocks having a Y dimension that is smaller than the Y dimension of the data block.

4. The system according to claim 2 , wherein the data block has a Y dimension, and when the X dimension in bytes is less than or equal to the byte value threshold and the Y dimension is greater than one, fragment the data block in the Y dimension to generate the plurality of fragmented data blocks, each of the plurality of fragmented data blocks having a Y dimension that is smaller than the Y dimension of the data block.

5. The system according to claim 2 , wherein the data block has a Y dimension, and when the Y dimension is greater than one, fragment the data block to generate at least the plurality of fragmented data blocks from the data block and send the at least one of the plurality of fragmented data blocks to the destination memory location.

6. The system according to claim 1 , wherein the data block has an X dimension in bytes and a Y dimension, and the data threshold is a byte value threshold, when the Y dimension in bytes is equal to one and the X dimension in bytes is greater than the byte value threshold, fragment the data block in the X dimension to generate the plurality of fragmented data blocks, each of the plurality of fragmented data blocks having an X dimension in bytes that is smaller than the X dimension in bytes of the data block.

7. The system according to claim 1 , wherein the data block identified by the descriptor in the first queue is identified by a direct memory access (DMA) descriptor.

8. The system according to claim 1 , wherein the data block identified by the descriptor in the first queue is a two-dimensional data block and the data block identified by the operation descriptor in the second queue is at least a two-dimensional data block, and the system is associated with a neural network.

9. A system for managing a plurality of queues, the system comprising:

at least one processor; and

at least one memory in communication with the at least one processor, the at least one memory having computer readable instructions stored thereupon that, when executed by the at least one processor, cause the at least one processor to:

determine a data block is ready for transfer based on a descriptor in a first queue, the descriptor including a first dimension of the data block and a second dimension of the data block, each of the first and second dimensions being individual byte values;

analyze the descriptor in the first queue to determine a dimension of the data block based on at least one of the first and second dimensions included in the descriptor; and

compare the dimension of the data block to a data threshold, the data threshold having been dynamically determined:

when the dimension of the data block is greater than the data threshold, fragment the data block to generate at least a plurality of fragmented data blocks from the data block and send at least one of the plurality of fragmented data blocks to a destination memory location,

determine a second data block, identified by an operation descriptor in a second queue, is ready for transfer, and

send at least a portion of the second data block identified by the operation descriptor to a memory location after the at least one of the plurality of fragmented data blocks is sent to the destination memory location, and

when the dimension of the data block is less than the data threshold, send the data block to the destination memory location unfragmented.

10. The system according to claim 9 , wherein the data block identified by the descriptor in the first queue is identified by a direct memory access (DMA) descriptor.

11. The system according to claim 9 , wherein the data block identified by the descriptor in the first queue is a two-dimensional data block and the data block identified by the operation descriptor in the second queue is at least a two-dimensional data block, and the system is associated with a neural network.

12. The system according to claim 9 , wherein the data threshold is dynamically determined based on at least one input to a transfer function to generate the data threshold, the at least one input related to one or more functionalities associated with the system.

13. A computer-readable storage medium having computer-executable instructions stored thereupon which, when executed by one or more processors of a computing device, cause the one or more processors of the computing device to:

determine a data block is ready for transfer based on a descriptor in a first queue, the descriptor including a first dimension of the data block and a second dimension of the data block, each of the first and second dimensions being individual byte values;

analyze the descriptor in the first queue to determine a dimension of the data block based on at least one of the first and second dimensions included in the descriptor; and

compare the dimension of the data block to a data threshold:

when the dimension of the data block is greater than the data threshold, fragment the data block to generate at least a plurality of fragmented data blocks from the data block and send at least one of the plurality of fragmented data blocks to a destination memory location, and

when the dimension of the data block is less than the data threshold, send the data block to the destination memory location unfragmented.

14. The computer-readable storage medium of claim 13 , wherein the data block has an X dimension in bytes and the data threshold is a byte value threshold, when the X dimension in bytes is less than or equal to the byte value threshold, fragment the data block to generate at least the plurality of fragmented data blocks from the data block and send the at least one of the plurality of fragmented data blocks to the destination memory location.

15. The computer-readable storage medium according to claim 14 , wherein the data block has a Y dimension, and when the X dimension in bytes is less than or equal to the byte value threshold, fragment the data block in the Y dimension to generate the plurality of fragmented data blocks, each of the plurality of fragmented data blocks having a Y dimension that is smaller than the Y dimension of the data block.

16. The computer-readable storage medium according to claim 14 , wherein the data block has a Y dimension, and when the X dimension in bytes is less than or equal to the byte value threshold and the Y dimension is greater than one byte, fragment the data block in the Y dimension to generate the plurality of fragmented data blocks, each of the plurality of fragmented data blocks having a Y dimension that is smaller than the Y dimension of the data block.

17. The computer-readable storage medium according to claim 13 , wherein the instructions cause the one or more processors of the computing device to determine a data block linked to a descriptor in a second queue is ready for transfer, and send the data block linked to the descriptor in the second queue to a memory location after the at least one of the plurality of fragmented data blocks is sent to the destination memory location.

Assignments (1)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Sep 12, 2017
From: PETRE, GEORGE; MCBRIDE, CHAD BALLING; AMBARDEKAR, AMOL ASHOK; CEDOLA, KENT D.; BOBROV, BORIS; WALL, LARRY MARVIN
To: MICROSOFT TECHNOLOGY LICENSING, LLC
Reel/Frame 043564/0442 →
Continuity (2)
Provisional Application 62486432 · Apr 17, 2017
Related Publication 20180300634A1 · Oct 18, 2018
Cited By (3)
US 12,493,554 US 12,743,377 US 12,748,638