MASS 高性能庫
MASS 指的是數(shù)學(xué)加速子系統(tǒng)(Mathematical Acceleration Subsystem)。它由數(shù)學(xué)函數(shù)組成,這些數(shù)學(xué)函數(shù)是為在各種 IBM 計算平臺上優(yōu)化性能所設(shè)定的。MASS 最初是由 IBM 公司在 1995 年啟動的,并在隨后的發(fā)展中繼續(xù)得到改善,一直到現(xiàn)如今仍然在改進。
現(xiàn)在所有的 IBM® POWER™ 處理器都有相應(yīng)的各種版本的 MASS,運行 AIX® 或者 Linux® 操作系統(tǒng)。還有其他版本的 IBM System BlueGene®/L 和 IBM System BlueGene®/P 超級電腦,以及 IBM Cell Broadband Engine™ (Cell/B.E.™)方案。庫包含有元素函數(shù)的加速實施方案,例如三角函數(shù)以及雙曲線函數(shù)以及它們的倒數(shù)、乘方、對數(shù)、指數(shù)、錯誤函數(shù)以及其他函數(shù)。包含函數(shù)的完整列表可以在 IBM Mathematical Acceleration Subsystem 頁面中找到。
有標(biāo)量的庫也有向量的庫,而對于 Cell/B.E. 和 POWER7 來說,還有單個指示的多個數(shù)據(jù)(SIMD)庫。注意精確性與例外情況的處理在 MASS 函數(shù)與系統(tǒng)庫函數(shù)中可能是不一樣的。對于目標(biāo)硬件的其他匯編器(例如 gcc)的用戶來說,MASS 庫與 IBM XL C/C++ 還有 XL Fortran 匯編器封裝到一起,并且可以通過 MASS Web 網(wǎng)站來獲得。
可以通過 C、 C++ 或者 Fortran 源程序來訪問庫。IBM XL C/C++ 與 IBM XL Fortran 匯編器可以識別機會以使用 MASS 來加速源程序,并自動激活它而不用更改源程序。本文向您介紹了怎樣實施一項技術(shù)幫助您的公司更好地使用這些強大的技術(shù)。
什么程序可以獲益?
任何包含有對數(shù)學(xué)庫函數(shù)(例如 exp、 log、sin、cos 等等)調(diào)用的 C、C++ 或者 Fortran 程序,潛在意義上都會從本文中所描述的技術(shù)中受益。
什么是自動化向量?
自動化向量技術(shù)是一種過程,在這個過程中 IBM XL C/C++ 或者 Fortran 匯編器會識別一個機會,去改善匯編過程中程序的性能,方法就是將對一次循環(huán)中一個標(biāo)準(zhǔn)庫(C/C++ 庫或者 Fortran 本質(zhì))的訪問替換為對相應(yīng) MASS 向量函數(shù)的訪問。因為 MASS 向量函數(shù)要比對一個標(biāo)準(zhǔn)庫函數(shù)的重復(fù)訪問快很多(倍數(shù)接近 30 倍),所以最后得到的性能改善效果將會是驚人的。
一個簡單的例子就是為多個論斷計算特定函數(shù)的循環(huán),例如接下來的 Fortran 程序。
subroutine sub (y, x, n)
real*8 y(*), x(*)
integer n, i
intrinsic exp
do i=1,n
y(i) = exp(x(i)) ! standard intrinsic
end do
end subroutine
有了適當(dāng)?shù)膮R編器選項,匯編器就會意識到機會去給程序加速,方法就是將對 exp() 的重復(fù)訪問替換為相應(yīng)的 MASS 向量函數(shù) vexp(),結(jié)果會產(chǎn)生一個程序,好像最開始是這樣寫成的這樣:
include 'massv.include'
subroutine sub (y, x, n)
real*8 y(*), x(*)
integer n
call vexp (y, x, n) ! MASS vector function
end subroutine
這只是一個簡單的范例,演示了自動向量化背后的基本思想。XL 匯編器實際上能夠識別更加復(fù)雜的機會,并在需要的條件下重新安排源程序中的指南,以創(chuàng)建自動向量化的機會。
在本文中的范例研究部分中,會檢查一個更加復(fù)雜和實際的范例。
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |