Linux Documentation
 help / color / mirror / Atom feed
* [PATCH 0/6] Documentation/gpu/amdgpu: Add documentation about Pipes, Queues, MES, and others
@ 2025-03-25 17:18 Rodrigo Siqueira
  2025-03-25 17:18 ` [PATCH 1/6] Documentation/gpu: Add new acronyms Rodrigo Siqueira
                   ` (6 more replies)
  0 siblings, 7 replies; 14+ messages in thread
From: Rodrigo Siqueira @ 2025-03-25 17:18 UTC (permalink / raw)
  To: Alex Deucher, 'Christian König', Mario Limonciello,
	Melissa Wen, 'André Almeida',
	'Timur Kristóf'
  Cc: amd-gfx, linux-doc, kernel-dev, Rodrigo Siqueira

Hi,

This patchset came from my endeavor to understand better how some of the
amdgpu components operate; in particular, I was focused on the ideas
behind Pipes, Hardware Queues, MES, and Ring Buffers. In some way, this
series is an attempt to put multiple pieces of information spread around
many different places in an organized way in the amdgpu kernel-doc. In
particular, the following links were crucial to create this series:

* https://lore.kernel.org/amd-gfx/CADnq5_Pcz2x4aJzKbVrN3jsZhD6sTydtDw=6PaN4O3m4t+Grtg@mail.gmail.com/T/#m9a670b55ab20e0f7c46c80f802a0a4be255a719d
* https://gitlab.freedesktop.org/mesa/mesa/-/issues/11759
* https://www.x.org/docs/AMD/old/R5xx_Acceleration_v1.5.pdf
* https://gpuopen.com/videos/graphics-pipeline/

The first part of this series just updates the amdgpu-glossary with some
new acronyms (some of them useful for other patches). The next two
patches are just some basic organization to improve the documentation
flow. The last part describes pipes, hardware queues, ring buffers, and
MES.

Thanks
Siqueira

Rodrigo Siqueira (6):
  Documentation/gpu: Add new acronyms
  Documentation/gpu: Change index order to show driver core first
  Documentation/gpu: Create a documentation entry just for hardware info
  Documentation/gpu: Add explanation about AMD Pipes and Queues
  Documentation/gpu: Create a GC entry in the amdgpu documentation
  Documentation/gpu: Add an intro about MES

 .../gpu/amdgpu/amd-hardware-list-info.rst     |   23 +
 Documentation/gpu/amdgpu/amdgpu-glossary.rst  |   36 +
 Documentation/gpu/amdgpu/driver-core.rst      |   77 +-
 Documentation/gpu/amdgpu/driver-misc.rst      |   17 -
 Documentation/gpu/amdgpu/gc/index.rst         |   53 +
 Documentation/gpu/amdgpu/gc/mes.rst           |   38 +
 Documentation/gpu/amdgpu/index.rst            |    4 +-
 .../gpu/amdgpu/pipe_and_queue_abstraction.svg | 1279 +++++++++++++++++
 8 files changed, 1485 insertions(+), 42 deletions(-)
 create mode 100644 Documentation/gpu/amdgpu/amd-hardware-list-info.rst
 create mode 100644 Documentation/gpu/amdgpu/gc/index.rst
 create mode 100644 Documentation/gpu/amdgpu/gc/mes.rst
 create mode 100644 Documentation/gpu/amdgpu/pipe_and_queue_abstraction.svg

-- 
2.49.0


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH 1/6] Documentation/gpu: Add new acronyms
  2025-03-25 17:18 [PATCH 0/6] Documentation/gpu/amdgpu: Add documentation about Pipes, Queues, MES, and others Rodrigo Siqueira
@ 2025-03-25 17:18 ` Rodrigo Siqueira
  2025-03-26  8:08   ` Christian König
  2025-03-25 17:18 ` [PATCH 2/6] Documentation/gpu: Change index order to show driver core first Rodrigo Siqueira
                   ` (5 subsequent siblings)
  6 siblings, 1 reply; 14+ messages in thread
From: Rodrigo Siqueira @ 2025-03-25 17:18 UTC (permalink / raw)
  To: Alex Deucher, 'Christian König', Mario Limonciello,
	Melissa Wen, 'André Almeida',
	'Timur Kristóf'
  Cc: amd-gfx, linux-doc, kernel-dev, Rodrigo Siqueira

This commit introduces some new acronyms extracted from the source code
and found on some web pages around the internet (most of them came from
ArchLinux, Gentoo, and Wikipedia links).

Signed-off-by: Rodrigo Siqueira <siqueira@igalia.com>
---
 Documentation/gpu/amdgpu/amdgpu-glossary.rst | 36 ++++++++++++++++++++
 1 file changed, 36 insertions(+)

diff --git a/Documentation/gpu/amdgpu/amdgpu-glossary.rst b/Documentation/gpu/amdgpu/amdgpu-glossary.rst
index 1e9283e076ba..080c3f2250d1 100644
--- a/Documentation/gpu/amdgpu/amdgpu-glossary.rst
+++ b/Documentation/gpu/amdgpu/amdgpu-glossary.rst
@@ -12,15 +12,27 @@ we have a dedicated glossary for Display Core at
       The number of CUs that are active on the system.  The number of active
       CUs may be less than SE * SH * CU depending on the board configuration.
 
+    BACO
+      Bus Alive, Chip Off
+
+    BOCO
+      Bus Off, Chip Off
+
     CE
       Constant Engine
 
+    CIK
+      Sea Islands
+
     CP
       Command Processor
 
     CPLIB
       Content Protection Library
 
+    CS
+      Command Submission
+
     CU
       Compute Unit
 
@@ -33,6 +45,9 @@ we have a dedicated glossary for Display Core at
     EOP
       End Of Pipe/Pipeline
 
+    FLR
+      Function Level Reset
+
     GART
       Graphics Address Remapping Table.  This is the name we use for the GPUVM
       page table used by the GPU kernel driver.  It remaps system resources
@@ -80,6 +95,9 @@ we have a dedicated glossary for Display Core at
     KCQ
       Kernel Compute Queue
 
+    KFD
+      Kernel Fusion Driver
+
     KGQ
       Kernel Graphics Queue
 
@@ -89,6 +107,9 @@ we have a dedicated glossary for Display Core at
     MC
       Memory Controller
 
+    MCBP
+      Mid Command Buffer Preemption
+
     ME
       MicroEngine (Graphics)
 
@@ -125,9 +146,15 @@ we have a dedicated glossary for Display Core at
     SE
       Shader Engine
 
+    SGPR
+      Scalar General-Purpose Registers
+
     SH
       SHader array
 
+    SI
+      Southern Islands
+
     SMU/SMC
       System Management Unit / System Management Controller
 
@@ -146,6 +173,9 @@ we have a dedicated glossary for Display Core at
     TA
       Trusted Application
 
+    TC
+      Texture Cache
+
     TOC
       Table of Contents
 
@@ -158,5 +188,11 @@ we have a dedicated glossary for Display Core at
     VCN
       Video Codec Next
 
+    VGPR
+      Vector General-Purpose Registers
+
+    VMID
+      Virtual Memory ID
+
     VPE
       Video Processing Engine
-- 
2.49.0


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH 2/6] Documentation/gpu: Change index order to show driver core first
  2025-03-25 17:18 [PATCH 0/6] Documentation/gpu/amdgpu: Add documentation about Pipes, Queues, MES, and others Rodrigo Siqueira
  2025-03-25 17:18 ` [PATCH 1/6] Documentation/gpu: Add new acronyms Rodrigo Siqueira
@ 2025-03-25 17:18 ` Rodrigo Siqueira
  2025-03-25 17:18 ` [PATCH 3/6] Documentation/gpu: Create a documentation entry just for hardware info Rodrigo Siqueira
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 14+ messages in thread
From: Rodrigo Siqueira @ 2025-03-25 17:18 UTC (permalink / raw)
  To: Alex Deucher, 'Christian König', Mario Limonciello,
	Melissa Wen, 'André Almeida',
	'Timur Kristóf'
  Cc: amd-gfx, linux-doc, kernel-dev, Rodrigo Siqueira

Since driver-core has an overview of the AMD GPU hardware structure, it
makes more sense to keep it first. This commit move driver-core up in
the index list.

Signed-off-by: Rodrigo Siqueira <siqueira@igalia.com>
---
 Documentation/gpu/amdgpu/index.rst | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Documentation/gpu/amdgpu/index.rst b/Documentation/gpu/amdgpu/index.rst
index 302d039928ee..3832aa764c72 100644
--- a/Documentation/gpu/amdgpu/index.rst
+++ b/Documentation/gpu/amdgpu/index.rst
@@ -7,8 +7,8 @@ Next (GCN), Radeon DNA (RDNA), and Compute DNA (CDNA) architectures.
 
 .. toctree::
 
-   module-parameters
    driver-core
+   module-parameters
    display/index
    flashing
    xgmi
-- 
2.49.0


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH 3/6] Documentation/gpu: Create a documentation entry just for hardware info
  2025-03-25 17:18 [PATCH 0/6] Documentation/gpu/amdgpu: Add documentation about Pipes, Queues, MES, and others Rodrigo Siqueira
  2025-03-25 17:18 ` [PATCH 1/6] Documentation/gpu: Add new acronyms Rodrigo Siqueira
  2025-03-25 17:18 ` [PATCH 2/6] Documentation/gpu: Change index order to show driver core first Rodrigo Siqueira
@ 2025-03-25 17:18 ` Rodrigo Siqueira
  2025-03-25 17:18 ` [PATCH 4/6] Documentation/gpu: Add explanation about AMD Pipes and Queues Rodrigo Siqueira
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 14+ messages in thread
From: Rodrigo Siqueira @ 2025-03-25 17:18 UTC (permalink / raw)
  To: Alex Deucher, 'Christian König', Mario Limonciello,
	Melissa Wen, 'André Almeida',
	'Timur Kristóf'
  Cc: amd-gfx, linux-doc, kernel-dev, Rodrigo Siqueira

The APU and dGPU tables are hidden in the driver misc info, which makes
it hard to find specific hardware info when users need it. This commit
creates a single page for this information and adds it to the top of the
amdgpu list to improve searchability.

Signed-off-by: Rodrigo Siqueira <siqueira@igalia.com>
---
 .../gpu/amdgpu/amd-hardware-list-info.rst     | 23 +++++++++++++++++++
 Documentation/gpu/amdgpu/driver-misc.rst      | 17 --------------
 Documentation/gpu/amdgpu/index.rst            |  1 +
 3 files changed, 24 insertions(+), 17 deletions(-)
 create mode 100644 Documentation/gpu/amdgpu/amd-hardware-list-info.rst

diff --git a/Documentation/gpu/amdgpu/amd-hardware-list-info.rst b/Documentation/gpu/amdgpu/amd-hardware-list-info.rst
new file mode 100644
index 000000000000..1786544fe7c1
--- /dev/null
+++ b/Documentation/gpu/amdgpu/amd-hardware-list-info.rst
@@ -0,0 +1,23 @@
+=================================================
+ AMD Hardware Components Information per Product
+=================================================
+
+On this page, you can find the AMD product name and which component version is
+part of it.
+
+Accelerated Processing Units (APU) Info
+---------------------------------------
+
+.. csv-table::
+   :header-rows: 1
+   :widths: 3, 2, 2, 1, 1, 1, 1
+   :file: ./apu-asic-info-table.csv
+
+Discrete GPU Info
+-----------------
+
+.. csv-table::
+   :header-rows: 1
+   :widths: 3, 2, 2, 1, 1, 1
+   :file: ./dgpu-asic-info-table.csv
+
diff --git a/Documentation/gpu/amdgpu/driver-misc.rst b/Documentation/gpu/amdgpu/driver-misc.rst
index e40e15f89fd3..25b0c857816e 100644
--- a/Documentation/gpu/amdgpu/driver-misc.rst
+++ b/Documentation/gpu/amdgpu/driver-misc.rst
@@ -50,23 +50,6 @@ board_info
 .. kernel-doc:: drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
    :doc: board_info
 
-Accelerated Processing Units (APU) Info
----------------------------------------
-
-.. csv-table::
-   :header-rows: 1
-   :widths: 3, 2, 2, 1, 1, 1, 1
-   :file: ./apu-asic-info-table.csv
-
-Discrete GPU Info
------------------
-
-.. csv-table::
-   :header-rows: 1
-   :widths: 3, 2, 2, 1, 1, 1
-   :file: ./dgpu-asic-info-table.csv
-
-
 GPU Memory Usage Information
 ============================
 
diff --git a/Documentation/gpu/amdgpu/index.rst b/Documentation/gpu/amdgpu/index.rst
index 3832aa764c72..7e9d60754287 100644
--- a/Documentation/gpu/amdgpu/index.rst
+++ b/Documentation/gpu/amdgpu/index.rst
@@ -8,6 +8,7 @@ Next (GCN), Radeon DNA (RDNA), and Compute DNA (CDNA) architectures.
 .. toctree::
 
    driver-core
+   amd-hardware-list-info
    module-parameters
    display/index
    flashing
-- 
2.49.0


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH 4/6] Documentation/gpu: Add explanation about AMD Pipes and Queues
  2025-03-25 17:18 [PATCH 0/6] Documentation/gpu/amdgpu: Add documentation about Pipes, Queues, MES, and others Rodrigo Siqueira
                   ` (2 preceding siblings ...)
  2025-03-25 17:18 ` [PATCH 3/6] Documentation/gpu: Create a documentation entry just for hardware info Rodrigo Siqueira
@ 2025-03-25 17:18 ` Rodrigo Siqueira
  2025-03-26  1:53   ` Bagas Sanjaya
  2025-03-26  9:04   ` Christian König
  2025-03-25 17:18 ` [PATCH 5/6] Documentation/gpu: Create a GC entry in the amdgpu documentation Rodrigo Siqueira
                   ` (2 subsequent siblings)
  6 siblings, 2 replies; 14+ messages in thread
From: Rodrigo Siqueira @ 2025-03-25 17:18 UTC (permalink / raw)
  To: Alex Deucher, 'Christian König', Mario Limonciello,
	Melissa Wen, 'André Almeida',
	'Timur Kristóf'
  Cc: amd-gfx, linux-doc, kernel-dev, Rodrigo Siqueira

Pipes and Queues are two common vocabulary that pervades discussions
around amdgpu core features. The definition and explanation of those
components are spread around multiple places in the code, mailing list,
and Gitlab, which sometimes leads to the wrong interpretation of these
concepts. This commit attempts to centralize the definition and
explanation of Pipe and Queue from amdgpu perspective in a kernel doc.
Most of the information in this doc was derived from:

- https://lore.kernel.org/amd-gfx/CADnq5_Pcz2x4aJzKbVrN3jsZhD6sTydtDw=6PaN4O3m4t+Grtg@mail.gmail.com/T/#m9a670b55ab20e0f7c46c80f802a0a4be255a719d
- https://gitlab.freedesktop.org/mesa/mesa/-/issues/11759

Signed-off-by: Rodrigo Siqueira <siqueira@igalia.com>
---
 Documentation/gpu/amdgpu/driver-core.rst      |   49 +
 .../gpu/amdgpu/pipe_and_queue_abstraction.svg | 1279 +++++++++++++++++
 2 files changed, 1328 insertions(+)
 create mode 100644 Documentation/gpu/amdgpu/pipe_and_queue_abstraction.svg

diff --git a/Documentation/gpu/amdgpu/driver-core.rst b/Documentation/gpu/amdgpu/driver-core.rst
index 32723a925377..746fd081876f 100644
--- a/Documentation/gpu/amdgpu/driver-core.rst
+++ b/Documentation/gpu/amdgpu/driver-core.rst
@@ -98,6 +98,55 @@ RLC (RunList Controller)
     The name is a vestige of old hardware where it was originally added
     and doesn't really have much relation to what the engine does now.
 
+
+GFX, Compute, and SDMA Overall Behavior
+=======================================
+
+.. note:: For simplicity, whenever the term block is used in this section, it
+   means GFX, Compute, and SDMA.
+
+GFX, Compute and SDMA share a similar form of operation that can be abstracted
+to facilitate understanding of the behavior of these blocks. See the figure
+below illustrating the common components of these blocks:
+
+.. kernel-figure:: pipe_and_queue_abstraction.svg
+
+In the central part of this figure, you can see two elements, one called
+**Pipe** and another named **Queues**; it is important to highlight that Queues
+must be associated with a Pipe and vice-versa. Every specific hardware may have
+a different number of Pipes and, in turn, a different number of Queues; for
+example, GFX 11 has two Pipes and two Queues per Pipe.
+
+Pipe is the hardware that processes the instructions available in the Queues;
+in other words, it is a thread executing the operations inserted in the Queue.
+One crucial characteristic of Pipes is that they can only execute one Queue at
+a time; no matter if the hardware has multiple Queues in the Pipe, it only runs
+one Queue per Pipe. When a queue is running in the Pipe, it is said that the
+Queue is **Active**.
+
+Pipes have the mechanics of swapping between queues at the hardware level.
+Nonetheless, they only make use of Queues that are considered mapped. Pipes can
+switch between queues based on any of the following inputs:
+
+1. Command Stream;
+2. Packet by Packet;
+3. Other hardware requests the change (e.g., MES).
+
+Queues within Pipes are defined by the Hardware Queue Descriptors (HQD).
+Associated with the HQD concept, we have the Memory Queue Descriptor (MQD),
+which is responsible for storing information about the state of each of the
+available Queues in the memory. The state of a Queue contains information such
+as the GPU virtual address of the queue itself, save areas, doorbell, etc. The
+MQD also stores the HQD registers, which are vital for activating or
+deactivating a given Queue.
+
+The Queue-switching process can also happen with the firmware requesting the
+preemption or unmapping of a Queue. The firmware waits for the HQD_ACTIVE bit
+to change to low before saving the state into the MQD. To make a different
+Queue become active, the firmware copies the MQD state into the HQD registers
+and loads any additional state. Finally, it sets the HQD_ACTIVE bit to high to
+indicate that the queue is active.
+
 Driver Structure
 ================
 
diff --git a/Documentation/gpu/amdgpu/pipe_and_queue_abstraction.svg b/Documentation/gpu/amdgpu/pipe_and_queue_abstraction.svg
new file mode 100644
index 000000000000..0df3c6b3000b
--- /dev/null
+++ b/Documentation/gpu/amdgpu/pipe_and_queue_abstraction.svg
@@ -0,0 +1,1279 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   width="395.47891mm"
+   height="234.73715mm"
+   viewBox="0 0 395.47891 234.73714"
+   version="1.1"
+   id="svg1"
+   inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
+   sodipodi:docname="pipe_and_queue_abstraction.svg"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:svg="http://www.w3.org/2000/svg">
+  <sodipodi:namedview
+     id="namedview1"
+     pagecolor="#ffffff"
+     bordercolor="#000000"
+     borderopacity="0.25"
+     inkscape:showpageshadow="2"
+     inkscape:pageopacity="0.0"
+     inkscape:pagecheckerboard="0"
+     inkscape:deskcolor="#d1d1d1"
+     inkscape:document-units="mm"
+     inkscape:zoom="1.6489689"
+     inkscape:cx="713.17296"
+     inkscape:cy="466.65527"
+     inkscape:window-width="3840"
+     inkscape:window-height="2083"
+     inkscape:window-x="0"
+     inkscape:window-y="0"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="layer1" />
+  <defs
+     id="defs1">
+    <marker
+       style="overflow:visible"
+       id="Dot"
+       refX="0"
+       refY="0"
+       orient="auto"
+       inkscape:stockid="Dot"
+       markerWidth="1"
+       markerHeight="1"
+       viewBox="0 0 1 1"
+       inkscape:isstock="true"
+       inkscape:collect="always"
+       preserveAspectRatio="xMidYMid">
+      <path
+         transform="scale(0.5)"
+         style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+         d="M 5,0 C 5,2.76 2.76,5 0,5 -2.76,5 -5,2.76 -5,0 c 0,-2.76 2.3,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         sodipodi:nodetypes="sssss"
+         id="path110" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="marker109"
+       refX="0"
+       refY="0"
+       orient="auto-start-reverse"
+       inkscape:stockid="Stylized triangle arrow"
+       markerWidth="1"
+       markerHeight="1"
+       viewBox="0 0 1 1"
+       inkscape:isstock="true"
+       inkscape:collect="always"
+       preserveAspectRatio="xMidYMid">
+      <path
+         transform="scale(0.5)"
+         style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
+         d="m 6,0 c -3,1 -7,3 -9,5 0,0 0,-4 2,-5 -2,-1 -2,-5 -2,-5 2,2 6,4 9,5 z"
+         id="path109" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="ArrowTriangleStylized"
+       refX="0"
+       refY="0"
+       orient="auto-start-reverse"
+       inkscape:stockid="Stylized triangle arrow"
+       markerWidth="1"
+       markerHeight="1"
+       viewBox="0 0 1 1"
+       inkscape:isstock="true"
+       inkscape:collect="always"
+       preserveAspectRatio="xMidYMid">
+      <path
+         transform="scale(0.5)"
+         style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
+         d="m 6,0 c -3,1 -7,3 -9,5 0,0 0,-4 2,-5 -2,-1 -2,-5 -2,-5 2,2 6,4 9,5 z"
+         id="path108" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="ArrowWide"
+       refX="0"
+       refY="0"
+       orient="auto-start-reverse"
+       inkscape:stockid="Wide arrow"
+       markerWidth="1"
+       markerHeight="1"
+       viewBox="0 0 1 1"
+       inkscape:isstock="true"
+       inkscape:collect="always"
+       preserveAspectRatio="xMidYMid">
+      <path
+         style="fill:none;stroke:context-stroke;stroke-width:1;stroke-linecap:butt"
+         d="M 3,-3 0,0 3,3"
+         transform="rotate(180,0.125,0)"
+         sodipodi:nodetypes="ccc"
+         id="path1" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="Triangle"
+       refX="0"
+       refY="0"
+       orient="auto-start-reverse"
+       inkscape:stockid="Triangle arrow"
+       markerWidth="1"
+       markerHeight="1"
+       viewBox="0 0 1 1"
+       inkscape:isstock="true"
+       inkscape:collect="always"
+       preserveAspectRatio="xMidYMid">
+      <path
+         transform="scale(0.5)"
+         style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
+         d="M 5.77,0 -2.88,5 V -5 Z"
+         id="path135" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="ArrowWideHeavy"
+       refX="0"
+       refY="0"
+       orient="auto-start-reverse"
+       inkscape:stockid="Wide, heavy arrow"
+       markerWidth="1"
+       markerHeight="1"
+       viewBox="0 0 1 1"
+       inkscape:isstock="true"
+       inkscape:collect="always"
+       preserveAspectRatio="xMidYMid">
+      <path
+         style="fill:context-stroke;fill-rule:evenodd;stroke:none"
+         d="m 1,0 -3,3 h -2 l 3,-3 -3,-3 h 2 z"
+         id="path71" />
+    </marker>
+  </defs>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(149.03517,55.110629)">
+    <circle
+       style="fill:#ffeeaa;fill-opacity:1;stroke:#1a1a1a;stroke-width:0.733436;stroke-dasharray:none;stroke-dashoffset:0"
+       id="path98"
+       cx="-35.757576"
+       cy="-10.495151"
+       r="44.24876" />
+    <rect
+       style="fill:none;stroke:#000000;stroke-width:0.878057;stroke-dasharray:none"
+       id="rect1"
+       width="167.79619"
+       height="24.831829"
+       x="14.21942"
+       y="57.862854" />
+    <g
+       id="g11"
+       transform="translate(24.021362,-46.545299)">
+      <rect
+         style="fill:none;stroke:#006680;stroke-width:0.459999;stroke-dasharray:none"
+         id="rect2"
+         width="131.09708"
+         height="5.8163381"
+         x="23.245802"
+         y="107.16314" />
+      <path
+         style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
+         d="m 37.884707,107.26337 v 5.53565"
+         id="path2"
+         sodipodi:nodetypes="cc" />
+      <path
+         style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
+         d="m 52.466233,107.26337 v 5.53565"
+         id="path3"
+         sodipodi:nodetypes="cc" />
+      <path
+         style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
+         d="m 67.047758,107.26337 v 5.53565"
+         id="path4"
+         sodipodi:nodetypes="cc" />
+      <path
+         style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
+         d="m 81.629283,107.26337 v 5.53565"
+         id="path5"
+         sodipodi:nodetypes="cc" />
+      <path
+         style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
+         d="m 96.210809,107.26337 v 5.53565"
+         id="path6"
+         sodipodi:nodetypes="cc" />
+      <path
+         style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
+         d="m 110.79233,107.26337 v 5.53565"
+         id="path7"
+         sodipodi:nodetypes="cc" />
+      <path
+         style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
+         d="m 125.37386,107.26337 v 5.53565"
+         id="path8"
+         sodipodi:nodetypes="cc" />
+      <path
+         style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
+         d="m 139.95538,107.26337 v 5.53565"
+         id="path9"
+         sodipodi:nodetypes="cc" />
+      <text
+         xml:space="preserve"
+         style="font-size:3.175px;text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
+         x="86.713425"
+         y="110.1963"
+         id="text11"><tspan
+           sodipodi:role="line"
+           id="tspan11"
+           style="stroke:#006680;stroke-width:0.5"
+           x="86.713425"
+           y="110.1963">. . .</tspan></text>
+    </g>
+    <g
+       id="g18"
+       transform="translate(24.021362,-32.25779)">
+      <rect
+         style="fill:none;stroke:#006680;stroke-width:0.459999;stroke-dasharray:none"
+         id="rect11"
+         width="131.09708"
+         height="5.8163381"
+         x="23.245802"
+         y="107.16314" />
+      <path
+         style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
+         d="m 37.884707,107.26337 v 5.53565"
+         id="path11"
+         sodipodi:nodetypes="cc" />
+      <path
+         style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
+         d="m 52.466233,107.26337 v 5.53565"
+         id="path12"
+         sodipodi:nodetypes="cc" />
+      <path
+         style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
+         d="m 67.047758,107.26337 v 5.53565"
+         id="path13"
+         sodipodi:nodetypes="cc" />
+      <path
+         style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
+         d="m 81.629283,107.26337 v 5.53565"
+         id="path14"
+         sodipodi:nodetypes="cc" />
+      <path
+         style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
+         d="m 96.210809,107.26337 v 5.53565"
+         id="path15"
+         sodipodi:nodetypes="cc" />
+      <path
+         style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
+         d="m 110.79233,107.26337 v 5.53565"
+         id="path16"
+         sodipodi:nodetypes="cc" />
+      <path
+         style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
+         d="m 125.37386,107.26337 v 5.53565"
+         id="path17"
+         sodipodi:nodetypes="cc" />
+      <path
+         style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
+         d="m 139.95538,107.26337 v 5.53565"
+         id="path18"
+         sodipodi:nodetypes="cc" />
+      <text
+         xml:space="preserve"
+         style="font-size:3.175px;text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
+         x="86.713425"
+         y="110.1963"
+         id="text18"><tspan
+           sodipodi:role="line"
+           id="tspan18"
+           style="stroke:#006680;stroke-width:0.5"
+           x="86.713425"
+           y="110.1963">. . .</tspan></text>
+    </g>
+    <text
+       xml:space="preserve"
+       style="font-size:3.175px;text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
+       x="113.37768"
+       y="68.463142"
+       id="text19"><tspan
+         sodipodi:role="line"
+         id="tspan19"
+         style="writing-mode:tb-rl;stroke-width:0.5"
+         x="113.37768"
+         y="68.463142">. . .</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
+       x="25.005701"
+       y="55.308445"
+       id="text844-2-9"><tspan
+         sodipodi:role="line"
+         x="25.005701"
+         y="55.308445"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;stroke-width:0.0690111"
+         id="tspan2868">Pipe[0]</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
+       x="-74.441521"
+       y="63.075123"
+       id="text844-2-9-4"><tspan
+         sodipodi:role="line"
+         x="-74.441521"
+         y="63.075123"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;stroke-width:0.0690111"
+         id="tspan2868-7">MQD</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
+       x="30.264952"
+       y="65.490654"
+       id="text20"><tspan
+         sodipodi:role="line"
+         x="30.264952"
+         y="65.490654"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;stroke-width:0.0690111"
+         id="tspan20">Queue[0]</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
+       x="30.264952"
+       y="79.249001"
+       id="text21"><tspan
+         sodipodi:role="line"
+         x="30.264952"
+         y="79.249001"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;stroke-width:0.0690111"
+         id="tspan21">Queue[n]</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
+       x="30.264952"
+       y="71.84066"
+       id="text22"><tspan
+         sodipodi:role="line"
+         x="30.264952"
+         y="71.84066"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;stroke-width:0.0690111"
+         id="tspan22">...</tspan></text>
+    <g
+       id="g71"
+       transform="translate(-23.283342)">
+      <rect
+         style="fill:#ffffff;fill-opacity:0;stroke:#000000;stroke-width:0.5;stroke-dasharray:0.5, 0.5;stroke-dashoffset:0"
+         id="rect67"
+         width="18.533583"
+         height="114.96632"
+         x="250.9435"
+         y="54.754276"
+         ry="6.0427966" />
+    </g>
+    <rect
+       style="fill:#1a1a1a;fill-opacity:0;stroke:#000000;stroke-width:0.499999;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect68"
+       width="188.21231"
+       height="139.5948"
+       x="4.0113592"
+       y="37.597778"
+       ry="0" />
+    <g
+       id="g43"
+       transform="translate(0,40.745853)">
+      <rect
+         style="fill:none;stroke:#000000;stroke-width:0.878057;stroke-dasharray:none"
+         id="rect22"
+         width="167.79619"
+         height="24.831829"
+         x="14.21942"
+         y="57.862854" />
+      <g
+         id="g30"
+         transform="translate(24.021362,-46.545299)">
+        <rect
+           style="fill:none;stroke:#006680;stroke-width:0.459999;stroke-dasharray:none"
+           id="rect23"
+           width="131.09708"
+           height="5.8163381"
+           x="23.245802"
+           y="107.16314" />
+        <path
+           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
+           d="m 37.884707,107.26337 v 5.53565"
+           id="path23"
+           sodipodi:nodetypes="cc" />
+        <path
+           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
+           d="m 52.466233,107.26337 v 5.53565"
+           id="path24"
+           sodipodi:nodetypes="cc" />
+        <path
+           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
+           d="m 67.047758,107.26337 v 5.53565"
+           id="path25"
+           sodipodi:nodetypes="cc" />
+        <path
+           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
+           d="m 81.629283,107.26337 v 5.53565"
+           id="path26"
+           sodipodi:nodetypes="cc" />
+        <path
+           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
+           d="m 96.210809,107.26337 v 5.53565"
+           id="path27"
+           sodipodi:nodetypes="cc" />
+        <path
+           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
+           d="m 110.79233,107.26337 v 5.53565"
+           id="path28"
+           sodipodi:nodetypes="cc" />
+        <path
+           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
+           d="m 125.37386,107.26337 v 5.53565"
+           id="path29"
+           sodipodi:nodetypes="cc" />
+        <path
+           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
+           d="m 139.95538,107.26337 v 5.53565"
+           id="path30"
+           sodipodi:nodetypes="cc" />
+        <text
+           xml:space="preserve"
+           style="font-size:3.175px;text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
+           x="86.713425"
+           y="110.1963"
+           id="text30"><tspan
+             sodipodi:role="line"
+             id="tspan30"
+             style="stroke:#006680;stroke-width:0.5"
+             x="86.713425"
+             y="110.1963">. . .</tspan></text>
+      </g>
+      <g
+         id="g38"
+         transform="translate(24.021362,-32.25779)">
+        <rect
+           style="fill:none;stroke:#006680;stroke-width:0.459999;stroke-dasharray:none"
+           id="rect30"
+           width="131.09708"
+           height="5.8163381"
+           x="23.245802"
+           y="107.16314" />
+        <path
+           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
+           d="m 37.884707,107.26337 v 5.53565"
+           id="path31"
+           sodipodi:nodetypes="cc" />
+        <path
+           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
+           d="m 52.466233,107.26337 v 5.53565"
+           id="path32"
+           sodipodi:nodetypes="cc" />
+        <path
+           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
+           d="m 67.047758,107.26337 v 5.53565"
+           id="path33"
+           sodipodi:nodetypes="cc" />
+        <path
+           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
+           d="m 81.629283,107.26337 v 5.53565"
+           id="path34"
+           sodipodi:nodetypes="cc" />
+        <path
+           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
+           d="m 96.210809,107.26337 v 5.53565"
+           id="path35"
+           sodipodi:nodetypes="cc" />
+        <path
+           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
+           d="m 110.79233,107.26337 v 5.53565"
+           id="path36"
+           sodipodi:nodetypes="cc" />
+        <path
+           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
+           d="m 125.37386,107.26337 v 5.53565"
+           id="path37"
+           sodipodi:nodetypes="cc" />
+        <path
+           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
+           d="m 139.95538,107.26337 v 5.53565"
+           id="path38"
+           sodipodi:nodetypes="cc" />
+        <text
+           xml:space="preserve"
+           style="font-size:3.175px;text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
+           x="86.713425"
+           y="110.1963"
+           id="text38"><tspan
+             sodipodi:role="line"
+             id="tspan38"
+             style="stroke:#006680;stroke-width:0.5"
+             x="86.713425"
+             y="110.1963">. . .</tspan></text>
+      </g>
+      <text
+         xml:space="preserve"
+         style="font-size:3.175px;text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
+         x="113.37768"
+         y="68.463142"
+         id="text39"><tspan
+           sodipodi:role="line"
+           id="tspan39"
+           style="writing-mode:tb-rl;stroke-width:0.5"
+           x="113.37768"
+           y="68.463142">. . .</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
+         x="25.005701"
+         y="55.308445"
+         id="text40"><tspan
+           sodipodi:role="line"
+           x="25.005701"
+           y="55.308445"
+           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;stroke-width:0.0690111"
+           id="tspan40">Pipe[1]</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
+         x="30.264952"
+         y="65.490654"
+         id="text41"><tspan
+           sodipodi:role="line"
+           x="30.264952"
+           y="65.490654"
+           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;stroke-width:0.0690111"
+           id="tspan41">Queue[0]</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
+         x="30.264952"
+         y="79.249001"
+         id="text42"><tspan
+           sodipodi:role="line"
+           x="30.264952"
+           y="79.249001"
+           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;stroke-width:0.0690111"
+           id="tspan42">Queue[n]</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
+         x="30.264952"
+         y="71.84066"
+         id="text43"><tspan
+           sodipodi:role="line"
+           x="30.264952"
+           y="71.84066"
+           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;stroke-width:0.0690111"
+           id="tspan43">...</tspan></text>
+    </g>
+    <g
+       id="g64"
+       transform="translate(0,85.195881)">
+      <rect
+         style="fill:none;stroke:#000000;stroke-width:0.878057;stroke-dasharray:none"
+         id="rect43"
+         width="167.79619"
+         height="24.831829"
+         x="14.21942"
+         y="57.862854" />
+      <g
+         id="g51"
+         transform="translate(24.021362,-46.545299)">
+        <rect
+           style="fill:none;stroke:#006680;stroke-width:0.459999;stroke-dasharray:none"
+           id="rect44"
+           width="131.09708"
+           height="5.8163381"
+           x="23.245802"
+           y="107.16314" />
+        <path
+           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
+           d="m 37.884707,107.26337 v 5.53565"
+           id="path44"
+           sodipodi:nodetypes="cc" />
+        <path
+           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
+           d="m 52.466233,107.26337 v 5.53565"
+           id="path45"
+           sodipodi:nodetypes="cc" />
+        <path
+           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
+           d="m 67.047758,107.26337 v 5.53565"
+           id="path46"
+           sodipodi:nodetypes="cc" />
+        <path
+           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
+           d="m 81.629283,107.26337 v 5.53565"
+           id="path47"
+           sodipodi:nodetypes="cc" />
+        <path
+           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
+           d="m 96.210809,107.26337 v 5.53565"
+           id="path48"
+           sodipodi:nodetypes="cc" />
+        <path
+           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
+           d="m 110.79233,107.26337 v 5.53565"
+           id="path49"
+           sodipodi:nodetypes="cc" />
+        <path
+           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
+           d="m 125.37386,107.26337 v 5.53565"
+           id="path50"
+           sodipodi:nodetypes="cc" />
+        <path
+           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
+           d="m 139.95538,107.26337 v 5.53565"
+           id="path51"
+           sodipodi:nodetypes="cc" />
+        <text
+           xml:space="preserve"
+           style="font-size:3.175px;text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
+           x="86.713425"
+           y="110.1963"
+           id="text51"><tspan
+             sodipodi:role="line"
+             id="tspan51"
+             style="stroke:#006680;stroke-width:0.5"
+             x="86.713425"
+             y="110.1963">. . .</tspan></text>
+      </g>
+      <g
+         id="g59"
+         transform="translate(24.021362,-32.25779)">
+        <rect
+           style="fill:none;stroke:#006680;stroke-width:0.459999;stroke-dasharray:none"
+           id="rect51"
+           width="131.09708"
+           height="5.8163381"
+           x="23.245802"
+           y="107.16314" />
+        <path
+           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
+           d="m 37.884707,107.26337 v 5.53565"
+           id="path52"
+           sodipodi:nodetypes="cc" />
+        <path
+           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
+           d="m 52.466233,107.26337 v 5.53565"
+           id="path53"
+           sodipodi:nodetypes="cc" />
+        <path
+           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
+           d="m 67.047758,107.26337 v 5.53565"
+           id="path54"
+           sodipodi:nodetypes="cc" />
+        <path
+           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
+           d="m 81.629283,107.26337 v 5.53565"
+           id="path55"
+           sodipodi:nodetypes="cc" />
+        <path
+           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
+           d="m 96.210809,107.26337 v 5.53565"
+           id="path56"
+           sodipodi:nodetypes="cc" />
+        <path
+           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
+           d="m 110.79233,107.26337 v 5.53565"
+           id="path57"
+           sodipodi:nodetypes="cc" />
+        <path
+           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
+           d="m 125.37386,107.26337 v 5.53565"
+           id="path58"
+           sodipodi:nodetypes="cc" />
+        <path
+           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
+           d="m 139.95538,107.26337 v 5.53565"
+           id="path59"
+           sodipodi:nodetypes="cc" />
+        <text
+           xml:space="preserve"
+           style="font-size:3.175px;text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
+           x="86.713425"
+           y="110.1963"
+           id="text59"><tspan
+             sodipodi:role="line"
+             id="tspan59"
+             style="stroke:#006680;stroke-width:0.5"
+             x="86.713425"
+             y="110.1963">. . .</tspan></text>
+      </g>
+      <text
+         xml:space="preserve"
+         style="font-size:3.175px;text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
+         x="113.37768"
+         y="68.463142"
+         id="text60"><tspan
+           sodipodi:role="line"
+           id="tspan60"
+           style="writing-mode:tb-rl;stroke-width:0.5"
+           x="113.37768"
+           y="68.463142">. . .</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
+         x="25.005701"
+         y="55.308445"
+         id="text61"><tspan
+           sodipodi:role="line"
+           x="25.005701"
+           y="55.308445"
+           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;stroke-width:0.0690111"
+           id="tspan61">Pipe[n]</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
+         x="30.264952"
+         y="65.490654"
+         id="text62"><tspan
+           sodipodi:role="line"
+           x="30.264952"
+           y="65.490654"
+           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;stroke-width:0.0690111"
+           id="tspan62">Queue[0]</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
+         x="30.264952"
+         y="79.249001"
+         id="text63"><tspan
+           sodipodi:role="line"
+           x="30.264952"
+           y="79.249001"
+           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;stroke-width:0.0690111"
+           id="tspan63">Queue[n]</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
+         x="30.264952"
+         y="71.84066"
+         id="text64"><tspan
+           sodipodi:role="line"
+           x="30.264952"
+           y="71.84066"
+           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;stroke-width:0.0690111"
+           id="tspan64">...</tspan></text>
+    </g>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.76111px;font-family:Serif;-inkscape-font-specification:Serif;text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:#000000;fill-opacity:0;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
+       x="92.18071"
+       y="128.21965"
+       id="text65"><tspan
+         sodipodi:role="line"
+         id="tspan65"
+         style="font-size:7.76111px;writing-mode:tb-rl;fill:#1a1a1a;stroke:#000000;stroke-width:0.5"
+         x="92.18071"
+         y="128.21965">...</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.7611px;font-family:Serif;-inkscape-font-specification:Serif;text-align:start;writing-mode:tb-rl;direction:ltr;text-anchor:start;fill:#1a1a1a;fill-opacity:0;stroke:#000000;stroke-width:0.499999;stroke-dasharray:none"
+       x="198.72205"
+       y="80.708267"
+       id="text66"><tspan
+         sodipodi:role="line"
+         id="tspan66"
+         style="stroke-width:0.5"
+         x="198.72205"
+         y="80.708267" /></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
+       x="97.905846"
+       y="44.725101"
+       id="text68"><tspan
+         sodipodi:role="line"
+         x="97.905846"
+         y="44.725101"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;stroke-width:0.0690111"
+         id="tspan68">Hardware Block</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;writing-mode:vertical-lr;text-orientation:upright;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
+       x="236.36934"
+       y="112.10503"
+       id="text68-7"><tspan
+         sodipodi:role="line"
+         x="236.36934"
+         y="112.10503"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;writing-mode:vertical-lr;text-orientation:upright;text-anchor:middle;stroke-width:0.0690111"
+         id="tspan68-4">EXECUTION</tspan></text>
+    <rect
+       style="fill:#1a1a1a;fill-opacity:0;stroke:#000000;stroke-width:0.940575;stroke-dasharray:7.5246, 0.940575;stroke-dashoffset:0"
+       id="rect68-1"
+       width="68.749969"
+       height="141.2751"
+       x="-129.49162"
+       y="37.881134"
+       ry="0" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
+       x="-114.4223"
+       y="44.966106"
+       id="text68-2"><tspan
+         sodipodi:role="line"
+         x="-114.4223"
+         y="44.966106"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;stroke-width:0.0690111"
+         id="tspan68-9">Memory</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.7px;font-family:Serif;-inkscape-font-specification:Serif;text-align:start;writing-mode:tb-rl;direction:ltr;text-orientation:upright;text-anchor:start;fill:#1a1a1a;fill-opacity:0;stroke:#000000;stroke-width:0.499999;stroke-dasharray:none;stroke-dashoffset:0"
+       x="212.6013"
+       y="64.823341"
+       id="text69"><tspan
+         sodipodi:role="line"
+         id="tspan69"
+         style="font-size:12.7px;stroke-width:0.5"
+         x="212.6013"
+         y="64.823341" /></text>
+    <g
+       id="g72">
+      <path
+         style="font-weight:bold;font-size:16.9333px;line-height:1.25;-inkscape-font-specification:'sans-serif Bold';text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;stroke-width:0.0690111"
+         d="m 185.24734,83.96512 h 1.28693 c 1.20226,0.01693 2.09973,-1.015998 2.0828,-2.370662 v -9.393759 c -0.0169,-0.711199 0.33866,-1.066798 1.10066,-1.066798 h 0.2032 0.0677 v -1.557864 c -1.0668,0.01693 -1.38853,-0.270933 -1.37159,-1.236131 V 58.96308 c 0.0339,-1.354664 -0.88054,-2.387595 -2.0828,-2.370662 h -1.28693 v 1.676397 h 0.62653 c 0.57573,0 0.77893,0.321733 0.762,1.100664 v 9.122827 c 0,1.219198 0.44027,1.710263 1.64253,1.862663 -1.20226,0.135466 -1.64253,0.626532 -1.64253,1.84573 v 9.122826 c 0.0169,0.660399 -0.23707,0.965198 -0.762,0.965198 h -0.62653 z"
+         id="text70"
+         aria-label="}"
+         sodipodi:nodetypes="ccccsccccccccscscscscc" />
+      <path
+         style="fill:#1a1a1a;fill-opacity:0;stroke:#000000;stroke-width:1.25;stroke-dasharray:none;stroke-dashoffset:0;marker-end:url(#ArrowWideHeavy)"
+         d="M 190.40199,70.278769 H 224.6663"
+         id="path70" />
+    </g>
+    <path
+       style="font-weight:bold;font-size:16.9333px;line-height:1.25;-inkscape-font-specification:'sans-serif Bold';text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;stroke-width:0.0690111"
+       d="m -88.44114,74.337891 h 1.28693 c 1.20226,0.01693 2.09973,-1.015998 2.0828,-2.370662 V 62.57347 c -0.0169,-0.711199 0.33866,-1.066798 1.10066,-1.066798 h 0.2032 0.0677 v -1.557864 c -1.0668,0.01693 -1.38853,-0.270933 -1.37159,-1.236131 v -9.376826 c 0.0339,-1.354664 -0.88054,-2.387595 -2.0828,-2.370662 h -1.28693 v 1.676397 h 0.62653 c 0.57573,0 0.77893,0.321733 0.762,1.100664 v 9.122827 c 0,1.219198 0.44027,1.710263 1.64253,1.862663 -1.20226,0.135466 -1.64253,0.626532 -1.64253,1.84573 v 9.122826 c 0.0169,0.660399 -0.23707,0.965198 -0.762,0.965198 h -0.62653 z"
+       id="text70-1"
+       aria-label="}"
+       sodipodi:nodetypes="ccccsccccccccscscscscc" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.9333px;font-family:Serif;-inkscape-font-specification:Serif;text-align:start;writing-mode:tb-rl;direction:ltr;text-orientation:upright;text-anchor:start;fill:#1a1a1a;fill-opacity:0;stroke:#000000;stroke-width:1.25;stroke-dasharray:none;stroke-dashoffset:0"
+       x="200.88817"
+       y="38.990276"
+       id="text72"><tspan
+         sodipodi:role="line"
+         id="tspan72"
+         style="stroke-width:1.25"
+         x="200.88817"
+         y="38.990276" /></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
+       x="205.12828"
+       y="60.090775"
+       id="text73"><tspan
+         sodipodi:role="line"
+         x="205.12828"
+         y="60.090775"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;stroke-width:0.0690111"
+         id="tspan73">e.g.,:</tspan><tspan
+         sodipodi:role="line"
+         x="205.12828"
+         y="68.028275"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;stroke-width:0.0690111"
+         id="tspan74">queue[0]</tspan></text>
+    <g
+       id="g75"
+       transform="translate(0,40.745853)">
+      <path
+         style="font-weight:bold;font-size:16.9333px;line-height:1.25;-inkscape-font-specification:'sans-serif Bold';text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;stroke-width:0.0690111"
+         d="m 185.24734,83.96512 h 1.28693 c 1.20226,0.01693 2.09973,-1.015998 2.0828,-2.370662 v -9.393759 c -0.0169,-0.711199 0.33866,-1.066798 1.10066,-1.066798 h 0.2032 0.0677 v -1.557864 c -1.0668,0.01693 -1.38853,-0.270933 -1.37159,-1.236131 V 58.96308 c 0.0339,-1.354664 -0.88054,-2.387595 -2.0828,-2.370662 h -1.28693 v 1.676397 h 0.62653 c 0.57573,0 0.77893,0.321733 0.762,1.100664 v 9.122827 c 0,1.219198 0.44027,1.710263 1.64253,1.862663 -1.20226,0.135466 -1.64253,0.626532 -1.64253,1.84573 v 9.122826 c 0.0169,0.660399 -0.23707,0.965198 -0.762,0.965198 h -0.62653 z"
+         id="path74"
+         aria-label="}"
+         sodipodi:nodetypes="ccccsccccccccscscscscc" />
+      <path
+         style="fill:#1a1a1a;fill-opacity:0;stroke:#000000;stroke-width:1.25;stroke-dasharray:none;stroke-dashoffset:0;marker-end:url(#ArrowWideHeavy)"
+         d="M 190.40199,70.278769 H 224.6663"
+         id="path75" />
+    </g>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
+       x="205.12828"
+       y="100.83664"
+       id="text76"><tspan
+         sodipodi:role="line"
+         x="205.12828"
+         y="100.83664"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;stroke-width:0.0690111"
+         id="tspan75">e.g.,:</tspan><tspan
+         sodipodi:role="line"
+         x="205.12828"
+         y="108.77414"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;stroke-width:0.0690111"
+         id="tspan76">queue[4]</tspan></text>
+    <g
+       id="g77"
+       transform="translate(0,85.725048)">
+      <path
+         style="font-weight:bold;font-size:16.9333px;line-height:1.25;-inkscape-font-specification:'sans-serif Bold';text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;stroke-width:0.0690111"
+         d="m 185.24734,83.96512 h 1.28693 c 1.20226,0.01693 2.09973,-1.015998 2.0828,-2.370662 v -9.393759 c -0.0169,-0.711199 0.33866,-1.066798 1.10066,-1.066798 h 0.2032 0.0677 v -1.557864 c -1.0668,0.01693 -1.38853,-0.270933 -1.37159,-1.236131 V 58.96308 c 0.0339,-1.354664 -0.88054,-2.387595 -2.0828,-2.370662 h -1.28693 v 1.676397 h 0.62653 c 0.57573,0 0.77893,0.321733 0.762,1.100664 v 9.122827 c 0,1.219198 0.44027,1.710263 1.64253,1.862663 -1.20226,0.135466 -1.64253,0.626532 -1.64253,1.84573 v 9.122826 c 0.0169,0.660399 -0.23707,0.965198 -0.762,0.965198 h -0.62653 z"
+         id="path76"
+         aria-label="}"
+         sodipodi:nodetypes="ccccsccccccccscscscscc" />
+      <path
+         style="fill:#1a1a1a;fill-opacity:0;stroke:#000000;stroke-width:1.25;stroke-dasharray:none;stroke-dashoffset:0;marker-end:url(#ArrowWideHeavy)"
+         d="M 190.40199,70.278769 H 224.6663"
+         id="path77" />
+    </g>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
+       x="205.12828"
+       y="145.81558"
+       id="text78"><tspan
+         sodipodi:role="line"
+         x="205.12828"
+         y="145.81558"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;stroke-width:0.0690111"
+         id="tspan77">e.g.,:</tspan><tspan
+         sodipodi:role="line"
+         x="205.12828"
+         y="153.75308"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;stroke-width:0.0690111"
+         id="tspan78">queue[n]</tspan></text>
+    <g
+       id="g81">
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
+         x="-18.502264"
+         y="65.642387"
+         id="text79"><tspan
+           sodipodi:role="line"
+           x="-18.502264"
+           y="65.642387"
+           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#800000;stroke-width:0.0690111"
+           id="tspan79">HQD</tspan></text>
+      <ellipse
+         style="fill:#800000;fill-opacity:0;stroke:#800000;stroke-width:1;stroke-dasharray:none;stroke-dashoffset:0"
+         id="path79"
+         cx="-18.407015"
+         cy="63.2188"
+         rx="13.317666"
+         ry="4.4124799" />
+      <path
+         style="fill:#800000;fill-opacity:0;stroke:#800000;stroke-width:1;stroke-dasharray:none;stroke-dashoffset:0;marker-end:url(#Triangle)"
+         d="M -4.6361224,63.2188 H 10.606988"
+         id="path80" />
+    </g>
+    <g
+       id="g82"
+       transform="translate(0,14.287503)">
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
+         x="-18.502264"
+         y="65.642387"
+         id="text81"><tspan
+           sodipodi:role="line"
+           x="-18.502264"
+           y="65.642387"
+           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#800000;stroke-width:0.0690111"
+           id="tspan81">HQD</tspan></text>
+      <ellipse
+         style="fill:#800000;fill-opacity:0;stroke:#800000;stroke-width:1;stroke-dasharray:none;stroke-dashoffset:0"
+         id="ellipse81"
+         cx="-18.407015"
+         cy="63.2188"
+         rx="13.317666"
+         ry="4.4124799" />
+      <path
+         style="fill:#800000;fill-opacity:0;stroke:#800000;stroke-width:1;stroke-dasharray:none;stroke-dashoffset:0;marker-end:url(#Triangle)"
+         d="M -4.6361224,63.2188 H 10.606988"
+         id="path81" />
+    </g>
+    <g
+       id="g83"
+       transform="translate(0,40.745853)">
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
+         x="-18.502264"
+         y="65.642387"
+         id="text82"><tspan
+           sodipodi:role="line"
+           x="-18.502264"
+           y="65.642387"
+           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#800000;stroke-width:0.0690111"
+           id="tspan82">HQD</tspan></text>
+      <ellipse
+         style="fill:#800000;fill-opacity:0;stroke:#800000;stroke-width:1;stroke-dasharray:none;stroke-dashoffset:0"
+         id="ellipse82"
+         cx="-18.407015"
+         cy="63.2188"
+         rx="13.317666"
+         ry="4.4124799" />
+      <path
+         style="fill:#800000;fill-opacity:0;stroke:#800000;stroke-width:1;stroke-dasharray:none;stroke-dashoffset:0;marker-end:url(#Triangle)"
+         d="M -4.6361224,63.2188 H 10.606988"
+         id="path82" />
+    </g>
+    <g
+       id="g84"
+       transform="translate(0,55.033362)">
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
+         x="-18.502264"
+         y="65.642387"
+         id="text83"><tspan
+           sodipodi:role="line"
+           x="-18.502264"
+           y="65.642387"
+           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#800000;stroke-width:0.0690111"
+           id="tspan83">HQD</tspan></text>
+      <ellipse
+         style="fill:#800000;fill-opacity:0;stroke:#800000;stroke-width:1;stroke-dasharray:none;stroke-dashoffset:0"
+         id="ellipse83"
+         cx="-18.407015"
+         cy="63.2188"
+         rx="13.317666"
+         ry="4.4124799" />
+      <path
+         style="fill:#800000;fill-opacity:0;stroke:#800000;stroke-width:1;stroke-dasharray:none;stroke-dashoffset:0;marker-end:url(#Triangle)"
+         d="M -4.6361224,63.2188 H 10.606988"
+         id="path83" />
+    </g>
+    <g
+       id="g85"
+       transform="translate(0,85.195881)">
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
+         x="-18.502264"
+         y="65.642387"
+         id="text84"><tspan
+           sodipodi:role="line"
+           x="-18.502264"
+           y="65.642387"
+           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#800000;stroke-width:0.0690111"
+           id="tspan84">HQD</tspan></text>
+      <ellipse
+         style="fill:#800000;fill-opacity:0;stroke:#800000;stroke-width:1;stroke-dasharray:none;stroke-dashoffset:0"
+         id="ellipse84"
+         cx="-18.407015"
+         cy="63.2188"
+         rx="13.317666"
+         ry="4.4124799" />
+      <path
+         style="fill:#800000;fill-opacity:0;stroke:#800000;stroke-width:1;stroke-dasharray:none;stroke-dashoffset:0;marker-end:url(#Triangle)"
+         d="M -4.6361224,63.2188 H 10.606988"
+         id="path84" />
+    </g>
+    <g
+       id="g86"
+       transform="translate(0,99.48339)">
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
+         x="-18.502264"
+         y="65.642387"
+         id="text85"><tspan
+           sodipodi:role="line"
+           x="-18.502264"
+           y="65.642387"
+           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#800000;stroke-width:0.0690111"
+           id="tspan85">HQD</tspan></text>
+      <ellipse
+         style="fill:#800000;fill-opacity:0;stroke:#800000;stroke-width:1;stroke-dasharray:none;stroke-dashoffset:0"
+         id="ellipse85"
+         cx="-18.407015"
+         cy="63.2188"
+         rx="13.317666"
+         ry="4.4124799" />
+      <path
+         style="fill:#800000;fill-opacity:0;stroke:#800000;stroke-width:1;stroke-dasharray:none;stroke-dashoffset:0;marker-end:url(#Triangle)"
+         d="M -4.6361224,63.2188 H 10.606988"
+         id="path85" />
+    </g>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
+       x="-35.2131"
+       y="54.673237"
+       id="text86"><tspan
+         sodipodi:role="line"
+         x="-35.2131"
+         y="54.673237"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:5.64444px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;stroke-width:0.0690111"
+         id="tspan86">Registers</tspan></text>
+    <path
+       style="fill:#800000;fill-opacity:0;stroke:#1a1a1a;stroke-width:1;stroke-dasharray:1, 1;stroke-dashoffset:0;marker-end:url(#ArrowWide)"
+       d="m -45.247972,57.442462 v 5.888987 h 11.344412"
+       id="path86"
+       sodipodi:nodetypes="ccc" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
+       x="-74.441521"
+       y="82.441582"
+       id="text87"><tspan
+         sodipodi:role="line"
+         x="-74.441521"
+         y="82.441582"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;stroke-width:0.0690111"
+         id="tspan87">MQD</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
+       x="-74.441521"
+       y="99.240776"
+       id="text88"><tspan
+         sodipodi:role="line"
+         x="-74.441521"
+         y="99.240776"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;stroke-width:0.0690111"
+         id="tspan88">MQD</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
+       x="-74.441521"
+       y="116.03998"
+       id="text89"><tspan
+         sodipodi:role="line"
+         x="-74.441521"
+         y="116.03998"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;stroke-width:0.0690111"
+         id="tspan89">MQD</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
+       x="-74.441521"
+       y="132.83917"
+       id="text90"><tspan
+         sodipodi:role="line"
+         x="-74.441521"
+         y="132.83917"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;stroke-width:0.0690111"
+         id="tspan90">MQD</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
+       x="-74.441521"
+       y="168.3002"
+       id="text91"><tspan
+         sodipodi:role="line"
+         x="-74.441521"
+         y="168.3002"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;stroke-width:0.0690111"
+         id="tspan91">MQD</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
+       x="-74.441521"
+       y="148.1461"
+       id="text92"><tspan
+         sodipodi:role="line"
+         x="-74.441521"
+         y="148.1461"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:10.5833px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;writing-mode:tb-rl;text-anchor:middle;stroke-width:0.0690111"
+         id="tspan92">...</tspan></text>
+    <g
+       id="g97"
+       transform="translate(-5.8208336)">
+      <rect
+         style="fill:#aaffcc;fill-opacity:1;stroke:#1a1a1a;stroke-width:0.5;stroke-dasharray:none;stroke-dashoffset:0"
+         id="rect96"
+         width="58.726093"
+         height="27.598055"
+         x="-142.96434"
+         y="46.852512" />
+      <text
+         xml:space="preserve"
+         style="font-style:normal;font-weight:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
+         x="-139.74622"
+         y="52.62756"
+         id="text93"><tspan
+           sodipodi:role="line"
+           x="-139.74622"
+           y="52.62756"
+           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:start;text-anchor:start;stroke-width:0.0690111"
+           id="tspan93">HQD Registers</tspan><tspan
+           sodipodi:role="line"
+           x="-139.74622"
+           y="57.91922"
+           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:start;text-anchor:start;stroke-width:0.0690111"
+           id="tspan95">Queue Address in the GPU</tspan><tspan
+           sodipodi:role="line"
+           x="-139.74622"
+           y="63.210884"
+           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:start;text-anchor:start;stroke-width:0.0690111"
+           id="tspan96">Doorbell</tspan><tspan
+           sodipodi:role="line"
+           x="-139.74622"
+           y="68.502548"
+           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:start;text-anchor:start;stroke-width:0.0690111"
+           id="tspan97">...</tspan><tspan
+           sodipodi:role="line"
+           x="-139.74622"
+           y="73.794212"
+           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:start;text-anchor:start;stroke-width:0.0690111"
+           id="tspan94" /></text>
+    </g>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
+       x="-61.293022"
+       y="-19.380915"
+       id="text93-1"><tspan
+         sodipodi:role="line"
+         x="-61.293022"
+         y="-19.380915"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;stroke-width:0.0690111"
+         id="tspan104">SWITCH QUEUE:</tspan><tspan
+         sodipodi:role="line"
+         x="-61.293022"
+         y="-14.089252"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:start;text-anchor:start;stroke-width:0.0690111"
+         id="tspan101">WAIT FOR HQD_ACTIVE = 0</tspan><tspan
+         sodipodi:role="line"
+         x="-61.293022"
+         y="-8.7975903"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:start;text-anchor:start;stroke-width:0.0690111"
+         id="tspan105">SAVE QUEUE STATE TO THE MQD</tspan><tspan
+         sodipodi:role="line"
+         x="-61.293022"
+         y="-3.505928"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:start;text-anchor:start;stroke-width:0.0690111"
+         id="tspan102">COPY NEW MQD STATE</tspan><tspan
+         sodipodi:role="line"
+         x="-61.293022"
+         y="1.7857342"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:start;text-anchor:start;stroke-width:0.0690111"
+         id="tspan103">SET HQD_ACTIVE = 1</tspan></text>
+    <circle
+       style="fill:#ffeeaa;fill-opacity:1;stroke:#1a1a1a;stroke-width:1.88976;stroke-dasharray:none;stroke-dashoffset:0"
+       id="path97"
+       cx="0"
+       cy="0"
+       r="0"
+       transform="matrix(0.26458333,0,0,0.26458333,-149.03517,37.347779)" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
+       x="-36.659206"
+       y="-44.828983"
+       id="text106"><tspan
+         sodipodi:role="line"
+         x="-36.659206"
+         y="-44.828983"
+         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:5.64444px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;stroke-width:0.0690111"
+         id="tspan106">Firmware</tspan></text>
+    <path
+       style="fill:none;fill-opacity:1;stroke:#1a1a1a;stroke-width:1;stroke-dasharray:none;stroke-dashoffset:0;marker-start:url(#marker109);marker-end:url(#ArrowTriangleStylized)"
+       d="M -84.242601,-9.1838245 H -98.041629 V 33.17598"
+       id="path106" />
+    <path
+       style="fill:none;fill-opacity:1;stroke:#1a1a1a;stroke-width:1;stroke-dasharray:none;stroke-dashoffset:0;marker-end:url(#Dot)"
+       d="M 9.9745536,-9.3442784 H 29.549918 V 37.170287"
+       id="path107"
+       sodipodi:nodetypes="ccc" />
+  </g>
+</svg>
-- 
2.49.0


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH 5/6] Documentation/gpu: Create a GC entry in the amdgpu documentation
  2025-03-25 17:18 [PATCH 0/6] Documentation/gpu/amdgpu: Add documentation about Pipes, Queues, MES, and others Rodrigo Siqueira
                   ` (3 preceding siblings ...)
  2025-03-25 17:18 ` [PATCH 4/6] Documentation/gpu: Add explanation about AMD Pipes and Queues Rodrigo Siqueira
@ 2025-03-25 17:18 ` Rodrigo Siqueira
  2025-03-26  1:55   ` Bagas Sanjaya
  2025-03-26  9:14   ` Christian König
  2025-03-25 17:18 ` [PATCH 6/6] Documentation/gpu: Add an intro about MES Rodrigo Siqueira
  2025-03-26 17:57 ` [PATCH 0/6] Documentation/gpu/amdgpu: Add documentation about Pipes, Queues, MES, and others Alex Deucher
  6 siblings, 2 replies; 14+ messages in thread
From: Rodrigo Siqueira @ 2025-03-25 17:18 UTC (permalink / raw)
  To: Alex Deucher, 'Christian König', Mario Limonciello,
	Melissa Wen, 'André Almeida',
	'Timur Kristóf'
  Cc: amd-gfx, linux-doc, kernel-dev, Rodrigo Siqueira

GC is a large block that plays a vital role for amdgpu; for this reason,
this commit creates one specific page for GC and adds extra information
about the CP component.

Signed-off-by: Rodrigo Siqueira <siqueira@igalia.com>
---
 Documentation/gpu/amdgpu/driver-core.rst | 30 ++-------------
 Documentation/gpu/amdgpu/gc/index.rst    | 48 ++++++++++++++++++++++++
 Documentation/gpu/amdgpu/index.rst       |  1 +
 3 files changed, 53 insertions(+), 26 deletions(-)
 create mode 100644 Documentation/gpu/amdgpu/gc/index.rst

diff --git a/Documentation/gpu/amdgpu/driver-core.rst b/Documentation/gpu/amdgpu/driver-core.rst
index 746fd081876f..2af1e919d76a 100644
--- a/Documentation/gpu/amdgpu/driver-core.rst
+++ b/Documentation/gpu/amdgpu/driver-core.rst
@@ -67,38 +67,16 @@ GC (Graphics and Compute)
     This is the graphics and compute engine, i.e., the block that
     encompasses the 3D pipeline and and shader blocks.  This is by far the
     largest block on the GPU.  The 3D pipeline has tons of sub-blocks.  In
-    addition to that, it also contains the CP microcontrollers (ME, PFP,
-    CE, MEC) and the RLC microcontroller.  It's exposed to userspace for
-    user mode drivers (OpenGL, Vulkan, OpenCL, etc.)
+    addition to that, it also contains the CP microcontrollers (ME, PFP, CE,
+    MEC) and the RLC microcontroller.  It's exposed to userspace for user mode
+    drivers (OpenGL, Vulkan, OpenCL, etc.). More details in :ref:`Graphics (GFX)
+    and Compute <amdgpu-gc>`.
 
 VCN (Video Core Next)
     This is the multi-media engine.  It handles video and image encode and
     decode.  It's exposed to userspace for user mode drivers (VA-API,
     OpenMAX, etc.)
 
-Graphics and Compute Microcontrollers
--------------------------------------
-
-CP (Command Processor)
-    The name for the hardware block that encompasses the front end of the
-    GFX/Compute pipeline.  Consists mainly of a bunch of microcontrollers
-    (PFP, ME, CE, MEC).  The firmware that runs on these microcontrollers
-    provides the driver interface to interact with the GFX/Compute engine.
-
-    MEC (MicroEngine Compute)
-        This is the microcontroller that controls the compute queues on the
-        GFX/compute engine.
-
-    MES (MicroEngine Scheduler)
-        This is a new engine for managing queues.  This is currently unused.
-
-RLC (RunList Controller)
-    This is another microcontroller in the GFX/Compute engine.  It handles
-    power management related functionality within the GFX/Compute engine.
-    The name is a vestige of old hardware where it was originally added
-    and doesn't really have much relation to what the engine does now.
-
-
 GFX, Compute, and SDMA Overall Behavior
 =======================================
 
diff --git a/Documentation/gpu/amdgpu/gc/index.rst b/Documentation/gpu/amdgpu/gc/index.rst
new file mode 100644
index 000000000000..f8128cca7028
--- /dev/null
+++ b/Documentation/gpu/amdgpu/gc/index.rst
@@ -0,0 +1,48 @@
+.. _amdgpu-gc:
+
+========================================
+ drm/amdgpu - Graphics and Compute (GC)
+========================================
+
+The relationship between the CPU and GPU can be described as the
+producer-consumer problem, where the CPU fills out a buffer with operations
+(producer) to be executed by the GPU (consumer). The requested operations in
+the buffer are called Command Packets, which can be summarized as a compressed
+way of transmitting command information to the graphics controller.
+
+The component that acts as the front end between the CPU and the GPU is called
+the Command Processor (CP). This component is responsible for providing greater
+flexibility to the GC since CP makes it possible to program various aspects of
+the GPU pipeline. CP also coordinates the communication between the CPU and GPU
+via a mechanism named **Ring Buffers**, where the CPU appends information to
+the buffer while the GPU removes operations. It is relevant to highlight that a
+CPU can add a pointer to the Ring Buffer that points to another region of
+memory outside the Ring Buffer, and CP can handle it; this mechanism is called
+**Indirect Buffer (IB)**. CP receives and parses the Command Streams (CS), and
+according to the parser result, the CP writes the request for operations in the
+correct block.
+
+Graphics (GFX) and Compute Microcontrollers
+-------------------------------------------
+
+GC is a large block, and as a result, it has multiple firmware associated with
+it. Some of them are:
+
+CP (Command Processor)
+    The name for the hardware block that encompasses the front end of the
+    GFX/Compute pipeline. Consists mainly of a bunch of microcontrollers
+    (PFP, ME, CE, MEC). The firmware that runs on these microcontrollers
+    provides the driver interface to interact with the GFX/Compute engine.
+
+    MEC (MicroEngine Compute)
+        This is the microcontroller that controls the compute queues on the
+        GFX/compute engine.
+
+    MES (MicroEngine Scheduler)
+        This is the engine for managing queues.
+
+RLC (RunList Controller)
+    This is another microcontroller in the GFX/Compute engine. It handles
+    power management related functionality within the GFX/Compute engine.
+    The name is a vestige of old hardware where it was originally added
+    and doesn't really have much relation to what the engine does now.
diff --git a/Documentation/gpu/amdgpu/index.rst b/Documentation/gpu/amdgpu/index.rst
index 7e9d60754287..1624f4b588c5 100644
--- a/Documentation/gpu/amdgpu/index.rst
+++ b/Documentation/gpu/amdgpu/index.rst
@@ -10,6 +10,7 @@ Next (GCN), Radeon DNA (RDNA), and Compute DNA (CDNA) architectures.
    driver-core
    amd-hardware-list-info
    module-parameters
+   gc/index
    display/index
    flashing
    xgmi
-- 
2.49.0


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH 6/6] Documentation/gpu: Add an intro about MES
  2025-03-25 17:18 [PATCH 0/6] Documentation/gpu/amdgpu: Add documentation about Pipes, Queues, MES, and others Rodrigo Siqueira
                   ` (4 preceding siblings ...)
  2025-03-25 17:18 ` [PATCH 5/6] Documentation/gpu: Create a GC entry in the amdgpu documentation Rodrigo Siqueira
@ 2025-03-25 17:18 ` Rodrigo Siqueira
  2025-03-26  1:58   ` Bagas Sanjaya
  2025-03-26 17:57 ` [PATCH 0/6] Documentation/gpu/amdgpu: Add documentation about Pipes, Queues, MES, and others Alex Deucher
  6 siblings, 1 reply; 14+ messages in thread
From: Rodrigo Siqueira @ 2025-03-25 17:18 UTC (permalink / raw)
  To: Alex Deucher, 'Christian König', Mario Limonciello,
	Melissa Wen, 'André Almeida',
	'Timur Kristóf'
  Cc: amd-gfx, linux-doc, kernel-dev, Rodrigo Siqueira

MES is an important firmware that lacks some essential documentation.
This commit introduces an overview of it and how it works.

Signed-off-by: Rodrigo Siqueira <siqueira@igalia.com>
---
 Documentation/gpu/amdgpu/driver-core.rst |  2 ++
 Documentation/gpu/amdgpu/gc/index.rst    |  7 ++++-
 Documentation/gpu/amdgpu/gc/mes.rst      | 38 ++++++++++++++++++++++++
 3 files changed, 46 insertions(+), 1 deletion(-)
 create mode 100644 Documentation/gpu/amdgpu/gc/mes.rst

diff --git a/Documentation/gpu/amdgpu/driver-core.rst b/Documentation/gpu/amdgpu/driver-core.rst
index 2af1e919d76a..f39077c44799 100644
--- a/Documentation/gpu/amdgpu/driver-core.rst
+++ b/Documentation/gpu/amdgpu/driver-core.rst
@@ -77,6 +77,8 @@ VCN (Video Core Next)
     decode.  It's exposed to userspace for user mode drivers (VA-API,
     OpenMAX, etc.)
 
+.. _pipes-and-queues-description:
+
 GFX, Compute, and SDMA Overall Behavior
 =======================================
 
diff --git a/Documentation/gpu/amdgpu/gc/index.rst b/Documentation/gpu/amdgpu/gc/index.rst
index f8128cca7028..b115d5883959 100644
--- a/Documentation/gpu/amdgpu/gc/index.rst
+++ b/Documentation/gpu/amdgpu/gc/index.rst
@@ -39,10 +39,15 @@ CP (Command Processor)
         GFX/compute engine.
 
     MES (MicroEngine Scheduler)
-        This is the engine for managing queues.
+        This is the engine for managing queues. For more details check
+        :ref:`MicroEngine Scheduler (MES) <amdgpu-mes>`.
 
 RLC (RunList Controller)
     This is another microcontroller in the GFX/Compute engine. It handles
     power management related functionality within the GFX/Compute engine.
     The name is a vestige of old hardware where it was originally added
     and doesn't really have much relation to what the engine does now.
+
+.. toctree::
+
+   mes.rst
diff --git a/Documentation/gpu/amdgpu/gc/mes.rst b/Documentation/gpu/amdgpu/gc/mes.rst
new file mode 100644
index 000000000000..b99eb211b179
--- /dev/null
+++ b/Documentation/gpu/amdgpu/gc/mes.rst
@@ -0,0 +1,38 @@
+.. _amdgpu-mes:
+
+=============================
+ MicroEngine Scheduler (MES)
+=============================
+
+.. note::
+   Queue and ring buffer are used as a synonymous.
+
+.. note::
+   This section assumes that you are familiar with the concept of Pipes, Queues, and GC.
+   If not, check :ref:`GFX, Compute, and SDMA Overall Behavior<pipes-and-queues-description>`
+   and :ref:`drm/amdgpu - Graphics and Compute (GC) <amdgpu-gc>`.
+
+Every GFX has a pipe component with one or more hardware queues. Pipes can
+switch between queues depending on certain conditions, and one of the
+components that can request a queue switch to a pipe is the MicroEngine
+Scheduler (MES). Whenever the driver is initialized, it creates one MQD per
+hardware queue, and then the MQDs are handed to the MES firmware for mapping
+to:
+
+1. Kernel Queues (legacy): This queue is statically mapped to HQDs and never
+   preempted. Even though this is a legacy feature, it is the current default, and
+   most existing hardware supports it. When an application submits work to the
+   kernel driver, it submits all of the application command buffers to the kernel
+   queues. The CS IOCTL takes the command buffer from the applications and
+   schedules them on the kernel queue.
+
+2. User Queues: These queues are dynamically mapped to the HQDs. Regarding the
+   utilization of User Queues, the userspace application will create its user
+   queues and submit work directly to its user queues with no need to IOCTL for
+   each submission and no need to share a single kernel queue.
+
+In terms of User Queues, MES can dynamically map them to the HQD. If there are
+more MQDs than HQDs, the MES firmware will preempt other user queues to make
+sure each queues get a time slice; in other words, MES is a microcontroller
+that handles the mapping and unmapping of MQDs into HQDs, as well as the
+priorities and oversubscription of MQDs.
-- 
2.49.0


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* Re: [PATCH 4/6] Documentation/gpu: Add explanation about AMD Pipes and Queues
  2025-03-25 17:18 ` [PATCH 4/6] Documentation/gpu: Add explanation about AMD Pipes and Queues Rodrigo Siqueira
@ 2025-03-26  1:53   ` Bagas Sanjaya
  2025-03-26  9:04   ` Christian König
  1 sibling, 0 replies; 14+ messages in thread
From: Bagas Sanjaya @ 2025-03-26  1:53 UTC (permalink / raw)
  To: Rodrigo Siqueira, Alex Deucher, 'Christian König',
	Mario Limonciello, Melissa Wen, 'André Almeida',
	'Timur Kristóf'
  Cc: amd-gfx, linux-doc, kernel-dev

[-- Attachment #1: Type: text/plain, Size: 1945 bytes --]

On Tue, Mar 25, 2025 at 11:18:45AM -0600, Rodrigo Siqueira wrote:
> +.. kernel-figure:: pipe_and_queue_abstraction.svg
> +
> +In the central part of this figure, you can see two elements, one called
Did you mean hardware block?
> +**Pipe** and another named **Queues**; it is important to highlight that Queues
> +must be associated with a Pipe and vice-versa. Every specific hardware may have
> +a different number of Pipes and, in turn, a different number of Queues; for
> +example, GFX 11 has two Pipes and two Queues per Pipe.
> +
> +Pipe is the hardware that processes the instructions available in the Queues;
> +in other words, it is a thread executing the operations inserted in the Queue.
> +One crucial characteristic of Pipes is that they can only execute one Queue at
> +a time; no matter if the hardware has multiple Queues in the Pipe, it only runs
> +one Queue per Pipe. When a queue is running in the Pipe, it is said that the
> +Queue is **Active**.
> +
> +Pipes have the mechanics of swapping between queues at the hardware level.
> +Nonetheless, they only make use of Queues that are considered mapped. Pipes can
> +switch between queues based on any of the following inputs:
> +
> +1. Command Stream;
> +2. Packet by Packet;
> +3. Other hardware requests the change (e.g., MES).
> +
> +Queues within Pipes are defined by the Hardware Queue Descriptors (HQD).
> +Associated with the HQD concept, we have the Memory Queue Descriptor (MQD),
Related to HQD, we have MQD?
> +which is responsible for storing information about the state of each of the
> +available Queues in the memory. The state of a Queue contains information such
> +as the GPU virtual address of the queue itself, save areas, doorbell, etc. The
> +MQD also stores the HQD registers, which are vital for activating or
> +deactivating a given Queue.
> +

Thanks.

-- 
An old man doll... just what I always wanted! - Clara

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 5/6] Documentation/gpu: Create a GC entry in the amdgpu documentation
  2025-03-25 17:18 ` [PATCH 5/6] Documentation/gpu: Create a GC entry in the amdgpu documentation Rodrigo Siqueira
@ 2025-03-26  1:55   ` Bagas Sanjaya
  2025-03-26  9:14   ` Christian König
  1 sibling, 0 replies; 14+ messages in thread
From: Bagas Sanjaya @ 2025-03-26  1:55 UTC (permalink / raw)
  To: Rodrigo Siqueira, Alex Deucher, 'Christian König',
	Mario Limonciello, Melissa Wen, 'André Almeida',
	'Timur Kristóf'
  Cc: amd-gfx, linux-doc, kernel-dev

[-- Attachment #1: Type: text/plain, Size: 1025 bytes --]

On Tue, Mar 25, 2025 at 11:18:46AM -0600, Rodrigo Siqueira wrote:
> +The component that acts as the front end between the CPU and the GPU is called
> +the Command Processor (CP). This component is responsible for providing greater
> +flexibility to the GC since CP makes it possible to program various aspects of
> +the GPU pipeline. CP also coordinates the communication between the CPU and GPU
> +via a mechanism named **Ring Buffers**, where the CPU appends information to
> +the buffer while the GPU removes operations. It is relevant to highlight that a
> +CPU can add a pointer to the Ring Buffer that points to another region of
> +memory outside the Ring Buffer, and CP can handle it; this mechanism is called
> +**Indirect Buffer (IB)**. CP receives and parses the Command Streams (CS), and
> +according to the parser result, the CP writes the request for operations in the
"depending on the parser result, ..."
> +correct block.

Thanks.

-- 
An old man doll... just what I always wanted! - Clara

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 6/6] Documentation/gpu: Add an intro about MES
  2025-03-25 17:18 ` [PATCH 6/6] Documentation/gpu: Add an intro about MES Rodrigo Siqueira
@ 2025-03-26  1:58   ` Bagas Sanjaya
  0 siblings, 0 replies; 14+ messages in thread
From: Bagas Sanjaya @ 2025-03-26  1:58 UTC (permalink / raw)
  To: Rodrigo Siqueira, Alex Deucher, 'Christian König',
	Mario Limonciello, Melissa Wen, 'André Almeida',
	'Timur Kristóf'
  Cc: amd-gfx, linux-doc, kernel-dev

[-- Attachment #1: Type: text/plain, Size: 2478 bytes --]

On Tue, Mar 25, 2025 at 11:18:47AM -0600, Rodrigo Siqueira wrote:
> diff --git a/Documentation/gpu/amdgpu/gc/mes.rst b/Documentation/gpu/amdgpu/gc/mes.rst
> new file mode 100644
> index 000000000000..b99eb211b179
> --- /dev/null
> +++ b/Documentation/gpu/amdgpu/gc/mes.rst
> @@ -0,0 +1,38 @@
> +.. _amdgpu-mes:
> +
> +=============================
> + MicroEngine Scheduler (MES)
> +=============================
> +
> +.. note::
> +   Queue and ring buffer are used as a synonymous.
> +
> +.. note::
> +   This section assumes that you are familiar with the concept of Pipes, Queues, and GC.
> +   If not, check :ref:`GFX, Compute, and SDMA Overall Behavior<pipes-and-queues-description>`
> +   and :ref:`drm/amdgpu - Graphics and Compute (GC) <amdgpu-gc>`.
> +
> +Every GFX has a pipe component with one or more hardware queues. Pipes can
> +switch between queues depending on certain conditions, and one of the
> +components that can request a queue switch to a pipe is the MicroEngine
> +Scheduler (MES). Whenever the driver is initialized, it creates one MQD per
> +hardware queue, and then the MQDs are handed to the MES firmware for mapping
> +to:
> +
> +1. Kernel Queues (legacy): This queue is statically mapped to HQDs and never
> +   preempted. Even though this is a legacy feature, it is the current default, and
> +   most existing hardware supports it. When an application submits work to the
> +   kernel driver, it submits all of the application command buffers to the kernel
> +   queues. The CS IOCTL takes the command buffer from the applications and
> +   schedules them on the kernel queue.
> +
> +2. User Queues: These queues are dynamically mapped to the HQDs. Regarding the
> +   utilization of User Queues, the userspace application will create its user
> +   queues and submit work directly to its user queues with no need to IOCTL for
> +   each submission and no need to share a single kernel queue.
> +
> +In terms of User Queues, MES can dynamically map them to the HQD. If there are
> +more MQDs than HQDs, the MES firmware will preempt other user queues to make
> +sure each queues get a time slice; in other words, MES is a microcontroller
> +that handles the mapping and unmapping of MQDs into HQDs, as well as the
> +priorities and oversubscription of MQDs.

The doc LGTM, thanks!

Reviewed-by: Bagas Sanjaya <bagasdotme@gmail.com>

-- 
An old man doll... just what I always wanted! - Clara

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 1/6] Documentation/gpu: Add new acronyms
  2025-03-25 17:18 ` [PATCH 1/6] Documentation/gpu: Add new acronyms Rodrigo Siqueira
@ 2025-03-26  8:08   ` Christian König
  0 siblings, 0 replies; 14+ messages in thread
From: Christian König @ 2025-03-26  8:08 UTC (permalink / raw)
  To: Rodrigo Siqueira, Alex Deucher, 'Christian König',
	Mario Limonciello, Melissa Wen, 'André Almeida',
	'Timur Kristóf'
  Cc: amd-gfx, linux-doc, kernel-dev

Am 25.03.25 um 18:18 schrieb Rodrigo Siqueira:
> This commit introduces some new acronyms extracted from the source code
> and found on some web pages around the internet (most of them came from
> ArchLinux, Gentoo, and Wikipedia links).
>
> Signed-off-by: Rodrigo Siqueira <siqueira@igalia.com>

Reviewed-by: Christian König <christian.koenig@amd.com>

> ---
>  Documentation/gpu/amdgpu/amdgpu-glossary.rst | 36 ++++++++++++++++++++
>  1 file changed, 36 insertions(+)
>
> diff --git a/Documentation/gpu/amdgpu/amdgpu-glossary.rst b/Documentation/gpu/amdgpu/amdgpu-glossary.rst
> index 1e9283e076ba..080c3f2250d1 100644
> --- a/Documentation/gpu/amdgpu/amdgpu-glossary.rst
> +++ b/Documentation/gpu/amdgpu/amdgpu-glossary.rst
> @@ -12,15 +12,27 @@ we have a dedicated glossary for Display Core at
>        The number of CUs that are active on the system.  The number of active
>        CUs may be less than SE * SH * CU depending on the board configuration.
>  
> +    BACO
> +      Bus Alive, Chip Off
> +
> +    BOCO
> +      Bus Off, Chip Off
> +
>      CE
>        Constant Engine
>  
> +    CIK
> +      Sea Islands
> +
>      CP
>        Command Processor
>  
>      CPLIB
>        Content Protection Library
>  
> +    CS
> +      Command Submission
> +
>      CU
>        Compute Unit
>  
> @@ -33,6 +45,9 @@ we have a dedicated glossary for Display Core at
>      EOP
>        End Of Pipe/Pipeline
>  
> +    FLR
> +      Function Level Reset
> +
>      GART
>        Graphics Address Remapping Table.  This is the name we use for the GPUVM
>        page table used by the GPU kernel driver.  It remaps system resources
> @@ -80,6 +95,9 @@ we have a dedicated glossary for Display Core at
>      KCQ
>        Kernel Compute Queue
>  
> +    KFD
> +      Kernel Fusion Driver
> +
>      KGQ
>        Kernel Graphics Queue
>  
> @@ -89,6 +107,9 @@ we have a dedicated glossary for Display Core at
>      MC
>        Memory Controller
>  
> +    MCBP
> +      Mid Command Buffer Preemption
> +
>      ME
>        MicroEngine (Graphics)
>  
> @@ -125,9 +146,15 @@ we have a dedicated glossary for Display Core at
>      SE
>        Shader Engine
>  
> +    SGPR
> +      Scalar General-Purpose Registers
> +
>      SH
>        SHader array
>  
> +    SI
> +      Southern Islands
> +
>      SMU/SMC
>        System Management Unit / System Management Controller
>  
> @@ -146,6 +173,9 @@ we have a dedicated glossary for Display Core at
>      TA
>        Trusted Application
>  
> +    TC
> +      Texture Cache
> +
>      TOC
>        Table of Contents
>  
> @@ -158,5 +188,11 @@ we have a dedicated glossary for Display Core at
>      VCN
>        Video Codec Next
>  
> +    VGPR
> +      Vector General-Purpose Registers
> +
> +    VMID
> +      Virtual Memory ID
> +
>      VPE
>        Video Processing Engine


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 4/6] Documentation/gpu: Add explanation about AMD Pipes and Queues
  2025-03-25 17:18 ` [PATCH 4/6] Documentation/gpu: Add explanation about AMD Pipes and Queues Rodrigo Siqueira
  2025-03-26  1:53   ` Bagas Sanjaya
@ 2025-03-26  9:04   ` Christian König
  1 sibling, 0 replies; 14+ messages in thread
From: Christian König @ 2025-03-26  9:04 UTC (permalink / raw)
  To: Rodrigo Siqueira, Alex Deucher, Mario Limonciello, Melissa Wen,
	'André Almeida', 'Timur Kristóf'
  Cc: amd-gfx, linux-doc, kernel-dev

Am 25.03.25 um 18:18 schrieb Rodrigo Siqueira:
> Pipes and Queues are two common vocabulary that pervades discussions
> around amdgpu core features. The definition and explanation of those
> components are spread around multiple places in the code, mailing list,
> and Gitlab, which sometimes leads to the wrong interpretation of these
> concepts. This commit attempts to centralize the definition and
> explanation of Pipe and Queue from amdgpu perspective in a kernel doc.
> Most of the information in this doc was derived from:
>
> - https://lore.kernel.org/amd-gfx/CADnq5_Pcz2x4aJzKbVrN3jsZhD6sTydtDw=6PaN4O3m4t+Grtg@mail.gmail.com/T/#m9a670b55ab20e0f7c46c80f802a0a4be255a719d
> - https://gitlab.freedesktop.org/mesa/mesa/-/issues/11759
>
> Signed-off-by: Rodrigo Siqueira <siqueira@igalia.com>

Oh that's really nice to have, especially since I'm constantly mixing up the terms queue and pipe as well :)

Reviewed-by: Christian König <christian.koenig@amd.com>

> ---
>  Documentation/gpu/amdgpu/driver-core.rst      |   49 +
>  .../gpu/amdgpu/pipe_and_queue_abstraction.svg | 1279 +++++++++++++++++
>  2 files changed, 1328 insertions(+)
>  create mode 100644 Documentation/gpu/amdgpu/pipe_and_queue_abstraction.svg
>
> diff --git a/Documentation/gpu/amdgpu/driver-core.rst b/Documentation/gpu/amdgpu/driver-core.rst
> index 32723a925377..746fd081876f 100644
> --- a/Documentation/gpu/amdgpu/driver-core.rst
> +++ b/Documentation/gpu/amdgpu/driver-core.rst
> @@ -98,6 +98,55 @@ RLC (RunList Controller)
>      The name is a vestige of old hardware where it was originally added
>      and doesn't really have much relation to what the engine does now.
>  
> +
> +GFX, Compute, and SDMA Overall Behavior
> +=======================================
> +
> +.. note:: For simplicity, whenever the term block is used in this section, it
> +   means GFX, Compute, and SDMA.
> +
> +GFX, Compute and SDMA share a similar form of operation that can be abstracted
> +to facilitate understanding of the behavior of these blocks. See the figure
> +below illustrating the common components of these blocks:
> +
> +.. kernel-figure:: pipe_and_queue_abstraction.svg
> +
> +In the central part of this figure, you can see two elements, one called
> +**Pipe** and another named **Queues**; it is important to highlight that Queues
> +must be associated with a Pipe and vice-versa. Every specific hardware may have
> +a different number of Pipes and, in turn, a different number of Queues; for
> +example, GFX 11 has two Pipes and two Queues per Pipe.
> +
> +Pipe is the hardware that processes the instructions available in the Queues;
> +in other words, it is a thread executing the operations inserted in the Queue.
> +One crucial characteristic of Pipes is that they can only execute one Queue at
> +a time; no matter if the hardware has multiple Queues in the Pipe, it only runs
> +one Queue per Pipe. When a queue is running in the Pipe, it is said that the
> +Queue is **Active**.
> +
> +Pipes have the mechanics of swapping between queues at the hardware level.
> +Nonetheless, they only make use of Queues that are considered mapped. Pipes can
> +switch between queues based on any of the following inputs:
> +
> +1. Command Stream;
> +2. Packet by Packet;
> +3. Other hardware requests the change (e.g., MES).
> +
> +Queues within Pipes are defined by the Hardware Queue Descriptors (HQD).
> +Associated with the HQD concept, we have the Memory Queue Descriptor (MQD),
> +which is responsible for storing information about the state of each of the
> +available Queues in the memory. The state of a Queue contains information such
> +as the GPU virtual address of the queue itself, save areas, doorbell, etc. The
> +MQD also stores the HQD registers, which are vital for activating or
> +deactivating a given Queue.
> +
> +The Queue-switching process can also happen with the firmware requesting the
> +preemption or unmapping of a Queue. The firmware waits for the HQD_ACTIVE bit
> +to change to low before saving the state into the MQD. To make a different
> +Queue become active, the firmware copies the MQD state into the HQD registers
> +and loads any additional state. Finally, it sets the HQD_ACTIVE bit to high to
> +indicate that the queue is active.
> +
>  Driver Structure
>  ================
>  
> diff --git a/Documentation/gpu/amdgpu/pipe_and_queue_abstraction.svg b/Documentation/gpu/amdgpu/pipe_and_queue_abstraction.svg
> new file mode 100644
> index 000000000000..0df3c6b3000b
> --- /dev/null
> +++ b/Documentation/gpu/amdgpu/pipe_and_queue_abstraction.svg
> @@ -0,0 +1,1279 @@
> +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
> +<!-- Created with Inkscape (http://www.inkscape.org/) -->
> +
> +<svg
> +   width="395.47891mm"
> +   height="234.73715mm"
> +   viewBox="0 0 395.47891 234.73714"
> +   version="1.1"
> +   id="svg1"
> +   inkscape:version="1.4 (e7c3feb100, 2024-10-09)"
> +   sodipodi:docname="pipe_and_queue_abstraction.svg"
> +   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
> +   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
> +   xmlns="http://www.w3.org/2000/svg"
> +   xmlns:svg="http://www.w3.org/2000/svg">
> +  <sodipodi:namedview
> +     id="namedview1"
> +     pagecolor="#ffffff"
> +     bordercolor="#000000"
> +     borderopacity="0.25"
> +     inkscape:showpageshadow="2"
> +     inkscape:pageopacity="0.0"
> +     inkscape:pagecheckerboard="0"
> +     inkscape:deskcolor="#d1d1d1"
> +     inkscape:document-units="mm"
> +     inkscape:zoom="1.6489689"
> +     inkscape:cx="713.17296"
> +     inkscape:cy="466.65527"
> +     inkscape:window-width="3840"
> +     inkscape:window-height="2083"
> +     inkscape:window-x="0"
> +     inkscape:window-y="0"
> +     inkscape:window-maximized="1"
> +     inkscape:current-layer="layer1" />
> +  <defs
> +     id="defs1">
> +    <marker
> +       style="overflow:visible"
> +       id="Dot"
> +       refX="0"
> +       refY="0"
> +       orient="auto"
> +       inkscape:stockid="Dot"
> +       markerWidth="1"
> +       markerHeight="1"
> +       viewBox="0 0 1 1"
> +       inkscape:isstock="true"
> +       inkscape:collect="always"
> +       preserveAspectRatio="xMidYMid">
> +      <path
> +         transform="scale(0.5)"
> +         style="fill:context-stroke;fill-rule:evenodd;stroke:none"
> +         d="M 5,0 C 5,2.76 2.76,5 0,5 -2.76,5 -5,2.76 -5,0 c 0,-2.76 2.3,-5 5,-5 2.76,0 5,2.24 5,5 z"
> +         sodipodi:nodetypes="sssss"
> +         id="path110" />
> +    </marker>
> +    <marker
> +       style="overflow:visible"
> +       id="marker109"
> +       refX="0"
> +       refY="0"
> +       orient="auto-start-reverse"
> +       inkscape:stockid="Stylized triangle arrow"
> +       markerWidth="1"
> +       markerHeight="1"
> +       viewBox="0 0 1 1"
> +       inkscape:isstock="true"
> +       inkscape:collect="always"
> +       preserveAspectRatio="xMidYMid">
> +      <path
> +         transform="scale(0.5)"
> +         style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
> +         d="m 6,0 c -3,1 -7,3 -9,5 0,0 0,-4 2,-5 -2,-1 -2,-5 -2,-5 2,2 6,4 9,5 z"
> +         id="path109" />
> +    </marker>
> +    <marker
> +       style="overflow:visible"
> +       id="ArrowTriangleStylized"
> +       refX="0"
> +       refY="0"
> +       orient="auto-start-reverse"
> +       inkscape:stockid="Stylized triangle arrow"
> +       markerWidth="1"
> +       markerHeight="1"
> +       viewBox="0 0 1 1"
> +       inkscape:isstock="true"
> +       inkscape:collect="always"
> +       preserveAspectRatio="xMidYMid">
> +      <path
> +         transform="scale(0.5)"
> +         style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
> +         d="m 6,0 c -3,1 -7,3 -9,5 0,0 0,-4 2,-5 -2,-1 -2,-5 -2,-5 2,2 6,4 9,5 z"
> +         id="path108" />
> +    </marker>
> +    <marker
> +       style="overflow:visible"
> +       id="ArrowWide"
> +       refX="0"
> +       refY="0"
> +       orient="auto-start-reverse"
> +       inkscape:stockid="Wide arrow"
> +       markerWidth="1"
> +       markerHeight="1"
> +       viewBox="0 0 1 1"
> +       inkscape:isstock="true"
> +       inkscape:collect="always"
> +       preserveAspectRatio="xMidYMid">
> +      <path
> +         style="fill:none;stroke:context-stroke;stroke-width:1;stroke-linecap:butt"
> +         d="M 3,-3 0,0 3,3"
> +         transform="rotate(180,0.125,0)"
> +         sodipodi:nodetypes="ccc"
> +         id="path1" />
> +    </marker>
> +    <marker
> +       style="overflow:visible"
> +       id="Triangle"
> +       refX="0"
> +       refY="0"
> +       orient="auto-start-reverse"
> +       inkscape:stockid="Triangle arrow"
> +       markerWidth="1"
> +       markerHeight="1"
> +       viewBox="0 0 1 1"
> +       inkscape:isstock="true"
> +       inkscape:collect="always"
> +       preserveAspectRatio="xMidYMid">
> +      <path
> +         transform="scale(0.5)"
> +         style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
> +         d="M 5.77,0 -2.88,5 V -5 Z"
> +         id="path135" />
> +    </marker>
> +    <marker
> +       style="overflow:visible"
> +       id="ArrowWideHeavy"
> +       refX="0"
> +       refY="0"
> +       orient="auto-start-reverse"
> +       inkscape:stockid="Wide, heavy arrow"
> +       markerWidth="1"
> +       markerHeight="1"
> +       viewBox="0 0 1 1"
> +       inkscape:isstock="true"
> +       inkscape:collect="always"
> +       preserveAspectRatio="xMidYMid">
> +      <path
> +         style="fill:context-stroke;fill-rule:evenodd;stroke:none"
> +         d="m 1,0 -3,3 h -2 l 3,-3 -3,-3 h 2 z"
> +         id="path71" />
> +    </marker>
> +  </defs>
> +  <g
> +     inkscape:label="Layer 1"
> +     inkscape:groupmode="layer"
> +     id="layer1"
> +     transform="translate(149.03517,55.110629)">
> +    <circle
> +       style="fill:#ffeeaa;fill-opacity:1;stroke:#1a1a1a;stroke-width:0.733436;stroke-dasharray:none;stroke-dashoffset:0"
> +       id="path98"
> +       cx="-35.757576"
> +       cy="-10.495151"
> +       r="44.24876" />
> +    <rect
> +       style="fill:none;stroke:#000000;stroke-width:0.878057;stroke-dasharray:none"
> +       id="rect1"
> +       width="167.79619"
> +       height="24.831829"
> +       x="14.21942"
> +       y="57.862854" />
> +    <g
> +       id="g11"
> +       transform="translate(24.021362,-46.545299)">
> +      <rect
> +         style="fill:none;stroke:#006680;stroke-width:0.459999;stroke-dasharray:none"
> +         id="rect2"
> +         width="131.09708"
> +         height="5.8163381"
> +         x="23.245802"
> +         y="107.16314" />
> +      <path
> +         style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
> +         d="m 37.884707,107.26337 v 5.53565"
> +         id="path2"
> +         sodipodi:nodetypes="cc" />
> +      <path
> +         style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
> +         d="m 52.466233,107.26337 v 5.53565"
> +         id="path3"
> +         sodipodi:nodetypes="cc" />
> +      <path
> +         style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
> +         d="m 67.047758,107.26337 v 5.53565"
> +         id="path4"
> +         sodipodi:nodetypes="cc" />
> +      <path
> +         style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
> +         d="m 81.629283,107.26337 v 5.53565"
> +         id="path5"
> +         sodipodi:nodetypes="cc" />
> +      <path
> +         style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
> +         d="m 96.210809,107.26337 v 5.53565"
> +         id="path6"
> +         sodipodi:nodetypes="cc" />
> +      <path
> +         style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
> +         d="m 110.79233,107.26337 v 5.53565"
> +         id="path7"
> +         sodipodi:nodetypes="cc" />
> +      <path
> +         style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
> +         d="m 125.37386,107.26337 v 5.53565"
> +         id="path8"
> +         sodipodi:nodetypes="cc" />
> +      <path
> +         style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
> +         d="m 139.95538,107.26337 v 5.53565"
> +         id="path9"
> +         sodipodi:nodetypes="cc" />
> +      <text
> +         xml:space="preserve"
> +         style="font-size:3.175px;text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
> +         x="86.713425"
> +         y="110.1963"
> +         id="text11"><tspan
> +           sodipodi:role="line"
> +           id="tspan11"
> +           style="stroke:#006680;stroke-width:0.5"
> +           x="86.713425"
> +           y="110.1963">. . .</tspan></text>
> +    </g>
> +    <g
> +       id="g18"
> +       transform="translate(24.021362,-32.25779)">
> +      <rect
> +         style="fill:none;stroke:#006680;stroke-width:0.459999;stroke-dasharray:none"
> +         id="rect11"
> +         width="131.09708"
> +         height="5.8163381"
> +         x="23.245802"
> +         y="107.16314" />
> +      <path
> +         style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
> +         d="m 37.884707,107.26337 v 5.53565"
> +         id="path11"
> +         sodipodi:nodetypes="cc" />
> +      <path
> +         style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
> +         d="m 52.466233,107.26337 v 5.53565"
> +         id="path12"
> +         sodipodi:nodetypes="cc" />
> +      <path
> +         style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
> +         d="m 67.047758,107.26337 v 5.53565"
> +         id="path13"
> +         sodipodi:nodetypes="cc" />
> +      <path
> +         style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
> +         d="m 81.629283,107.26337 v 5.53565"
> +         id="path14"
> +         sodipodi:nodetypes="cc" />
> +      <path
> +         style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
> +         d="m 96.210809,107.26337 v 5.53565"
> +         id="path15"
> +         sodipodi:nodetypes="cc" />
> +      <path
> +         style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
> +         d="m 110.79233,107.26337 v 5.53565"
> +         id="path16"
> +         sodipodi:nodetypes="cc" />
> +      <path
> +         style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
> +         d="m 125.37386,107.26337 v 5.53565"
> +         id="path17"
> +         sodipodi:nodetypes="cc" />
> +      <path
> +         style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
> +         d="m 139.95538,107.26337 v 5.53565"
> +         id="path18"
> +         sodipodi:nodetypes="cc" />
> +      <text
> +         xml:space="preserve"
> +         style="font-size:3.175px;text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
> +         x="86.713425"
> +         y="110.1963"
> +         id="text18"><tspan
> +           sodipodi:role="line"
> +           id="tspan18"
> +           style="stroke:#006680;stroke-width:0.5"
> +           x="86.713425"
> +           y="110.1963">. . .</tspan></text>
> +    </g>
> +    <text
> +       xml:space="preserve"
> +       style="font-size:3.175px;text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
> +       x="113.37768"
> +       y="68.463142"
> +       id="text19"><tspan
> +         sodipodi:role="line"
> +         id="tspan19"
> +         style="writing-mode:tb-rl;stroke-width:0.5"
> +         x="113.37768"
> +         y="68.463142">. . .</tspan></text>
> +    <text
> +       xml:space="preserve"
> +       style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
> +       x="25.005701"
> +       y="55.308445"
> +       id="text844-2-9"><tspan
> +         sodipodi:role="line"
> +         x="25.005701"
> +         y="55.308445"
> +         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;stroke-width:0.0690111"
> +         id="tspan2868">Pipe[0]</tspan></text>
> +    <text
> +       xml:space="preserve"
> +       style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
> +       x="-74.441521"
> +       y="63.075123"
> +       id="text844-2-9-4"><tspan
> +         sodipodi:role="line"
> +         x="-74.441521"
> +         y="63.075123"
> +         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;stroke-width:0.0690111"
> +         id="tspan2868-7">MQD</tspan></text>
> +    <text
> +       xml:space="preserve"
> +       style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
> +       x="30.264952"
> +       y="65.490654"
> +       id="text20"><tspan
> +         sodipodi:role="line"
> +         x="30.264952"
> +         y="65.490654"
> +         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;stroke-width:0.0690111"
> +         id="tspan20">Queue[0]</tspan></text>
> +    <text
> +       xml:space="preserve"
> +       style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
> +       x="30.264952"
> +       y="79.249001"
> +       id="text21"><tspan
> +         sodipodi:role="line"
> +         x="30.264952"
> +         y="79.249001"
> +         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;stroke-width:0.0690111"
> +         id="tspan21">Queue[n]</tspan></text>
> +    <text
> +       xml:space="preserve"
> +       style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
> +       x="30.264952"
> +       y="71.84066"
> +       id="text22"><tspan
> +         sodipodi:role="line"
> +         x="30.264952"
> +         y="71.84066"
> +         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;stroke-width:0.0690111"
> +         id="tspan22">...</tspan></text>
> +    <g
> +       id="g71"
> +       transform="translate(-23.283342)">
> +      <rect
> +         style="fill:#ffffff;fill-opacity:0;stroke:#000000;stroke-width:0.5;stroke-dasharray:0.5, 0.5;stroke-dashoffset:0"
> +         id="rect67"
> +         width="18.533583"
> +         height="114.96632"
> +         x="250.9435"
> +         y="54.754276"
> +         ry="6.0427966" />
> +    </g>
> +    <rect
> +       style="fill:#1a1a1a;fill-opacity:0;stroke:#000000;stroke-width:0.499999;stroke-dasharray:none;stroke-dashoffset:0"
> +       id="rect68"
> +       width="188.21231"
> +       height="139.5948"
> +       x="4.0113592"
> +       y="37.597778"
> +       ry="0" />
> +    <g
> +       id="g43"
> +       transform="translate(0,40.745853)">
> +      <rect
> +         style="fill:none;stroke:#000000;stroke-width:0.878057;stroke-dasharray:none"
> +         id="rect22"
> +         width="167.79619"
> +         height="24.831829"
> +         x="14.21942"
> +         y="57.862854" />
> +      <g
> +         id="g30"
> +         transform="translate(24.021362,-46.545299)">
> +        <rect
> +           style="fill:none;stroke:#006680;stroke-width:0.459999;stroke-dasharray:none"
> +           id="rect23"
> +           width="131.09708"
> +           height="5.8163381"
> +           x="23.245802"
> +           y="107.16314" />
> +        <path
> +           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
> +           d="m 37.884707,107.26337 v 5.53565"
> +           id="path23"
> +           sodipodi:nodetypes="cc" />
> +        <path
> +           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
> +           d="m 52.466233,107.26337 v 5.53565"
> +           id="path24"
> +           sodipodi:nodetypes="cc" />
> +        <path
> +           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
> +           d="m 67.047758,107.26337 v 5.53565"
> +           id="path25"
> +           sodipodi:nodetypes="cc" />
> +        <path
> +           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
> +           d="m 81.629283,107.26337 v 5.53565"
> +           id="path26"
> +           sodipodi:nodetypes="cc" />
> +        <path
> +           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
> +           d="m 96.210809,107.26337 v 5.53565"
> +           id="path27"
> +           sodipodi:nodetypes="cc" />
> +        <path
> +           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
> +           d="m 110.79233,107.26337 v 5.53565"
> +           id="path28"
> +           sodipodi:nodetypes="cc" />
> +        <path
> +           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
> +           d="m 125.37386,107.26337 v 5.53565"
> +           id="path29"
> +           sodipodi:nodetypes="cc" />
> +        <path
> +           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
> +           d="m 139.95538,107.26337 v 5.53565"
> +           id="path30"
> +           sodipodi:nodetypes="cc" />
> +        <text
> +           xml:space="preserve"
> +           style="font-size:3.175px;text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
> +           x="86.713425"
> +           y="110.1963"
> +           id="text30"><tspan
> +             sodipodi:role="line"
> +             id="tspan30"
> +             style="stroke:#006680;stroke-width:0.5"
> +             x="86.713425"
> +             y="110.1963">. . .</tspan></text>
> +      </g>
> +      <g
> +         id="g38"
> +         transform="translate(24.021362,-32.25779)">
> +        <rect
> +           style="fill:none;stroke:#006680;stroke-width:0.459999;stroke-dasharray:none"
> +           id="rect30"
> +           width="131.09708"
> +           height="5.8163381"
> +           x="23.245802"
> +           y="107.16314" />
> +        <path
> +           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
> +           d="m 37.884707,107.26337 v 5.53565"
> +           id="path31"
> +           sodipodi:nodetypes="cc" />
> +        <path
> +           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
> +           d="m 52.466233,107.26337 v 5.53565"
> +           id="path32"
> +           sodipodi:nodetypes="cc" />
> +        <path
> +           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
> +           d="m 67.047758,107.26337 v 5.53565"
> +           id="path33"
> +           sodipodi:nodetypes="cc" />
> +        <path
> +           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
> +           d="m 81.629283,107.26337 v 5.53565"
> +           id="path34"
> +           sodipodi:nodetypes="cc" />
> +        <path
> +           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
> +           d="m 96.210809,107.26337 v 5.53565"
> +           id="path35"
> +           sodipodi:nodetypes="cc" />
> +        <path
> +           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
> +           d="m 110.79233,107.26337 v 5.53565"
> +           id="path36"
> +           sodipodi:nodetypes="cc" />
> +        <path
> +           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
> +           d="m 125.37386,107.26337 v 5.53565"
> +           id="path37"
> +           sodipodi:nodetypes="cc" />
> +        <path
> +           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
> +           d="m 139.95538,107.26337 v 5.53565"
> +           id="path38"
> +           sodipodi:nodetypes="cc" />
> +        <text
> +           xml:space="preserve"
> +           style="font-size:3.175px;text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
> +           x="86.713425"
> +           y="110.1963"
> +           id="text38"><tspan
> +             sodipodi:role="line"
> +             id="tspan38"
> +             style="stroke:#006680;stroke-width:0.5"
> +             x="86.713425"
> +             y="110.1963">. . .</tspan></text>
> +      </g>
> +      <text
> +         xml:space="preserve"
> +         style="font-size:3.175px;text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
> +         x="113.37768"
> +         y="68.463142"
> +         id="text39"><tspan
> +           sodipodi:role="line"
> +           id="tspan39"
> +           style="writing-mode:tb-rl;stroke-width:0.5"
> +           x="113.37768"
> +           y="68.463142">. . .</tspan></text>
> +      <text
> +         xml:space="preserve"
> +         style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
> +         x="25.005701"
> +         y="55.308445"
> +         id="text40"><tspan
> +           sodipodi:role="line"
> +           x="25.005701"
> +           y="55.308445"
> +           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;stroke-width:0.0690111"
> +           id="tspan40">Pipe[1]</tspan></text>
> +      <text
> +         xml:space="preserve"
> +         style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
> +         x="30.264952"
> +         y="65.490654"
> +         id="text41"><tspan
> +           sodipodi:role="line"
> +           x="30.264952"
> +           y="65.490654"
> +           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;stroke-width:0.0690111"
> +           id="tspan41">Queue[0]</tspan></text>
> +      <text
> +         xml:space="preserve"
> +         style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
> +         x="30.264952"
> +         y="79.249001"
> +         id="text42"><tspan
> +           sodipodi:role="line"
> +           x="30.264952"
> +           y="79.249001"
> +           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;stroke-width:0.0690111"
> +           id="tspan42">Queue[n]</tspan></text>
> +      <text
> +         xml:space="preserve"
> +         style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
> +         x="30.264952"
> +         y="71.84066"
> +         id="text43"><tspan
> +           sodipodi:role="line"
> +           x="30.264952"
> +           y="71.84066"
> +           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;stroke-width:0.0690111"
> +           id="tspan43">...</tspan></text>
> +    </g>
> +    <g
> +       id="g64"
> +       transform="translate(0,85.195881)">
> +      <rect
> +         style="fill:none;stroke:#000000;stroke-width:0.878057;stroke-dasharray:none"
> +         id="rect43"
> +         width="167.79619"
> +         height="24.831829"
> +         x="14.21942"
> +         y="57.862854" />
> +      <g
> +         id="g51"
> +         transform="translate(24.021362,-46.545299)">
> +        <rect
> +           style="fill:none;stroke:#006680;stroke-width:0.459999;stroke-dasharray:none"
> +           id="rect44"
> +           width="131.09708"
> +           height="5.8163381"
> +           x="23.245802"
> +           y="107.16314" />
> +        <path
> +           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
> +           d="m 37.884707,107.26337 v 5.53565"
> +           id="path44"
> +           sodipodi:nodetypes="cc" />
> +        <path
> +           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
> +           d="m 52.466233,107.26337 v 5.53565"
> +           id="path45"
> +           sodipodi:nodetypes="cc" />
> +        <path
> +           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
> +           d="m 67.047758,107.26337 v 5.53565"
> +           id="path46"
> +           sodipodi:nodetypes="cc" />
> +        <path
> +           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
> +           d="m 81.629283,107.26337 v 5.53565"
> +           id="path47"
> +           sodipodi:nodetypes="cc" />
> +        <path
> +           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
> +           d="m 96.210809,107.26337 v 5.53565"
> +           id="path48"
> +           sodipodi:nodetypes="cc" />
> +        <path
> +           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
> +           d="m 110.79233,107.26337 v 5.53565"
> +           id="path49"
> +           sodipodi:nodetypes="cc" />
> +        <path
> +           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
> +           d="m 125.37386,107.26337 v 5.53565"
> +           id="path50"
> +           sodipodi:nodetypes="cc" />
> +        <path
> +           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
> +           d="m 139.95538,107.26337 v 5.53565"
> +           id="path51"
> +           sodipodi:nodetypes="cc" />
> +        <text
> +           xml:space="preserve"
> +           style="font-size:3.175px;text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
> +           x="86.713425"
> +           y="110.1963"
> +           id="text51"><tspan
> +             sodipodi:role="line"
> +             id="tspan51"
> +             style="stroke:#006680;stroke-width:0.5"
> +             x="86.713425"
> +             y="110.1963">. . .</tspan></text>
> +      </g>
> +      <g
> +         id="g59"
> +         transform="translate(24.021362,-32.25779)">
> +        <rect
> +           style="fill:none;stroke:#006680;stroke-width:0.459999;stroke-dasharray:none"
> +           id="rect51"
> +           width="131.09708"
> +           height="5.8163381"
> +           x="23.245802"
> +           y="107.16314" />
> +        <path
> +           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
> +           d="m 37.884707,107.26337 v 5.53565"
> +           id="path52"
> +           sodipodi:nodetypes="cc" />
> +        <path
> +           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
> +           d="m 52.466233,107.26337 v 5.53565"
> +           id="path53"
> +           sodipodi:nodetypes="cc" />
> +        <path
> +           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
> +           d="m 67.047758,107.26337 v 5.53565"
> +           id="path54"
> +           sodipodi:nodetypes="cc" />
> +        <path
> +           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
> +           d="m 81.629283,107.26337 v 5.53565"
> +           id="path55"
> +           sodipodi:nodetypes="cc" />
> +        <path
> +           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
> +           d="m 96.210809,107.26337 v 5.53565"
> +           id="path56"
> +           sodipodi:nodetypes="cc" />
> +        <path
> +           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
> +           d="m 110.79233,107.26337 v 5.53565"
> +           id="path57"
> +           sodipodi:nodetypes="cc" />
> +        <path
> +           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
> +           d="m 125.37386,107.26337 v 5.53565"
> +           id="path58"
> +           sodipodi:nodetypes="cc" />
> +        <path
> +           style="fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
> +           d="m 139.95538,107.26337 v 5.53565"
> +           id="path59"
> +           sodipodi:nodetypes="cc" />
> +        <text
> +           xml:space="preserve"
> +           style="font-size:3.175px;text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
> +           x="86.713425"
> +           y="110.1963"
> +           id="text59"><tspan
> +             sodipodi:role="line"
> +             id="tspan59"
> +             style="stroke:#006680;stroke-width:0.5"
> +             x="86.713425"
> +             y="110.1963">. . .</tspan></text>
> +      </g>
> +      <text
> +         xml:space="preserve"
> +         style="font-size:3.175px;text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:none;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
> +         x="113.37768"
> +         y="68.463142"
> +         id="text60"><tspan
> +           sodipodi:role="line"
> +           id="tspan60"
> +           style="writing-mode:tb-rl;stroke-width:0.5"
> +           x="113.37768"
> +           y="68.463142">. . .</tspan></text>
> +      <text
> +         xml:space="preserve"
> +         style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
> +         x="25.005701"
> +         y="55.308445"
> +         id="text61"><tspan
> +           sodipodi:role="line"
> +           x="25.005701"
> +           y="55.308445"
> +           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;stroke-width:0.0690111"
> +           id="tspan61">Pipe[n]</tspan></text>
> +      <text
> +         xml:space="preserve"
> +         style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
> +         x="30.264952"
> +         y="65.490654"
> +         id="text62"><tspan
> +           sodipodi:role="line"
> +           x="30.264952"
> +           y="65.490654"
> +           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;stroke-width:0.0690111"
> +           id="tspan62">Queue[0]</tspan></text>
> +      <text
> +         xml:space="preserve"
> +         style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
> +         x="30.264952"
> +         y="79.249001"
> +         id="text63"><tspan
> +           sodipodi:role="line"
> +           x="30.264952"
> +           y="79.249001"
> +           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;stroke-width:0.0690111"
> +           id="tspan63">Queue[n]</tspan></text>
> +      <text
> +         xml:space="preserve"
> +         style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
> +         x="30.264952"
> +         y="71.84066"
> +         id="text64"><tspan
> +           sodipodi:role="line"
> +           x="30.264952"
> +           y="71.84066"
> +           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;stroke-width:0.0690111"
> +           id="tspan64">...</tspan></text>
> +    </g>
> +    <text
> +       xml:space="preserve"
> +       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.76111px;font-family:Serif;-inkscape-font-specification:Serif;text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:#000000;fill-opacity:0;stroke:#006680;stroke-width:0.499999;stroke-dasharray:none"
> +       x="92.18071"
> +       y="128.21965"
> +       id="text65"><tspan
> +         sodipodi:role="line"
> +         id="tspan65"
> +         style="font-size:7.76111px;writing-mode:tb-rl;fill:#1a1a1a;stroke:#000000;stroke-width:0.5"
> +         x="92.18071"
> +         y="128.21965">...</tspan></text>
> +    <text
> +       xml:space="preserve"
> +       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:7.7611px;font-family:Serif;-inkscape-font-specification:Serif;text-align:start;writing-mode:tb-rl;direction:ltr;text-anchor:start;fill:#1a1a1a;fill-opacity:0;stroke:#000000;stroke-width:0.499999;stroke-dasharray:none"
> +       x="198.72205"
> +       y="80.708267"
> +       id="text66"><tspan
> +         sodipodi:role="line"
> +         id="tspan66"
> +         style="stroke-width:0.5"
> +         x="198.72205"
> +         y="80.708267" /></text>
> +    <text
> +       xml:space="preserve"
> +       style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
> +       x="97.905846"
> +       y="44.725101"
> +       id="text68"><tspan
> +         sodipodi:role="line"
> +         x="97.905846"
> +         y="44.725101"
> +         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;stroke-width:0.0690111"
> +         id="tspan68">Hardware Block</tspan></text>
> +    <text
> +       xml:space="preserve"
> +       style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;writing-mode:vertical-lr;text-orientation:upright;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
> +       x="236.36934"
> +       y="112.10503"
> +       id="text68-7"><tspan
> +         sodipodi:role="line"
> +         x="236.36934"
> +         y="112.10503"
> +         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;writing-mode:vertical-lr;text-orientation:upright;text-anchor:middle;stroke-width:0.0690111"
> +         id="tspan68-4">EXECUTION</tspan></text>
> +    <rect
> +       style="fill:#1a1a1a;fill-opacity:0;stroke:#000000;stroke-width:0.940575;stroke-dasharray:7.5246, 0.940575;stroke-dashoffset:0"
> +       id="rect68-1"
> +       width="68.749969"
> +       height="141.2751"
> +       x="-129.49162"
> +       y="37.881134"
> +       ry="0" />
> +    <text
> +       xml:space="preserve"
> +       style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
> +       x="-114.4223"
> +       y="44.966106"
> +       id="text68-2"><tspan
> +         sodipodi:role="line"
> +         x="-114.4223"
> +         y="44.966106"
> +         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;stroke-width:0.0690111"
> +         id="tspan68-9">Memory</tspan></text>
> +    <text
> +       xml:space="preserve"
> +       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.7px;font-family:Serif;-inkscape-font-specification:Serif;text-align:start;writing-mode:tb-rl;direction:ltr;text-orientation:upright;text-anchor:start;fill:#1a1a1a;fill-opacity:0;stroke:#000000;stroke-width:0.499999;stroke-dasharray:none;stroke-dashoffset:0"
> +       x="212.6013"
> +       y="64.823341"
> +       id="text69"><tspan
> +         sodipodi:role="line"
> +         id="tspan69"
> +         style="font-size:12.7px;stroke-width:0.5"
> +         x="212.6013"
> +         y="64.823341" /></text>
> +    <g
> +       id="g72">
> +      <path
> +         style="font-weight:bold;font-size:16.9333px;line-height:1.25;-inkscape-font-specification:'sans-serif Bold';text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;stroke-width:0.0690111"
> +         d="m 185.24734,83.96512 h 1.28693 c 1.20226,0.01693 2.09973,-1.015998 2.0828,-2.370662 v -9.393759 c -0.0169,-0.711199 0.33866,-1.066798 1.10066,-1.066798 h 0.2032 0.0677 v -1.557864 c -1.0668,0.01693 -1.38853,-0.270933 -1.37159,-1.236131 V 58.96308 c 0.0339,-1.354664 -0.88054,-2.387595 -2.0828,-2.370662 h -1.28693 v 1.676397 h 0.62653 c 0.57573,0 0.77893,0.321733 0.762,1.100664 v 9.122827 c 0,1.219198 0.44027,1.710263 1.64253,1.862663 -1.20226,0.135466 -1.64253,0.626532 -1.64253,1.84573 v 9.122826 c 0.0169,0.660399 -0.23707,0.965198 -0.762,0.965198 h -0.62653 z"
> +         id="text70"
> +         aria-label="}"
> +         sodipodi:nodetypes="ccccsccccccccscscscscc" />
> +      <path
> +         style="fill:#1a1a1a;fill-opacity:0;stroke:#000000;stroke-width:1.25;stroke-dasharray:none;stroke-dashoffset:0;marker-end:url(#ArrowWideHeavy)"
> +         d="M 190.40199,70.278769 H 224.6663"
> +         id="path70" />
> +    </g>
> +    <path
> +       style="font-weight:bold;font-size:16.9333px;line-height:1.25;-inkscape-font-specification:'sans-serif Bold';text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;stroke-width:0.0690111"
> +       d="m -88.44114,74.337891 h 1.28693 c 1.20226,0.01693 2.09973,-1.015998 2.0828,-2.370662 V 62.57347 c -0.0169,-0.711199 0.33866,-1.066798 1.10066,-1.066798 h 0.2032 0.0677 v -1.557864 c -1.0668,0.01693 -1.38853,-0.270933 -1.37159,-1.236131 v -9.376826 c 0.0339,-1.354664 -0.88054,-2.387595 -2.0828,-2.370662 h -1.28693 v 1.676397 h 0.62653 c 0.57573,0 0.77893,0.321733 0.762,1.100664 v 9.122827 c 0,1.219198 0.44027,1.710263 1.64253,1.862663 -1.20226,0.135466 -1.64253,0.626532 -1.64253,1.84573 v 9.122826 c 0.0169,0.660399 -0.23707,0.965198 -0.762,0.965198 h -0.62653 z"
> +       id="text70-1"
> +       aria-label="}"
> +       sodipodi:nodetypes="ccccsccccccccscscscscc" />
> +    <text
> +       xml:space="preserve"
> +       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16.9333px;font-family:Serif;-inkscape-font-specification:Serif;text-align:start;writing-mode:tb-rl;direction:ltr;text-orientation:upright;text-anchor:start;fill:#1a1a1a;fill-opacity:0;stroke:#000000;stroke-width:1.25;stroke-dasharray:none;stroke-dashoffset:0"
> +       x="200.88817"
> +       y="38.990276"
> +       id="text72"><tspan
> +         sodipodi:role="line"
> +         id="tspan72"
> +         style="stroke-width:1.25"
> +         x="200.88817"
> +         y="38.990276" /></text>
> +    <text
> +       xml:space="preserve"
> +       style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
> +       x="205.12828"
> +       y="60.090775"
> +       id="text73"><tspan
> +         sodipodi:role="line"
> +         x="205.12828"
> +         y="60.090775"
> +         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;stroke-width:0.0690111"
> +         id="tspan73">e.g.,:</tspan><tspan
> +         sodipodi:role="line"
> +         x="205.12828"
> +         y="68.028275"
> +         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;stroke-width:0.0690111"
> +         id="tspan74">queue[0]</tspan></text>
> +    <g
> +       id="g75"
> +       transform="translate(0,40.745853)">
> +      <path
> +         style="font-weight:bold;font-size:16.9333px;line-height:1.25;-inkscape-font-specification:'sans-serif Bold';text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;stroke-width:0.0690111"
> +         d="m 185.24734,83.96512 h 1.28693 c 1.20226,0.01693 2.09973,-1.015998 2.0828,-2.370662 v -9.393759 c -0.0169,-0.711199 0.33866,-1.066798 1.10066,-1.066798 h 0.2032 0.0677 v -1.557864 c -1.0668,0.01693 -1.38853,-0.270933 -1.37159,-1.236131 V 58.96308 c 0.0339,-1.354664 -0.88054,-2.387595 -2.0828,-2.370662 h -1.28693 v 1.676397 h 0.62653 c 0.57573,0 0.77893,0.321733 0.762,1.100664 v 9.122827 c 0,1.219198 0.44027,1.710263 1.64253,1.862663 -1.20226,0.135466 -1.64253,0.626532 -1.64253,1.84573 v 9.122826 c 0.0169,0.660399 -0.23707,0.965198 -0.762,0.965198 h -0.62653 z"
> +         id="path74"
> +         aria-label="}"
> +         sodipodi:nodetypes="ccccsccccccccscscscscc" />
> +      <path
> +         style="fill:#1a1a1a;fill-opacity:0;stroke:#000000;stroke-width:1.25;stroke-dasharray:none;stroke-dashoffset:0;marker-end:url(#ArrowWideHeavy)"
> +         d="M 190.40199,70.278769 H 224.6663"
> +         id="path75" />
> +    </g>
> +    <text
> +       xml:space="preserve"
> +       style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
> +       x="205.12828"
> +       y="100.83664"
> +       id="text76"><tspan
> +         sodipodi:role="line"
> +         x="205.12828"
> +         y="100.83664"
> +         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;stroke-width:0.0690111"
> +         id="tspan75">e.g.,:</tspan><tspan
> +         sodipodi:role="line"
> +         x="205.12828"
> +         y="108.77414"
> +         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;stroke-width:0.0690111"
> +         id="tspan76">queue[4]</tspan></text>
> +    <g
> +       id="g77"
> +       transform="translate(0,85.725048)">
> +      <path
> +         style="font-weight:bold;font-size:16.9333px;line-height:1.25;-inkscape-font-specification:'sans-serif Bold';text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;stroke-width:0.0690111"
> +         d="m 185.24734,83.96512 h 1.28693 c 1.20226,0.01693 2.09973,-1.015998 2.0828,-2.370662 v -9.393759 c -0.0169,-0.711199 0.33866,-1.066798 1.10066,-1.066798 h 0.2032 0.0677 v -1.557864 c -1.0668,0.01693 -1.38853,-0.270933 -1.37159,-1.236131 V 58.96308 c 0.0339,-1.354664 -0.88054,-2.387595 -2.0828,-2.370662 h -1.28693 v 1.676397 h 0.62653 c 0.57573,0 0.77893,0.321733 0.762,1.100664 v 9.122827 c 0,1.219198 0.44027,1.710263 1.64253,1.862663 -1.20226,0.135466 -1.64253,0.626532 -1.64253,1.84573 v 9.122826 c 0.0169,0.660399 -0.23707,0.965198 -0.762,0.965198 h -0.62653 z"
> +         id="path76"
> +         aria-label="}"
> +         sodipodi:nodetypes="ccccsccccccccscscscscc" />
> +      <path
> +         style="fill:#1a1a1a;fill-opacity:0;stroke:#000000;stroke-width:1.25;stroke-dasharray:none;stroke-dashoffset:0;marker-end:url(#ArrowWideHeavy)"
> +         d="M 190.40199,70.278769 H 224.6663"
> +         id="path77" />
> +    </g>
> +    <text
> +       xml:space="preserve"
> +       style="font-style:normal;font-weight:normal;font-size:6.35px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
> +       x="205.12828"
> +       y="145.81558"
> +       id="text78"><tspan
> +         sodipodi:role="line"
> +         x="205.12828"
> +         y="145.81558"
> +         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;stroke-width:0.0690111"
> +         id="tspan77">e.g.,:</tspan><tspan
> +         sodipodi:role="line"
> +         x="205.12828"
> +         y="153.75308"
> +         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:6.35px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;stroke-width:0.0690111"
> +         id="tspan78">queue[n]</tspan></text>
> +    <g
> +       id="g81">
> +      <text
> +         xml:space="preserve"
> +         style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
> +         x="-18.502264"
> +         y="65.642387"
> +         id="text79"><tspan
> +           sodipodi:role="line"
> +           x="-18.502264"
> +           y="65.642387"
> +           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#800000;stroke-width:0.0690111"
> +           id="tspan79">HQD</tspan></text>
> +      <ellipse
> +         style="fill:#800000;fill-opacity:0;stroke:#800000;stroke-width:1;stroke-dasharray:none;stroke-dashoffset:0"
> +         id="path79"
> +         cx="-18.407015"
> +         cy="63.2188"
> +         rx="13.317666"
> +         ry="4.4124799" />
> +      <path
> +         style="fill:#800000;fill-opacity:0;stroke:#800000;stroke-width:1;stroke-dasharray:none;stroke-dashoffset:0;marker-end:url(#Triangle)"
> +         d="M -4.6361224,63.2188 H 10.606988"
> +         id="path80" />
> +    </g>
> +    <g
> +       id="g82"
> +       transform="translate(0,14.287503)">
> +      <text
> +         xml:space="preserve"
> +         style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
> +         x="-18.502264"
> +         y="65.642387"
> +         id="text81"><tspan
> +           sodipodi:role="line"
> +           x="-18.502264"
> +           y="65.642387"
> +           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#800000;stroke-width:0.0690111"
> +           id="tspan81">HQD</tspan></text>
> +      <ellipse
> +         style="fill:#800000;fill-opacity:0;stroke:#800000;stroke-width:1;stroke-dasharray:none;stroke-dashoffset:0"
> +         id="ellipse81"
> +         cx="-18.407015"
> +         cy="63.2188"
> +         rx="13.317666"
> +         ry="4.4124799" />
> +      <path
> +         style="fill:#800000;fill-opacity:0;stroke:#800000;stroke-width:1;stroke-dasharray:none;stroke-dashoffset:0;marker-end:url(#Triangle)"
> +         d="M -4.6361224,63.2188 H 10.606988"
> +         id="path81" />
> +    </g>
> +    <g
> +       id="g83"
> +       transform="translate(0,40.745853)">
> +      <text
> +         xml:space="preserve"
> +         style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
> +         x="-18.502264"
> +         y="65.642387"
> +         id="text82"><tspan
> +           sodipodi:role="line"
> +           x="-18.502264"
> +           y="65.642387"
> +           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#800000;stroke-width:0.0690111"
> +           id="tspan82">HQD</tspan></text>
> +      <ellipse
> +         style="fill:#800000;fill-opacity:0;stroke:#800000;stroke-width:1;stroke-dasharray:none;stroke-dashoffset:0"
> +         id="ellipse82"
> +         cx="-18.407015"
> +         cy="63.2188"
> +         rx="13.317666"
> +         ry="4.4124799" />
> +      <path
> +         style="fill:#800000;fill-opacity:0;stroke:#800000;stroke-width:1;stroke-dasharray:none;stroke-dashoffset:0;marker-end:url(#Triangle)"
> +         d="M -4.6361224,63.2188 H 10.606988"
> +         id="path82" />
> +    </g>
> +    <g
> +       id="g84"
> +       transform="translate(0,55.033362)">
> +      <text
> +         xml:space="preserve"
> +         style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
> +         x="-18.502264"
> +         y="65.642387"
> +         id="text83"><tspan
> +           sodipodi:role="line"
> +           x="-18.502264"
> +           y="65.642387"
> +           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#800000;stroke-width:0.0690111"
> +           id="tspan83">HQD</tspan></text>
> +      <ellipse
> +         style="fill:#800000;fill-opacity:0;stroke:#800000;stroke-width:1;stroke-dasharray:none;stroke-dashoffset:0"
> +         id="ellipse83"
> +         cx="-18.407015"
> +         cy="63.2188"
> +         rx="13.317666"
> +         ry="4.4124799" />
> +      <path
> +         style="fill:#800000;fill-opacity:0;stroke:#800000;stroke-width:1;stroke-dasharray:none;stroke-dashoffset:0;marker-end:url(#Triangle)"
> +         d="M -4.6361224,63.2188 H 10.606988"
> +         id="path83" />
> +    </g>
> +    <g
> +       id="g85"
> +       transform="translate(0,85.195881)">
> +      <text
> +         xml:space="preserve"
> +         style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
> +         x="-18.502264"
> +         y="65.642387"
> +         id="text84"><tspan
> +           sodipodi:role="line"
> +           x="-18.502264"
> +           y="65.642387"
> +           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#800000;stroke-width:0.0690111"
> +           id="tspan84">HQD</tspan></text>
> +      <ellipse
> +         style="fill:#800000;fill-opacity:0;stroke:#800000;stroke-width:1;stroke-dasharray:none;stroke-dashoffset:0"
> +         id="ellipse84"
> +         cx="-18.407015"
> +         cy="63.2188"
> +         rx="13.317666"
> +         ry="4.4124799" />
> +      <path
> +         style="fill:#800000;fill-opacity:0;stroke:#800000;stroke-width:1;stroke-dasharray:none;stroke-dashoffset:0;marker-end:url(#Triangle)"
> +         d="M -4.6361224,63.2188 H 10.606988"
> +         id="path84" />
> +    </g>
> +    <g
> +       id="g86"
> +       transform="translate(0,99.48339)">
> +      <text
> +         xml:space="preserve"
> +         style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
> +         x="-18.502264"
> +         y="65.642387"
> +         id="text85"><tspan
> +           sodipodi:role="line"
> +           x="-18.502264"
> +           y="65.642387"
> +           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;fill:#800000;stroke-width:0.0690111"
> +           id="tspan85">HQD</tspan></text>
> +      <ellipse
> +         style="fill:#800000;fill-opacity:0;stroke:#800000;stroke-width:1;stroke-dasharray:none;stroke-dashoffset:0"
> +         id="ellipse85"
> +         cx="-18.407015"
> +         cy="63.2188"
> +         rx="13.317666"
> +         ry="4.4124799" />
> +      <path
> +         style="fill:#800000;fill-opacity:0;stroke:#800000;stroke-width:1;stroke-dasharray:none;stroke-dashoffset:0;marker-end:url(#Triangle)"
> +         d="M -4.6361224,63.2188 H 10.606988"
> +         id="path85" />
> +    </g>
> +    <text
> +       xml:space="preserve"
> +       style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
> +       x="-35.2131"
> +       y="54.673237"
> +       id="text86"><tspan
> +         sodipodi:role="line"
> +         x="-35.2131"
> +         y="54.673237"
> +         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:5.64444px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;stroke-width:0.0690111"
> +         id="tspan86">Registers</tspan></text>
> +    <path
> +       style="fill:#800000;fill-opacity:0;stroke:#1a1a1a;stroke-width:1;stroke-dasharray:1, 1;stroke-dashoffset:0;marker-end:url(#ArrowWide)"
> +       d="m -45.247972,57.442462 v 5.888987 h 11.344412"
> +       id="path86"
> +       sodipodi:nodetypes="ccc" />
> +    <text
> +       xml:space="preserve"
> +       style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
> +       x="-74.441521"
> +       y="82.441582"
> +       id="text87"><tspan
> +         sodipodi:role="line"
> +         x="-74.441521"
> +         y="82.441582"
> +         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;stroke-width:0.0690111"
> +         id="tspan87">MQD</tspan></text>
> +    <text
> +       xml:space="preserve"
> +       style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
> +       x="-74.441521"
> +       y="99.240776"
> +       id="text88"><tspan
> +         sodipodi:role="line"
> +         x="-74.441521"
> +         y="99.240776"
> +         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;stroke-width:0.0690111"
> +         id="tspan88">MQD</tspan></text>
> +    <text
> +       xml:space="preserve"
> +       style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
> +       x="-74.441521"
> +       y="116.03998"
> +       id="text89"><tspan
> +         sodipodi:role="line"
> +         x="-74.441521"
> +         y="116.03998"
> +         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;stroke-width:0.0690111"
> +         id="tspan89">MQD</tspan></text>
> +    <text
> +       xml:space="preserve"
> +       style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
> +       x="-74.441521"
> +       y="132.83917"
> +       id="text90"><tspan
> +         sodipodi:role="line"
> +         x="-74.441521"
> +         y="132.83917"
> +         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;stroke-width:0.0690111"
> +         id="tspan90">MQD</tspan></text>
> +    <text
> +       xml:space="preserve"
> +       style="font-style:normal;font-weight:normal;font-size:7.05556px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
> +       x="-74.441521"
> +       y="168.3002"
> +       id="text91"><tspan
> +         sodipodi:role="line"
> +         x="-74.441521"
> +         y="168.3002"
> +         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:7.05556px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;stroke-width:0.0690111"
> +         id="tspan91">MQD</tspan></text>
> +    <text
> +       xml:space="preserve"
> +       style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
> +       x="-74.441521"
> +       y="148.1461"
> +       id="text92"><tspan
> +         sodipodi:role="line"
> +         x="-74.441521"
> +         y="148.1461"
> +         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:10.5833px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;writing-mode:tb-rl;text-anchor:middle;stroke-width:0.0690111"
> +         id="tspan92">...</tspan></text>
> +    <g
> +       id="g97"
> +       transform="translate(-5.8208336)">
> +      <rect
> +         style="fill:#aaffcc;fill-opacity:1;stroke:#1a1a1a;stroke-width:0.5;stroke-dasharray:none;stroke-dashoffset:0"
> +         id="rect96"
> +         width="58.726093"
> +         height="27.598055"
> +         x="-142.96434"
> +         y="46.852512" />
> +      <text
> +         xml:space="preserve"
> +         style="font-style:normal;font-weight:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
> +         x="-139.74622"
> +         y="52.62756"
> +         id="text93"><tspan
> +           sodipodi:role="line"
> +           x="-139.74622"
> +           y="52.62756"
> +           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:start;text-anchor:start;stroke-width:0.0690111"
> +           id="tspan93">HQD Registers</tspan><tspan
> +           sodipodi:role="line"
> +           x="-139.74622"
> +           y="57.91922"
> +           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:start;text-anchor:start;stroke-width:0.0690111"
> +           id="tspan95">Queue Address in the GPU</tspan><tspan
> +           sodipodi:role="line"
> +           x="-139.74622"
> +           y="63.210884"
> +           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:start;text-anchor:start;stroke-width:0.0690111"
> +           id="tspan96">Doorbell</tspan><tspan
> +           sodipodi:role="line"
> +           x="-139.74622"
> +           y="68.502548"
> +           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:start;text-anchor:start;stroke-width:0.0690111"
> +           id="tspan97">...</tspan><tspan
> +           sodipodi:role="line"
> +           x="-139.74622"
> +           y="73.794212"
> +           style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:start;text-anchor:start;stroke-width:0.0690111"
> +           id="tspan94" /></text>
> +    </g>
> +    <text
> +       xml:space="preserve"
> +       style="font-style:normal;font-weight:normal;font-size:4.23333px;line-height:1.25;font-family:sans-serif;text-align:start;letter-spacing:0px;word-spacing:0px;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
> +       x="-61.293022"
> +       y="-19.380915"
> +       id="text93-1"><tspan
> +         sodipodi:role="line"
> +         x="-61.293022"
> +         y="-19.380915"
> +         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;stroke-width:0.0690111"
> +         id="tspan104">SWITCH QUEUE:</tspan><tspan
> +         sodipodi:role="line"
> +         x="-61.293022"
> +         y="-14.089252"
> +         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:start;text-anchor:start;stroke-width:0.0690111"
> +         id="tspan101">WAIT FOR HQD_ACTIVE = 0</tspan><tspan
> +         sodipodi:role="line"
> +         x="-61.293022"
> +         y="-8.7975903"
> +         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:start;text-anchor:start;stroke-width:0.0690111"
> +         id="tspan105">SAVE QUEUE STATE TO THE MQD</tspan><tspan
> +         sodipodi:role="line"
> +         x="-61.293022"
> +         y="-3.505928"
> +         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:start;text-anchor:start;stroke-width:0.0690111"
> +         id="tspan102">COPY NEW MQD STATE</tspan><tspan
> +         sodipodi:role="line"
> +         x="-61.293022"
> +         y="1.7857342"
> +         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.23333px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:start;text-anchor:start;stroke-width:0.0690111"
> +         id="tspan103">SET HQD_ACTIVE = 1</tspan></text>
> +    <circle
> +       style="fill:#ffeeaa;fill-opacity:1;stroke:#1a1a1a;stroke-width:1.88976;stroke-dasharray:none;stroke-dashoffset:0"
> +       id="path97"
> +       cx="0"
> +       cy="0"
> +       r="0"
> +       transform="matrix(0.26458333,0,0,0.26458333,-149.03517,37.347779)" />
> +    <text
> +       xml:space="preserve"
> +       style="font-style:normal;font-weight:normal;font-size:5.64444px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0690111"
> +       x="-36.659206"
> +       y="-44.828983"
> +       id="text106"><tspan
> +         sodipodi:role="line"
> +         x="-36.659206"
> +         y="-44.828983"
> +         style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:5.64444px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';text-align:center;text-anchor:middle;stroke-width:0.0690111"
> +         id="tspan106">Firmware</tspan></text>
> +    <path
> +       style="fill:none;fill-opacity:1;stroke:#1a1a1a;stroke-width:1;stroke-dasharray:none;stroke-dashoffset:0;marker-start:url(#marker109);marker-end:url(#ArrowTriangleStylized)"
> +       d="M -84.242601,-9.1838245 H -98.041629 V 33.17598"
> +       id="path106" />
> +    <path
> +       style="fill:none;fill-opacity:1;stroke:#1a1a1a;stroke-width:1;stroke-dasharray:none;stroke-dashoffset:0;marker-end:url(#Dot)"
> +       d="M 9.9745536,-9.3442784 H 29.549918 V 37.170287"
> +       id="path107"
> +       sodipodi:nodetypes="ccc" />
> +  </g>
> +</svg>


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 5/6] Documentation/gpu: Create a GC entry in the amdgpu documentation
  2025-03-25 17:18 ` [PATCH 5/6] Documentation/gpu: Create a GC entry in the amdgpu documentation Rodrigo Siqueira
  2025-03-26  1:55   ` Bagas Sanjaya
@ 2025-03-26  9:14   ` Christian König
  1 sibling, 0 replies; 14+ messages in thread
From: Christian König @ 2025-03-26  9:14 UTC (permalink / raw)
  To: Rodrigo Siqueira, Alex Deucher, Mario Limonciello, Melissa Wen,
	'André Almeida', 'Timur Kristóf'
  Cc: amd-gfx, linux-doc, kernel-dev

Am 25.03.25 um 18:18 schrieb Rodrigo Siqueira:
> GC is a large block that plays a vital role for amdgpu; for this reason,
> this commit creates one specific page for GC and adds extra information
> about the CP component.
>
> Signed-off-by: Rodrigo Siqueira <siqueira@igalia.com>

Acked-by: <christian.koenig@amd.com>

> ---
>  Documentation/gpu/amdgpu/driver-core.rst | 30 ++-------------
>  Documentation/gpu/amdgpu/gc/index.rst    | 48 ++++++++++++++++++++++++
>  Documentation/gpu/amdgpu/index.rst       |  1 +
>  3 files changed, 53 insertions(+), 26 deletions(-)
>  create mode 100644 Documentation/gpu/amdgpu/gc/index.rst
>
> diff --git a/Documentation/gpu/amdgpu/driver-core.rst b/Documentation/gpu/amdgpu/driver-core.rst
> index 746fd081876f..2af1e919d76a 100644
> --- a/Documentation/gpu/amdgpu/driver-core.rst
> +++ b/Documentation/gpu/amdgpu/driver-core.rst
> @@ -67,38 +67,16 @@ GC (Graphics and Compute)
>      This is the graphics and compute engine, i.e., the block that
>      encompasses the 3D pipeline and and shader blocks.  This is by far the
>      largest block on the GPU.  The 3D pipeline has tons of sub-blocks.  In
> -    addition to that, it also contains the CP microcontrollers (ME, PFP,
> -    CE, MEC) and the RLC microcontroller.  It's exposed to userspace for
> -    user mode drivers (OpenGL, Vulkan, OpenCL, etc.)
> +    addition to that, it also contains the CP microcontrollers (ME, PFP, CE,
> +    MEC) and the RLC microcontroller.  It's exposed to userspace for user mode
> +    drivers (OpenGL, Vulkan, OpenCL, etc.). More details in :ref:`Graphics (GFX)
> +    and Compute <amdgpu-gc>`.
>  
>  VCN (Video Core Next)
>      This is the multi-media engine.  It handles video and image encode and
>      decode.  It's exposed to userspace for user mode drivers (VA-API,
>      OpenMAX, etc.)
>  
> -Graphics and Compute Microcontrollers
> --------------------------------------
> -
> -CP (Command Processor)
> -    The name for the hardware block that encompasses the front end of the
> -    GFX/Compute pipeline.  Consists mainly of a bunch of microcontrollers
> -    (PFP, ME, CE, MEC).  The firmware that runs on these microcontrollers
> -    provides the driver interface to interact with the GFX/Compute engine.
> -
> -    MEC (MicroEngine Compute)
> -        This is the microcontroller that controls the compute queues on the
> -        GFX/compute engine.
> -
> -    MES (MicroEngine Scheduler)
> -        This is a new engine for managing queues.  This is currently unused.
> -
> -RLC (RunList Controller)
> -    This is another microcontroller in the GFX/Compute engine.  It handles
> -    power management related functionality within the GFX/Compute engine.
> -    The name is a vestige of old hardware where it was originally added
> -    and doesn't really have much relation to what the engine does now.
> -
> -
>  GFX, Compute, and SDMA Overall Behavior
>  =======================================
>  
> diff --git a/Documentation/gpu/amdgpu/gc/index.rst b/Documentation/gpu/amdgpu/gc/index.rst
> new file mode 100644
> index 000000000000..f8128cca7028
> --- /dev/null
> +++ b/Documentation/gpu/amdgpu/gc/index.rst
> @@ -0,0 +1,48 @@
> +.. _amdgpu-gc:
> +
> +========================================
> + drm/amdgpu - Graphics and Compute (GC)
> +========================================
> +
> +The relationship between the CPU and GPU can be described as the
> +producer-consumer problem, where the CPU fills out a buffer with operations
> +(producer) to be executed by the GPU (consumer). The requested operations in
> +the buffer are called Command Packets, which can be summarized as a compressed
> +way of transmitting command information to the graphics controller.
> +
> +The component that acts as the front end between the CPU and the GPU is called
> +the Command Processor (CP). This component is responsible for providing greater
> +flexibility to the GC since CP makes it possible to program various aspects of
> +the GPU pipeline. CP also coordinates the communication between the CPU and GPU
> +via a mechanism named **Ring Buffers**, where the CPU appends information to
> +the buffer while the GPU removes operations. It is relevant to highlight that a
> +CPU can add a pointer to the Ring Buffer that points to another region of
> +memory outside the Ring Buffer, and CP can handle it; this mechanism is called
> +**Indirect Buffer (IB)**. CP receives and parses the Command Streams (CS), and
> +according to the parser result, the CP writes the request for operations in the
> +correct block.
> +
> +Graphics (GFX) and Compute Microcontrollers
> +-------------------------------------------
> +
> +GC is a large block, and as a result, it has multiple firmware associated with
> +it. Some of them are:
> +
> +CP (Command Processor)
> +    The name for the hardware block that encompasses the front end of the
> +    GFX/Compute pipeline. Consists mainly of a bunch of microcontrollers
> +    (PFP, ME, CE, MEC). The firmware that runs on these microcontrollers
> +    provides the driver interface to interact with the GFX/Compute engine.
> +
> +    MEC (MicroEngine Compute)
> +        This is the microcontroller that controls the compute queues on the
> +        GFX/compute engine.
> +
> +    MES (MicroEngine Scheduler)
> +        This is the engine for managing queues.
> +
> +RLC (RunList Controller)
> +    This is another microcontroller in the GFX/Compute engine. It handles
> +    power management related functionality within the GFX/Compute engine.
> +    The name is a vestige of old hardware where it was originally added
> +    and doesn't really have much relation to what the engine does now.
> diff --git a/Documentation/gpu/amdgpu/index.rst b/Documentation/gpu/amdgpu/index.rst
> index 7e9d60754287..1624f4b588c5 100644
> --- a/Documentation/gpu/amdgpu/index.rst
> +++ b/Documentation/gpu/amdgpu/index.rst
> @@ -10,6 +10,7 @@ Next (GCN), Radeon DNA (RDNA), and Compute DNA (CDNA) architectures.
>     driver-core
>     amd-hardware-list-info
>     module-parameters
> +   gc/index
>     display/index
>     flashing
>     xgmi


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH 0/6] Documentation/gpu/amdgpu: Add documentation about Pipes, Queues, MES, and others
  2025-03-25 17:18 [PATCH 0/6] Documentation/gpu/amdgpu: Add documentation about Pipes, Queues, MES, and others Rodrigo Siqueira
                   ` (5 preceding siblings ...)
  2025-03-25 17:18 ` [PATCH 6/6] Documentation/gpu: Add an intro about MES Rodrigo Siqueira
@ 2025-03-26 17:57 ` Alex Deucher
  6 siblings, 0 replies; 14+ messages in thread
From: Alex Deucher @ 2025-03-26 17:57 UTC (permalink / raw)
  To: Rodrigo Siqueira
  Cc: Alex Deucher, Christian König, Mario Limonciello,
	Melissa Wen, André Almeida, Timur Kristóf, amd-gfx,
	linux-doc, kernel-dev

Applied the series with some minor clarifications per the comments and
my proof reading.

Thanks!

Alex

On Tue, Mar 25, 2025 at 1:27 PM Rodrigo Siqueira <siqueira@igalia.com> wrote:
>
> Hi,
>
> This patchset came from my endeavor to understand better how some of the
> amdgpu components operate; in particular, I was focused on the ideas
> behind Pipes, Hardware Queues, MES, and Ring Buffers. In some way, this
> series is an attempt to put multiple pieces of information spread around
> many different places in an organized way in the amdgpu kernel-doc. In
> particular, the following links were crucial to create this series:
>
> * https://lore.kernel.org/amd-gfx/CADnq5_Pcz2x4aJzKbVrN3jsZhD6sTydtDw=6PaN4O3m4t+Grtg@mail.gmail.com/T/#m9a670b55ab20e0f7c46c80f802a0a4be255a719d
> * https://gitlab.freedesktop.org/mesa/mesa/-/issues/11759
> * https://www.x.org/docs/AMD/old/R5xx_Acceleration_v1.5.pdf
> * https://gpuopen.com/videos/graphics-pipeline/
>
> The first part of this series just updates the amdgpu-glossary with some
> new acronyms (some of them useful for other patches). The next two
> patches are just some basic organization to improve the documentation
> flow. The last part describes pipes, hardware queues, ring buffers, and
> MES.
>
> Thanks
> Siqueira
>
> Rodrigo Siqueira (6):
>   Documentation/gpu: Add new acronyms
>   Documentation/gpu: Change index order to show driver core first
>   Documentation/gpu: Create a documentation entry just for hardware info
>   Documentation/gpu: Add explanation about AMD Pipes and Queues
>   Documentation/gpu: Create a GC entry in the amdgpu documentation
>   Documentation/gpu: Add an intro about MES
>
>  .../gpu/amdgpu/amd-hardware-list-info.rst     |   23 +
>  Documentation/gpu/amdgpu/amdgpu-glossary.rst  |   36 +
>  Documentation/gpu/amdgpu/driver-core.rst      |   77 +-
>  Documentation/gpu/amdgpu/driver-misc.rst      |   17 -
>  Documentation/gpu/amdgpu/gc/index.rst         |   53 +
>  Documentation/gpu/amdgpu/gc/mes.rst           |   38 +
>  Documentation/gpu/amdgpu/index.rst            |    4 +-
>  .../gpu/amdgpu/pipe_and_queue_abstraction.svg | 1279 +++++++++++++++++
>  8 files changed, 1485 insertions(+), 42 deletions(-)
>  create mode 100644 Documentation/gpu/amdgpu/amd-hardware-list-info.rst
>  create mode 100644 Documentation/gpu/amdgpu/gc/index.rst
>  create mode 100644 Documentation/gpu/amdgpu/gc/mes.rst
>  create mode 100644 Documentation/gpu/amdgpu/pipe_and_queue_abstraction.svg
>
> --
> 2.49.0
>

^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2025-03-26 17:57 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-03-25 17:18 [PATCH 0/6] Documentation/gpu/amdgpu: Add documentation about Pipes, Queues, MES, and others Rodrigo Siqueira
2025-03-25 17:18 ` [PATCH 1/6] Documentation/gpu: Add new acronyms Rodrigo Siqueira
2025-03-26  8:08   ` Christian König
2025-03-25 17:18 ` [PATCH 2/6] Documentation/gpu: Change index order to show driver core first Rodrigo Siqueira
2025-03-25 17:18 ` [PATCH 3/6] Documentation/gpu: Create a documentation entry just for hardware info Rodrigo Siqueira
2025-03-25 17:18 ` [PATCH 4/6] Documentation/gpu: Add explanation about AMD Pipes and Queues Rodrigo Siqueira
2025-03-26  1:53   ` Bagas Sanjaya
2025-03-26  9:04   ` Christian König
2025-03-25 17:18 ` [PATCH 5/6] Documentation/gpu: Create a GC entry in the amdgpu documentation Rodrigo Siqueira
2025-03-26  1:55   ` Bagas Sanjaya
2025-03-26  9:14   ` Christian König
2025-03-25 17:18 ` [PATCH 6/6] Documentation/gpu: Add an intro about MES Rodrigo Siqueira
2025-03-26  1:58   ` Bagas Sanjaya
2025-03-26 17:57 ` [PATCH 0/6] Documentation/gpu/amdgpu: Add documentation about Pipes, Queues, MES, and others Alex Deucher

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox