チュートリアル資料

ĘļīĵľĠûãéĉĎĮĸėľĚĶļü·¶#ãĆÿ¶M#·ĜľĪľĘļīĵľĠøýŅ

ľ6^ľ
2014年8月5日
独立行政法人理化学研究所
計算科学研究機構�運用技術部門
ソフトウェア技術チーム�チームヘッド
南�一生
minami_kaz@riken.jp
先駆的科学計算に関するフォーラム2014

RIKEN&ADVANCED&INSTITUTE&FOR&COMPUTATIONAL&SCIENCEĜľĪľĘļīĵľĠøýĽĽĽ

ĜľĪľĘļīĵľĠü}E
1923]ŅƓƀƆƵoHŘÜÂĜľĪľĘļīĵľĠÇ%¡íñ1946]ŅENIAC,,¯*ŪƌƳƢƬƵƓ

··1976]ŅCRAY11,,¯*ŪƐƵƠƵƌƳƢƬƵƓ

!

ðüZüúĘļīĵľĠĆĈĄÛcăö¶¤¸p"BTsrM÷¾½½½ ¹úi·!

rM·¾»Â·ÏÊÓÕÖ×·
!



Ń

25

¸º¹·

ĽĽĽx5üSG¥ûãéĉÝĜľĪľĘļīĵľĠÞü>
¸º¹Æ¾«û¾»Â3 üp"BTsrå)

先駆的科学計算に関するフォーラム2014

2011]ŅĹĮĸĽļĶěį,,ĪĨĬĮġģĩĎĘěėīķĺĽľĿ

40

2002]Ņ`ŪƠƒƌƳŅ&PentiumIVĝĕěħķĺĽľĿ

2002]ŅJ«ƎƧƬƱƵƓŅ&`¯ ñŪƐƵƠƵƌƳƢƬƵƓ

ĘĝėīķĺĽľĿ

2011]Ņň

ŉƌƳƢƬƵƓ

6250
ěėİķĺĽľĿ

ĘėĮķĺĽľ
Ŀ

先駆的科学計算に関するフォーラム2014ĚļĖĹĮĻĞĢęüZƞƵƚƁƂž

ƒƣƙƁƂžďô1ŦŦŴũ'1Đ■ %+ .!*-■  
■ ()+
■ &$,Ď■ 70128■ ĚļĖĹĮĻĞĢęü0´

;ŪƌƳƢƬƵƓ

ĲĳĸĐĒľĹ0´



動作周波数が低い場合(昔)£ÂGメモリ
インタリーブ■ ƩƪƯūVþżÇ÷ŘŨŋŦ?

ŏŷ9Ŕ8šŞřƩƪƯƟƳƈũžƈƑƐťőŨŋĎ

ƩƪƯ-ƘƵƓŦƥ■ ūęėƍƀƈưœŷŋašŤŋŞĎ

CPUŪgÌ@ƲƉƮƨżƩƪƯũÊőņĎ
≒ƌƳƢƬƵƓŪgÌ@Ď ťƥƲƉƮƨũbšŤƘƵƓŪ
!

ťŊšŞ Ď%¬żÒŨšŤņƩƪƯũőmŘņĎ
ŝźżũ&Śņ&Ś&-
先駆的科学計算に関するフォーラム2014£ÂGŴõœ£Âñ^ŦƩƪŸéï
gÌūüŸ>šŤŋŞĎƞƵƚƘſƐƈŵƘſƐƥƱƵŨŧ

先駆的科学計算に関するフォーラム2014ĲĳĸĐĒľĹ0´£ÂG■ ƩƪƯū0B~ŐčœŨš

ŦŨŹďĘėėĔ

メモリ
インタリーブ■ ƩƪƯũŮŤ£ÂGū0B

Ał

メモリ

■ ŗŷũ4ZƥƲƑƐŪdÅ1■ ƩƪƯƟƳƈżOŵŘ£ÂGũ£ÂGÉŚŹƘƵƓûżOQŗŜŞĎ
■ ŘŏŘŖŪ_ūŐÕąũメモリ
インタリーブŨŸĈ-ŐOQŚŹĎ

メモリ■Ʀƈƙưťū~´ŪƟƳƈż

zêŘŞĎũŶŸ£ÂGūģĮıũŞœŗŽ
zê:ÌŦŨšŞĎ

■ ŠŨŲũŪƦƈƙưūŖŪ_ũŶŸ

メモリバンク(例は4バンク)ƼÖÄďĞƟƀƙĐ5ŪƩƪƯžƈƑƐťč
ŋƩƪƯžƈƑƐgÌżWªŘŞĎ■ ŘŏŘŖŖťíŮŞŶŌũƌƐƙƴƴĈ-ĊťūčťŊŹ
先駆的科学計算に関するフォーラム2014

動作周波数が高い場合■ űŞƌƐƙƴŴčœŨŹĎ

~ŐčœŨŹŦčñũŨšŞĎ■ Èµũ£ÂGũŮƩƪƯŪ

ĚļĖĹĮĻĞĢęü0´

動作周波数が高い場合(現在)ƘƵƓéïÌ-ŐœŨšŞ

メモリバンク(例は4バンク)ĚļĖĹĮĻĞĢęü0´ŤœŹŦŴšŦaŢ
ęėėƍƀƈưĐĎ

メモリ■ ŘŏŘ0B~ŐŏšŞŞų



先駆的科学計算に関するフォーラム2014

メモリバンク(例は7バンク)ÚįĕĥĹi

ĚļĖĹĮĻĞĢęü0´
動作周波数が高い場合

AŃ

£ÂG

■ ƩƪƯŪƟƳƈūOŵŗŨŋĎ
■ ƘƵƓÉÌ-ŪčŋƇƫƖƎƬ

żƩƪƯŦ£ÂGþũÞŔŹĎ

ĘƇƫƖƎƬ

■ ƘƵƓżŨŹŮœƇƫƖƎƬũÊő

ƘƵƓż$+®ŚŹ ťƩƪƯŪ
ƘƵƓÉÌ-ŪèżÔŌĎ

ęƇƫƖƎƬ
メモリ
インタリーブ■ ŖŌŚŹŖŦť£ÂGŪÌ-ż

ŋ(ŹĎ
メモリ

■ PœŪƐƅƮƵūŖŪ_ż8šŤŋŹĎ

§ũŖŪø'ŐƌƐƙƴƴĈ-ĊťčũŨŹ■ ƇƫƖƎƬƮƀƳď~2ŏŷ~´ƟƀƙĐ5ŪƩƪƯžƈƑƐťŊŹ
先駆的科学計算に関するフォーラム2014

先駆的科学計算に関するフォーラム2014ÚĜēķľiĚļĖĹĮĻĞĢęü0´
*üĘļīĵľĠüy­|■ 0B~żŕŹťĈ-ŐAőŐŹĎ■ 0B~ŪĀ¯żëōŤŋŹĎ
■ ƩƪƯƁƃƵưEċŴŊŸ;ŪƌƳƢƬƵƓŪ£Â

Ì-żŕŤŴƩƪƯŪÌ-ŐîŋŢŏŨŋ

!

ðë÷Ŀ·

ŖŪø'ŐƦƈƙưũŮźŬƎƳƥưũŨŹ

先駆的科学計算に関するフォーラム2014



先駆的科学計算に関するフォーラム2014ĘļīĵľĠ¸ĨľĦ¹ùáíČõúè
ƝƵƚ

ƝƵƚ

ƝƵƚ







ƩƪƯ

 9 !"#'645
/!"#'3ƩƪƯƀƳƓƵƌƜƈƙ

ƀƳƓƵƌƜƈƙ









ƩƪƯ

ƩƪƯ
ƀƳƓƵƌƜƈƙ

ƝƵƚĄôøĄôøÛñçìčüĘļīĵľĠ¸ĨľĦ¹ùáíČõúè

ƎƐƗƨŦŘŤť0œƷŢŪżŵŹņŞœŗŽŪ

先駆的科学計算に関するフォーラム2014ūŋũó{ŘŤ'sŘŊšŤ¥ţŔŹƸ

先駆的科学計算に関するフォーラム2014óúĂûÝÞü7,ýŅĜľĪľĘļīĵľĠûõàöāøăĉø

Â½ÔØÃ½Ôü§Dû










 

先駆的科学計算に関するフォーラム2014

WĂūƞƵƚƘſƐƈūņűŦųŹ


1940F$þüENIACü~7·\ýĚļĖĹĮĻĞĢęüZ·įĕĥĹ/CISC/RISC/ĜľĪľĜēķÜúĎľĔģĕġĴå~7·ðüZýr2Č9ąîëøûĆĈ¶¤yČ?xŁ·ĲĳĸĐĒľĹ0´(ÿ° ŀ" .nTČêćĊúà0´ûĆĈĚļĖĹĮĻĞĢęü­|øúôñŁ·ðĊćûĆĈĜľĪľĘļīĵľĠåĮĻĞĢęĎľĔģĕġĴ
Āø:#ĜľĪľĘļīĵľĠýõüĨľĦüfNøíöý[£üĘļīĵľĠø6^ûý:ċćúàåĽĽ·ĥľĠĹøíöü ĽrMåæċăö¶à·ðüñăûý¶¤úďļĠľĘħĕĥåkìĊĉ·āñĚĜģıĥľĠĹøíöü¶à° MĽ¶³Må¶àĺįĹ÷kìĊĉ
先駆的科学計算に関するフォーラム2014xüĜĪĘļ{ü¯íì
4BG6K9EJ/ 3( *現代のスーパーコンピュータシステム

ĎĮĸėľĚĶļü·M\¦#BI;=8/ 3( *現代のプロセッサ

SystemRack£ÂG

System BoardĘƇƫƖƎƬ

ęƇƫƖƎƬ

メモリ
先駆的科学計算に関するフォーラム2014

先駆的科学計算に関するフォーラム2014ÜÂ¹TŅŅŅŅŅŅŅŅŅÜÂ¹T
EċÞV
¬äÃ

¬äũfWŨ'ŏŸłŵŚŋƌƵƘſƳƉ

V_1
Ć}1

ƥƲƉƮƨ

ƥƲƉƮƨl

!

ƌƳƠƀư
ƘƟƖƉ
ƥƲƔƈƎƭƳRUN

ƥƲƉƮƨƉƮƐſƖƈƐ%¬ÈŪÚùĜľĪľĘļīĵľĠü</BI5FCJ5
:@7J3' !
!
! !
!• ĎĮĸėľĚĶļü
!ĽĤľĠČ+ĮĻĞĢęĀ·MČIæî·!ĽyČ+ĮĻĞĢęĀJ·ĽĮĻĞĢę«÷ü£Č¢·• ĮĻĞĢęü& M!ĽĔĴĢĚĵü]!{ĮĻĖķİļĖ·!Ľr2]!{ĮĻĖķİļĖ·ČIæî·!ĽĲĳĸM]!{ĮĻĖķİļĖ·ĽĘļĪďķ]!{ĮĻĖķİļĖ·!

ōŬ ŪƘƟƀƐĎ
!ŪƎƧƬƱƵƎƭƳ

ñçìčü'=Č{àñĚİĵĺľĚĶļ

ĪğĘļ÷¾½½FääĉČ ôö·
ÄÀ½½½·ü¤H÷?ÛâƌƳƠƀƮč)1ƴ,
čgÌƌƵƘſƳƉ

ý³ƴWÒ­NälƞƵƚƁƂž

ßƎƐƗƨö®

先駆的科学計算に関するフォーラム2014





!

$W÷ċĉ·24

先駆的科学計算に関するフォーラム2014ĎĮĸėľĚĶļüM\¦#üĜģĢĮ

3.1

ĎĮĸėľĚĶļüM\¦#üĜģĢĮ
1.

!

2.

)§g,
'

č)1,
ƅƵƜư&
ß

3.2

!

4.

čgÌ1Á&
WÓ,

5.

!

WťŪ&
ƕƬƵƛƳƉ,!

5gÌ&@ÁV,

先駆的科学計算に関するフォーラム2014



先駆的科学計算に関するフォーラム2014

uM_ĽēľħĹĽ¶#¶#üñăû

3.1
1.
)§g,
'

!

2.

č)1,
ƅƵƜư&
ß

3.2



先駆的科学計算に関するフォーラム20144.

čgÌ1Á&
WÓ,

!

5gÌ&
@ÁV,

先駆的科学計算に関するフォーラム2014

!



5.

!

WťŪ&
ƕƬƵƛƳƉ,ðĄðĄ#øýŅ¸¾¹ÜÂþðþ ÜÂþðĄðĄ#øýŅ¸¿¹ðþƥƲƑƖƍƼð)ÜÂťőŨŋø'(1º)ťőŹşŔ?řĎÜÂþĎďƲƵƚƀƳƟƮƳƐĎ
ż&ŗŨŋĐ)ÜÂťőŹø'ďğğºĐ

1+0.99=1.99º

1+0.099=1.099º

ůŰ50

ůŰ91

ƥƲƑƖƍƽ

LúHČîĉĿ

ð
1000

100

ƥƲƑƖƍƾ
ð÷æúà§¸±§¹Č­ĈúçBìçîĉĿ

ƥƲƑƖƍ

ƥƲƑƖƍ

ðþż&ŹşŔ[ŗœŚŹƶ

ƥƲƑƖƍƿ
先駆的科学計算に関するフォーラム2014(%¬ò'ƴƤƲƖƈ§g')

ĻĲĹļġ
ĿŀĳĢ
Ŀŀĳģ
ĿŀĳĤ
ĤĭưƵƥ
Ŀŀĳĥ
%¬Ę

(1)ƌƵƚŪòż'Ř¦¬ũšŞ%¬ƤƲƖƈ(ÜÂ/ð)ũ',&(2)ƌƵƚŪWÒþŪW &(3)ƥƲƉƮƨƒƵƐƌƵƚŪã&(4)%¬ƤƲƖƈŪ¦¬µ%¬#Xżpy,(5)ÜÂƤƲƖƈŪÜÂ§gpy(ĉ)/U!)/ø')ņNũ/N**2ũÀ)&(6)ðƤƲƖƈŪð§gpy&(ƉƲƵƟưðƴĄwðņĄwĊũ&Ąwð/
¾ũņÀ)Ŀŀĳħ

2. ƅƵƜưß
先駆的科学計算に関するフォーラム2014→bŪßūƍƤưƵƕƳƴÿ~ÀŪßŐPŋ→ƍƤưƵƕƳƴÿ~ūÑŇŨMnťCŬźŹŞųŘŋßŐťőŨŋ

LM+MSD法における測定区間毎のスケーラビリティWÒþĎ ¦¬µĎ£Âƴð £ÂƴðƴƐƊƵƮ %¬#X §g×¾ŸơƯƗſƤƲƖƈĘĎ
ŅďÜÂĐ

ƅƵĎ
Ɯư

ø') Ĭũ

%¬ĘĕĘ
ĤĭưƵƥ
%¬ęĎ
ƤƲƖƈęĎ
ĎŅďÜÂĐĎ
%¬ęĕĘ !
!
%¬3
ŅďðĐ
ðĘ
ĿŀĳĦĎ



ƤƲƖƈŪWÒþŦƐƊƵƮơƯƗſß()U!) ĬđđĚũńĄwð ĄwĊũ

ń

ƤƲƖƈĚ

10.0

全体
evolve_WFs_in_subspace

 
m_ES_Vnonlocal_W

スケーラビリティ

1. )§g',

先駆的科学計算に関するフォーラム2014  
modified_gram_schmidt 
m_XC_cal_potential
betar_dot_WFs

m_FFT_WF

1.0128(1)ÜÂƴðƤƲƖƈũŢŋŤ¦¬µ%¬#XƴƌƵƘſƳƉŪßżÒŋ?½ŪÜÂƴð
ƤƲƖƈżßŘ²ŨŹ½ČŪÜÂƴðƤƲƖƈżƅƵƜưŪÔŦŘŤŋ&Ś&(2))§g'ŪÈŏŷcŞEċØũYŚŹSgŪiLżũƓƵƋƖƙEċW
ÒũņűŞč)WÒũƅƵƜưŦŨŹÜÂƴðƅƵƜưżŋ&ŚĎ18



先駆的科学計算に関するフォーラム2014

256

並列数


512

1024

ĎĮĸėľĚĶļČ¶MČîĉñăûýŅ
! 2'Ũ)^żcŹ)1ożv®ŚŹĎ! ĉ)ø'ż [1ŚŹĎ! ðþż [1ŚŹĎ! ƲƵƚƀƳƟƮƳƐż&ŗŨŋçč)ż¶tŘŞM>Ū°j¤−ƤƲƖƈũżßŚŹ" ĉ)øŐšŤŋŨŋŏǁšŤŋŹM>ũEċŨŋŏǁ
" ĄwðþŐçč)ũŧźœŷŋŪ,>ż6ųŹŏǁ
" QKðþŐçč)ũŧźœŷŋOQŚŹŏǁĎ
" ƲƵƚƀƳƟƮƳƐŐçč)ũh1ŘŨŋŏǁ

ŖźŷŪßŐúÖ!

\üuM_üĬđľĝ·ãĆÿ¶#üĜģĢĮ÷·ĎĮĸėľĚĶļü¶Č¬@îĉ·4Čoàîå©·

先駆的科学計算に関するフォーラム2014

先駆的科学計算に関するフォーラム2014

ストロングスケール測定

ウィークスケーリング測定łĨľĦ ü0´hČ>ûíöq>îĉ
UmŁ·

!
ŃĨľĦ

!



ëë÷ýÁØÁØ¾½åłĨľĦü0´hŁ·ŃĨľĦ÷ýłĨľĦßñĈü0´hýÁØÁØÂøúĉŁ·

ŃĨľĦ

!

¾½ĨľĦ÷ýłĨľĦßñĈü0´hý¿Ø¿Ø¿øúĉŁ·!

0´Čłµ
÷ßĉŁ·

¾½ĨľĦ

Ċþàü÷q>ýd

¾½ĨľĦ

¾ĮĻĞĢęßñĈü0´hČ>ûíö
q>îĉUmŁ·ëë÷ýÁØÁØÂå¾ĮĻĞĢęßñĈü0´hŁ·ŃĨľĦ÷ý ü0´hýÁØÁØ¾½øúĉŁ·¾½ĨľĦ÷ý ü0´hýÅØÁØ¿ÂøúĉŁ·0´ČT ĉLåq>ýt®÷ßĉŁ·ñòíZüO"åâYàŁ·!

!
!

ZüO"ýâûçàŁ·!


先駆的科学計算に関するフォーラム2014



先駆的科学計算に関するフォーラム2014

ストロングスケールとウィークスケーリング測定を使う" ƓƵƋƖƙEċżųŹ" ƼƥƲƑƖƍŪEċØŐƓƵƋƖƙEċŦ?¼^ŦŨŹűťūņƐƙƲƳƉƐ
ƊƵƯƳƉťWÒþƴƲƵƚƀƳƟƮƳƐƴĄwðþƴQKðþżVƴßŚŹ(100ŏŷ~´)űť)" ÝŴƁſƵƈƐƊƵƯƳƉťťőźŬŨŎÐŋĎ" ÝŪ VƴßťEċŐźŬÚŚŹ" EċŨŔźŬ)^żŕŤƁſƵƈƐƊƵƯƳƉťQØ)Ūu0żVŚŹQØ)ŪƁſƵƈƐƊƵƯƳƉß" ª¨®:ÌŨWÒ­Nż®Ř100¼^/1000¼^/~3¼^ŦāżîšŤťőŹşŔčŋ)^ť)gÌż¸áŚŹ(ƁſƵƈƐƊƵƯƳƉ V).
" ƁſƵƈƐƊƵƯƳƉŐćŘŋŴŪŴŊŹŐ&ŹşŔ VŘŞŋ. ćŘŋM>ūƹ£ÂþżƪƘư1ŘŤW ŦƪƘưŦŪÎżßŚŹ.

ÜÂŪƤƲƖƈũWĉ)øŪß£ÂþŐOQŘŨŋŏ¸áƺ£ÂþŐOQŚźŬĉ)øŐšŤŋŹ

£Âþ
ƐƙƲƳƉ
ƐƊƵư
ƁſƵƈƐƊƵư

WÒþQKðþŪ,>ūÏũOQŚŹĕĎ
ðûƴðH~ż¸áŚŹ ťOQŪ,>ż×ųŹĕWÒþQKðþ

ðþŪß1ƥƲƑƖƍŪEċŪQőŗżƓƵƋƖƙEċŪQőŗũ>ŻŜŹ)~Ąwðþ

ĄwþŪ,>ŦOQŘŨŋŏ¸áĕĎðŪ%¬ŐhŋŦĄwðþŐOQŚŹĕ

)~
先駆的科学計算に関するフォーラム2014

先駆的科学計算に関するフォーラム2014 

%¬ƤƲƖƈA



1000Proc.

 


%¬ƤƲƖƈB

Ąwð

B

A

QKð

ðþŪß£ÂƥƲƑƐ±<

8000Proc.
%¬ƤƲƖƈC

%¬ƤƲƖƈD

Ąwð

D

C

QKð

ƲƵƚƀƳƟƮƳƐ
Ūß£Â

先駆的科学計算に関するフォーラム2014



先駆的科学計算に関するフォーラム2014

ƥƲƑƐ±< &&M-l>M-üñăû

3.1
1.

!

2.

)§g,
'

č)1,
ƅƵƜư&
ß

3.2

!

4.

5.

čgÌ1Á&
WÓ,

!

WťŪ&
ƕƬƵƛƳƉ,!

5gÌ&@ÁV,

先駆的科学計算に関するフォーラム2014ƅƵƜưŪ(Ÿ&ŘŦgÌ@ÁŪàÒēľħĹüĈíÙēľħĹČvúģĜĥĮĻĖķıøíöĈî»·

先駆的科学計算に関するフォーラム2014ĮĻĞĢęü&!

M-üĽl>Ù`ČíM-üaČ>îĉ»·!

bª ĈÙM-Č?Víñ7,üĘľĦ ûK²îĉ bČoàî»·!

ðĊć bČ?Víñ7,üČ ĉ»·bª!

ðĊćČí\ûP{îĉaČl>îĉŁ

MČIæî¸¾¹ŅƩƪƯƁƃƵưEċŭŪY%!

M-üÙĈíñģĜĥ
z8Č {ígÜúM-Č
îĉ»·



ƴƘƵƓÉÌ-ŪčŋƇƫƖƎƬżÞŔŹĎ
ƴƇƫƖƎƬũÊŋŞƘƵƓżHŴ$+®ŘĎŅ£ÂżÒŨŌ
ƴŖŌŚŹ ť£ÂGŪÌ-ż2'ŋ(Ź

ƩƪƯ
ƘƵƓ

ňžƥƯƊƵƎƭƳŐÖĎŚŹByte/FlopŐŋŉƓƀƥĎ
ŪÜÂ(*1)ęƇƫƖƎƬƘƵƓōŬÒ)Ò)¾Ď
(2N2ŪƘƵƓť2N3Ū£Â:)$+®

!

(*1)£Âû(Flop) ũŮĎƘƵƓŪ»0û(Byte)Ő[ŗŋÜÂĘƇƫƖƎƬ

ƘƵƓƇƫƖƎƬŪ/+®
£ÂG

先駆的科学計算に関するフォーラム2014



先駆的科学計算に関するフォーラム2014ĄáCííçXîĉø


ü

＝

ĢĖĦĎ
Ġ»0û(Byte)/£Âû(Flop)×

2N3Ū£Â

N2ŪƘƵƓ

=2N2/2N3=1/N'yûýÍå;æàBìú

N2ŪƘƵƓ

x?üĎĮĸėľĚĶļ÷ýÍåßĉHü;æìûúĉøĲĳĸ¨ûý¸Ñ¹ýĔĴĢĚĵûôöĄ¸Ò¹ýćúàøúĉ¸Ñ¹MČIæî¸¿¹ŅŦūÛšŤŴƴƴƴƴ

¸Ò¹

¸Ñ¹

ĮĻĞĢęü&ƩƪƯƴ$+®&ŨŋEċŴŊŹĎ
ƴŖŌŨŹ£ÂGŪÌ-ż2'ŋ(Ź
&Ũŋ

ƘƵƓ

ňžƥƯƊƵƎƭƳŐÖĎŚŹByte/FlopŐčŋŉƓƀƥĎ
ŪÜÂ(*2)ęƇƫƖƎƬ

¸Ò¹

ƘƵƓ

＝

×

(*2)£Âû(Flop) ũŮƘƵƓŪ
»0û(Byte)ŐQőŋÜÂ

$+®
ĘƇƫƖƎƬ

ðë÷ČBûĭĻĢĕí¸Ñ¹Ą¸Ò¹ĄĔĴĢĚĵûĉĆáûíö
ĔĴĢĚĵüĤľĠòé÷îĉĆáûîĉ÷M-Č?xîĉŁ

ƇƫƖƎƬŪ/+®ŐĎ
ćŘŋ

ƘƵƓ

£ÂG
先駆的科学計算に関するフォーラム2014

先駆的科学計算に関するフォーラム2014





âþ
įĕĥĹ ü¸Ñ¹＝
2N2Ū£Â¸Ò¹ĢĖĦĎĠ»0û(Byte)/£Âû(Flop)=(N2+N)/2N2≒1/2

×N2ŪƘƵƓ

NŪƘƵƓ

&M-ü'yûý¾¼ÍĆĈ;æúČBûĭĻĢĕíö¸Ñ¹Ą¸Ò¹ĄĔĴĢĚĵûĉĆáûíöĄÈ¼Êý;æàü÷M-ý÷æúàŁ

先駆的科学計算に関するフォーラム2014



先駆的科学計算に関するフォーラム2014





Ő

ĜĺĢĦüeCPU
コア

演算器 ・・ĜĺĢĦ#

!
演算器

演算器

ハードウェア"・・
バリア同期
レジスタ・・ レジスタ レジスタ
・・

先駆的科学計算に関するフォーラム2014!

īĮĨÀŪƥƲƑƐ)ũYŘ
ģĮı#ŪĞƌžż®ŚŹŞųŪƐƱƖƚ)1ŐeÖƺĎ

!

ƐƱƖƚ)1ŪŞųũūÍ0)1ŏĭľĶļīĮŐ®:ƺĎ
ŪM>ūƞƵƚƁƂžƟƯž
?Ìż®ŘŞčñŨƐ
ƱƖƚ%¬Ő:ÌƺĎ

メモリ



ĞƌžťĪęƇƫƖƎƬż"ƺĎ!

共有キャッシュ

先駆的科学計算に関するフォーラム2014

ŪM>ĘģĮıũĞƌžzêƺĎ

ĩďĭĸĢĦøĬķĢĥÌÎËīĮĨƥƲƑƐ)ŦƐƱƖƚ)ŪÆŲ>ŻŜżƞƀƤƯƖƚ)ŦŋŌƺĎ
=ƌžũīĮĨƥƲƑƐż,Ÿ`ŤŹ)1żƣƮƖƙīĮĨ)ŦŋŌƺĎ
ťūðæ¢Ū/©µ+®ƹåƩƪƯûżrŗōŹÙ¤ťƞƀƤƯƖƚ)żxRŘŤŋŹƺĎ
1ƥƲƑƐ8ƐƱƖƚĎ
ƷƞƀƤƯƖƚMPIƸŪM>8ƥƲƑƐƷƣƮƖƙMPIƸŪM>

core

core

core

core

core

core

core

core

core

core

core

core

core

core

core

core

ÉÎÐ& MČêĉñăüńõü

MPIプロセス

先駆的科学計算に関するフォーラム2014



先駆的科学計算に関するフォーラム2014



ÉÎÐ&

MČêĉñăüńõü¸¾¹ĻľĦĽĜĥĎü!w#

ÉÎÐüTĘĎ÷āïĜĺĢĦ#å·÷æöàĉøýQøíöĮĸĬđĢġü]!{·røĻľĦĽĜĥĎjüR1¸¾¹ĻľĦĽĜĥĎü!w#·¸¿¹ķďļĎĕĞĜü]!{·¸À¹ĔĴĢĚĵü]!{·¸Á¹!wüà/ĜėěĵľĸļĖ·¸Â¹r2ü]!{先駆的科学計算に関するフォーラム2014

先駆的科学計算に関するフォーラム2014ƱƀƗƳƎ(žƈƑƐŪ¿ŠŐŸ)ƱƀƗƳƎ(žƈƑƐŪ¿ŠŐŸ)ƱƀƗƳƎƷ·YƸ

ƩƪƯ
ƘƵƓ

Ƽƻƻ

ƩƪƯ

¿ŠŐŸ

Ƽƻ

ƘƵƓ

žƈƑƐ

Ƽ

ƘƵƓ

ƘƵƓ
£ÂG

£ÂG




先駆的科学計算に関するフォーラム2014

žƈƑƐ
þ

ƘƵƓ
ĘƇƫƖƎƬ

ĘƇƫƖƎƬ¿ŠŐŸƘƵƓęƇƫƖƎƬ

ęƇƫƖƎƬ

先駆的科学計算に関するフォーラム2014演算とロード・ストア比の改善ƥƯƣƂƖƕŪ/+®
ƩƪƯ

¿ŠŐŸ

ŪƌƵƘſƳƉżũËōŹƺĎ
ŪƌƵƘſƳƉŪ£ÂūDƽƹ¾ƽŪÜƿƺĎƲƵƚŪ~ūŁēĲďĹĐēĲďĹĒĘĐŪÜƾƺĎƐƙžŪ~ūŁŪƼƺĎŘŞŐšŤƲƵƚƴƐƙž~ūƿĎ£ÂŦƲƵƚƴƐƙžŪūƿĖƿŦŨŹƺĎ
ŨŹŮœ£ÂŪ©żčųƲƵƚƴƐƙžŪ©żœqōŤ£ÂŦƲƵƚ
<内側ループアンローリング(2)>ƐƙžŪż|FżIŹ ŐúÖƺĎ

ƥƯƣƂƖƕ

ƘƵƓęƇƫƖƎƬ

žƈƑƐ žƈƑƐ

ƘƵƓþ£ÂũžƈƑƐŝŪŴŪż
ăŜŹM>ŴŊŹ

ĘƇƫƖƎƬ

ƘƵƓ£ÂG
先駆的科学計算に関するフォーラム2014

do j=1,m
do i=1,n,2x(i)=x(i)+a(i)*b+a(i+1)*d8>9j}to~_#x(i+1)=x(i+1)+a(i+1)*b+a(i+2)*d
end do

先駆的科学計算に関するフォーラム2014

8=9ihkrq_ƩƪƯ#ƇƫƖƎƬƮƀƳĎ
ƇƫƖƎƬƮƀƳĎ
128byteŪžƈƑƐ 128byteŪžƈƑƐ

ƘƵƓęƇƫƖƎƬ

ƘƵƓ

・以下の様な2つのコーディングを比較する。
do j=1,m
do i=1,nx(i)=x(i)+a(i)*b+a(i+1)*d
end do!øŪÖÄż
ÜÂũ+®

1ŪÖÄŪŲ
żÜÂũ+®

/©ŐÐŋ

/©Őhŋ

ƩƪƯ
ƴƘƵƓÉÌ-ŪčŋƇƫƖ
・最初のコーディングの演算量は4、ロード／ストア回数は4ƎƬżÞŔŹĎ
ƴƇƫƖƎƬũÊŋŞƘƵƓżH
グの演算量は8、ロード／ストア回数は7である。
ƘƵƓŴ$+®Ř£ÂżÒŨŌĎ
・最初のコーディングの演算とロード/ストアの比は4/4 、ƴŖŌŚŹ ť£ÂGŪÌ-ż2ęƇƫƖƎƬ'ŋ(Źとロード/ストアの比は8/7となり良くなる。
ƘƵƓ$+®

ĘƇƫƖƎƬ

ĘƇƫƖƎƬ

ƘƵƓ

ƘƵƓ
£ÂG

£ÂG


先駆的科学計算に関するフォーラム2014ytjl

先駆的科学計算に関するフォーラム2014



8?9



!_-Oqmp~l"\_1< ソフトウェアパイプラインニング>

ÜÂþ

nxi

ÜÂþ

ưƵƥĹ

C E7
vYKLquh\ *\`.,7
v\quh`ktk[.,7*`ktk[.,7
v\ *\quh`xizi UfZOeưƵƥĹ

例えば以下の処理を考える。

ưƵƥĹĒĘ

do i=1,100(1)a(i)のロード(2)b(i)のロードa(i)とb(i)の演算/©ŐÐŋưƵƥĹĒĘ

i番目の結果のストア
end doĵĽĎĹĠĘēĘėėĎ
ŅÜÂĘĎ
ŅÜÂęĎ
ĶļĵĎĵĽ

C.3E7
AktkM<;;/+DA;;ktkQQe/©Őhŋ
先駆的科学計算に関するフォーラム2014



先駆的科学計算に関するフォーラム2014

<ソフトウェアパイプラインニング><ソフトウェアパイプラインニング>

"\_1

例えば以下のコーディングを考える。
例えば以下のコーディングを考える。
<ソフトウェアパイプラインニング><ソフトウェアパイプラインニング><ソフトウェアパイプラインニング><ソフトウェアパイプラインニング>

do i=1,100
do i=1,100< ソフトウェアパイプラインニング>nxi例えば以下のコーディングを考える。
例えば以下のコーディングを考える。
例えば以下のコーディングを考える。
例えば以下のコーディングを考える。
a(i)=a(i‑1)+a(i)a(i)=a(i‑1)+a(i)b(i)=b(i‑1)+a(i)b(i)=b(i‑1)+a(i)i=1,100 do
do i=1,100dodoi=1,100
i=1,100
c(i)=c(i‑1)+b(i)c(i)=c(i‑1)+b(i)a(i)=a(i‑1)+a(i)a(i)=a(i‑1)+a(i)a(i)=a(i‑1)+a(i)左の処理を以下のように構成し直す事を
a(i)=a(i‑1)+a(i)enddoend dob(i)=b(i‑1)+a(i)b(i)=b(i‑1)+a(i)b(i)=b(i‑1)+a(i)b(i)=b(i‑1)+a(i)ソフトウェアパイプラインニングという
c(i)=c(i‑1)+b(i)c(i)=c(i‑1)+b(i)c(i)=c(i‑1)+b(i)c(i)=c(i‑1)+b(i)このコーディングは下図の実線の矢印のような参照関係を持っているため、ループ内の
このコーディングは下図の実線の矢印のような参照関係を持っているため、ループ内のend dodo
end doend doend
3つの式に依存性が生じる。点線上の計算をループ内の3つの式となるよう処理を変更す
3つの式に依存性が生じる。点線上の計算をループ内の3つの式となるよう処理を変更すa(1)a(2)a(3)のロード
ることをソフトウェアパイプラインニングという。
ることをソフトウェアパイプラインニングという。
このコーディングは下図の実線の矢印のような参照関係を持っているため、ループ内の
このコーディングは下図の実線の矢印のような参照関係を持っているため、ループ内のb(1)b(2)のロード
このコーディングは下図の実線の矢印のような参照関係を持っているため、ループ内の
このコーディングは下図の実線の矢印のような参照関係を持っているため、ループ内の3つの式に依存性が生じる。点線上の計算をループ内の3つの式となるよう処理を変更す
3つの式に依存性が生じる。点線上の計算をループ内の3つの式となるよう処理を変更す
3つの式に依存性が生じる。点線上の計算をループ内の3つの式となるよう処理を変更す
8<9NNN78=9NNN7778>9NNNN8?9
7 24 NNN78BB9777778<;;91
3 つの式となるよう処理を変更す120
3
4
0 3つの式に依存性が生じる。点線上の計算をループ内の3(1)の演算ることをソフトウェアパイプラインニングという。
ることをソフトウェアパイプラインニングという。
ることをソフトウェアパイプラインニングという。
ることをソフトウェアパイプラインニングという。
Ivado i=3,100a(i+1)のロード
b(i)のロード(i-1)の演算
i-2番目の結果のストア
end dob(100)のロード(99)(100)の演算(98)(99)(100)のストア

先駆的科学計算に関するフォーラム2014

10
12

1
00

Jv
ab

aa

ab

*b
c

bb

b
c

2
1
23

3
4
32

3
44

4

do i=1,100a(i)のロード

cc

(1)

(2)

(1)

(2)

a(i)とb(i)の演算
i番目の結果のストア
end dodo i=1,100a(i)のロードb(i)のロードca(1)=a(0)+a(1)a(1)=a(0)+a(1)コーディングは以下のようになる。
コーディングは以下のようになる。
コーディングは以下のようになる。
コーディングは以下のようになる。
b(1)=b(0)+a(1)b(1)=b(0)+a(1)a(2)=a(1)+a(2)a(2)=a(1)+a(2)a(1)=a(0)+a(1)a(1)=a(0)+a(1)a(1)=a(0)+a(1)doi=3,100
do i=3,100a(1)=a(0)+a(1)b(1)=b(0)+a(1)b(1)=b(0)+a(1)b(1)=b(0)+a(1)b(1)=b(0)+a(1)c(i‑2)=c(i‑3)+b(i‑2)
c(i‑2)=c(i‑3)+b(i‑2)a(2)=a(1)+a(2)a(2)=a(1)+a(2)a(2)=a(1)+a(2)a(2)=a(1)+a(2)b(i‑1)=b(i‑2)+a(i‑1)
b(i‑1)=b(i‑2)+a(i‑1)
i=3,100 do
do i=3,100dodoi=3,100
i=3,100
a(i)=a(i‑1)+a(i)a(i)=a(i‑1)+a(i)c(i‑2)=c(i‑3)+b(i‑2)
c(i‑2)=c(i‑3)+b(i‑2)
c(i‑2)=c(i‑3)+b(i‑2)
c(i‑2)=c(i‑3)+b(i‑2)
enddoend dob(i‑1)=b(i‑2)+a(i‑1)
b(i‑1)=b(i‑2)+a(i‑1)
b(i‑1)=b(i‑2)+a(i‑1)
b(i‑1)=b(i‑2)+a(i‑1)c(99)=c(98)+b(99)c(99)=c(98)+b(99)
a(i)=a(i‑1)+a(i)a(i)=a(i‑1)+a(i)a(i)=a(i‑1)+a(i)a(i)=a(i‑1)+a(i)b(100)=b(99)+a(100)b(100)=b(99)+a(100)end dodo
end doend doendc(100)=c(99)+b(100)c(100)=c(99)+b(100)c(99)=c(98)+b(99)c(99)=c(98)+b(99)c(99)=c(98)+b(99)c(99)=c(98)+b(99)b(100)=b(99)+a(100)b(100)=b(99)+a(100)b(100)=b(99)+a(100)b(100)=b(99)+a(100)nxib(i)のロード

コーディングは以下のようになる。
コーディングは以下のようになる。

quhc

"\_1< ソフトウェアパイプラインニング>

a

0



a(i)とb(i)の演算!

i番目の結果のストア

end do
先駆的科学計算に関するフォーラム2014"\_1< ソフトウェアパイプラインニング>
do i=1,100(2)

左の処理を以下のように構成し直す事をソフトウェアパイプラインニングというa(1)a(2)a(3)のロード
b(1)b(2)のロード

b(i)のロード(1)の演算do i=3,100a(i)とb(i)の演算
i番目の結果のストア
end do(1)

do i=1,100a(i)のロード(2)

a(i+1)のロード
b(i)のロード(i-1)の演算
i-2番目の結果のストア
end dob(i)のロード(98)(99)(100)のストア*_(3) (4)(5)(6)(7)(8)!

C.3E7
_"a|iz_)WRd2g5T\7<ktkM<;;/+D<;;ktk["[Se7end do8@9(2)(99)(100)の演算

i番目の結果のストア

先駆的科学計算に関するフォーラム2014(1)b(100)のロード

a(i)とb(i)の演算!

"\_1< ソフトウェアパイプラインニング>

nxi

(1)

a(i)のロード

先駆的科学計算に関するフォーラム2014





#

２SIMD Multi&Add演算器×２本/F:G\@Y_/+_4ÂŦ.Âżƿ?ũÜÂ:Ì
( 1 Ņ+ Ņ1 ) × ƿ = 8ŖŪũìŋ¼č/©

1ƌžŪƢƵƈgÌǀ8£Â×2GHz =16G£Â/º
先駆的科学計算に関するフォーラム2014



先駆的科学計算に関するフォーラム2014x|vEx|vE
128byte*kty~} 128byte*kty~}
1 k<5kn
@k<5s=4j.
s=4j.
1 k<5kn
@k<5s=4j.
-["X
-[:X s=4j.




M)x|M)x|/F:G\@Y_/+_4-[:X/F:G\@Y_/+_4


-["X

L)x|L)x|



,4


hzmo_/F:G_^cXZ
,s~wl^POZ&VbS6&R$]e.

.

(_0*8/F:GRUO9
8J9
8I9

＝
2N3Ū£Â.

ĢĖĦĎĠ»0û(Byte)/£Âû(Flop)×
N2ŪƘƵƓ

=2N2/2N3=1/N
"%^`HRSO'U]

N2ŪƘƵƓ

{ku(_0*8/F:GRSO9
8J9
8I9

＝
2N2Ū£Â

先駆的科学計算に関するフォーラム2014ÖŚŹĢĖĦŐ[ŗŋžƥƯƊƵƎƭƳũŢŋŤ
*/+QaZVbH */+QaZVbH

 69kDXx|s>]rE
69kDXxx|j7Xcs|s>]rE
p._,4s;iYE
x|j7Xcs^Y`rg,4k9sM)x|*.+cPgORYXH 
p._,4s;iYE
 XrGH%^Y`rg,4k9s*.+cPgORYXH M)x| Xr< ソフトウェアパイプラインニング>





M)x|

,4

-["X
-[:Xi-2番目の結果のストア

end do

-[:X



(1)

-["X
b(100)のロード(99)(100)の演算

L)x|

(2)(3) (4)(5)(6)(7)(8)
,4


!

(98)(99)(100)のストア

4#'6)h H J`Pgei_HC?K&N(AG)h-RfZR;-,,$ 5-,,RfZRFF@L)L)x|





,4

*1+H



,4




２SIMD Multi&Add演算器×２本*/+QaZVbH 
*/+QaZVbH
*0+ H"=XTWbidgS4h4s &j=49 69kDXx
( 1 V+ V1 ) ×  = 8|s>]rEx|j7Xcs
69kDXx^k(j?X1D|s>]rE
Rp._,4s;iY
E
RHLx|j7Xcs^Y`rg,4k9s
=16G,4/0
p._,4s;iYE
 Xr 1{tky!98,4×2GHz^Y`rg,4k9s
 Xr


 =4&B



R


M)x|M)x|RHL-[:XPTERNLILKKE
V=4LE
V=4ME
QSPEPT.

^fZQgS)XcZVgSH(^fZQgS)XcZVgSH(.

L)x|

先駆的科学計算に関するフォーラム2014



-["X


L)x|*.+cPgORYXH 
*.+cPgORYXH GH%< ソフトウェアパイプラインニング>

,4



,4


Ug]Pc

4 6)
hfi\jD9:X[OGGI#!)hfi\GX[OIjRfZRF#!)hIkRfZRF#!)hfi\GGX[OI]P_cPg BME=L/F:G\@Y_/+_4

x|vEx|vE
128byte*kty~} 128byte*kty~}






x|vEx|vE
128byte*kty~} 128byte*kty~}
1 k<5kn
@k<5s=4j.
s=4j.
1 k<5kn
@k<5s=4j.
-["X
-[:X s=4j.

/F:G\@Y_/+_4

例えば以下の処理をを考える。
do i=1,100

(2)

(1)

a(i)のロードa(i)とb(i)の演算
i番目の結果のストア

end do4#'6)h2RfZR;-,,$M)x|M)x|b(i)のロードÖŚŹĢĖĦŐQőŋžƥƯƊƵƎƭƳũŢŋŤ

^fZQgS)XcZVgSH(^fZQgS)XcZVgSH(

ソフトウェアパイプラインニングというx|vEx|vE
a(1)a(2)a(3)のロード.
128byte*kty~}
128byte*kty~}L)x|
b(1)b(2)のロード
x|vEx|vE(1)の演算128byte*kty~} 128byte*kty~}L)x|do i=3,100
1 k<5kn
@k<5s=4j. a(i+1)のロード
s=4j.

1b(i)のロードk<5kn
@k<5s(i-1)の演算=4j.
s=4j.

M)x|

=4&B



.

左の処理を以下のように構成し直す事を






"%^`<:HcdS]

NŪƘƵƓ

7¬µũƇƫƖƎƬŪ/+®Ő:ÌĎ
űśƘƵƓżƄƳƇƫƖ
ƎƬũŚŹƌƵƘſƳƉǀďĚĐ
ŐúÖĎŢŒũęƇƫƖƎƬŪƮ
ƀƳŪƘƵƓż/ũ
+®ŚŹƌƵƘſƳƉǀďęĐ
ŐúÖĎŝźŐWªťőŞťďěĐďĜĐŐúÖ

=(N2+N)/2N2≒1/2

×N2ŪƘƵƓĢĖĦĎĠ»0û(Byte)/£Âû(Flop)

,4

-[:X

-["X

L)x|L)x|ÖŚŹĢĖĦŐQőŋžƥƯƊƵƎƭƳũŢŋŤ
52,,RfZR>>L





,4


,4

*.+cPgORYXH 
*.+cPgORYXH ƴƩƪƯƟƳƚ\żŋ(ŹŐQƱƀƗƳƎƵŐăźŞ¨kũŚŹ ƺŖŪ¨kťƩƪƯ
ƟƳƚ\ŪƢƵƈď ŪM>Ū¬äūĝěħĢĖĿĶĴĐŐ&ŜŹƺƱƀƗƳƎƵŐ×ōŤŋŹŦƩƪƯƟƳƚ\ŪƢƵƈū&ŜŨŋƺ

wk'.


3d[q

wM)x|ty~} ty~}&B,4jty~}bkpks
CarpWr

L)x|

±úÖŨŪūďĘĐďęĐĎ
ũťőŹşŔƄƳ
ƇƫƖƎƬŚŹďĚĐŐúÖĎ
ŖźŷďĘĐďęĐďĚĐŐ¡ŞŗźÜÂũeÖŨƘƵƓŐ£ÂGũÉŗźŞ¨kťņŝźŷŪƘƵƓż2'ōŹ¼^ũďěĐŪƐ
ƊƏƬƵƯƳƉŐťőŤņ
ŗŷũďĜĐŪ£ÂGŐ/ũ®ťőŹ¨kťŊŹ ŐeÖĎ

x|vEx|vE
128byte*kty~} 128byte*kty~}x|vEx|vE
128byte*kty~} 128byte*kty~}
1 k<5kn
@k<5s=4j.
s=4j.
1 k<5kn
@k<5s=4j.
s=4j.







M)x|M)x|

-[:X



-[:X



*/+QaZVbH 
*/+QaZVbH 




-["X

-["X



L)x|L)x|,4

GH%




,4

左の処理を以下のように構成し直す事を
H"=XTWbidgS
ソフトウェアパイプラインニングという*0+*/+QaZVbH 
=4&B*/+QaZVbHRM)x|M)x|

a(1)a(2)a(3)のロード.

L)x|-["XL)x|

(1)の演算

,4


V=4ME

^fZQgS) QSPEPTXcZVgSH(^fZQgS)XcZVgSH(




,4

< ソフトウェアパイプラインニング>


(1)

(2)

(3) (4)(5)(6)(7)(8)4#'6)h H J`Pgei_HC?K&N(AG)h-RfZR;-,,$ 5-,,RfZRFF@L)

*1+H
GH%
,4



,4

=4&B b(1)b(2)のロード

x|j7Xcs
i-2番目の結果のストア|s>]rE
p._,4s;iYE
end dox|j7Xcs^Y`rg,4k9sb(100)のロード
p._,4s;iYE
 Xr (99)(100)の演算^Y`rg,4k9s
PTERNLILKKE
RHL-[:X(98)(99)(100)のストア
V=4LE
!
 Xr
.



^fZQgS)XcZVgSH(^fZQgS)XcZVgSH(L)x|do i=3,100a(i+1)のロード 69kDXx
b(i)のロード|s>]rE R
RHL 69kDXx(i-1)の演算





.

.
L)x|

< ソフトウェアパイプラインニング>





M)x|M)x| 69kDXx|s>]rE
69kDXxx|j7Xcs|s>]rE
p._,4s;iYE
x|j7Xcs^Y`rg,4k9s
p._,4s;iYE
 Xr
^Y`rg,4k9s
 Xr



２SIMD Multi&Add演算器×２本

Ug]Pc


4 6)
hfi\jD9:X[OGGI#!)hfi\GX[OIjRfZRF#!)hIkRfZRF#!)hfi\GGX[OI]P_cPg BME=L,4

例えば以下の処理をを考える。
do i=1,100a(i)のロードb(i)のロード

先駆的科学計算に関するフォーラム2014

演算とロード・ストア比の改善

先駆的科学計算に関するフォーラム2014



(1)

(2)

4h4s&j=49( 1 V+ V1 ) ×  = 8a(i)とb(i)の演算
i番目の結果のストア
end do4#'6)h2RfZR;-,,$

52,,RfZR>>L

1{tky!98,4×2GHz =16G,4/0k{uzs

j8ZrE^k(j?X1D-!

• :K@K7JADK<-0L• 4BG6K9EJ/ • 4BG6K9EJ/
• 
/+1.
• /+1.
•/:>=B

/
• :H=?
• #%& 3)2+1/!,/• " $-!,//

先駆的科学計算に関するフォーラム2014