2.4 扩展API
扩展API为远程内存访问(Put和Get)提供了语义丰富的接口,旨在简化自动代码生成,尤其是由分区全局地址空间(PGAS)语言的源到源翻译。此时的GASNet只为连续区域的Put和Get提供标准化的RMA接口,但是关于提及的“向量索引约束”请查阅2.7节。
2.4.1 GASNet段
正如前文所述,扩展API只能访问内存中在gasnet_attach附加时间建立的名为GASNet段的远程地址。两个原始的GASNet客户端,UPC与Titanium的实现,在远程访问的内存方面有所差异。UPC中,只有通过特定语言共享分配函数分配的内存才可以是RMA操作的远程操作数,而在Titanium中没有这样专门的内存分配,且所有对象都可以使用GASNet扩展API进行远程访问。GASNet对这种差别进行了处理,加上“段配置”形式的附加参数,当GASNet库从源端编译时必须设置该参数。默认配置项是GASNET_SEGMENT_FAST或简称为SEGMENT_FAST。在该配置中,程序实现尽可能提供了最快的(最少等待时间或最高带宽)实现,即使这将导致需要在极大地减少段大小上做出取舍。第二个选项是SEGMENT_LARGE,它尽可能支持最长的连续段,即使这种机制可能需要“跨越缓冲区”或其他减少远程访问速度的机制。最后一个选项是GASNET_SEGMENT_EVERYTHING,它的整个虚拟地址空间都作为“段内”。