Chap data process (#173)

* Update summary.md

fix issues mentioned in #166

* Update data_order.md

fix #164
This commit is contained in:
Dalong
2022-03-22 10:55:33 +08:00
committed by GitHub
parent c57cd3ada1
commit 5fc70b37a9
2 changed files with 3 additions and 3 deletions

View File

@@ -14,8 +14,8 @@ Connector的使用有如下两个要求:
- 确保数据生产者的输入数据顺序是在各个生产者线程间为按顺序轮询分布(Round-Robin distribution), 即当生产者线程组大小为M时生产者线程0拥有第(0 + M \* k)个数据生产者线程1拥有第(1 + M \* k)生产者线程2拥有第(2 + M \* k)个数据等(其中k=0123\...)。
Connector中维护与生产者线程数目相同的队列并确保向Connector中放入数据时每个生产者线程生产的数据只放到对应编号的队列中这样可以确保Connector中的数据在不同的队列间的分布与在不同生产者线程组之间的分布相同(代码片段中的Push函数)。接着当Connector的消费者线程组从Connector中获取数据时我们需要确保最终数据在不同的消费者线程间依然为按顺序轮询分布即当消费者线程组大小为N时消费者线程0拥有第(0 + N \* k)个数据消费者线程1拥有第(1 + N \* k)消费者线程2拥有第(2 + N \* k)个数据等(其中k=0123\...)。为此当有消费者线程从Connector中请求数据时Connector在确保当前请求消费者线程编号i与待消费数据标号j符合$i=j\%N$的关系下(其中N为消费者线程数目)按照轮循的方式从各个队列中获取数据如果二者标号不符合上述关系则该请求阻塞等待。通过这种通信的约束方式MindSpore实现了保序功能。
Connector中维护与生产者线程数目相同的队列并确保向Connector中放入数据时每个生产者线程生产的数据只放到对应编号的队列中这样可以确保Connector中的数据在不同的队列间的分布与在不同生产者线程组之间的分布相同(代码片段中的Push函数)。接着当Connector的消费者线程组从Connector中获取数据时我们需要确保最终数据在不同的消费者线程间依然为按顺序轮询分布即当消费者线程组大小为N时消费者线程0拥有第(0 + N \* k)个数据消费者线程1拥有第(1 + N \* k)个数据消费者线程2拥有第(2 + N \* k)个数据等(其中k=0123\...)。为此当有消费者线程从Connector中请求数据时Connector在确保当前请求消费者线程编号i与待消费数据标号j符合$i=j\%N$的关系下(其中N为消费者线程数目)按照轮循的方式从各个队列中获取数据如果二者标号不符合上述关系则该请求阻塞等待。通过这种通信的约束方式MindSpore实现了保序功能。
![MindSpore保序性实现](../img/ch07/7.4/mindspore_data_order.jpeg)
:width:`800px`
:label:`mindspore_data_order_implementation`
:label:`mindspore_data_order_implementation`