16.12.5 示例
图16.52展示了一个具有两个输入和一个输出且并发执行的ExpansionRegion(扩展区域)。该扩展区域的执行直到两个输入集合都可用时才开始。两个集合被期望有相同数目的元素。扩展区域的内部对应输入集合的每个元素都执行一次。在每次执行时,来自每个集合的一对值通过输入ExpansionNodes(扩展节点)被内部所用。每次扩展执行都产生一个结果值放于输出扩展节点。所有的结果值形成一个和输如集合相同规模的集合。在所有并行扩展执行结束后,这个输出集合在输出扩展节点上被扩展区域的外部所用。
图16.52 Expansion region with two inputs and one output
图16.53展示了一个包含一个扩展区域的快速傅里叶变换的片段。在扩展区域外,有复数数组上的操作。S、Slower、Supper和V是数组。Cut和shuffle是数组操作。在区域内,两个算式操作执行在三个输入数组元素上,产生两个输出数组。数组中的不同位置不交互,因此该扩展区域可以在所有位置上并行执行。
图16.53 Expansion Region
图16.54展示了具有单一动作的扩展区域的简化图示使用。在这个例子中,Specify Trip Route动作输出航班集合和宾馆集合用于预定。宾馆可以独立预定而且彼此之间并行的预定,而且可以与航班并行预定。
图16.54 Examples of expansion region shorthand
在图16.55中,Specify Trip Route可以导致多个航班片段,每一个必须独立预定。Book Flight动作将会多次调用Book Flight Behavior,对于传递给Book Flight的航班集合,每个片段一次。
图16.55 Shorthand notation for expansion region