幾乎所有程式設計語言都會有一個類似“Hello,World!”的例子。使用并行語言也希望有能夠列印一些關于作業大小和調用程序資訊的統計函數。下面是一個2.6.2節中的例子,我們這裡引用以介紹核心API的相關部分。
GASNet用戶端通過gasnet_init函數進行初始化,該函數包括引用main()函數的标準參數argc和argv。調用gasnet_init函數的任務環境較為模糊(詳見使用文檔),且不建議使用者過多使用任務環境。如果必須要用的話,請在gasnet_init函數調用前使用。然而,在gasnet_init調用後,指令行将清除GASNet内部使用的所有參數,且環境變量将通過gasnet_getenv擷取。此外,初始化函數還設定了任務的stdout和stderr。GASNet不對stdin做任何保證。
隻有在gasnet_init函數傳回後,上述清單中的其他函數才能合法調用。初始化GASNet任務的下一步将調用gasnet_attach函數以配置設定GASNet的段并保留任務所需的所有網絡資源。gasnet_attach的變量指派給AM處理程式的用戶端表,且用戶端的段需求如下:
gasnet_handlerentry_t * table
這是一個指向C結構體數組的指針:
fnptr函數作為AM處理程式在相應的整數index上調用。AM處理程式的簽名将在2.3.5節讨論。index的128~255值對用戶端是可用的,而特殊值0表示可以忽略且将由gasnet_attach的特定值重寫。
int numentries
表示句柄條目表中條目的個數。
uintptr_t segsize
GASNet段的所需大小。
其值必須為GASNET_PAGESIZE的倍數,且不大于gasnet_getMaxLocalSegmentSize傳回的值。
GASNET_SEGMENT_EVERYTHING可以忽略。
uintptr_t minheapoffset
表示GASNet段與目前堆頂間的最小距離。在包含GASNet段和堆空間競争的虛拟記憶體系統上,能夠確定配置設定段後還有剩餘空間用于堆配置設定。雖然不建議使用,但通過0傳遞是合法的。且所有節點傳遞的值都是相等的。
其中有兩個函數用于确定在其他調用中能夠請求的段大小。
gasnet_getMaxLocalSegmentSize函數傳回GASNet已經确認的且對于調用節點上段可用的最大記憶體大小,而gasnet_getMaxGLobalSegmentSize函數傳回所有本地節點中的最小值。值得注意的是在大多數平台上,GASNet段和堆需要競争同一空間,這就意味着這些SegmentSize值必須是segsize與minheapoffset之和的最大值。如果用戶端找到的可用的段大小小于其要求大小,則将調用gasnet_exit函數終止任務而不是調用gasnet_attach函數。
除了兩個段大小查詢調用與使用gasnet_getenv函數通路環境變量之外,用戶端可以調用gasnet_nodes函數查詢任務中的GASNet節點數,以及調用gasnet_mynode函數确定執行目前任務的調用者的程序号(程序号從0開始)。上述調用是由gasnet_init和gasnet_attach函數允許調用的全部函數。其中兩個段大小查詢函數是在asnet_init和gasnet_attach函數調用時僅有的合法調用函數。
單節點上gasnet_exit調用足以使整個并行任務終止。任何沒有同時作為一個或多個調用gasnet_exit函數的節點将可能傳回SIGQUIT信号。這時用戶端可以友善地注冊唯一信号處理程式,因為GASNet保留所有其他内容給内部調用使用。為了避免誤觸發其機制,用戶端在執行正常退出時需要在gasnet_exit函數調用前立即執行同步操作(詳見2.3.3節)。