From 22a5656bf25b13a787f1d0ea1f80ff5f6ed90e89 Mon Sep 17 00:00:00 2001 From: Dalong <39682259+eedalong@users.noreply.github.com> Date: Tue, 22 Mar 2022 09:23:47 +0800 Subject: [PATCH] Update data_order.md fix #164 --- chapter_data_processing/data_order.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/chapter_data_processing/data_order.md b/chapter_data_processing/data_order.md index d483856..fe1e276 100644 --- a/chapter_data_processing/data_order.md +++ b/chapter_data_processing/data_order.md @@ -14,8 +14,8 @@ Connector的使用有如下两个要求: - 确保数据生产者的输入数据顺序是在各个生产者线程间为按顺序轮询分布(Round-Robin distribution), 即当生产者线程组大小为M时,生产者线程0拥有第(0 + M \* k)个数据,生产者线程1拥有第(1 + M \* k),生产者线程2拥有第(2 + M \* k)个数据等(其中k=0,1,2,3\...)。 -Connector中维护与生产者线程数目相同的队列并确保向Connector中放入数据时,每个生产者线程生产的数据只放到对应编号的队列中,这样可以确保Connector中的数据在不同的队列间的分布与在不同生产者线程组之间的分布相同(代码片段中的Push函数)。接着当Connector的消费者线程组从Connector中获取数据时,我们需要确保最终数据在不同的消费者线程间依然为按顺序轮询分布,即当消费者线程组大小为N时,消费者线程0拥有第(0 + N \* k)个数据,消费者线程1拥有第(1 + N \* k),消费者线程2拥有第(2 + N \* k)个数据等(其中k=0,1,2,3\...)。为此当有消费者线程从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=0,1,2,3\...)。为此当有消费者线程从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` \ No newline at end of file +:label:`mindspore_data_order_implementation`