UPC快速学习笔记之Collective Operations
本文章内容未经作者同意禁止任何形式的复制和转载。
学习一些集体操作函数,他们都定义在头文件<upc_collective.h>中
第一类:重定位操作
第二类:计算操作
基本概念的定义:
1. collective :(谷歌翻译)
对某些语言操作的要求,该要求将此类操作的调用限制为在所有线程之间都必须匹配。 除非所有线程都执行相同顺序的集体操作,否则集体操作的行为是不确定的。
2. single-valued: 单值(谷歌翻译)
是集体操作的操作数,在每个线程上具有相同的值。 否则该操作的行为是不确定的。
一些规则和要求:(谷歌翻译)
1.以下要求适用于本文档中定义的所有功能,其名称均以upc all开头。
2.所有函数都是集体的
3.所有集合函数参数均为单值。
4.在upc notify和相应的upc wait之间不能调用集合函数。
5.每个集合函数的最后一个参数是类型为upc_flag_t的变量sync_mode。
同步模式的值是通过将UPC_IN_XSYNC形式的常量和UPC_OUT_YSYNC形式的常量或在一起(其中X和Y可以为NO,MY或ALL)来形成的。
如果sync_mode有值 (UPC_IN_XSYNC | UPC_OUT_YSYNC), 那么如果X是:
NO:当第一个线程进入集合函数调用时,集合函数可能会开始读取或写入数据
MY:集合函数可能会开始只读取或写入与已经进入集体函数调用的线程相关联的数据
ALL:只有在所有线程都进入了集体函数调用之后,集体函数才可以开始读取或写入数据
如果Y是:
NO:集体函数可以读写数据,直到从集体函数调用返回了最后一个线程为止,
MY:仅在完成与该线程相关的所有数据读写之后,该集体函数调用才可以在线程中返回
ALL:只有在完成所有数据读写之后,集合函数调用才可能返回。
6. 除本规范中定义的功能外,所有功能均包括一张图,该图粗略地说明了如何将数据块从一个线程复制到另一个线程。
在每个图中显示了标记为T0,T1,T2和T3的四个线程,以及适当数量的标记为Di的数据块。
这些图无意代表相关功能的全部一般性。
除非另有说明,否则这些图不对应于示例代码段。
附图和示例代码段不应视为本规范的正式部分。
4.2.1 upc_all_broadcast 函数
1。upc_all_broadcast函数把与单个线程有关联的内存块复制到每个线程上的共享内存块。
每个块中的字节数为nbytes。
如果在重叠的对象之间进行复制,则行为是不确定的。
2. nbytes必须严格大于0
3. upc_all_broadcast函数·····(略)
(节约时间,直接上图,之后的函数只放原型、示例图片、注意点)
4.2.2 upc_all_scatter 函数
描述:upc_all_scatter函数把与单个线程相关联的共享内存区域的第i个块复制到与第i个线程相关联的共享内存的一个块中。每个块中的字节数为nbytes。
如果在重叠的对象之间进行复制,则行为是不确定的。
4.2.3 upc_all_gather 函数
描述:upc_all_collect函数把与第i个线程相关联的共享内存块复制到与单个线程相关联的共享内存区域的第i块。
4.2.4 upc_all_gather_all函数
4.2.5 upc_all_exchange函数
4.2.6 upc_all_permute函数
计算操作
upc_op_t类型的变量可以具有以下值:
UPC_ADD添加。
UPC_MULT乘法。
UPC_AND按位与,用于整数和字符变量。 浮点数的结果不确定。
UPC_OR整数和字符变量的按位或。浮点数的结果不确定。
UPC_XOR用于整数和字符变量的按位XOR。 浮点数的结果不确定。
UPC_LOGAND所有变量类型的逻辑与。
UPC_LOGOR所有变量类型的逻辑或。
UPC_MIN对于所有数据类型,找到最小值。
UPC_MAX对于所有数据类型,请找到最大值。
UPC_FUNC在每个步骤中,使用指定的交换函数func对src数组中的数据进行操作。
UPC_NONCOMM FUNC在每个步骤中,使用指定的非交换函数func对src数组中的数据进行操作。
4.3.2 upc_all_reduce 函数
描述:The function upc_all_reduce performs a user specified operation, such as upc_add, on the all the elements treats and returns the value to a single thread
4.3.3 upc_all_prefix_reduce 函数
4.3.4 upc_all_sort函数
描述: upc all sort函数采用大小为elem size个字节的nelems个元素的共享数组A,并使用func函数比较它们按升序对它们进行排序。
The function upc_all_sort takes a shared array A of nelems elements of size elem_size bytes each and sorts them in place in ascending order using the function func to compare elements.
所有内容均来自《UPC Collective Operations SpecificationsV1.0》。这些文章是为了期中考试临时抱佛脚的结果···若有谬误,敬请指教。
All contents in this article are from <UPC Collective Operations SpecificationsV1.0>, if this has violated your copyright, contact me immediately at yanwt2013@gmail.com. Thank you.