UPC 是基于图 1 所示的分布式共享内存程序设计模型的并行程序语言。
图 1. 分布式共享内存程序设计模型
分布式共享内存程序设计模型将全局的内存空间分为共享内存空间和私有内存空间。共享内存空间又在逻辑上被分为一个个的分区。每一个线程对应着一个共享内存分区,我们称这个线程与其对应的共享内存分区之间的逻辑关系为亲缘关系(affinity)。我们称和某线程具有亲缘关系的共享内存为本地共享内存。每个线程对应着何其具有亲缘关系的共享内存分区和自己独有的私有空间。
每个线程可以访问所有的共享空间和自己的私有内存空间。如图所示,数据 x 位于进程 0 所对应的共享空间分区,数据 y 位于线程 0 的私有内存空间。线程 0 可以访问所有的黄色的共享区间和它自己的私有内存空间。线程 0 可以访问数据 y, 却不可访问数据 z, 因为数据 y 位于线程 0 的私有内存空间,而数据 z 在线程 1 的私有内存空间。线程 1 和线程 0 都可以访问数据 x, 但是由于线程 0 和数据 x 具有亲缘关系,所以线程 0 要比线程 1 访问数据 x 速度要快得多。
亲缘关系在 UPC 中是一个非常重要的概念。用线程来访问与其具有亲缘关系的数据可以显著地提高程序的效率。