diff mbox

[dpdk-dev] doc/event: improve eventdev library documentation

Message ID 1527798222-1873-1-git-send-email-honnappa.nagarahalli@arm.com (mailing list archive)
State Superseded, archived
Delegated to: Jerin Jacob
Headers show

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK

Commit Message

Honnappa Nagarahalli May 31, 2018, 8:23 p.m. UTC
Add small amount of additional code, use consistent variable names
across code blocks, change the image to represent queues and
CPU cores intuitively. These help improve the eventdev library
documentation.

Signed-off-by: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
Reviewed-by: Gavin Hu <gavin.hu@arm.com>
---
 doc/guides/prog_guide/eventdev.rst           |   55 +-
 doc/guides/prog_guide/img/eventdev_usage.svg | 1518 +++++++++-----------------
 2 files changed, 570 insertions(+), 1003 deletions(-)

Comments

Jerin Jacob June 4, 2018, 4:42 a.m. UTC | #1
-----Original Message-----
> Date: Thu, 31 May 2018 15:23:42 -0500
> From: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
> To: jerin.jacob@caviumnetworks.com
> CC: dev@dpdk.org, Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
> Subject: [PATCH] doc/event: improve eventdev library documentation
> X-Mailer: git-send-email 2.7.4
> 
> Add small amount of additional code, use consistent variable names
> across code blocks, change the image to represent queues and
> CPU cores intuitively. These help improve the eventdev library
> documentation.
> 
> Signed-off-by: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
> Reviewed-by: Gavin Hu <gavin.hu@arm.com>
> ---

Changes looks good to me.

Adding Harry for this review as he is the original author of this file.


>  doc/guides/prog_guide/eventdev.rst           |   55 +-
>  doc/guides/prog_guide/img/eventdev_usage.svg | 1518 +++++++++-----------------
>  2 files changed, 570 insertions(+), 1003 deletions(-)
> 
> diff --git a/doc/guides/prog_guide/eventdev.rst b/doc/guides/prog_guide/eventdev.rst
> index ce19997..0203d9e 100644
> --- a/doc/guides/prog_guide/eventdev.rst
> +++ b/doc/guides/prog_guide/eventdev.rst
> @@ -1,5 +1,6 @@
>  ..  SPDX-License-Identifier: BSD-3-Clause
>      Copyright(c) 2017 Intel Corporation.
> +    Copyright(c) 2018 Arm Limited.
>  
>  Event Device Library
>  ====================
> @@ -129,7 +130,7 @@ API Walk-through
>  
>  This section will introduce the reader to the eventdev API, showing how to
>  create and configure an eventdev and use it for a two-stage atomic pipeline
> -with a single core for TX. The diagram below shows the final state of the
> +with one core each for RX and TX. The diagram below shows the final state of the

I think, we can mention the usage of RX and TX core are API illustration purpose
only, In the real case, it is abstracted using Eventdev - Ethdev adapters
to hide the difference between various eventdev capabilities to Rx or Tx the packets.
or something on similar lines.

>  
>  
>  Egress of Events
> diff --git a/doc/guides/prog_guide/img/eventdev_usage.svg b/doc/guides/prog_guide/img/eventdev_usage.svg
> index 7765649..b0792dc 100644
> --- a/doc/guides/prog_guide/img/eventdev_usage.svg
> +++ b/doc/guides/prog_guide/img/eventdev_usage.svg
> @@ -1,994 +1,546 @@
>  <?xml version="1.0" encoding="UTF-8" standalone="no"?>

License is missing

see doc/guides/prog_guide/img/architecture-overview.svg file as reference.

With above changes:

Acked-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
Van Haaren, Harry June 5, 2018, 4:31 p.m. UTC | #2
> From: Jerin Jacob [mailto:jerin.jacob@caviumnetworks.com]
> Sent: Monday, June 4, 2018 5:42 AM
> To: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
> Cc: dev@dpdk.org; Van Haaren, Harry <harry.van.haaren@intel.com>
> Subject: Re: [PATCH] doc/event: improve eventdev library documentation
> 
> -----Original Message-----
> > Date: Thu, 31 May 2018 15:23:42 -0500
> > From: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
> > To: jerin.jacob@caviumnetworks.com
> > CC: dev@dpdk.org, Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
> > Subject: [PATCH] doc/event: improve eventdev library documentation
> > X-Mailer: git-send-email 2.7.4
> >
> > Add small amount of additional code, use consistent variable names
> > across code blocks, change the image to represent queues and
> > CPU cores intuitively. These help improve the eventdev library
> > documentation.
> >
> > Signed-off-by: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
> > Reviewed-by: Gavin Hu <gavin.hu@arm.com>
> > ---
> 
> Changes looks good to me.
> 
> Adding Harry for this review as he is the original author of this file.

Thanks Jerin,

>> uint16_t nb_rx = rte_event_dequeue_burst(dev_id, worker_port_id1, events, BATCH_SIZE, timeout);

why is the worker port variable named "worker_port_id1"? Previously it was just worker_port_id.

I think just worker_port_id makes more sense, perhaps update the 2 occurances of id1 ?

With that you have my
Acked-by: Harry van Haaren <harry.van.haaren@intel.com>



> >  doc/guides/prog_guide/eventdev.rst           |   55 +-
> >  doc/guides/prog_guide/img/eventdev_usage.svg | 1518 +++++++++------------
> -----
> >  2 files changed, 570 insertions(+), 1003 deletions(-)
> >
> > diff --git a/doc/guides/prog_guide/eventdev.rst
> b/doc/guides/prog_guide/eventdev.rst
> > index ce19997..0203d9e 100644
> > --- a/doc/guides/prog_guide/eventdev.rst
> > +++ b/doc/guides/prog_guide/eventdev.rst
> > @@ -1,5 +1,6 @@
> >  ..  SPDX-License-Identifier: BSD-3-Clause
> >      Copyright(c) 2017 Intel Corporation.
> > +    Copyright(c) 2018 Arm Limited.
> >
> >  Event Device Library
> >  ====================
> > @@ -129,7 +130,7 @@ API Walk-through
> >
> >  This section will introduce the reader to the eventdev API, showing how
> to
> >  create and configure an eventdev and use it for a two-stage atomic
> pipeline
> > -with a single core for TX. The diagram below shows the final state of the
> > +with one core each for RX and TX. The diagram below shows the final state
> of the
> 
> I think, we can mention the usage of RX and TX core are API illustration
> purpose
> only, In the real case, it is abstracted using Eventdev - Ethdev adapters
> to hide the difference between various eventdev capabilities to Rx or Tx the
> packets.
> or something on similar lines.
> 
> >
> >
> >  Egress of Events
> > diff --git a/doc/guides/prog_guide/img/eventdev_usage.svg
> b/doc/guides/prog_guide/img/eventdev_usage.svg
> > index 7765649..b0792dc 100644
> > --- a/doc/guides/prog_guide/img/eventdev_usage.svg
> > +++ b/doc/guides/prog_guide/img/eventdev_usage.svg
> > @@ -1,994 +1,546 @@
> >  <?xml version="1.0" encoding="UTF-8" standalone="no"?>
> 
> License is missing
> 
> see doc/guides/prog_guide/img/architecture-overview.svg file as reference.
> 
> With above changes:
> 
> Acked-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
Honnappa Nagarahalli June 5, 2018, 8:32 p.m. UTC | #3
-----Original Message-----
From: Van Haaren, Harry <harry.van.haaren@intel.com>
Sent: Tuesday, June 5, 2018 11:31 AM
To: Jerin Jacob <jerin.jacob@caviumnetworks.com>; Honnappa Nagarahalli <Honnappa.Nagarahalli@arm.com>
Cc: dev@dpdk.org
Subject: RE: [PATCH] doc/event: improve eventdev library documentation

> From: Jerin Jacob [mailto:jerin.jacob@caviumnetworks.com]
> Sent: Monday, June 4, 2018 5:42 AM
> To: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
> Cc: dev@dpdk.org; Van Haaren, Harry <harry.van.haaren@intel.com>
> Subject: Re: [PATCH] doc/event: improve eventdev library documentation
>
> -----Original Message-----
> > Date: Thu, 31 May 2018 15:23:42 -0500
> > From: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
> > To: jerin.jacob@caviumnetworks.com
> > CC: dev@dpdk.org, Honnappa Nagarahalli
> > <honnappa.nagarahalli@arm.com>
> > Subject: [PATCH] doc/event: improve eventdev library documentation
> > X-Mailer: git-send-email 2.7.4
> >
> > Add small amount of additional code, use consistent variable names
> > across code blocks, change the image to represent queues and CPU
> > cores intuitively. These help improve the eventdev library
> > documentation.
> >
> > Signed-off-by: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
> > Reviewed-by: Gavin Hu <gavin.hu@arm.com>
> > ---
>
> Changes looks good to me.
>
> Adding Harry for this review as he is the original author of this file.

Thanks Jerin,

>> uint16_t nb_rx = rte_event_dequeue_burst(dev_id, worker_port_id1,
>> events, BATCH_SIZE, timeout);

why is the worker port variable named "worker_port_id1"? Previously it was just worker_port_id.

I think just worker_port_id makes more sense, perhaps update the 2 occurances of id1 ?

Will change in V2

With that you have my
Acked-by: Harry van Haaren <harry.van.haaren@intel.com>



> >  doc/guides/prog_guide/eventdev.rst           |   55 +-
> >  doc/guides/prog_guide/img/eventdev_usage.svg | 1518
> > +++++++++------------
> -----
> >  2 files changed, 570 insertions(+), 1003 deletions(-)
> >
> > diff --git a/doc/guides/prog_guide/eventdev.rst
> b/doc/guides/prog_guide/eventdev.rst
> > index ce19997..0203d9e 100644
> > --- a/doc/guides/prog_guide/eventdev.rst
> > +++ b/doc/guides/prog_guide/eventdev.rst
> > @@ -1,5 +1,6 @@
> >  ..  SPDX-License-Identifier: BSD-3-Clause
> >      Copyright(c) 2017 Intel Corporation.
> > +    Copyright(c) 2018 Arm Limited.
> >
> >  Event Device Library
> >  ====================
> > @@ -129,7 +130,7 @@ API Walk-through
> >
> >  This section will introduce the reader to the eventdev API, showing
> > how
> to
> >  create and configure an eventdev and use it for a two-stage atomic
> pipeline
> > -with a single core for TX. The diagram below shows the final state
> > of the
> > +with one core each for RX and TX. The diagram below shows the final
> > +state
> of the
>
> I think, we can mention the usage of RX and TX core are API
> illustration purpose only, In the real case, it is abstracted using
> Eventdev - Ethdev adapters to hide the difference between various
> eventdev capabilities to Rx or Tx the packets.
> or something on similar lines.
>

I think we should leave it as is currently, the code under the section 'Ingress of New Events' is tied into RX core. I think the API walk-through section as a whole has to change to introduce the usage of adaptors.

> >
> >
> >  Egress of Events
> > diff --git a/doc/guides/prog_guide/img/eventdev_usage.svg
> b/doc/guides/prog_guide/img/eventdev_usage.svg
> > index 7765649..b0792dc 100644
> > --- a/doc/guides/prog_guide/img/eventdev_usage.svg
> > +++ b/doc/guides/prog_guide/img/eventdev_usage.svg
> > @@ -1,994 +1,546 @@
> >  <?xml version="1.0" encoding="UTF-8" standalone="no"?>
>
> License is missing
>
> see doc/guides/prog_guide/img/architecture-overview.svg file as reference.
>
> With above changes:

Will add in V2

>
> Acked-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>

IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you.
Jerin Jacob June 5, 2018, 11:45 p.m. UTC | #4
-----Original Message-----
> Date: Tue, 5 Jun 2018 20:32:39 +0000
> From: Honnappa Nagarahalli <Honnappa.Nagarahalli@arm.com>
> To: "Van Haaren, Harry" <harry.van.haaren@intel.com>, Jerin Jacob
>  <jerin.jacob@caviumnetworks.com>
> CC: "dev@dpdk.org" <dev@dpdk.org>
> Subject: RE: [PATCH] doc/event: improve eventdev library documentation
> 
> 
> 
> -----Original Message-----
> From: Van Haaren, Harry <harry.van.haaren@intel.com>
> Sent: Tuesday, June 5, 2018 11:31 AM
> To: Jerin Jacob <jerin.jacob@caviumnetworks.com>; Honnappa Nagarahalli <Honnappa.Nagarahalli@arm.com>
> Cc: dev@dpdk.org
> Subject: RE: [PATCH] doc/event: improve eventdev library documentation
> 
> > From: Jerin Jacob [mailto:jerin.jacob@caviumnetworks.com]
> > Sent: Monday, June 4, 2018 5:42 AM
> > To: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
> > Cc: dev@dpdk.org; Van Haaren, Harry <harry.van.haaren@intel.com>
> > Subject: Re: [PATCH] doc/event: improve eventdev library documentation
> >
> > -----Original Message-----
> > > Date: Thu, 31 May 2018 15:23:42 -0500
> > > From: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
> > > To: jerin.jacob@caviumnetworks.com
> > > CC: dev@dpdk.org, Honnappa Nagarahalli
> > > <honnappa.nagarahalli@arm.com>
> > > Subject: [PATCH] doc/event: improve eventdev library documentation
> > > X-Mailer: git-send-email 2.7.4
> > >
> > > Add small amount of additional code, use consistent variable names
> > > across code blocks, change the image to represent queues and CPU
> > > cores intuitively. These help improve the eventdev library
> > > documentation.
> > >
> > > Signed-off-by: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
> > > Reviewed-by: Gavin Hu <gavin.hu@arm.com>
> > > ---
> >
> > Changes looks good to me.
> >
> > Adding Harry for this review as he is the original author of this file.
> 
> Thanks Jerin,
> 
> >> uint16_t nb_rx = rte_event_dequeue_burst(dev_id, worker_port_id1,
> >> events, BATCH_SIZE, timeout);
> 
> why is the worker port variable named "worker_port_id1"? Previously it was just worker_port_id.
> 
> I think just worker_port_id makes more sense, perhaps update the 2 occurances of id1 ?
> 
> Will change in V2
> 
> With that you have my
> Acked-by: Harry van Haaren <harry.van.haaren@intel.com>
> 
> 
> 
> > >  doc/guides/prog_guide/eventdev.rst           |   55 +-
> > >  doc/guides/prog_guide/img/eventdev_usage.svg | 1518
> > > +++++++++------------
> > -----
> > >  2 files changed, 570 insertions(+), 1003 deletions(-)
> > >
> > > diff --git a/doc/guides/prog_guide/eventdev.rst
> > b/doc/guides/prog_guide/eventdev.rst
> > > index ce19997..0203d9e 100644
> > > --- a/doc/guides/prog_guide/eventdev.rst
> > > +++ b/doc/guides/prog_guide/eventdev.rst
> > > @@ -1,5 +1,6 @@
> > >  ..  SPDX-License-Identifier: BSD-3-Clause
> > >      Copyright(c) 2017 Intel Corporation.
> > > +    Copyright(c) 2018 Arm Limited.
> > >
> > >  Event Device Library
> > >  ====================
> > > @@ -129,7 +130,7 @@ API Walk-through
> > >
> > >  This section will introduce the reader to the eventdev API, showing
> > > how
> > to
> > >  create and configure an eventdev and use it for a two-stage atomic
> > pipeline
> > > -with a single core for TX. The diagram below shows the final state
> > > of the
> > > +with one core each for RX and TX. The diagram below shows the final
> > > +state
> > of the
> >
> > I think, we can mention the usage of RX and TX core are API
> > illustration purpose only, In the real case, it is abstracted using
> > Eventdev - Ethdev adapters to hide the difference between various
> > eventdev capabilities to Rx or Tx the packets.
> > or something on similar lines.
> >
> 
> I think we should leave it as is currently, the code under the section 'Ingress of New Events' is tied into RX core. I think the API walk-through section as a whole has to change to introduce the usage of adaptors.

We already have Rx adapter documentation at
http://dpdk.org/doc/guides/prog_guide/event_ethernet_rx_adapter.html
My concern is reader gets confused about Rx core and think That way
to send the packets in eventdev from ethdev. I think, it will help reader if give
pointers about adapter here and mention the Rx and Tx core usage as
API illustration purpose only to clarify the existing architecture.


> 
> > >
> > >
> > >  Egress of Events
> > > diff --git a/doc/guides/prog_guide/img/eventdev_usage.svg
> > b/doc/guides/prog_guide/img/eventdev_usage.svg
> > > index 7765649..b0792dc 100644
> > > --- a/doc/guides/prog_guide/img/eventdev_usage.svg
> > > +++ b/doc/guides/prog_guide/img/eventdev_usage.svg
> > > @@ -1,994 +1,546 @@
> > >  <?xml version="1.0" encoding="UTF-8" standalone="no"?>
> >
> > License is missing
> >
> > see doc/guides/prog_guide/img/architecture-overview.svg file as reference.
> >
> > With above changes:
> 
> Will add in V2
> 
> >
> > Acked-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
> 
> IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you.
Honnappa Nagarahalli June 6, 2018, 1:27 a.m. UTC | #5
-----Original Message-----
From: Jerin Jacob <jerin.jacob@caviumnetworks.com> 
Sent: Tuesday, June 5, 2018 6:45 PM
To: Honnappa Nagarahalli <Honnappa.Nagarahalli@arm.com>
Cc: Van Haaren, Harry <harry.van.haaren@intel.com>; dev@dpdk.org
Subject: Re: [PATCH] doc/event: improve eventdev library documentation

-----Original Message-----
> Date: Tue, 5 Jun 2018 20:32:39 +0000
> From: Honnappa Nagarahalli <Honnappa.Nagarahalli@arm.com>
> To: "Van Haaren, Harry" <harry.van.haaren@intel.com>, Jerin Jacob  
> <jerin.jacob@caviumnetworks.com>
> CC: "dev@dpdk.org" <dev@dpdk.org>
> Subject: RE: [PATCH] doc/event: improve eventdev library documentation
> 
> 
> 
> -----Original Message-----
> From: Van Haaren, Harry <harry.van.haaren@intel.com>
> Sent: Tuesday, June 5, 2018 11:31 AM
> To: Jerin Jacob <jerin.jacob@caviumnetworks.com>; Honnappa Nagarahalli 
> <Honnappa.Nagarahalli@arm.com>
> Cc: dev@dpdk.org
> Subject: RE: [PATCH] doc/event: improve eventdev library documentation
> 
> > From: Jerin Jacob [mailto:jerin.jacob@caviumnetworks.com]
> > Sent: Monday, June 4, 2018 5:42 AM
> > To: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
> > Cc: dev@dpdk.org; Van Haaren, Harry <harry.van.haaren@intel.com>
> > Subject: Re: [PATCH] doc/event: improve eventdev library 
> > documentation
> >
> > -----Original Message-----
> > > Date: Thu, 31 May 2018 15:23:42 -0500
> > > From: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
> > > To: jerin.jacob@caviumnetworks.com
> > > CC: dev@dpdk.org, Honnappa Nagarahalli 
> > > <honnappa.nagarahalli@arm.com>
> > > Subject: [PATCH] doc/event: improve eventdev library documentation
> > > X-Mailer: git-send-email 2.7.4
> > >
> > > Add small amount of additional code, use consistent variable names 
> > > across code blocks, change the image to represent queues and CPU 
> > > cores intuitively. These help improve the eventdev library 
> > > documentation.
> > >
> > > Signed-off-by: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
> > > Reviewed-by: Gavin Hu <gavin.hu@arm.com>
> > > ---
> >
> > Changes looks good to me.
> >
> > Adding Harry for this review as he is the original author of this file.
> 
> Thanks Jerin,
> 
> >> uint16_t nb_rx = rte_event_dequeue_burst(dev_id, worker_port_id1, 
> >> events, BATCH_SIZE, timeout);
> 
> why is the worker port variable named "worker_port_id1"? Previously it was just worker_port_id.
> 
> I think just worker_port_id makes more sense, perhaps update the 2 occurances of id1 ?
> 
> Will change in V2
> 
> With that you have my
> Acked-by: Harry van Haaren <harry.van.haaren@intel.com>
> 
> 
> 
> > >  doc/guides/prog_guide/eventdev.rst           |   55 +-
> > >  doc/guides/prog_guide/img/eventdev_usage.svg | 1518
> > > +++++++++------------
> > -----
> > >  2 files changed, 570 insertions(+), 1003 deletions(-)
> > >
> > > diff --git a/doc/guides/prog_guide/eventdev.rst
> > b/doc/guides/prog_guide/eventdev.rst
> > > index ce19997..0203d9e 100644
> > > --- a/doc/guides/prog_guide/eventdev.rst
> > > +++ b/doc/guides/prog_guide/eventdev.rst
> > > @@ -1,5 +1,6 @@
> > >  ..  SPDX-License-Identifier: BSD-3-Clause
> > >      Copyright(c) 2017 Intel Corporation.
> > > +    Copyright(c) 2018 Arm Limited.
> > >
> > >  Event Device Library
> > >  ====================
> > > @@ -129,7 +130,7 @@ API Walk-through
> > >
> > >  This section will introduce the reader to the eventdev API, 
> > > showing how
> > to
> > >  create and configure an eventdev and use it for a two-stage 
> > > atomic
> > pipeline
> > > -with a single core for TX. The diagram below shows the final 
> > > state of the
> > > +with one core each for RX and TX. The diagram below shows the 
> > > +final state
> > of the
> >
> > I think, we can mention the usage of RX and TX core are API 
> > illustration purpose only, In the real case, it is abstracted using 
> > Eventdev - Ethdev adapters to hide the difference between various 
> > eventdev capabilities to Rx or Tx the packets.
> > or something on similar lines.
> >
> 
> I think we should leave it as is currently, the code under the section 'Ingress of New Events' is tied into RX core. I think the API walk-through section as a whole has to change to introduce the usage of adaptors.

We already have Rx adapter documentation at http://dpdk.org/doc/guides/prog_guide/event_ethernet_rx_adapter.html
My concern is reader gets confused about Rx core and think That way to send the packets in eventdev from ethdev. I think, it will help reader if give pointers about adapter here and mention the Rx and Tx core usage as API illustration purpose only to clarify the existing architecture.

Ok, understood for RX. I do not see anything for TX core, I will leave it out from this clarification. Also TX core should be left out of this since we have to show the single link queue case.

> 
> > >
> > >
> > >  Egress of Events
> > > diff --git a/doc/guides/prog_guide/img/eventdev_usage.svg
> > b/doc/guides/prog_guide/img/eventdev_usage.svg
> > > index 7765649..b0792dc 100644
> > > --- a/doc/guides/prog_guide/img/eventdev_usage.svg
> > > +++ b/doc/guides/prog_guide/img/eventdev_usage.svg
> > > @@ -1,994 +1,546 @@
> > >  <?xml version="1.0" encoding="UTF-8" standalone="no"?>
> >
> > License is missing
> >
> > see doc/guides/prog_guide/img/architecture-overview.svg file as reference.
> >
> > With above changes:
> 
> Will add in V2
> 
> >
> > Acked-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
> 
> IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you.
Honnappa Nagarahalli June 6, 2018, 1:44 a.m. UTC | #6
-----Original Message-----
> Date: Tue, 5 Jun 2018 20:32:39 +0000
> From: Honnappa Nagarahalli <Honnappa.Nagarahalli@arm.com>
> To: "Van Haaren, Harry" <harry.van.haaren@intel.com>, Jerin Jacob 
> <jerin.jacob@caviumnetworks.com>
> CC: "dev@dpdk.org" <dev@dpdk.org>
> Subject: RE: [PATCH] doc/event: improve eventdev library documentation
> 
> 
> 
> -----Original Message-----
> From: Van Haaren, Harry <harry.van.haaren@intel.com>
> Sent: Tuesday, June 5, 2018 11:31 AM
> To: Jerin Jacob <jerin.jacob@caviumnetworks.com>; Honnappa Nagarahalli 
> <Honnappa.Nagarahalli@arm.com>
> Cc: dev@dpdk.org
> Subject: RE: [PATCH] doc/event: improve eventdev library documentation
> 
> > From: Jerin Jacob [mailto:jerin.jacob@caviumnetworks.com]
> > Sent: Monday, June 4, 2018 5:42 AM
> > To: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
> > Cc: dev@dpdk.org; Van Haaren, Harry <harry.van.haaren@intel.com>
> > Subject: Re: [PATCH] doc/event: improve eventdev library 
> > documentation
> >
> > -----Original Message-----
> > > Date: Thu, 31 May 2018 15:23:42 -0500
> > > From: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
> > > To: jerin.jacob@caviumnetworks.com
> > > CC: dev@dpdk.org, Honnappa Nagarahalli 
> > > <honnappa.nagarahalli@arm.com>
> > > Subject: [PATCH] doc/event: improve eventdev library documentation
> > > X-Mailer: git-send-email 2.7.4
> > >
> > > Add small amount of additional code, use consistent variable names 
> > > across code blocks, change the image to represent queues and CPU 
> > > cores intuitively. These help improve the eventdev library 
> > > documentation.
> > >
> > > Signed-off-by: Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>
> > > Reviewed-by: Gavin Hu <gavin.hu@arm.com>
> > > ---
> >
> > Changes looks good to me.
> >
> > Adding Harry for this review as he is the original author of this file.
> 
> Thanks Jerin,
> 
> >> uint16_t nb_rx = rte_event_dequeue_burst(dev_id, worker_port_id1, 
> >> events, BATCH_SIZE, timeout);
> 
> why is the worker port variable named "worker_port_id1"? Previously it was just worker_port_id.
> 
> I think just worker_port_id makes more sense, perhaps update the 2 occurances of id1 ?
> 
> Will change in V2
> 
> With that you have my
> Acked-by: Harry van Haaren <harry.van.haaren@intel.com>
> 
> 
> 
> > >  doc/guides/prog_guide/eventdev.rst           |   55 +-
> > >  doc/guides/prog_guide/img/eventdev_usage.svg | 1518
> > > +++++++++------------
> > -----
> > >  2 files changed, 570 insertions(+), 1003 deletions(-)
> > >
> > > diff --git a/doc/guides/prog_guide/eventdev.rst
> > b/doc/guides/prog_guide/eventdev.rst
> > > index ce19997..0203d9e 100644
> > > --- a/doc/guides/prog_guide/eventdev.rst
> > > +++ b/doc/guides/prog_guide/eventdev.rst
> > > @@ -1,5 +1,6 @@
> > >  ..  SPDX-License-Identifier: BSD-3-Clause
> > >      Copyright(c) 2017 Intel Corporation.
> > > +    Copyright(c) 2018 Arm Limited.
> > >
> > >  Event Device Library
> > >  ====================
> > > @@ -129,7 +130,7 @@ API Walk-through
> > >
> > >  This section will introduce the reader to the eventdev API, 
> > > showing how
> > to
> > >  create and configure an eventdev and use it for a two-stage 
> > > atomic
> > pipeline
> > > -with a single core for TX. The diagram below shows the final 
> > > state of the
> > > +with one core each for RX and TX. The diagram below shows the 
> > > +final state
> > of the
> >
> > I think, we can mention the usage of RX and TX core are API 
> > illustration purpose only, In the real case, it is abstracted using 
> > Eventdev - Ethdev adapters to hide the difference between various 
> > eventdev capabilities to Rx or Tx the packets.
> > or something on similar lines.
> >
> 
> I think we should leave it as is currently, the code under the section 'Ingress of New Events' is tied into RX core. I think the API walk-through section as a whole has to change to introduce the usage of adaptors.

We already have Rx adapter documentation at http://dpdk.org/doc/guides/prog_guide/event_ethernet_rx_adapter.html
My concern is reader gets confused about Rx core and think That way to send the packets in eventdev from ethdev. I think, it will help reader if give pointers about adapter here and mention the Rx and Tx core usage as API illustration purpose only to clarify the existing architecture.

Ok, understood for RX. I do not see anything for TX core, I will leave it out from this clarification. Also TX core should be left out of this since we have to show the single link queue case.

Apologies, I see the TX adapter RFC. I will change the text.

> 
> > >
> > >
> > >  Egress of Events
> > > diff --git a/doc/guides/prog_guide/img/eventdev_usage.svg
> > b/doc/guides/prog_guide/img/eventdev_usage.svg
> > > index 7765649..b0792dc 100644
> > > --- a/doc/guides/prog_guide/img/eventdev_usage.svg
> > > +++ b/doc/guides/prog_guide/img/eventdev_usage.svg
> > > @@ -1,994 +1,546 @@
> > >  <?xml version="1.0" encoding="UTF-8" standalone="no"?>
> >
> > License is missing
> >
> > see doc/guides/prog_guide/img/architecture-overview.svg file as reference.
> >
> > With above changes:
> 
> Will add in V2
> 
> >
> > Acked-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>
> 
> IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you.
diff mbox

Patch

diff --git a/doc/guides/prog_guide/eventdev.rst b/doc/guides/prog_guide/eventdev.rst
index ce19997..0203d9e 100644
--- a/doc/guides/prog_guide/eventdev.rst
+++ b/doc/guides/prog_guide/eventdev.rst
@@ -1,5 +1,6 @@ 
 ..  SPDX-License-Identifier: BSD-3-Clause
     Copyright(c) 2017 Intel Corporation.
+    Copyright(c) 2018 Arm Limited.
 
 Event Device Library
 ====================
@@ -129,7 +130,7 @@  API Walk-through
 
 This section will introduce the reader to the eventdev API, showing how to
 create and configure an eventdev and use it for a two-stage atomic pipeline
-with a single core for TX. The diagram below shows the final state of the
+with one core each for RX and TX. The diagram below shows the final state of the
 application after this walk-through:
 
 .. _figure_eventdev-usage1:
@@ -196,23 +197,29 @@  calling the setup function. Repeat this step for each queue, starting from
                 .nb_atomic_flows = 1024,
                 .nb_atomic_order_sequences = 1024,
         };
+        struct rte_event_queue_conf single_link_conf = {
+                .event_queue_cfg = RTE_EVENT_QUEUE_CFG_SINGLE_LINK,
+        };
         int dev_id = 0;
-        int queue_id = 0;
-        int err = rte_event_queue_setup(dev_id, queue_id, &atomic_conf);
+        int atomic_q_1 = 0;
+        int atomic_q_2 = 1;
+        int single_link_q = 2;
+        int err = rte_event_queue_setup(dev_id, atomic_q_1, &atomic_conf);
+        int err = rte_event_queue_setup(dev_id, atomic_q_2, &atomic_conf);
+        int err = rte_event_queue_setup(dev_id, single_link_q, &single_link_conf);
 
-The remainder of this walk-through assumes that the queues are configured as
-follows:
+As shown above, queue IDs are as follows:
 
  * id 0, atomic queue #1
  * id 1, atomic queue #2
  * id 2, single-link queue
 
+These queues are used for the remainder of this walk-through.
+
 Setting up Ports
 ~~~~~~~~~~~~~~~~
 
-Once queues are set up successfully, create the ports as required. Each port
-should be set up with its corresponding port_conf type, worker for worker cores,
-rx and tx for the RX and TX cores:
+Once queues are set up successfully, create the ports as required.
 
 .. code-block:: c
 
@@ -232,15 +239,24 @@  rx and tx for the RX and TX cores:
                 .new_event_threshold = 4096,
         };
         int dev_id = 0;
-        int port_id = 0;
-        int err = rte_event_port_setup(dev_id, port_id, &CORE_FUNCTION_conf);
+        int rx_port_id = 0;
+        int err = rte_event_port_setup(dev_id, rx_port_id, &rx_conf);
+
+        for(int worker_port_id = 1; worker_port_id <= 4; worker_port_id++) {
+	        int err = rte_event_port_setup(dev_id, worker_port_id, &worker_conf);
+        }
 
-It is now assumed that:
+        int tx_port_id = 5;
+	int err = rte_event_port_setup(dev_id, tx_port_id, &tx_conf);
+
+As shown above:
 
  * port 0: RX core
  * ports 1,2,3,4: Workers
  * port 5: TX core
 
+These ports are used for the remainder of this walk-through.
+
 Linking Queues and Ports
 ~~~~~~~~~~~~~~~~~~~~~~~~
 
@@ -254,15 +270,14 @@  can be achieved like this:
 
 .. code-block:: c
 
-        uint8_t port_id = 0;
+        uint8_t rx_port_id = 0;
+        uint8_t tx_port_id = 5;
         uint8_t atomic_qs[] = {0, 1};
         uint8_t single_link_q = 2;
-        uint8_t tx_port_id = 5;
         uin8t_t priority = RTE_EVENT_DEV_PRIORITY_NORMAL;
 
-        for(int i = 0; i < 4; i++) {
-                int worker_port = i + 1;
-                int links_made = rte_event_port_link(dev_id, worker_port, atomic_qs, NULL, 2);
+        for(int worker_port_id = 1; worker_port_id <= 4; worker_port_id++) {
+                int links_made = rte_event_port_link(dev_id, worker_port_id, atomic_qs, NULL, 2);
         }
         int links_made = rte_event_port_link(dev_id, tx_port_id, &single_link_q, &priority, 1);
 
@@ -295,14 +310,14 @@  The following code shows how those packets can be enqueued into the eventdev:
                 ev[i].flow_id = mbufs[i]->hash.rss;
                 ev[i].op = RTE_EVENT_OP_NEW;
                 ev[i].sched_type = RTE_SCHED_TYPE_ATOMIC;
-                ev[i].queue_id = 0;
+                ev[i].queue_id = atomic_q_1;
                 ev[i].event_type = RTE_EVENT_TYPE_ETHDEV;
                 ev[i].sub_event_type = 0;
                 ev[i].priority = RTE_EVENT_DEV_PRIORITY_NORMAL;
                 ev[i].mbuf = mbufs[i];
         }
 
-        const int nb_tx = rte_event_enqueue_burst(dev_id, port_id, ev, nb_rx);
+        const int nb_tx = rte_event_enqueue_burst(dev_id, rx_port_id, ev, nb_rx);
         if (nb_tx != nb_rx) {
                 for(i = nb_tx; i < nb_rx; i++)
                         rte_pktmbuf_free(mbufs[i]);
@@ -325,7 +340,7 @@  the event to the next stage in the pipeline.
 
         int timeout = 0;
         struct rte_event events[BATCH_SIZE];
-        uint16_t nb_rx = rte_event_dequeue_burst(dev_id, worker_port_id, events, BATCH_SIZE, timeout);
+        uint16_t nb_rx = rte_event_dequeue_burst(dev_id, worker_port_id1, events, BATCH_SIZE, timeout);
 
         for (i = 0; i < nb_rx; i++) {
                 /* process mbuf using events[i].queue_id as pipeline stage */
@@ -334,7 +349,7 @@  the event to the next stage in the pipeline.
                 events[i].queue_id++;
         }
 
-        uint16_t nb_tx = rte_event_enqueue_burst(dev_id, port_id, events, nb_rx);
+        uint16_t nb_tx = rte_event_enqueue_burst(dev_id, worker_port_id1, events, nb_rx);
 
 
 Egress of Events
diff --git a/doc/guides/prog_guide/img/eventdev_usage.svg b/doc/guides/prog_guide/img/eventdev_usage.svg
index 7765649..b0792dc 100644
--- a/doc/guides/prog_guide/img/eventdev_usage.svg
+++ b/doc/guides/prog_guide/img/eventdev_usage.svg
@@ -1,994 +1,546 @@ 
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by Microsoft Visio, SVG Export eventdev_usage.svg Page-1 -->
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events"
+		xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" width="9.04167in" height="1.84602in"
+		viewBox="0 0 651 132.913" xml:space="preserve" color-interpolation-filters="sRGB" class="st12">
+	<v:documentProperties v:langID="1033" v:viewMarkup="false"/>
 
-<svg
-   xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/"
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="683.12061"
-   height="184.672"
-   viewBox="0 0 546.49648 147.7376"
-   xml:space="preserve"
-   color-interpolation-filters="sRGB"
-   class="st9"
-   id="svg2"
-   version="1.1"
-   inkscape:version="0.48.4 r9939"
-   sodipodi:docname="eventdev_usage.svg"
-   style="font-size:12px;fill:none;stroke-linecap:square;stroke-miterlimit:3;overflow:visible"><metadata
-   id="metadata214"><rdf:RDF><cc:Work
-       rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
-         rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><sodipodi:namedview
-   pagecolor="#ffffff"
-   bordercolor="#666666"
-   borderopacity="1"
-   objecttolerance="10"
-   gridtolerance="10"
-   guidetolerance="10"
-   inkscape:pageopacity="0"
-   inkscape:pageshadow="2"
-   inkscape:window-width="1920"
-   inkscape:window-height="1017"
-   id="namedview212"
-   showgrid="false"
-   fit-margin-top="2"
-   fit-margin-left="2"
-   fit-margin-right="2"
-   fit-margin-bottom="2"
-   inkscape:zoom="1.2339869"
-   inkscape:cx="501.15554"
-   inkscape:cy="164.17693"
-   inkscape:window-x="-8"
-   inkscape:window-y="406"
-   inkscape:window-maximized="1"
-   inkscape:current-layer="g17" />
-	<v:documentProperties
-   v:langID="1033"
-   v:viewMarkup="false">
-		<v:userDefs>
-			<v:ud
-   v:nameU="msvSubprocessMaster"
-   v:prompt=""
-   v:val="VT4(Rectangle)" />
-			<v:ud
-   v:nameU="msvNoAutoConnect"
-   v:val="VT0(1):26" />
-		</v:userDefs>
-	</v:documentProperties>
-
-	<style
-   type="text/css"
-   id="style4">
-
-		.st1 {visibility:visible}
-		.st2 {fill:#5b9bd5;fill-opacity:0.22;filter:url(#filter_2);stroke:#5b9bd5;stroke-opacity:0.22}
-		.st3 {fill:#5b9bd5;stroke:#c7c8c8;stroke-width:0.25}
-		.st4 {fill:#feffff;font-family:Calibri;font-size:0.833336em}
-		.st5 {font-size:1em}
-		.st6 {fill:#ffd965;stroke:#c7c8c8;stroke-width:0.25}
-		.st7 {marker-end:url(#mrkr4-33);stroke:#5b9bd5;stroke-linecap:round;stroke-linejoin:round;stroke-width:1}
-		.st8 {fill:#5b9bd5;fill-opacity:1;stroke:#5b9bd5;stroke-opacity:1;stroke-width:0.28409090909091}
-		.st9 {fill:none;fill-rule:evenodd;font-size:12px;overflow:visible;stroke-linecap:square;stroke-miterlimit:3}
-
+	<style type="text/css">
+	<![CDATA[
+		.st1 {fill:#3c63ac;stroke:#30518f;stroke-width:0.75}
+		.st2 {fill:#feffff;font-family:Calibri;font-size:0.833336em}
+		.st3 {fill:none;stroke:#203864;stroke-width:0.25}
+		.st4 {stroke:#203864;stroke-linecap:round;stroke-linejoin:round;stroke-width:1}
+		.st5 {fill:#ffd965;stroke:#203864;stroke-width:0.25}
+		.st6 {fill:#000000;font-family:Calibri;font-size:1.16666em}
+		.st7 {font-size:1em}
+		.st8 {fill:none;stroke:none;stroke-width:0.25}
+		.st9 {fill:#000000;font-family:Calibri;font-size:0.833336em}
+		.st10 {fill:#000000;font-family:Calibri;font-size:1.00001em}
+		.st11 {font-size:1.16665em}
+		.st12 {fill:none;fill-rule:evenodd;font-size:12px;overflow:visible;stroke-linecap:square;stroke-miterlimit:3}
+	]]>
 	</style>
 
-	<defs
-   id="Markers">
-		<g
-   id="lend4">
-			<path
-   d="M 2,1 0,0 2,-1 2,1"
-   style="stroke:none"
-   id="path8"
-   inkscape:connector-curvature="0" />
-		</g>
-		<marker
-   id="mrkr4-33"
-   class="st8"
-   v:arrowType="4"
-   v:arrowSize="2"
-   v:setback="7.04"
-   refX="-7.04"
-   orient="auto"
-   markerUnits="strokeWidth"
-   overflow="visible"
-   style="fill:#5b9bd5;fill-opacity:1;stroke:#5b9bd5;stroke-width:0.28409091;stroke-opacity:1;overflow:visible">
-			<use
-   xlink:href="#lend4"
-   transform="scale(-3.52,-3.52)"
-   id="use11"
-   x="0"
-   y="0"
-   width="3"
-   height="3" />
-		</marker>
-	<filter
-   id="filter_2-7"
-   color-interpolation-filters="sRGB"><feGaussianBlur
-     stdDeviation="2"
-     id="feGaussianBlur15-1" /></filter><marker
-   id="mrkr4-33-2"
-   class="st8"
-   v:arrowType="4"
-   v:arrowSize="2"
-   v:setback="7.04"
-   refX="-7.04"
-   orient="auto"
-   markerUnits="strokeWidth"
-   overflow="visible"
-   style="fill:#5b9bd5;fill-opacity:1;stroke:#5b9bd5;stroke-width:0.28409091;stroke-opacity:1;overflow:visible"><use
-     xlink:href="#lend4"
-     transform="scale(-3.52,-3.52)"
-     id="use11-3"
-     x="0"
-     y="0"
-     width="3"
-     height="3" /></marker><marker
-   id="mrkr4-33-6"
-   class="st8"
-   v:arrowType="4"
-   v:arrowSize="2"
-   v:setback="7.04"
-   refX="-7.04"
-   orient="auto"
-   markerUnits="strokeWidth"
-   overflow="visible"
-   style="fill:#5b9bd5;fill-opacity:1;stroke:#5b9bd5;stroke-width:0.28409091;stroke-opacity:1;overflow:visible"><use
-     xlink:href="#lend4"
-     transform="scale(-3.52,-3.52)"
-     id="use11-8"
-     x="0"
-     y="0"
-     width="3"
-     height="3" /></marker></defs>
-	<defs
-   id="Filters">
-		<filter
-   id="filter_2"
-   color-interpolation-filters="sRGB">
-			<feGaussianBlur
-   stdDeviation="2"
-   id="feGaussianBlur15" />
-		</filter>
-	</defs>
-	<g
-   v:mID="0"
-   v:index="1"
-   v:groupContext="foregroundPage"
-   id="g17"
-   transform="translate(-47.323579,-90.784072)">
-		<v:userDefs>
-			<v:ud
-   v:nameU="msvThemeOrder"
-   v:val="VT0(0):26" />
-		</v:userDefs>
-		<title
-   id="title19">Page-1</title>
-		<v:pageProperties
-   v:drawingScale="1"
-   v:pageScale="1"
-   v:drawingUnits="0"
-   v:shadowOffsetX="9"
-   v:shadowOffsetY="-9" />
-		<v:layer
-   v:name="Connector"
-   v:index="0" />
-		<g
-   id="shape1-1"
-   v:mID="1"
-   v:groupContext="shape"
-   transform="matrix(0.77644652,0,0,0.77644652,128.62352,-288.18843)">
-			<title
-   id="title22">Square</title>
-			<desc
-   id="desc24">Atomic Queue #1</desc>
-			<v:userDefs>
-				<v:ud
-   v:nameU="visVersion"
-   v:val="VT0(15):26" />
-			</v:userDefs>
-			<v:textBlock
-   v:margins="rect(4,4,4,4)" />
-			<v:textRect
-   cx="30.75"
-   cy="581.25"
-   width="61.5"
-   height="61.5" />
-			<g
-   id="shadow1-2"
-   v:groupContext="shadow"
-   v:shadowOffsetX="0.345598"
-   v:shadowOffsetY="-1.97279"
-   v:shadowType="1"
-   transform="translate(0.345598,1.97279)"
-   class="st1"
-   style="visibility:visible">
-				<rect
-   x="0"
-   y="550.5"
-   width="61.5"
-   height="61.5"
-   class="st2"
-   id="rect27"
-   style="fill:#5b9bd5;fill-opacity:0.22000002;stroke:#5b9bd5;stroke-opacity:0.22000002;filter:url(#filter_2)" />
+	<g v:mID="0" v:index="1" v:groupContext="foregroundPage">
+		<title>Page-1</title>
+		<v:pageProperties v:drawingScale="1" v:pageScale="1" v:drawingUnits="0" v:shadowOffsetX="9" v:shadowOffsetY="-9"/>
+		<v:layer v:name="Connector" v:index="0"/>
+		<g id="group1068-1" transform="translate(0.75,-0.25)" v:mID="1068" v:groupContext="group">
+			<title>Sheet.1068</title>
+			<g id="shape3-2" v:mID="3" v:groupContext="shape" transform="translate(63,184.827) rotate(180)">
+				<title>Simple Arrow</title>
+				<desc>In Intf</desc>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+					<v:ud v:nameU="ArrowType" v:prompt="" v:val="VT0(2):26"/>
+				</v:userDefs>
+				<v:textBlock v:margins="rect(4,4,4,4)"/>
+				<v:textRect cx="31.5" cy="132.913" width="63.01" height="0" transform="rotate(180)"/>
+				<path d="M0 132.91 L12 120.92 L12 126.92 L63 126.92 L63 132.91 L63 138.91 L12 138.91 L12 144.91 L0 132.91 Z"
+						class="st1"/>
+				<text x="-43.6" y="-129.91" transform="rotate(180)" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>In Intf</text>			</g>
+			<g id="group1010-5" transform="translate(130.5,-73.3167)" v:mID="1010" v:groupContext="group">
+				<title>Sheet.1010</title>
+				<g id="group1000-6" transform="translate(-2.19824E-14,-0.0534178)" v:mID="1000" v:groupContext="group">
+					<title>Sheet.1000</title>
+					<g id="shape1001-7" v:mID="1001" v:groupContext="shape" transform="translate(0,-4.86)">
+						<title>Rectangle.38</title>
+						<v:userDefs>
+							<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+						</v:userDefs>
+						<rect x="0" y="123.913" width="22.3966" height="8.99999" class="st3"/>
+					</g>
+					<g id="shape1002-9" v:mID="1002" v:groupContext="shape" v:layerMember="0" transform="translate(2.19832,-18.18)">
+						<title>Dynamic connector.162</title>
+						<path d="M9 137.41 L9 146.41" class="st4"/>
+					</g>
+					<g id="shape1003-12" v:mID="1003" v:groupContext="shape" v:layerMember="0"
+							transform="translate(7.79747,-18.18)">
+						<title>Dynamic connector.163</title>
+						<path d="M9 137.41 L9 146.41" class="st4"/>
+					</g>
+					<g id="shape1004-15" v:mID="1004" v:groupContext="shape" v:layerMember="0" transform="translate(-3.40084,-18)">
+						<title>Dynamic connector.164</title>
+						<path d="M9 137.41 L9 146.41" class="st4"/>
+					</g>
+				</g>
+				<g id="group1005-18" transform="translate(22.6034,0)" v:mID="1005" v:groupContext="group">
+					<title>Sheet.1005</title>
+					<g id="shape1006-19" v:mID="1006" v:groupContext="shape" transform="translate(0,-4.86)">
+						<title>Rectangle.38</title>
+						<v:userDefs>
+							<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+						</v:userDefs>
+						<rect x="0" y="123.913" width="22.3966" height="8.99999" class="st3"/>
+					</g>
+					<g id="shape1007-21" v:mID="1007" v:groupContext="shape" v:layerMember="0"
+							transform="translate(2.19832,-18.18)">
+						<title>Dynamic connector.162</title>
+						<path d="M9 137.41 L9 146.41" class="st4"/>
+					</g>
+					<g id="shape1008-24" v:mID="1008" v:groupContext="shape" v:layerMember="0"
+							transform="translate(7.79747,-18.18)">
+						<title>Dynamic connector.163</title>
+						<path d="M9 137.41 L9 146.41" class="st4"/>
+					</g>
+					<g id="shape1009-27" v:mID="1009" v:groupContext="shape" v:layerMember="0" transform="translate(-3.40084,-18)">
+						<title>Dynamic connector.164</title>
+						<path d="M9 137.41 L9 146.41" class="st4"/>
+					</g>
+				</g>
 			</g>
-			<rect
-   x="0"
-   y="550.5"
-   width="61.5"
-   height="61.5"
-   class="st3"
-   id="rect29"
-   style="fill:#5b9bd5;stroke:#c7c8c8;stroke-width:0.25" />
-
-		</g>
-		<g
-   id="shape3-8"
-   v:mID="3"
-   v:groupContext="shape"
-   transform="matrix(0.77644652,0,0,0.77644652,297.37175,-288.18843)">
-			<title
-   id="title36">Square.3</title>
-			<desc
-   id="desc38">Atomic Queue #2</desc>
-			<v:userDefs>
-				<v:ud
-   v:nameU="visVersion"
-   v:val="VT0(15):26" />
-			</v:userDefs>
-			<v:textBlock
-   v:margins="rect(4,4,4,4)" />
-			<v:textRect
-   cx="30.75"
-   cy="581.25"
-   width="61.5"
-   height="61.5" />
-			<g
-   id="shadow3-9"
-   v:groupContext="shadow"
-   v:shadowOffsetX="0.345598"
-   v:shadowOffsetY="-1.97279"
-   v:shadowType="1"
-   transform="translate(0.345598,1.97279)"
-   class="st1"
-   style="visibility:visible">
-				<rect
-   x="0"
-   y="550.5"
-   width="61.5"
-   height="61.5"
-   class="st2"
-   id="rect41"
-   style="fill:#5b9bd5;fill-opacity:0.22000002;stroke:#5b9bd5;stroke-opacity:0.22000002;filter:url(#filter_2)" />
+			<g id="group1016-30" transform="translate(301.5,-73.3167)" v:mID="1016" v:groupContext="group">
+				<title>Sheet.1016</title>
+				<g id="group1017-31" transform="translate(-2.19824E-14,-0.0534178)" v:mID="1017" v:groupContext="group">
+					<title>Sheet.1017</title>
+					<g id="shape1018-32" v:mID="1018" v:groupContext="shape" transform="translate(0,-4.86)">
+						<title>Rectangle.38</title>
+						<v:userDefs>
+							<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+						</v:userDefs>
+						<rect x="0" y="123.913" width="22.3966" height="8.99999" class="st3"/>
+					</g>
+					<g id="shape1019-34" v:mID="1019" v:groupContext="shape" v:layerMember="0"
+							transform="translate(2.19832,-18.18)">
+						<title>Dynamic connector.162</title>
+						<path d="M9 137.41 L9 146.41" class="st4"/>
+					</g>
+					<g id="shape1020-37" v:mID="1020" v:groupContext="shape" v:layerMember="0"
+							transform="translate(7.79747,-18.18)">
+						<title>Dynamic connector.163</title>
+						<path d="M9 137.41 L9 146.41" class="st4"/>
+					</g>
+					<g id="shape1021-40" v:mID="1021" v:groupContext="shape" v:layerMember="0" transform="translate(-3.40084,-18)">
+						<title>Dynamic connector.164</title>
+						<path d="M9 137.41 L9 146.41" class="st4"/>
+					</g>
+				</g>
+				<g id="group1022-43" transform="translate(22.6034,0)" v:mID="1022" v:groupContext="group">
+					<title>Sheet.1022</title>
+					<g id="shape1023-44" v:mID="1023" v:groupContext="shape" transform="translate(0,-4.86)">
+						<title>Rectangle.38</title>
+						<v:userDefs>
+							<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+						</v:userDefs>
+						<rect x="0" y="123.913" width="22.3966" height="8.99999" class="st3"/>
+					</g>
+					<g id="shape1024-46" v:mID="1024" v:groupContext="shape" v:layerMember="0"
+							transform="translate(2.19832,-18.18)">
+						<title>Dynamic connector.162</title>
+						<path d="M9 137.41 L9 146.41" class="st4"/>
+					</g>
+					<g id="shape1025-49" v:mID="1025" v:groupContext="shape" v:layerMember="0"
+							transform="translate(7.79747,-18.18)">
+						<title>Dynamic connector.163</title>
+						<path d="M9 137.41 L9 146.41" class="st4"/>
+					</g>
+					<g id="shape1026-52" v:mID="1026" v:groupContext="shape" v:layerMember="0" transform="translate(-3.40084,-18)">
+						<title>Dynamic connector.164</title>
+						<path d="M9 137.41 L9 146.41" class="st4"/>
+					</g>
+				</g>
 			</g>
-			<rect
-   x="0"
-   y="550.5"
-   width="61.5"
-   height="61.5"
-   class="st3"
-   id="rect43"
-   style="fill:#5b9bd5;stroke:#c7c8c8;stroke-width:0.25" />
-
-		</g>
-		<g
-   id="shape4-15"
-   v:mID="4"
-   v:groupContext="shape"
-   transform="matrix(0.77644652,0,0,0.77644652,466.1192,-288.18843)">
-			<title
-   id="title50">Square.4</title>
-			<desc
-   id="desc52">Single Link Queue # 1</desc>
-			<v:userDefs>
-				<v:ud
-   v:nameU="visVersion"
-   v:val="VT0(15):26" />
-			</v:userDefs>
-			<v:textBlock
-   v:margins="rect(4,4,4,4)" />
-			<v:textRect
-   cx="30.75"
-   cy="581.25"
-   width="61.5"
-   height="61.5" />
-			<g
-   id="shadow4-16"
-   v:groupContext="shadow"
-   v:shadowOffsetX="0.345598"
-   v:shadowOffsetY="-1.97279"
-   v:shadowType="1"
-   transform="translate(0.345598,1.97279)"
-   class="st1"
-   style="visibility:visible">
-				<rect
-   x="0"
-   y="550.5"
-   width="61.5"
-   height="61.5"
-   class="st2"
-   id="rect55"
-   style="fill:#5b9bd5;fill-opacity:0.22000002;stroke:#5b9bd5;stroke-opacity:0.22000002;filter:url(#filter_2)" />
+			<g id="group1032-55" transform="translate(468,-73.2)" v:mID="1032" v:groupContext="group">
+				<title>Sheet.1032</title>
+				<g id="group1033-56" transform="translate(-2.19824E-14,-0.0534178)" v:mID="1033" v:groupContext="group">
+					<title>Sheet.1033</title>
+					<g id="shape1034-57" v:mID="1034" v:groupContext="shape" transform="translate(0,-4.86)">
+						<title>Rectangle.38</title>
+						<v:userDefs>
+							<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+						</v:userDefs>
+						<rect x="0" y="123.913" width="22.3966" height="8.99999" class="st3"/>
+					</g>
+					<g id="shape1035-59" v:mID="1035" v:groupContext="shape" v:layerMember="0"
+							transform="translate(2.19832,-18.18)">
+						<title>Dynamic connector.162</title>
+						<path d="M9 137.41 L9 146.41" class="st4"/>
+					</g>
+					<g id="shape1036-62" v:mID="1036" v:groupContext="shape" v:layerMember="0"
+							transform="translate(7.79747,-18.18)">
+						<title>Dynamic connector.163</title>
+						<path d="M9 137.41 L9 146.41" class="st4"/>
+					</g>
+					<g id="shape1037-65" v:mID="1037" v:groupContext="shape" v:layerMember="0" transform="translate(-3.40084,-18)">
+						<title>Dynamic connector.164</title>
+						<path d="M9 137.41 L9 146.41" class="st4"/>
+					</g>
+				</g>
+				<g id="group1038-68" transform="translate(22.6034,0)" v:mID="1038" v:groupContext="group">
+					<title>Sheet.1038</title>
+					<g id="shape1039-69" v:mID="1039" v:groupContext="shape" transform="translate(0,-4.86)">
+						<title>Rectangle.38</title>
+						<v:userDefs>
+							<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+						</v:userDefs>
+						<rect x="0" y="123.913" width="22.3966" height="8.99999" class="st3"/>
+					</g>
+					<g id="shape1040-71" v:mID="1040" v:groupContext="shape" v:layerMember="0"
+							transform="translate(2.19832,-18.18)">
+						<title>Dynamic connector.162</title>
+						<path d="M9 137.41 L9 146.41" class="st4"/>
+					</g>
+					<g id="shape1041-74" v:mID="1041" v:groupContext="shape" v:layerMember="0"
+							transform="translate(7.79747,-18.18)">
+						<title>Dynamic connector.163</title>
+						<path d="M9 137.41 L9 146.41" class="st4"/>
+					</g>
+					<g id="shape1042-77" v:mID="1042" v:groupContext="shape" v:layerMember="0" transform="translate(-3.40084,-18)">
+						<title>Dynamic connector.164</title>
+						<path d="M9 137.41 L9 146.41" class="st4"/>
+					</g>
+				</g>
 			</g>
-			<rect
-   x="0"
-   y="550.5"
-   width="61.5"
-   height="61.5"
-   class="st3"
-   id="rect57"
-   style="fill:#5b9bd5;stroke:#c7c8c8;stroke-width:0.25" />
-
-		</g>
-		<g
-   id="shape5-22"
-   v:mID="5"
-   v:groupContext="shape"
-   transform="matrix(0.77644652,0,0,0.77644652,52.208527,-296.14701)">
-			<title
-   id="title64">Circle</title>
-			<desc
-   id="desc66">RX</desc>
-			<v:userDefs>
-				<v:ud
-   v:nameU="visVersion"
-   v:val="VT0(15):26" />
-			</v:userDefs>
-			<v:textBlock
-   v:margins="rect(4,4,4,4)" />
-			<v:textRect
-   cx="20.5"
-   cy="591.5"
-   width="35.88"
-   height="30.75" />
-			<g
-   id="shadow5-23"
-   v:groupContext="shadow"
-   v:shadowOffsetX="0.345598"
-   v:shadowOffsetY="-1.97279"
-   v:shadowType="1"
-   transform="translate(0.345598,1.97279)"
-   class="st1"
-   style="visibility:visible">
-				<path
-   d="m 0,591.5 a 20.5,20.5 0 0 1 41,0 20.5,20.5 0 1 1 -41,0 z"
-   class="st2"
-   id="path69"
-   inkscape:connector-curvature="0"
-   style="fill:#5b9bd5;fill-opacity:0.22000002;stroke:#5b9bd5;stroke-opacity:0.22000002;filter:url(#filter_2)" />
+			<g id="shape1044-80" v:mID="1044" v:groupContext="shape" transform="translate(651.291,179.381) rotate(179.228)">
+				<title>Simple Arrow.1044</title>
+				<desc>Out Intf</desc>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+					<v:ud v:nameU="ArrowType" v:prompt="" v:val="VT0(2):26"/>
+				</v:userDefs>
+				<v:textBlock v:margins="rect(4,4,4,4)"/>
+				<v:textRect cx="30.3028" cy="132.913" width="60.61" height="0" transform="rotate(180)"/>
+				<path d="M0 132.91 L12 120.92 L12 126.92 L60.61 126.92 L60.61 132.91 L60.61 138.91 L12 138.91 L12 144.91 L0 132.91
+							 Z" class="st1"/>
+				<text x="-46.13" y="-129.91" transform="rotate(180)" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Out Intf</text>			</g>
+			<g id="shape1045-83" v:mID="1045" v:groupContext="shape" transform="translate(67.8,-50.9334)">
+				<title>Rounded Rectangle.1045</title>
+				<desc>RX Core</desc>
+				<v:userDefs>
+					<v:ud v:nameU="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"/>
+					<v:ud v:nameU="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"/>
+					<v:ud v:nameU="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"/>
+					<v:ud v:nameU="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"/>
+					<v:ud v:nameU="CornerLockHoriz" v:prompt="" v:val="VT0(1):5"/>
+					<v:ud v:nameU="CornerLockVert" v:prompt="" v:val="VT0(1):5"/>
+					<v:ud v:nameU="CornerLockDiag" v:prompt="" v:val="VT0(0):5"/>
+					<v:ud v:nameU="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"/>
+					<v:ud v:nameU="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"/>
+					<v:ud v:nameU="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"/>
+					<v:ud v:nameU="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"/>
+					<v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/>
+					<v:ud v:nameU="TopLeftOffset" v:prompt="" v:val="VT0(0.0703125):1"/>
+					<v:ud v:nameU="TopRightOffset" v:prompt="" v:val="VT0(0.0703125):1"/>
+					<v:ud v:nameU="BotLeftOffset" v:prompt="" v:val="VT0(0.0703125):1"/>
+					<v:ud v:nameU="BotRightOffset" v:prompt="" v:val="VT0(0.0703125):1"/>
+				</v:userDefs>
+				<v:textBlock v:margins="rect(4,4,4,4)"/>
+				<v:textRect cx="25.3125" cy="101.413" width="50.63" height="63"/>
+				<path d="M5.06 132.91 L45.56 132.91 A5.06242 5.06242 -180 0 0 50.62 127.85 L50.62 74.98 A5.06242 5.06242 -180 0 0
+							 45.56 69.91 L5.06 69.91 A5.06242 5.06242 -180 0 0 0 74.98 L0 127.85 A5.06242 5.06242 -180 0 0 5.06 132.91
+							 Z" class="st5"/>
+				<text x="17.88" y="88.81" class="st6" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>RX<v:newlineChar/><v:newlineChar/><tspan
+							x="11.97" dy="2.4em" class="st7">Core</tspan></text>			</g>
+			<g id="shape1056-87" v:mID="1056" v:groupContext="shape" transform="translate(532.5,-54)">
+				<title>Rounded Rectangle.1056</title>
+				<desc>TX Core</desc>
+				<v:userDefs>
+					<v:ud v:nameU="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"/>
+					<v:ud v:nameU="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"/>
+					<v:ud v:nameU="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"/>
+					<v:ud v:nameU="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"/>
+					<v:ud v:nameU="CornerLockHoriz" v:prompt="" v:val="VT0(1):5"/>
+					<v:ud v:nameU="CornerLockVert" v:prompt="" v:val="VT0(1):5"/>
+					<v:ud v:nameU="CornerLockDiag" v:prompt="" v:val="VT0(0):5"/>
+					<v:ud v:nameU="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"/>
+					<v:ud v:nameU="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"/>
+					<v:ud v:nameU="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"/>
+					<v:ud v:nameU="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"/>
+					<v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/>
+					<v:ud v:nameU="TopLeftOffset" v:prompt="" v:val="VT0(0.0703125):1"/>
+					<v:ud v:nameU="TopRightOffset" v:prompt="" v:val="VT0(0.0703125):1"/>
+					<v:ud v:nameU="BotLeftOffset" v:prompt="" v:val="VT0(0.0703125):1"/>
+					<v:ud v:nameU="BotRightOffset" v:prompt="" v:val="VT0(0.0703125):1"/>
+				</v:userDefs>
+				<v:textBlock v:margins="rect(4,4,4,4)"/>
+				<v:textRect cx="25.3125" cy="101.413" width="50.63" height="63"/>
+				<path d="M5.06 132.91 L45.56 132.91 A5.06242 5.06242 -180 0 0 50.62 127.85 L50.62 74.98 A5.06242 5.06242 -180 0 0
+							 45.56 69.91 L5.06 69.91 A5.06242 5.06242 -180 0 0 0 74.98 L0 127.85 A5.06242 5.06242 -180 0 0 5.06 132.91
+							 Z" class="st5"/>
+				<text x="18.27" y="88.81" class="st6" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>TX<v:newlineChar/><v:newlineChar/><tspan
+							x="11.97" dy="2.4em" class="st7">Core</tspan></text>			</g>
+			<g id="shape1057-91" v:mID="1057" v:groupContext="shape" transform="translate(123.188,-59.0334)">
+				<title>Rectangle.1057</title>
+				<desc>Atomic Q 1</desc>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+				</v:userDefs>
+				<v:textBlock v:margins="rect(4,4,4,4)"/>
+				<v:textRect cx="29.8125" cy="123.797" width="59.63" height="18.2334"/>
+				<rect x="0" y="114.68" width="59.625" height="18.2334" class="st8"/>
+				<text x="7.19" y="126.8" class="st9" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Atomic Q 1</text>			</g>
+			<g id="shape1058-94" v:mID="1058" v:groupContext="shape" transform="translate(295.5,-59.4)">
+				<title>Rectangle.1058</title>
+				<desc>Atomic Q 2</desc>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+				</v:userDefs>
+				<v:textBlock v:margins="rect(4,4,4,4)"/>
+				<v:textRect cx="29.8125" cy="123.797" width="59.63" height="18.2334"/>
+				<rect x="0" y="114.68" width="59.625" height="18.2334" class="st8"/>
+				<text x="7.19" y="126.8" class="st9" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Atomic Q 2</text>			</g>
+			<g id="shape1059-97" v:mID="1059" v:groupContext="shape" transform="translate(460.687,-58.3167)">
+				<title>Rectangle.1059</title>
+				<desc>Single Link</desc>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+				</v:userDefs>
+				<v:textBlock v:margins="rect(4,4,4,4)"/>
+				<v:textRect cx="29.8125" cy="123.797" width="59.63" height="18.2334"/>
+				<rect x="0" y="114.68" width="59.625" height="18.2334" class="st8"/>
+				<text x="8.47" y="126.8" class="st9" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Single Link</text>			</g>
+			<g id="shape1060-100" v:mID="1060" v:groupContext="shape" transform="translate(198,-1.2)">
+				<title>Rectangle.1060</title>
+				<desc>Stage 1</desc>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+				</v:userDefs>
+				<v:textBlock v:margins="rect(4,4,4,4)"/>
+				<v:textRect cx="29.8125" cy="123.797" width="59.63" height="18.2334"/>
+				<rect x="0" y="114.68" width="59.625" height="18.2334" class="st8"/>
+				<text x="14.94" y="126.8" class="st9" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Stage 1</text>			</g>
+			<g id="shape1061-103" v:mID="1061" v:groupContext="shape" transform="translate(366.188,0)">
+				<title>Rectangle.1061</title>
+				<desc>Stage 2</desc>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
+				</v:userDefs>
+				<v:textBlock v:margins="rect(4,4,4,4)"/>
+				<v:textRect cx="29.8125" cy="123.797" width="59.63" height="18.2334"/>
+				<rect x="0" y="114.68" width="59.625" height="18.2334" class="st8"/>
+				<text x="14.94" y="126.8" class="st9" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Stage 2</text>			</g>
+			<g id="group1062-106" transform="translate(199.2,-18.7134)" v:mID="1062" v:groupContext="group">
+				<title>Sheet.1062</title>
+				<g id="shape1052-107" v:mID="1052" v:groupContext="shape" transform="translate(18.66,-50.7)">
+					<title>Rounded Rectangle.1049</title>
+					<desc>Worker4 Core</desc>
+					<v:userDefs>
+						<v:ud v:nameU="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"/>
+						<v:ud v:nameU="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"/>
+						<v:ud v:nameU="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"/>
+						<v:ud v:nameU="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"/>
+						<v:ud v:nameU="CornerLockHoriz" v:prompt="" v:val="VT0(1):5"/>
+						<v:ud v:nameU="CornerLockVert" v:prompt="" v:val="VT0(1):5"/>
+						<v:ud v:nameU="CornerLockDiag" v:prompt="" v:val="VT0(0):5"/>
+						<v:ud v:nameU="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"/>
+						<v:ud v:nameU="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"/>
+						<v:ud v:nameU="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"/>
+						<v:ud v:nameU="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"/>
+						<v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/>
+						<v:ud v:nameU="TopLeftOffset" v:prompt="" v:val="VT0(0.097416666666665):1"/>
+						<v:ud v:nameU="TopRightOffset" v:prompt="" v:val="VT0(0.097416666666665):1"/>
+						<v:ud v:nameU="BotLeftOffset" v:prompt="" v:val="VT0(0.097416666666665):1"/>
+						<v:ud v:nameU="BotRightOffset" v:prompt="" v:val="VT0(0.097416666666665):1"/>
+					</v:userDefs>
+					<v:textBlock v:margins="rect(4,4,4,4)" v:verticalAlign="0"/>
+					<v:textRect cx="35.07" cy="101.413" width="70.14" height="63"/>
+					<path d="M7.01 132.91 L63.13 132.91 A7.01389 7.01389 -180 0 0 70.14 125.9 L70.14 76.93 A7.01389 7.01389 -180
+								 0 0 63.13 69.91 L7.01 69.91 A7.01389 7.01389 -180 0 0 0 76.93 L0 125.9 A7.01389 7.01389 -180 0 0
+								 7.01 132.91 Z" class="st5"/>
+					<text x="13.63" y="84.71" class="st10" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Worker4<v:newlineChar/><v:newlineChar/><tspan
+								x="21.72" dy="2.357em" class="st11">Core</tspan></text>				</g>
+				<g id="shape1053-111" v:mID="1053" v:groupContext="shape" transform="translate(12.9,-33.6)">
+					<title>Rounded Rectangle.1048</title>
+					<desc>Worker3 Core</desc>
+					<v:userDefs>
+						<v:ud v:nameU="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"/>
+						<v:ud v:nameU="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"/>
+						<v:ud v:nameU="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"/>
+						<v:ud v:nameU="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"/>
+						<v:ud v:nameU="CornerLockHoriz" v:prompt="" v:val="VT0(1):5"/>
+						<v:ud v:nameU="CornerLockVert" v:prompt="" v:val="VT0(1):5"/>
+						<v:ud v:nameU="CornerLockDiag" v:prompt="" v:val="VT0(0):5"/>
+						<v:ud v:nameU="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"/>
+						<v:ud v:nameU="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"/>
+						<v:ud v:nameU="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"/>
+						<v:ud v:nameU="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"/>
+						<v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/>
+						<v:ud v:nameU="TopLeftOffset" v:prompt="" v:val="VT0(0.099166666666667):1"/>
+						<v:ud v:nameU="TopRightOffset" v:prompt="" v:val="VT0(0.099166666666667):1"/>
+						<v:ud v:nameU="BotLeftOffset" v:prompt="" v:val="VT0(0.099166666666667):1"/>
+						<v:ud v:nameU="BotRightOffset" v:prompt="" v:val="VT0(0.099166666666667):1"/>
+					</v:userDefs>
+					<v:textBlock v:margins="rect(4,4,4,4)" v:verticalAlign="0"/>
+					<v:textRect cx="35.7" cy="101.413" width="71.4" height="63"/>
+					<path d="M7.14 132.91 L64.26 132.91 A7.13988 7.13988 -180 0 0 71.4 125.77 L71.4 77.05 A7.13988 7.13988 -180 0
+								 0 64.26 69.91 L7.14 69.91 A7.13988 7.13988 -180 0 0 0 77.05 L0 125.77 A7.13988 7.13988 -180 0 0
+								 7.14 132.91 Z" class="st5"/>
+					<text x="14.26" y="84.71" class="st10" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Worker3<v:newlineChar/><v:newlineChar/><tspan
+								x="22.35" dy="2.357em" class="st11">Core</tspan></text>				</g>
+				<g id="shape1054-115" v:mID="1054" v:groupContext="shape" transform="translate(5.89875,-16.8)">
+					<title>Rounded Rectangle.1047</title>
+					<desc>Worker2 Core</desc>
+					<v:userDefs>
+						<v:ud v:nameU="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"/>
+						<v:ud v:nameU="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"/>
+						<v:ud v:nameU="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"/>
+						<v:ud v:nameU="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"/>
+						<v:ud v:nameU="CornerLockHoriz" v:prompt="" v:val="VT0(1):5"/>
+						<v:ud v:nameU="CornerLockVert" v:prompt="" v:val="VT0(1):5"/>
+						<v:ud v:nameU="CornerLockDiag" v:prompt="" v:val="VT0(0):5"/>
+						<v:ud v:nameU="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"/>
+						<v:ud v:nameU="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"/>
+						<v:ud v:nameU="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"/>
+						<v:ud v:nameU="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"/>
+						<v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/>
+						<v:ud v:nameU="TopLeftOffset" v:prompt="" v:val="VT0(0.097953125):1"/>
+						<v:ud v:nameU="TopRightOffset" v:prompt="" v:val="VT0(0.097953125):1"/>
+						<v:ud v:nameU="BotLeftOffset" v:prompt="" v:val="VT0(0.097953125):1"/>
+						<v:ud v:nameU="BotRightOffset" v:prompt="" v:val="VT0(0.097953125):1"/>
+					</v:userDefs>
+					<v:textBlock v:margins="rect(4,4,4,4)" v:verticalAlign="0"/>
+					<v:textRect cx="35.2631" cy="101.413" width="70.53" height="63"/>
+					<path d="M7.05 132.91 L63.47 132.91 A7.05251 7.05251 -180 0 0 70.53 125.86 L70.53 76.97 A7.05251 7.05251 -180
+								 0 0 63.47 69.91 L7.05 69.91 A7.05251 7.05251 -180 0 0 0 76.97 L0 125.86 A7.05251 7.05251 -180 0
+								 0 7.05 132.91 Z" class="st5"/>
+					<text x="13.82" y="84.71" class="st10" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Worker2<v:newlineChar/><v:newlineChar/><tspan
+								x="21.92" dy="2.357em" class="st11">Core</tspan></text>				</g>
+				<g id="shape1055-119" v:mID="1055" v:groupContext="shape">
+					<title>Rounded Rectangle.1046</title>
+					<desc>Worker1 Core</desc>
+					<v:userDefs>
+						<v:ud v:nameU="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"/>
+						<v:ud v:nameU="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"/>
+						<v:ud v:nameU="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"/>
+						<v:ud v:nameU="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"/>
+						<v:ud v:nameU="CornerLockHoriz" v:prompt="" v:val="VT0(1):5"/>
+						<v:ud v:nameU="CornerLockVert" v:prompt="" v:val="VT0(1):5"/>
+						<v:ud v:nameU="CornerLockDiag" v:prompt="" v:val="VT0(0):5"/>
+						<v:ud v:nameU="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"/>
+						<v:ud v:nameU="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"/>
+						<v:ud v:nameU="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"/>
+						<v:ud v:nameU="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"/>
+						<v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/>
+						<v:ud v:nameU="TopLeftOffset" v:prompt="" v:val="VT0(0.098333333333333):1"/>
+						<v:ud v:nameU="TopRightOffset" v:prompt="" v:val="VT0(0.098333333333333):1"/>
+						<v:ud v:nameU="BotLeftOffset" v:prompt="" v:val="VT0(0.098333333333333):1"/>
+						<v:ud v:nameU="BotRightOffset" v:prompt="" v:val="VT0(0.098333333333333):1"/>
+					</v:userDefs>
+					<v:textBlock v:margins="rect(4,4,4,4)" v:verticalAlign="0"/>
+					<v:textRect cx="35.4" cy="101.413" width="70.8" height="63"/>
+					<path d="M7.08 132.91 L63.72 132.91 A7.07988 7.07988 -180 0 0 70.8 125.83 L70.8 76.99 A7.07988 7.07988 -180 0
+								 0 63.72 69.91 L7.08 69.91 A7.07988 7.07988 -180 0 0 0 76.99 L0 125.83 A7.07988 7.07988 -180 0 0
+								 7.08 132.91 Z" class="st5"/>
+					<text x="13.96" y="84.71" class="st10" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Worker1<v:newlineChar/><v:newlineChar/><tspan
+								x="22.05" dy="2.357em" class="st11">Core</tspan></text>				</g>
 			</g>
-			<path
-   d="m 0,591.5 a 20.5,20.5 0 0 1 41,0 20.5,20.5 0 1 1 -41,0 z"
-   class="st6"
-   id="path71"
-   inkscape:connector-curvature="0"
-   style="fill:#ffd965;stroke:#c7c8c8;stroke-width:0.25" />
-			<text
-   x="15.19"
-   y="594.5"
-   class="st4"
-   v:langID="1033"
-   id="text73"
-   style="fill:#feffff;font-family:Calibri"><v:paragraph
-   v:horizAlign="1" /><v:tabList />RX</text>
-
-		</g>
-		<g
-   id="shape6-28"
-   v:mID="6"
-   v:groupContext="shape"
-   v:layerMember="0"
-   transform="matrix(0.77644652,0,0,0.77644652,84.042834,-305.07614)">
-			<title
-   id="title76">Dynamic connector</title>
-			<path
-   d="m 0,603 50.38,0"
-   class="st7"
-   id="path78"
-   inkscape:connector-curvature="0"
-   style="stroke:#5b9bd5;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker-end:url(#mrkr4-33)" />
-		</g>
-		<g
-   id="shape7-34"
-   v:mID="7"
-   v:groupContext="shape"
-   transform="matrix(0.77644652,0,0,0.77644652,220.95621,-296.14701)">
-			<title
-   id="title81">Circle.7</title>
-			<desc
-   id="desc83">W ..</desc>
-			<v:userDefs>
-				<v:ud
-   v:nameU="visVersion"
-   v:val="VT0(15):26" />
-			</v:userDefs>
-			<v:textBlock
-   v:margins="rect(4,4,4,4)" />
-			<v:textRect
-   cx="20.5"
-   cy="591.5"
-   width="35.88"
-   height="30.75" />
-			<g
-   id="shadow7-35"
-   v:groupContext="shadow"
-   v:shadowOffsetX="0.345598"
-   v:shadowOffsetY="-1.97279"
-   v:shadowType="1"
-   transform="translate(0.345598,1.97279)"
-   class="st1"
-   style="visibility:visible">
-				<path
-   d="m 0,591.5 a 20.5,20.5 0 0 1 41,0 20.5,20.5 0 1 1 -41,0 z"
-   class="st2"
-   id="path86"
-   inkscape:connector-curvature="0"
-   style="fill:#5b9bd5;fill-opacity:0.22000002;stroke:#5b9bd5;stroke-opacity:0.22000002;filter:url(#filter_2)" />
-			</g>
-			<path
-   d="m 0,591.5 a 20.5,20.5 0 0 1 41,0 20.5,20.5 0 1 1 -41,0 z"
-   class="st6"
-   id="path88"
-   inkscape:connector-curvature="0"
-   style="fill:#ffd965;stroke:#c7c8c8;stroke-width:0.25" />
-			<text
-   x="12.4"
-   y="594.5"
-   class="st4"
-   v:langID="1033"
-   id="text90"
-   style="fill:#feffff;font-family:Calibri"><v:paragraph
-   v:horizAlign="1" /><v:tabList />W ..</text>
-
-		</g>
-		<g
-   id="shape9-40"
-   v:mID="9"
-   v:groupContext="shape"
-   transform="matrix(0.77644652,0,0,0.77644652,220.95621,-243.34865)">
-			<title
-   id="title93">Circle.9</title>
-			<desc
-   id="desc95">W N</desc>
-			<v:userDefs>
-				<v:ud
-   v:nameU="visVersion"
-   v:val="VT0(15):26" />
-			</v:userDefs>
-			<v:textBlock
-   v:margins="rect(4,4,4,4)" />
-			<v:textRect
-   cx="20.5"
-   cy="591.5"
-   width="35.88"
-   height="30.75" />
-			<g
-   id="shadow9-41"
-   v:groupContext="shadow"
-   v:shadowOffsetX="0.345598"
-   v:shadowOffsetY="-1.97279"
-   v:shadowType="1"
-   transform="translate(0.345598,1.97279)"
-   class="st1"
-   style="visibility:visible">
-				<path
-   d="m 0,591.5 a 20.5,20.5 0 0 1 41,0 20.5,20.5 0 1 1 -41,0 z"
-   class="st2"
-   id="path98"
-   inkscape:connector-curvature="0"
-   style="fill:#5b9bd5;fill-opacity:0.22000002;stroke:#5b9bd5;stroke-opacity:0.22000002;filter:url(#filter_2)" />
+			<g id="group1063-123" transform="translate(369.6,-18.6)" v:mID="1063" v:groupContext="group">
+				<title>Sheet.1063</title>
+				<g id="shape1064-124" v:mID="1064" v:groupContext="shape" transform="translate(18.66,-50.7)">
+					<title>Rounded Rectangle.1049</title>
+					<desc>Worker4 Core</desc>
+					<v:userDefs>
+						<v:ud v:nameU="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"/>
+						<v:ud v:nameU="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"/>
+						<v:ud v:nameU="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"/>
+						<v:ud v:nameU="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"/>
+						<v:ud v:nameU="CornerLockHoriz" v:prompt="" v:val="VT0(1):5"/>
+						<v:ud v:nameU="CornerLockVert" v:prompt="" v:val="VT0(1):5"/>
+						<v:ud v:nameU="CornerLockDiag" v:prompt="" v:val="VT0(0):5"/>
+						<v:ud v:nameU="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"/>
+						<v:ud v:nameU="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"/>
+						<v:ud v:nameU="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"/>
+						<v:ud v:nameU="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"/>
+						<v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/>
+						<v:ud v:nameU="TopLeftOffset" v:prompt="" v:val="VT0(0.097416666666665):1"/>
+						<v:ud v:nameU="TopRightOffset" v:prompt="" v:val="VT0(0.097416666666665):1"/>
+						<v:ud v:nameU="BotLeftOffset" v:prompt="" v:val="VT0(0.097416666666665):1"/>
+						<v:ud v:nameU="BotRightOffset" v:prompt="" v:val="VT0(0.097416666666665):1"/>
+					</v:userDefs>
+					<v:textBlock v:margins="rect(4,4,4,4)" v:verticalAlign="0"/>
+					<v:textRect cx="35.07" cy="101.413" width="70.14" height="63"/>
+					<path d="M7.01 132.91 L63.13 132.91 A7.01389 7.01389 -180 0 0 70.14 125.9 L70.14 76.93 A7.01389 7.01389 -180
+								 0 0 63.13 69.91 L7.01 69.91 A7.01389 7.01389 -180 0 0 0 76.93 L0 125.9 A7.01389 7.01389 -180 0 0
+								 7.01 132.91 Z" class="st5"/>
+					<text x="13.63" y="84.71" class="st10" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Worker4<v:newlineChar/><v:newlineChar/><tspan
+								x="21.72" dy="2.357em" class="st11">Core</tspan></text>				</g>
+				<g id="shape1065-128" v:mID="1065" v:groupContext="shape" transform="translate(12.9,-33.6)">
+					<title>Rounded Rectangle.1048</title>
+					<desc>Worker3 Core</desc>
+					<v:userDefs>
+						<v:ud v:nameU="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"/>
+						<v:ud v:nameU="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"/>
+						<v:ud v:nameU="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"/>
+						<v:ud v:nameU="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"/>
+						<v:ud v:nameU="CornerLockHoriz" v:prompt="" v:val="VT0(1):5"/>
+						<v:ud v:nameU="CornerLockVert" v:prompt="" v:val="VT0(1):5"/>
+						<v:ud v:nameU="CornerLockDiag" v:prompt="" v:val="VT0(0):5"/>
+						<v:ud v:nameU="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"/>
+						<v:ud v:nameU="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"/>
+						<v:ud v:nameU="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"/>
+						<v:ud v:nameU="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"/>
+						<v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/>
+						<v:ud v:nameU="TopLeftOffset" v:prompt="" v:val="VT0(0.099166666666667):1"/>
+						<v:ud v:nameU="TopRightOffset" v:prompt="" v:val="VT0(0.099166666666667):1"/>
+						<v:ud v:nameU="BotLeftOffset" v:prompt="" v:val="VT0(0.099166666666667):1"/>
+						<v:ud v:nameU="BotRightOffset" v:prompt="" v:val="VT0(0.099166666666667):1"/>
+					</v:userDefs>
+					<v:textBlock v:margins="rect(4,4,4,4)" v:verticalAlign="0"/>
+					<v:textRect cx="35.7" cy="101.413" width="71.4" height="63"/>
+					<path d="M7.14 132.91 L64.26 132.91 A7.13988 7.13988 -180 0 0 71.4 125.77 L71.4 77.05 A7.13988 7.13988 -180 0
+								 0 64.26 69.91 L7.14 69.91 A7.13988 7.13988 -180 0 0 0 77.05 L0 125.77 A7.13988 7.13988 -180 0 0
+								 7.14 132.91 Z" class="st5"/>
+					<text x="14.26" y="84.71" class="st10" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Worker3<v:newlineChar/><v:newlineChar/><tspan
+								x="22.35" dy="2.357em" class="st11">Core</tspan></text>				</g>
+				<g id="shape1066-132" v:mID="1066" v:groupContext="shape" transform="translate(5.89875,-16.8)">
+					<title>Rounded Rectangle.1047</title>
+					<desc>Worker2 Core</desc>
+					<v:userDefs>
+						<v:ud v:nameU="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"/>
+						<v:ud v:nameU="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"/>
+						<v:ud v:nameU="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"/>
+						<v:ud v:nameU="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"/>
+						<v:ud v:nameU="CornerLockHoriz" v:prompt="" v:val="VT0(1):5"/>
+						<v:ud v:nameU="CornerLockVert" v:prompt="" v:val="VT0(1):5"/>
+						<v:ud v:nameU="CornerLockDiag" v:prompt="" v:val="VT0(0):5"/>
+						<v:ud v:nameU="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"/>
+						<v:ud v:nameU="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"/>
+						<v:ud v:nameU="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"/>
+						<v:ud v:nameU="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"/>
+						<v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/>
+						<v:ud v:nameU="TopLeftOffset" v:prompt="" v:val="VT0(0.097953125):1"/>
+						<v:ud v:nameU="TopRightOffset" v:prompt="" v:val="VT0(0.097953125):1"/>
+						<v:ud v:nameU="BotLeftOffset" v:prompt="" v:val="VT0(0.097953125):1"/>
+						<v:ud v:nameU="BotRightOffset" v:prompt="" v:val="VT0(0.097953125):1"/>
+					</v:userDefs>
+					<v:textBlock v:margins="rect(4,4,4,4)" v:verticalAlign="0"/>
+					<v:textRect cx="35.2631" cy="101.413" width="70.53" height="63"/>
+					<path d="M7.05 132.91 L63.47 132.91 A7.05251 7.05251 -180 0 0 70.53 125.86 L70.53 76.97 A7.05251 7.05251 -180
+								 0 0 63.47 69.91 L7.05 69.91 A7.05251 7.05251 -180 0 0 0 76.97 L0 125.86 A7.05251 7.05251 -180 0
+								 0 7.05 132.91 Z" class="st5"/>
+					<text x="13.82" y="84.71" class="st10" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Worker2<v:newlineChar/><v:newlineChar/><tspan
+								x="21.92" dy="2.357em" class="st11">Core</tspan></text>				</g>
+				<g id="shape1067-136" v:mID="1067" v:groupContext="shape">
+					<title>Rounded Rectangle.1046</title>
+					<desc>Worker1 Core</desc>
+					<v:userDefs>
+						<v:ud v:nameU="CTypeTopLeftSnip" v:prompt="" v:val="VT0(0):5"/>
+						<v:ud v:nameU="CTypeTopRightSnip" v:prompt="" v:val="VT0(0):5"/>
+						<v:ud v:nameU="CTypeBotLeftSnip" v:prompt="" v:val="VT0(0):5"/>
+						<v:ud v:nameU="CTypeBotRightSnip" v:prompt="" v:val="VT0(0):5"/>
+						<v:ud v:nameU="CornerLockHoriz" v:prompt="" v:val="VT0(1):5"/>
+						<v:ud v:nameU="CornerLockVert" v:prompt="" v:val="VT0(1):5"/>
+						<v:ud v:nameU="CornerLockDiag" v:prompt="" v:val="VT0(0):5"/>
+						<v:ud v:nameU="TopLeftOffset" v:prompt="" v:val="VT0(0.15):1"/>
+						<v:ud v:nameU="TopRightOffset" v:prompt="" v:val="VT0(0.15):1"/>
+						<v:ud v:nameU="BotLeftOffset" v:prompt="" v:val="VT0(0.15):1"/>
+						<v:ud v:nameU="BotRightOffset" v:prompt="" v:val="VT0(0.15):1"/>
+						<v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(15):26"/>
+						<v:ud v:nameU="TopLeftOffset" v:prompt="" v:val="VT0(0.098333333333333):1"/>
+						<v:ud v:nameU="TopRightOffset" v:prompt="" v:val="VT0(0.098333333333333):1"/>
+						<v:ud v:nameU="BotLeftOffset" v:prompt="" v:val="VT0(0.098333333333333):1"/>
+						<v:ud v:nameU="BotRightOffset" v:prompt="" v:val="VT0(0.098333333333333):1"/>
+					</v:userDefs>
+					<v:textBlock v:margins="rect(4,4,4,4)" v:verticalAlign="0"/>
+					<v:textRect cx="35.4" cy="101.413" width="70.8" height="63"/>
+					<path d="M7.08 132.91 L63.72 132.91 A7.07988 7.07988 -180 0 0 70.8 125.83 L70.8 76.99 A7.07988 7.07988 -180 0
+								 0 63.72 69.91 L7.08 69.91 A7.07988 7.07988 -180 0 0 0 76.99 L0 125.83 A7.07988 7.07988 -180 0 0
+								 7.08 132.91 Z" class="st5"/>
+					<text x="13.96" y="84.71" class="st10" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Worker1<v:newlineChar/><v:newlineChar/><tspan
+								x="22.05" dy="2.357em" class="st11">Core</tspan></text>				</g>
 			</g>
-			<path
-   d="m 0,591.5 a 20.5,20.5 0 0 1 41,0 20.5,20.5 0 1 1 -41,0 z"
-   class="st6"
-   id="path100"
-   inkscape:connector-curvature="0"
-   style="fill:#ffd965;stroke:#c7c8c8;stroke-width:0.25" />
-			<text
-   x="11.69"
-   y="594.5"
-   class="st4"
-   v:langID="1033"
-   id="text102"
-   style="fill:#feffff;font-family:Calibri"><v:paragraph
-   v:horizAlign="1" /><v:tabList />W N</text>
-
-		</g>
-		<g
-   id="shape10-46"
-   v:mID="10"
-   v:groupContext="shape"
-   transform="matrix(0.77644652,0,0,0.77644652,220.95621,-348.94537)">
-			<title
-   id="title105">Circle.10</title>
-			<desc
-   id="desc107">W 1</desc>
-			<v:userDefs>
-				<v:ud
-   v:nameU="visVersion"
-   v:val="VT0(15):26" />
-			</v:userDefs>
-			<v:textBlock
-   v:margins="rect(4,4,4,4)" />
-			<v:textRect
-   cx="20.5"
-   cy="591.5"
-   width="35.88"
-   height="30.75" />
-			<g
-   id="shadow10-47"
-   v:groupContext="shadow"
-   v:shadowOffsetX="0.345598"
-   v:shadowOffsetY="-1.97279"
-   v:shadowType="1"
-   transform="translate(0.345598,1.97279)"
-   class="st1"
-   style="visibility:visible">
-				<path
-   d="m 0,591.5 a 20.5,20.5 0 0 1 41,0 20.5,20.5 0 1 1 -41,0 z"
-   class="st2"
-   id="path110"
-   inkscape:connector-curvature="0"
-   style="fill:#5b9bd5;fill-opacity:0.22000002;stroke:#5b9bd5;stroke-opacity:0.22000002;filter:url(#filter_2)" />
-			</g>
-			<path
-   d="m 0,591.5 a 20.5,20.5 0 0 1 41,0 20.5,20.5 0 1 1 -41,0 z"
-   class="st6"
-   id="path112"
-   inkscape:connector-curvature="0"
-   style="fill:#ffd965;stroke:#c7c8c8;stroke-width:0.25" />
-			<text
-   x="12.39"
-   y="594.5"
-   class="st4"
-   v:langID="1033"
-   id="text114"
-   style="fill:#feffff;font-family:Calibri"><v:paragraph
-   v:horizAlign="1" /><v:tabList />W 1</text>
-
-		</g>
-		<g
-   id="shape11-52"
-   v:mID="11"
-   v:groupContext="shape"
-   v:layerMember="0"
-   transform="matrix(0.77644652,0,0,0.77644652,195.91581,-312.06416)">
-			<title
-   id="title117">Dynamic connector.11</title>
-			<path
-   d="m 0,612 0,-68 25.21,0"
-   class="st7"
-   id="path119"
-   inkscape:connector-curvature="0"
-   style="stroke:#5b9bd5;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker-end:url(#mrkr4-33)" />
-		</g>
-		<g
-   id="shape12-57"
-   v:mID="12"
-   v:groupContext="shape"
-   v:layerMember="0"
-   transform="matrix(0.77644652,0,0,0.77644652,176.37498,-305.07614)">
-			<title
-   id="title122">Dynamic connector.12</title>
-			<path
-   d="m 0,603 50.38,0"
-   class="st7"
-   id="path124"
-   inkscape:connector-curvature="0"
-   style="stroke:#5b9bd5;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker-end:url(#mrkr4-33)" />
-		</g>
-		<g
-   id="shape13-62"
-   v:mID="13"
-   v:groupContext="shape"
-   v:layerMember="0"
-   transform="matrix(0.77644652,0,0,0.77644652,176.37498,-312.06416)">
-			<title
-   id="title127">Dynamic connector.13</title>
-			<path
-   d="m 0,612 25.17,0 0,68 25.21,0"
-   class="st7"
-   id="path129"
-   inkscape:connector-curvature="0"
-   style="stroke:#5b9bd5;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker-end:url(#mrkr4-33)" />
-		</g>
-		<g
-   id="shape14-67"
-   v:mID="14"
-   v:groupContext="shape"
-   v:layerMember="0"
-   transform="matrix(0.77644652,0,0,0.77644652,252.79052,-259.2658)">
-			<title
-   id="title132">Dynamic connector.14</title>
-			<path
-   d="m 0,612 26.88,0 0,-68 23.5,0"
-   class="st7"
-   id="path134"
-   inkscape:connector-curvature="0"
-   style="stroke:#5b9bd5;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker-end:url(#mrkr4-33)" />
-		</g>
-		<g
-   id="shape15-72"
-   v:mID="15"
-   v:groupContext="shape"
-   v:layerMember="0"
-   transform="matrix(0.77644652,0,0,0.77644652,252.79052,-305.07614)">
-			<title
-   id="title137">Dynamic connector.15</title>
-			<path
-   d="m 0,603 50.38,0"
-   class="st7"
-   id="path139"
-   inkscape:connector-curvature="0"
-   style="stroke:#5b9bd5;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker-end:url(#mrkr4-33)" />
-		</g>
-		<g
-   id="shape19-77"
-   v:mID="19"
-   v:groupContext="shape"
-   transform="matrix(0.77644652,0,0,0.77644652,389.70366,-296.14701)">
-			<title
-   id="title142">Circle.19</title>
-			<desc
-   id="desc144">W ..</desc>
-			<v:userDefs>
-				<v:ud
-   v:nameU="visVersion"
-   v:val="VT0(15):26" />
-			</v:userDefs>
-			<v:textBlock
-   v:margins="rect(4,4,4,4)" />
-			<v:textRect
-   cx="20.5"
-   cy="591.5"
-   width="35.88"
-   height="30.75" />
-			<g
-   id="shadow19-78"
-   v:groupContext="shadow"
-   v:shadowOffsetX="0.345598"
-   v:shadowOffsetY="-1.97279"
-   v:shadowType="1"
-   transform="translate(0.345598,1.97279)"
-   class="st1"
-   style="visibility:visible">
-				<path
-   d="m 0,591.5 a 20.5,20.5 0 0 1 41,0 20.5,20.5 0 1 1 -41,0 z"
-   class="st2"
-   id="path147"
-   inkscape:connector-curvature="0"
-   style="fill:#5b9bd5;fill-opacity:0.22000002;stroke:#5b9bd5;stroke-opacity:0.22000002;filter:url(#filter_2)" />
-			</g>
-			<path
-   d="m 0,591.5 a 20.5,20.5 0 0 1 41,0 20.5,20.5 0 1 1 -41,0 z"
-   class="st6"
-   id="path149"
-   inkscape:connector-curvature="0"
-   style="fill:#ffd965;stroke:#c7c8c8;stroke-width:0.25" />
-			<text
-   x="12.4"
-   y="594.5"
-   class="st4"
-   v:langID="1033"
-   id="text151"
-   style="fill:#feffff;font-family:Calibri"><v:paragraph
-   v:horizAlign="1" /><v:tabList />W ..</text>
-
-		</g>
-		<g
-   id="shape20-83"
-   v:mID="20"
-   v:groupContext="shape"
-   transform="matrix(0.77644652,0,0,0.77644652,389.70366,-243.34865)">
-			<title
-   id="title154">Circle.20</title>
-			<desc
-   id="desc156">W N</desc>
-			<v:userDefs>
-				<v:ud
-   v:nameU="visVersion"
-   v:val="VT0(15):26" />
-			</v:userDefs>
-			<v:textBlock
-   v:margins="rect(4,4,4,4)" />
-			<v:textRect
-   cx="20.5"
-   cy="591.5"
-   width="35.88"
-   height="30.75" />
-			<g
-   id="shadow20-84"
-   v:groupContext="shadow"
-   v:shadowOffsetX="0.345598"
-   v:shadowOffsetY="-1.97279"
-   v:shadowType="1"
-   transform="translate(0.345598,1.97279)"
-   class="st1"
-   style="visibility:visible">
-				<path
-   d="m 0,591.5 a 20.5,20.5 0 0 1 41,0 20.5,20.5 0 1 1 -41,0 z"
-   class="st2"
-   id="path159"
-   inkscape:connector-curvature="0"
-   style="fill:#5b9bd5;fill-opacity:0.22000002;stroke:#5b9bd5;stroke-opacity:0.22000002;filter:url(#filter_2)" />
-			</g>
-			<path
-   d="m 0,591.5 a 20.5,20.5 0 0 1 41,0 20.5,20.5 0 1 1 -41,0 z"
-   class="st6"
-   id="path161"
-   inkscape:connector-curvature="0"
-   style="fill:#ffd965;stroke:#c7c8c8;stroke-width:0.25" />
-			<text
-   x="11.69"
-   y="594.5"
-   class="st4"
-   v:langID="1033"
-   id="text163"
-   style="fill:#feffff;font-family:Calibri"><v:paragraph
-   v:horizAlign="1" /><v:tabList />W N</text>
-
-		</g>
-		<g
-   id="shape21-89"
-   v:mID="21"
-   v:groupContext="shape"
-   transform="matrix(0.77644652,0,0,0.77644652,389.70366,-348.94537)">
-			<title
-   id="title166">Circle.21</title>
-			<desc
-   id="desc168">W 1</desc>
-			<v:userDefs>
-				<v:ud
-   v:nameU="visVersion"
-   v:val="VT0(15):26" />
-			</v:userDefs>
-			<v:textBlock
-   v:margins="rect(4,4,4,4)" />
-			<v:textRect
-   cx="20.5"
-   cy="591.5"
-   width="35.88"
-   height="30.75" />
-			<g
-   id="shadow21-90"
-   v:groupContext="shadow"
-   v:shadowOffsetX="0.345598"
-   v:shadowOffsetY="-1.97279"
-   v:shadowType="1"
-   transform="translate(0.345598,1.97279)"
-   class="st1"
-   style="visibility:visible">
-				<path
-   d="m 0,591.5 a 20.5,20.5 0 0 1 41,0 20.5,20.5 0 1 1 -41,0 z"
-   class="st2"
-   id="path171"
-   inkscape:connector-curvature="0"
-   style="fill:#5b9bd5;fill-opacity:0.22000002;stroke:#5b9bd5;stroke-opacity:0.22000002;filter:url(#filter_2)" />
-			</g>
-			<path
-   d="m 0,591.5 a 20.5,20.5 0 0 1 41,0 20.5,20.5 0 1 1 -41,0 z"
-   class="st6"
-   id="path173"
-   inkscape:connector-curvature="0"
-   style="fill:#ffd965;stroke:#c7c8c8;stroke-width:0.25" />
-			<text
-   x="12.39"
-   y="594.5"
-   class="st4"
-   v:langID="1033"
-   id="text175"
-   style="fill:#feffff;font-family:Calibri"><v:paragraph
-   v:horizAlign="1" /><v:tabList />W 1</text>
-
-		</g>
-		<g
-   id="shape28-95"
-   v:mID="28"
-   v:groupContext="shape"
-   v:layerMember="0"
-   transform="matrix(0.77644652,0,0,0.77644652,345.12321,-305.07614)">
-			<title
-   id="title178">Dynamic connector.28</title>
-			<path
-   d="m 0,603 50.38,0"
-   class="st7"
-   id="path180"
-   inkscape:connector-curvature="0"
-   style="stroke:#5b9bd5;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker-end:url(#mrkr4-33)" />
-		</g>
-		<g
-   id="shape29-100"
-   v:mID="29"
-   v:groupContext="shape"
-   v:layerMember="0"
-   transform="matrix(0.77644652,0,0,0.77644652,345.12321,-312.06416)">
-			<title
-   id="title183">Dynamic connector.29</title>
-			<path
-   d="m 0,612 28.33,0 0,-68 22.05,0"
-   class="st7"
-   id="path185"
-   inkscape:connector-curvature="0"
-   style="stroke:#5b9bd5;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker-end:url(#mrkr4-33)" />
-		</g>
-		<g
-   id="shape30-105"
-   v:mID="30"
-   v:groupContext="shape"
-   v:layerMember="0"
-   transform="matrix(0.77644652,0,0,0.77644652,345.12321,-312.06416)">
-			<title
-   id="title188">Dynamic connector.30</title>
-			<path
-   d="m 0,612 28.33,0 0,68 22.05,0"
-   class="st7"
-   id="path190"
-   inkscape:connector-curvature="0"
-   style="stroke:#5b9bd5;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker-end:url(#mrkr4-33)" />
-		</g>
-		<g
-   id="shape31-110"
-   v:mID="31"
-   v:groupContext="shape"
-   v:layerMember="0"
-   transform="matrix(0.77644652,0,0,0.77644652,421.53797,-259.2658)">
-			<title
-   id="title193">Dynamic connector.31</title>
-			<path
-   d="m 0,612 24.42,0 0,-68 25.96,0"
-   class="st7"
-   id="path195"
-   inkscape:connector-curvature="0"
-   style="stroke:#5b9bd5;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker-end:url(#mrkr4-33)" />
-		</g>
-		<g
-   id="shape32-115"
-   v:mID="32"
-   v:groupContext="shape"
-   v:layerMember="0"
-   transform="matrix(0.77644652,0,0,0.77644652,421.53797,-305.07614)">
-			<title
-   id="title198">Dynamic connector.32</title>
-			<path
-   d="m 0,603 50.38,0"
-   class="st7"
-   id="path200"
-   inkscape:connector-curvature="0"
-   style="stroke:#5b9bd5;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker-end:url(#mrkr4-33)" />
-		</g>
-		<g
-   id="shape33-120"
-   v:mID="33"
-   v:groupContext="shape"
-   v:layerMember="0"
-   transform="matrix(0.77644652,0,0,0.77644652,421.53797,-364.86253)">
-			<title
-   id="title203">Dynamic connector.33</title>
-			<path
-   d="m 0,612 24.42,0 0,68 25.96,0"
-   class="st7"
-   id="path205"
-   inkscape:connector-curvature="0"
-   style="stroke:#5b9bd5;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker-end:url(#mrkr4-33)" />
-		</g>
-		<g
-   id="shape34-125"
-   v:mID="34"
-   v:groupContext="shape"
-   v:layerMember="0"
-   transform="matrix(0.77644652,0,0,0.77644652,252.79052,-364.86253)">
-			<title
-   id="title208">Dynamic connector.34</title>
-			<path
-   d="m 0,612 26.88,0 0,68 23.5,0"
-   class="st7"
-   id="path210"
-   inkscape:connector-curvature="0"
-   style="stroke:#5b9bd5;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker-end:url(#mrkr4-33)" />
 		</g>
-	<text
-   xml:space="preserve"
-   style="font-size:24.84628868px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
-   x="153.38116"
-   y="165.90149"
-   id="text3106"
-   sodipodi:linespacing="125%"><tspan
-     sodipodi:role="line"
-     x="153.38116"
-     y="165.90149"
-     id="tspan3110"
-     style="font-size:8.69620132px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;font-family:Sans;-inkscape-font-specification:Sans">Atomic #1</tspan></text>
-<text
-   xml:space="preserve"
-   style="font-size:24.84628868px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;overflow:visible;font-family:Sans"
-   x="322.12939"
-   y="165.90149"
-   id="text3106-1"
-   sodipodi:linespacing="125%"><tspan
-     sodipodi:role="line"
-     x="322.12939"
-     y="165.90149"
-     id="tspan3110-4"
-     style="font-size:8.69620132px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;font-family:Sans;-inkscape-font-specification:Sans">Atomic #2</tspan></text>
-<text
-   xml:space="preserve"
-   style="font-size:24.84628868px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;overflow:visible;font-family:Sans"
-   x="491.82089"
-   y="172.79289"
-   id="text3106-0"
-   sodipodi:linespacing="125%"><tspan
-     sodipodi:role="line"
-     x="491.82089"
-     y="172.79289"
-     style="font-size:8.69620132px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;font-family:Sans;-inkscape-font-specification:Sans"
-     id="tspan3923" /></text>
-<text
-   xml:space="preserve"
-   style="font-size:24.84628868px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;overflow:visible;font-family:Sans"
-   x="491.02899"
-   y="165.03951"
-   id="text3106-8-5"
-   sodipodi:linespacing="125%"><tspan
-     sodipodi:role="line"
-     x="491.02899"
-     y="165.03951"
-     id="tspan3110-2-1"
-     style="font-size:8.69620132px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;font-family:Sans;-inkscape-font-specification:Sans">Single Link</tspan></text>
-<g
-   style="font-size:12px;fill:none;stroke-linecap:square;stroke-miterlimit:3;overflow:visible"
-   id="shape5-22-1"
-   v:mID="5"
-   v:groupContext="shape"
-   transform="matrix(0.77644652,0,0,0.77644652,556.00223,-296.89447)"><title
-     id="title64-5">Circle</title><desc
-     id="desc66-2">RX</desc><v:userDefs><v:ud
-       v:nameU="visVersion"
-       v:val="VT0(15):26" /></v:userDefs><v:textBlock
-     v:margins="rect(4,4,4,4)" /><v:textRect
-     cx="20.5"
-     cy="591.5"
-     width="35.88"
-     height="30.75" /><g
-     id="shadow5-23-7"
-     v:groupContext="shadow"
-     v:shadowOffsetX="0.345598"
-     v:shadowOffsetY="-1.97279"
-     v:shadowType="1"
-     transform="translate(0.345598,1.97279)"
-     class="st1"
-     style="visibility:visible"><path
-       d="m 0,591.5 a 20.5,20.5 0 0 1 41,0 20.5,20.5 0 1 1 -41,0 z"
-       class="st2"
-       id="path69-6"
-       inkscape:connector-curvature="0"
-       style="fill:#5b9bd5;fill-opacity:0.22000002;stroke:#5b9bd5;stroke-opacity:0.22000002;filter:url(#filter_2-7)" /></g><path
-     d="m 0,591.5 a 20.5,20.5 0 0 1 41,0 20.5,20.5 0 1 1 -41,0 z"
-     class="st6"
-     id="path71-1"
-     inkscape:connector-curvature="0"
-     style="fill:#ffd965;stroke:#c7c8c8;stroke-width:0.25" /><text
-     x="11.06866"
-     y="596.56067"
-     class="st4"
-     v:langID="1033"
-     id="text73-4"
-     style="fill:#feffff;font-family:Calibri"> TX</text>
-</g><g
-   style="font-size:12px;fill:none;stroke-linecap:square;stroke-miterlimit:3;overflow:visible"
-   id="shape28-95-5"
-   v:mID="28"
-   v:groupContext="shape"
-   v:layerMember="0"
-   transform="matrix(0.77644652,0,0,0.77644652,512.00213,-305.42637)"><title
-     id="title178-7">Dynamic connector.28</title><path
-     d="m 0,603 50.38,0"
-     class="st7"
-     id="path180-6"
-     inkscape:connector-curvature="0"
-     style="stroke:#5b9bd5;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;marker-end:url(#mrkr4-33)" /></g></g>
+	</g>
 </svg>