浅谈并行编程语言 Unified Parallel C(8)

UPC 语言中有实用函数和集体函数两类库函数。所谓集体函数就是由所有线程调用,有同样的返回值。所谓非集体函数就是由一个线程调用的函数,如果被多线程调用,则有不同的返回值。实用函数可以分为以下 5 类:


程序终止
upc_global_exit 释放内存,结束所有线程的程序运行。  

动态内存分配

upc_all_alloc 是集体函数,给每一个的线程分配共享内存空间 .\ upc_global_alloc 是非集体函数,给每一个的线程分配共享内存空间 . upc_alloc 给调用该函数的线程分配和其有亲缘关系的共享内存空间。 upc_free 释放动态分配的共享内存空间。

指向共享数据指针操作

upc_addrfiled 返回参数所指向的数据的本地地址 upc_affinitysize 返回在一个共享类型数据中和给定的某一个线程有亲缘关系的共享内存空间大小。 upc_phaseof 返回一个参数所指定的共享数据在其所在的区块中的位置。 upc_resetphase 返回一个与所给参数指针相同的新指针,并且这个新的指针的相恒为 0。 upc_threadof 返回一个与参数所指定的共享数据有亲缘关系的线程指数。

upc_all_lock_alloc 集体函数,给所有调用该函数的线程分配同一个锁,初始状态为解除锁定状态,并返回一个指向该锁的指针到每个线程。 upc_global_lock_allock 非集体函数,给调用该函数的线程分配以个锁,初始状态为解除锁定状态,并返回指向该锁的指针。 upc_lock 将参数所指向的锁的状态设定为锁定状态。 upc_lock_attepmt 试图将参数所指向的锁的状态设定为锁定状态,成功则返回 1,失败则返回 0。 upc_unlock 将参数所指定的锁的状态设定为解除锁定状态。 upc_lock_free 释放参数所指向的锁占用的内存空间。

内存转储

upc_memcpy 把数据从一个共享内存空间复制到另外一个共享内存空间。 upc_memget 把和某个线程本地的共享数据复制到调用该函数的一个私有内存空间中 upc_memput 把调用该函数的线程内的私有数据复制到和另一个线程的本地共享内存空间中。 upc_memset 将一个字符复制到指定的共享内存空间中。

集体函数可以分为以下两类:

数据移动函数

upc_all_broadcast 将某个线程上的一块共享内存空间复制到每一个线程的共享内存空间。 upc_all_scatter 将某个线程上的第 i 块共享内存空间复制到第 i 个线程上的本地共享内存空间。 upc_all_gather 将第 i 个线程上的一块本地共享内存空间复制到某一个线程的第 i 块共享内存空间。 upc_all_gather_all 将第 i 个线程上的一块本地共享内存空间复制到每一个线程的第 i 块共享内存空间。 upc_all_exchange 将线程 j 上第 i 块本地共享内存空间复制到线程 i 上第 j 块本地共享内存空间。 upc_all_permute

计算操作函数

下面的这两个库函数都是用来对所有元素进行用户定义的操作(加减乘除等等),然后将所得结果返回到一个线程。

upc_all_reduce up_all_prefix_reduce

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwsgsg.html