天天看點

《并行計算的程式設計模型》一3.7.6 歸約

歸約函數對參與PE的對稱源的每個相應元素執行原生操作,再将操作結果放入每個參與PE對稱目标的相應元素(例如查找參與PE源數組第一個元素的最大值,并将最大值放置在每個參與PE目标數組的第一個元素,對源數組的剩餘元素以此類推)。對大部分非位元組類型都有歸約操作的變體,包括short、int、long、long long、float和double。這些變體實作了幾個原生操作:按位AND、按位OR、按位XOR、原生型SUM和原生型PRODUCT。不同的歸約函數根據操作數的類型和實作的操作符來命名。和其他集合函數相同,歸約函數允許程式員通過指定開始PE、log2(PE跨步)、參與PE的數目來選擇參與的PE子集。長度為_SHMEM_REDUCE_SYNC_SIZE的對稱同步數組是必需的,且該數組要在被所有PE使用前初始化為_SHMEM_SYNC_VALUE(也同樣需要全局屏障)。歸約操作也需要足夠大的工作數組能容納max(nreduce/2+1,_SHMEM_REDUCE_MIN_ WRKDATA_SIZE)個被歸約元素。

然而如前文所述,可以使用兩個同步或工作數組對,一旦執行初始化後的全局同步,程式可簡單地在兩個同步或工作數組對之間輪換,而不是在每個歸約前加同步屏障。如果每次同步數組使用時PE主動集相同,同步數組可以在随後輪換的歸約中使用(不需要重新初始化)。工作數組也能在相同的條件下使用,隻要元素數目不超過最初的配置設定。代碼清單3-20展示了求和歸約函數的使用。兩個同步或工作數組對允許通過輪換使用的數組對背靠背地調用歸約函數以控制操作。每個集合操作完成時,每個PE的目标數組都包含每個PE上源數組相應元素的和。

《并行計算的程式設計模型》一3.7.6 歸約
《并行計算的程式設計模型》一3.7.6 歸約
《并行計算的程式設計模型》一3.7.6 歸約

繼續閱讀