Professional Documents
Culture Documents
Chi@sccas - CN, Chi@sc - Cnic.cn
Chi@sccas - CN, Chi@sc - Cnic.cn
Ӿ࿐ќ ᇏ॓ݓ࿐ჽ࠹ෘࠏຩྐ༏ᇏྏ
chi@sccas.cn, chi@sc.cnic.cn
http://lssc.cc.ac.cn/
http://www.sccas.cn/
http://www.scgrid.cn/
http://www.cngrid.org/
2005 ୍ 4 ᄅ 6 ರ
ଢ
ֻ၂҆ٳ ѩྛ࠹ෘࠎԤ 3
ֻ၂ᅣ ყСᆩ് 5
§1.1 ѩྛ࠹ෘ֥ଢѓބଽಸ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
§1.2 ѩྛ࠹ෘࠏؿᅚӱ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
§1.2.1 ࠹ෘࠏ༢ؿᅚࡥൎ . . . . . . . . . . . . . . . . . . . . . . . . . . 6
§1.2.2 ѩྛ࠹ෘࠏؿᅚࡥඍ . . . . . . . . . . . . . . . . . . . . . . . . . . 7
§1.3 ଢభൗࢸۚྟି࠹ෘࠏ֥ሑঃ . . . . . . . . . . . . . . . . . . . . . . . . 9
§1.4 ॖঔᅚ֥ѩྛ࠹ෘࠏุ༢ࢲ ܒ. . . . . . . . . . . . . . . . . . . . . . . . 11
§1.4.1 ؓӫ؟ԩࠏ༢ . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
§1.4.2 ܋҃ٳཚթԥԩࠏ༢ . . . . . . . . . . . . . . . . . . . . . . . 13
§1.4.3 նܿଆѩྛ࠹ෘࠏ༢ . . . . . . . . . . . . . . . . . . . . . . . . 14
§1.4.4 ࠏಕ༢ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
§1.5 ݓଽຓӑࠩ࠹ෘᇏྏሑঃ . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
§1.5.1 ૅݓӑࠩ࠹ෘᇏྏࡥࢺ . . . . . . . . . . . . . . . . . . . . . . . . 16
§1.5.2 ᇏݓնӑࠩ࠹ෘᇏྏࡥࢺ . . . . . . . . . . . . . . . . . . . . . . 17
ֻؽᅣ ࠎԤѩྛෘم 21
§2.1 ѩྛ࠹ෘࠎЧ ۀ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
§2.2 ѩྛෘمഡ࠹ࠎЧჰᄵ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
§2.3 თࢳٳٚ م. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
§2.4 ࢳٳିۿٚ م. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
§2.5 ੀඣཌඌ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
§2.6 طٳᇍᆭٚ م. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
§2.7 ҄ѩྛෘ م. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
§2.8 ၳ҄ѩྛෘ م. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
§2.9 ቔြ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
ֻٳ҆ؽ ѩྛෘمഡ࠹აൌགྷ 29
ֻᅣ इᆔѩྛ࠹ෘ 31
§3.1 ѩྛइᆔӰ م. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
i
ii ଢ
ֻ҆ٳ ѩྛൌགྷ 55
ֻඹᅣ ѩྛӱഡ࠹ 57
§4.1 ѩྛщӱଆൔ֥ᇶေো . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
§4.2 ѩྛӱ֥ࠎЧหׄ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
§4.3 ѩྛӱ֥ൌགྷඌ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
ଢ iii
ҕॉ໓ང 119
෬ ႄ 125
࢝࿐ေ
1. ࢝࿐ଢ֥ğ ๙ھݖज़ӱ֥࿐༝đ࿐ૌਔࢳބᅧѩྛ࠹ෘࠏ֥ؿᅚa
ѩྛෘࠎ֥مЧۀaѩྛӱഡ࠹ٚބمѩྛൌགྷߌđູՖ൙ѩྛ࠹
ෘ࣮ބႨӑࠩ࠹ෘࠏ༢ࠎקԤb
2. ଽಸࡥࢺğ ࢺകѩྛ࠹ෘࠏ֥ؿᅚđ֒ࣂѩྛ࠹ෘࠏ֥ᇶੀؿᅚٚཟĠѩ
ྛ࠹ෘ֥ࠎЧۀđѩྛෘࠎ֥مЧোࠣഡ࠹ඌĠइᆔѩྛ࠹ෘ໙ีđ
ᇗׄࢺകѩྛइᆔӰمđཌྟսඔٚӱቆѩྛࢳٚمđսඔหᆘᆴ໙ี
֥ѩྛࢳđࣜםׅսෘ֥مѩྛ߄Ġѩྛӱഡ࠹ඌđࢺകѩྛӱ
ൌགྷބࢳٚӱቆ֥ൌགྷb
3. ࠎԤᆩ്ğFORTRAN/C ეđ࠹ෘٚمb
4. ҕॉሧਘğӧݓਅđѩྛ࠹ෘ - ࢲܒaෘمaщӱđۚ֩࢝ტԛϱഠđ2003
୍ 8 ᄅb
1
2 ଢ
ֻ၂҆ٳ
ѩྛ࠹ෘࠎԤ
ֻ၂ᅣ ყСᆩ്
§1.1 ѩྛ࠹ෘ֥ଢѓބଽಸ
ଢѓğࢳնܿଆ໙ีگބᄖ༢bᄪ௹ѩྛ࠹ෘၛࡆࢳ໙ีູଢ֥đᆃটჷ
Ⴟֆԩࠏ֥࠹ෘ؇൳֞ഈ֥ཋᇅđܻ൞ఃഈཋbෛሢ࠹ෘᄝ॓࿐࣮ބൌ࠽
ႋႨᇏߨؿᄀটᄀն֥ቔႨđದૌؓ࠹ෘၘࣜӁളਔ၇ঠđࡼඔᆴଆቔູྸ؟थҦ֥
၇ऌbགྷᄝದૌၘࣜ༝ܸࡼ࠹ෘቔູ॓࿐ֻ࣮֥ᇕ൭؍đބԮ֥॓࿐࣮֥ં
ٚބمൌဒٚمѩਙb
ሱ 90 ୍սၛটđѩྛ࠹ෘ֤ၛॢభ֥٦ؿᅚđ၂ٚ૫đႮႿֆԩࠏ֥࠹ෘ؇
҂؎ิۚđѩྛ࠹ෘࠏุ֥༢ࢲܒႿӮඃđඔऌԮൻຩ֥ѓሙ߄ބԮൻੱ֥նږ
ิശđ֤ѩྛ࠹ෘࠏ֥ᇅᇛ௹ିܔՖ୍ࠫ֞ࠫ۱ᄅđູᇅѩྛ࠹ෘࠏ༢Էᄯਔ
Ⴕ০่ࡱbਸ਼၂ٚ૫đѩྛ࠹ෘؿᅚ֥ᇶေ৯টሱႿ࠽ݓഈ֥၂ུᇗေ࣮࠹߃
[1, 2]b
ૅݓHPCC ࠹߃ğ॓࿐۽ބӱ࠹ෘླေି ܂ิܔ1TFLOPS ࠹ෘି৯a1TB ଽթಸ
ਈa1TB/s ֥ I/O ջॺđ္ࣼ൞ 3T ྟିଢѓbૅູݓਔЌӻఃᄝۚྟି࠹ෘა࠹ෘ
ࠏ๙ྐਵთ֥ਵֹ໊༵đᄝ 1993 ୍đႮ॓࿐a۽ӱaඌ৳Ϲླྀט൙߶ཟิ߶ݓ
ࢌਔoᇗն็ᅞཛଢğۚྟି࠹ෘა๙ྐp֥Бۡđ္ࣼ൞Фӫູ HPCC ࠹߃֥Б
ۡđࠧૅݓሹ॓࿐ᅞཛଢđఃଢ֥൞๙఼ࡆݖ࣮აषࢳؿथ၂ᇗေ֥॓࿐ა
ඌ็ᅞ໙ีbھཛଢႮඹ҆ٳቆӮğ
1) ۚྟି࠹ෘࠏ༢čHPCSĎđଽಸЇওࣂުࠫս࠹ෘࠏ༢֥࣮a༢ഡ࠹۽
ऎa༵ࣉ֥ׅ༢ࠣჰႵ༢֥ࡎ֩Ġ
2) ༵ࣉೈࡱඌაෘمčASTAĎđଽಸႵऍն็ᅞ໙ี֥ೈࡱᆦӪaྍෘمഡ࠹aೈ
ࡱٳᆦა۽ऎa࠹ෘඌࠣۚྟି࠹ෘ࣮ᇏྏ֩Ġ
3) ॓ࡅݓა࢝ტຩčNRENĎđଽಸႵᇏࢤᅟࠣ 10 ၡ໊ࠩԮൻ֥࣮აषؿĠ
4) ࠎЧ࣮აದোሧჷčBRHRĎđଽಸႵࠎԤ࣮aa࢝ტࠣज़ӱ࢝ҋb
HPCC ࠹߃ᇏ࣍௹ေࢳथ֥oऍն็ᅞp໙ีႵğ
1) Ո࠺ඌbေᄝ၂֥ٚՈі૫ഈ෪࠺ 10 ၡ໊ඔऌĠ
2) ྍူᇅbหљ൞ٝᇍδᆡაηሩѨྍူ֥ᇅĠ
3) ۚӬ൧ࢌ๙bྍ֮ᄮၻ٦ࠏ֥ᇅđॢగ৯࿐֥࠹ෘĠ
4) բ߄࠴ഡ࠹bڿэᇀࣂູᆸ؟ඔբ߄࠴ौࣜဒഡ࠹֥༝ܸđሇཟ࠹ෘࠏڣᇹഡ࠹đ
ᇶေٳ༅ᆃུگᄖ༢֥նܿଆਈሰ߄࿐ଆĠ
5) ಗਘಗഎჰb๙߄ݖ࿐৯࿐࠹ෘđࢣൕੀุ৯࿐֥ቔႨđᇅྍࠏؿĠ
6) ݚလଆଆbؓݚလࠃაնగੀ֥ಣࢌߐࣉྛᆜุݚလଆĠ
5
6 ֻ၂ᅣ ყСᆩ്
7) ԙသҪॢ׳b࣮॥ᇅԙသཨݖݻӱ֥߄࿐ބ৯࿐ࠏᇅĠ
8) ඔሳࢳ௩bೂົ CT ೡ૭འԩđದଷᇶีଆđົളࢲܒაඹົൈࡗ
ࢲܒĠ
9) ॢగಙb࠹ෘଆିิ܂Ⴕི॥ᇅಙԮѬ֥ࣥđࢣൕఃა߄࿐ࠏĠ
10) ֑Ϣᇉࢲܒഡ࠹bႨ࠹ෘࠏଆđ֑ؓϢᇉቆӮ֥ົࢲྛࣉܒ࣮Ġ
11) འࢳbൌൈᇅའࠇ߂Ġ
12) ૡၲඌbၲӉ໊ඔ֥ૡđᇶေ൞࿙ᅳ၂۱նඔ֥ਆ۱ၹሰb
ૅݓASCI ࠹߃ğಆ૫࣌ᆸނ൫ဒ่ჿదުרđؓނఖ֥ᇅᆺି๙ݖᄝൌဒ൩֥ඔ
ᆴଆটປӮb1996 ୍ 6 ᄅႮૅିݓჷ҆ิԛਔoࡆᅞ࠹ෘԷྍp࠹߃đ္ࠧ
ASCI ࠹߃ཛଢbิԛ๙ݖඔᆴଆটނܙఖ֥ྟିaνಆྟaॖौྟa۷ྍ֩b
ေඔᆴଆղ֞ۚٳяੱaۚЯᆇ؇aົaಆaಆ༢֥ܿଆିބ৯b࠹ھ
߃Фಪູ൞ა୍֒ણ֩߃࠹ؘݗ֥၂۱ऍն֥็ᅞđ҂ࣇླေሱಖ॓࿐ࡅ֥ҕ
აđླ္طေა࠹ෘࠏ֩۽ြࢸ֥ކቔđิ܂Ќᅰ ASCI ࠹߃ᇏ֥ႋႨ෮ླ֥࠹
ෘࠏbູՎđૅݓնނఖൌဒ൩čLawrence LivermoreaLos AlamosaSandia
ࡅݓൌဒ൩Ďٳљཟն࠹ෘࠏ܄ඳčIntelaIBMaSGI/Cray ܄ඳĎყרਔڂᆴׄڜ
ᄎෘ؇ӑ ݖ1TFLOPS ֥ѩྛ࠹ෘࠏbଢభၘࣜᄝᆃུൌဒ൩ೆႨ֥ѩྛ࠹
ෘࠏ༢đఃڂᆴׄڜᄎෘ؇ၘࣜӑݖਔ 50TFLOPSb
ѩྛ࠹ෘ֥ଽಸۂݤ٤ӈܼđၹՎޓିؓܔఃࣉྛಆ૫૭ඍđᄝᆃࡼᇗׄࢺക
ѩྛ࠹ෘࠏุ֥༢ࢲܒđщӱეđѩྛෘمđѩྛൌགྷඌđѩྛႋႨೈࡱ֩b
§1.2 ѩྛ࠹ෘࠏؿᅚӱ
§1.2.1 ࠹ෘࠏ༢ؿᅚࡥൎ
§1.2.2 ѩྛ࠹ෘࠏؿᅚࡥඍ
40 ୍սष֥གྷս࠹ෘࠏؿᅚӱॖၛູٳਆ۱ૼཁ֥ؿᅚൈսğԱྛ࠹ෘൈսa
ѩྛ࠹ෘൈսbૄ၂۱࠹ෘൈսՖุ༢ࢲؿܒᅚषđࢤሢ൞༢ೈࡱčหљ൞щၲ
ఖაҠቔ༢ĎaႋႨೈࡱđቋުෛሢ໙ีࢳߌ֥ؿᅚطղ֞ڂפbԷࡹބႨѩྛ
࠹ෘࠏ֥ᇶေჰၹ൞ၹູѩྛ࠹ෘࠏ൞ࢳथֆԩఖ؇֥࣠ቋݺٚمᆭ၂b
8 ֻ၂ᅣ ყСᆩ്
ѩྛ࠹ෘࠏ൞Ⴎ၂ቆԩֆჭቆӮ֥đᆃቆԩֆჭ๙ݖཌྷᆭࡗ֥๙ྐაླྀቔđၛ
۷ॹ֥؇܋ປӮ၂ཛնܿଆ֥࠹ෘༀbၹՎđѩྛ࠹ෘࠏ֥ਆ۱ቋᇶေ֥ቆӮ҆
ٳ൞࠹ෘࢫ֥ׄࡗׄࢫބ๙ྐაླྀቔࠏᇅbѩྛ࠹ෘࠏุ༢ࢲؿ֥ܒᅚ္ᇶေุགྷᄝ࠹
ෘࢫׄྟି֥ิۚၛࠣࢫׄࡗ๙ྐඌ֥ࣉڿਆٚ૫b
60 ୍սԚ௹đႮႿุࣖܵၛࠣՈྉթԥఖ֥ԛགྷđԩֆჭэ֤ᄀটᄀཬđթԥఖ
္۷ࡆཬెބ৷ࡎbᆃུඌؿᅚ֥ࢲ֝ݔᇁਔѩྛ࠹ෘࠏ֥ԛགྷđᆃ၂ൈ௹֥ѩྛ࠹
ෘࠏ؟൞ܿଆ҂ն֥܋ཚթԥ؟ԩఖ༢đࠧ෮໌նᇶࠏčMainframeĎbIBM360 ൞
ᆃ၂ൈ௹֥ׅսіb
֞ਔ 60 ୍սଌ௹đ၂۱ԩఖषഡᇂ؟۱ିۿཌྷ֥ିۿֆჭđੀඣཌඌ္
ԛགྷਔbაֆՂิۚൈᇒੱཌྷбđᆃུѩྛหྟᄝԩఖଽ֥҆ႋႨննิۚਔѩྛ
࠹ෘࠏ༢֥ྟିb၈০୶၇ն࿐ ބBurroughs ܄ඳՎൈषൌീ IlliacIV ࠹߃đᇅ
၂ 64 ۱ CPU ֥ SIMD ᇶࠏ༢đടࠣ֞႗ࡱඌaุ༢ࢲܒaI/O ഡСaҠቔ༢
aӱഡ࠹ეᆰᇀႋႨӱᄝଽ֥ᇙ؟࣮ज़ีb҂ݖđ֒၂ܿଆնն෪ཬਔ֥
16CPU ༢ᇔႿᄝ 1975 ୍૫ൗൈđᆜ۱࠹ෘࠏࢸၘࣜؿളਔऍնэ߄b
൮༵൞թԥ༢ྍ۪֥ۀđิԛྴթԥߏބթ֥නམbIBM360/85 ༢ა 360/91
൞උႿ၂༢ਙ֥ਆ۱ࠏđ360/91 ֥ᇶۚႿ 360/85đ෮࿊Ⴈ֥ଽթ؇္ࢠॹđѩ
ҐႨਔט؇֥ᆷੀඣཌĠ൞đ360/85 ֥ᆜุྟିಏۚႿ 360/91đື၂֥ჰၹ
ࣼ൞భᆀҐႨਔߏթඌđުطᆀᄵીႵb
ఃՑ൞϶ุ֝թԥఖषսูՈྉթԥఖbቋԚđ϶ุ֝թԥఖᆺ൞ᄝଖུࠏఖФ
Ⴈቔߏթđ طCDC7600 ᄵੱ༵ಆ૫ҐႨᆃᇕุࠒ۷ཬa؇۷ॹaॖၛᆰࢤ࿙ᆶ֥϶֝
ุթԥఖđՈྉթԥఖՖՎԛਔൎbაՎൈđࠢӮਫ਼္ԛགྷਔđѩႋႨ
֞ਔ࠹ෘࠏᇏbჭఖࡱඌ֥ᆃਆն۪ଁྟđ֤ IlliacIV ֥ഡ࠹ᆀૌᄝָҪ႗ࡱ
ၛࠣѩྛุ༢ࢲܒٚ૫ิԛ֥ᇕᇕࣉڿնູb
1976 ୍ CRAY-1 ໙ൗၛުđཟਈ࠹ෘࠏՖՎহহֹ॥ᇅሢᆜ۱ۚྟି࠹ෘࠏ൧ӆ
15 ୍bCRAY-1 ؓ෮Ⴈ֥આࠠਫ਼ࣉྛਔࣚྏ֥ഡ࠹đҐႨਔૌೂࣂӫູ RISC ֥
ࣚࡥᆷࠢđߎႄೆਔཟਈ࠷թఖđၛປӮཟਈᄎෘbᆃ၂༢ਙಆྍඌ൭֥؍Ⴈđ
CRAY-1 ֥ᇶղ֞ਔ 80MHzb
ັԩఖෛሢࠏఖ֥ሳӉՖ 4 ໊a8 ໊a16 ໊၂ᆰᄹࡆ֞ 32 ໊đఃྟି္ෛᆭཁᇷ
ิۚbᆞ൞ၹູु֞ਔັԩఖ֥ᆃᇕమ৯đवଽࠎ - ઼ੈն࿐षᄝ֒ൈੀྛ֥ DEC
PDP11 ཬ࠹ෘࠏ֥ࠎԤഈᇅӮۿ၂Ⴎ 16 ۱ PDP11/40 ԩࠏ๙ࢌݖҭषܱა
16 ۱܋ཚթԥఖଆॶཌྷ৵ࢤطӮ֥܋ཚթԥ؟ԩఖ༢ C.mmpb
Ֆ 80 ୍սषđັԩఖඌ၂ᆰᄝۚభࣉbުႻԛགྷਔ٤ӈൡކႿ SMP ٚ
ൔ֥ሹཌླྀၰđطѵक़০ࡆᇜն࿐ᄵؓሹཌླྀၰࣉྛਔঔᅚđิԛਔ Cache ၂ᇁྟ໙ี
֥ԩٚσbՖՎđC.mmp षԷԛ֥܋ཚթԥ؟ԩఖᆭਫ਼ᄀሼᄀॺĠགྷᄝđᆃᇕุ༢
§1.3 ଢభൗࢸۚྟି࠹ෘࠏ֥ሑঃ 9
ࢲࠎࣜၘܒЧഈᇍਔڛༀఖބም૫۽ቔᅟ൧ӆb
၂ൈ௹đࠎႿཨ༏Ԯࠏ־ᇅ֥ѩྛ࠹ෘࠏ္ष҂؎Ⴄགྷb80 ୍սᇏ௹đࡆᇜ
۽Ӯ ࡼֹۿ64 ۱ i8086/i8087 ԩఖ๙ݖӑ৫ุٚ৵ࢲܒ৵ࢲఏটbՎުđь༵ުԛ
གྷਔ Intel iPSC ༢ਙaINMOS Transputer ༢ਙđIntel Paragon ၛࠣ IBM SP ֥భദ
Vulcan ֩ࠎႿཨ༏Ԯࠏ־ᇅ֥ѩྛ࠹ෘࠏb
80 ୍սଌ֞ 90 ୍սԚđ܋ཚթԥఖٚൔ֥նܿଆѩྛ࠹ෘࠏႻࠆ֤ਔྍ֥ؿᅚbIBM
ࡼնਈᄪ௹ RISC ັԩఖ๙ྙלݖ৵ຩ৵ࢲఏটbದૌषॉ੮ೂޅҌିᄝൌགྷ
܋ཚթԥఖߏթ၂ᇁ֥ൈđ༢ऎႵ၂֥קॖঔᅚྟčScalabilityĎb90 ୍սԚ௹đථ
ฌڞն࿐ิԛਔ DASH ࠹߃đ๙ົݖ၂۱ЌթႵૄ၂ߏթॶ໊ᇂྐ༏֥ଢࢲܒট
ൌགྷ҃ٳൔ܋ཚթԥఖ֥ߏթ၂ᇁྟbުটđIEEE ᄝՎࠎԤഈิԛਔߏթ၂ᇁྟླྀၰ֥
ѓሙb
90 ୍սၛটđᇶေ֥ࠫᇕุ༢ࢲܒषሼཟವކbඋႿඔऌѩྛো֥ CM-5 Ԣն
ਈҐႨഅ߄֥ັԩఖၛຓđ္ᄍྸႨҪ֥ӱԮ־၂ུࡥֆ֥ཨ༏ĠCRAY T3D
൞၂ NUMA ࢲ܋֥ܒཚթԥѩྛ࠹ෘࠏđ൞္ิ܂ਔಆअ҄ࠏᇅaཨ༏ؒਙ
ࠏᇅđѩҐ౼ਔ၂ུࡨഒཨ༏Ԯ־Ӿ֥ඌb
ෛሢഅ߄ັԩఖaຩഡС֥ؿᅚđၛࠣ MPI/PVM ֩ѩྛщӱѓሙ֥҃ؿđ
ࠏಕࡏ֥ܒѩྛ࠹ෘࠏԛགྷbIBM SP2 ༢ਙࠏಕ༢ࣼ൞ఃᇏ֥ׅսіbᄝᆃུ༢
ᇏđ۲۱ࢫׄҐႨ֥൞ѓሙ֥അ߄࠹ෘࠏđૌᆭࡗ๙ۚݖຩ৵ࢤఏটb
ࣂ฿đᄀটᄀ֥؟ѩྛ࠹ෘࠏ༢ҐႨഅ߄֥ັԩఖࡆഈഅ߄֥৵ຩܒ
ᄯđᆃᇕ҃ٳթԥ֥ѩྛ࠹ෘࠏ༢ӫູࠏಕbݓଽࠫެ෮Ⴕ֥ۚྟି࠹ෘࠏӌഅള
ӁᆃᇕऎႵࠞۚྟିࡎ۬б֥ۚྟି࠹ෘࠏđѩྛ࠹ෘࠏࣼࣉೆਔ၂۱ྍ֥ൈսđѩྛ
࠹ෘ֥ႋႨղ֞ਔభ෮ໃႵ֥ܼ؇ބധ؇b
§1.3 ଢభൗࢸۚྟି࠹ෘࠏ֥ሑঃ
ѩྛ࠹ෘࠏෛሢັԩྉோ֥ؿᅚđၘࣜࣉೆਔ၂۱ྍൈսbଢభѩྛ࠹ෘࠏ֥ྟ
ିၘࣜࢤ࣍ 100TFLOPSđ1000TFLOPS ֥ѩྛ࠹ෘࠏᆞᄝܿ߃ᆭᇏbݓѩྛ࠹ෘࠏ
֥ᇅၘࣜሼᄝൗࢸభਙđᆞᄝᇅളӁ 100TFLOPS ֥ऍ࠹ෘࠏ༢b2003 ୍Ⴎ৳
མ܄ඳളӁ֥ധอ 6800 ᄝ 2003 ୍ 11 ᄅൗࢸTOP500 ஆᇏ໊ਙֻ 14 đ2004 ୍ආ
ܻ܄ඳളӁ֥ආܻ 4000A ᄝ 2004 ୍ 6 ᄅ֥ൗࢸTOP500 ஆᇏ໊ਙֻ 10 đᆃ൞
܄ݓष࠹ିྟ֥ۚ҃ؿෘࠏᄝൗࢸTOP500 ᇏ൮Ցࣉೆభđᆃѓᆽሢݓᄝѩྛ࠹
ෘࠏ༢֥ᇅބളӁᇏၘࣜۊഈਔࣉ༵࠽ݓඣđູิ֥ۚ॓ݓ࿐࣮ඣקਔ
ᇉࠎԤbі 1.1 ൞οᅶ 2004 ୍ 11 ᄅ֥҃܄ൗࢸ TOP500 ஆϼ֤ԛ֥ [3]b
ՖTOP500 ֥భ 10 і 1.1 টुđૅݓಯಖ൞ӑࠩ࠹ෘࠏ֥ቋնႚႵᆀbοᅶൗ
10 ֻ၂ᅣ ყСᆩ്
ࢸTOP500 ֥࠹ඔऌটٳ༅đૅݓᄝ࠹ෘି৯ഈᅝႵ࣍ಆൗࢸ֥၂϶đᄝTOP500 ᇏ
֥෮Ⴕ࠹ෘࠏᇏႚႵ֥ඔਈӑ ݖ50%b
Ֆі 1.2 ॖၛुԛđଢభൗࢸۚྟି࠹ෘࠏ֥ᇶੀࢲܒ൞ࠏಕb
§1.4 ॖঔᅚ֥ѩྛ࠹ෘࠏุ༢ࢲܒ
۴ऌᆷੀބඔऌੀ֥҂đ๙ӈϜ࠹ෘࠏ༢ູٳඹো [1, 2]:
• ֆᆷੀֆඔऌੀčSISDĎ
• ֆᆷੀ؟ඔऌੀčSIMDĎ
• ؟ᆷੀֆඔऌੀčMISDĎ
• ؟ᆷੀ؟ඔऌੀčMIMDĎ
ѩྛ࠹ෘࠏ༢Ԣഒਈᄪ௹֥aህႨ֥SIMD ༢ຓđधնູ҆ٳMIMD ༢bଢభᇶ
ေ֥ѩྛ࠹ෘࠏ༢Ⴕᇕğ
• ѩྛཟਈࠏčPVPđParallel Vector ProcessorĎĠ
• ؓӫ؟ԩࠏčSMP,Symmetric MultiprocessorĎĠ
• նܿଆѩྛԩࠏčMPPđMassively Parallel ProcessorĎĠ
• ࠏಕčClusterĎĠ
• ҃ٳൔ܋ཚթԥ؟ԩࠏčDSMđDistributied Shared MemoryĎb
ᆃো࠹ෘࠏ༢սіਔ֒ࣂൗࢸѩྛ࠹ෘࠏ֥ᇶေุ༢ࢲܒđ༯૫ૌࡥֆࢺക၂༯
SMPaDSMaMPP ࠏބಕѩྛ࠹ෘࠏ༢b
§1.4.1 ؓӫ؟ԩࠏ༢
1.1 ൞ؓӫ؟ԩࠏ༢֥ࡥֆࢲܒđႮԩֆჭaۚߏթaሹཌࠇࢌҭष
ܱa܋ཚଽթၛࠣ I/O ֩ቆӮb
SMP ऎႵೂ༯หᆘğ
• ؓӫ܋ཚթԥğ༢ᇏ֥ޅԩࠏनॖᆰࢤ٠໙ޅଽթଆॶ֥թԥֆჭ ބI/O
ଆॶ৵ࢤ֥ I/O ഡСđ٠໙֥Ӿaջॺބ٠໙Ӯੱۿ൞၂ᇁ֥b෮Ⴕଽթଆॶ
12 ֻ၂ᅣ ყСᆩ്
1.1: ؓӫ؟ԩࠏ༢
ֹ֥ᆶֆჭ൞၂щ֥đ۲۱ԩࠏᆭࡗֹ໊֥ཌྷbҠቔ༢ॖၛᄎྛᄝၩ၂
۱ԩࠏഈb
• ֆ၂֥Ҡቔ༢႘ཞğಆ༢ᆺႵ၂۱Ҡቔ༢ሁᄝ܋ཚթԥఖᇏđ۴ऌ۲۱ԩ
ࠏ֥ڵᄛ౦ঃđٳ۲۱ԩࠏ֥ڵᄛđѩЌӻૄ۱ԩࠏ֥ڵᄛनޙb
• अ҆ۚߏթࠣఃඔऌ၂ᇁྟğૄ۱ԩࠏनႵሱ֥࠭ۚߏթđૌॖၛႚႵ৫
֥अ҆ඔऌđ൞ᆃུඔऌсྶЌӻაթԥఖᇏ֥ඔऌ൞၂ᇁ֥b
• ֮๙ྐӾğ۲۱ࣉӱ۴ऌҠቔ༢ิ֥܂/ཿҠቔđ๙܋ݖཚඔऌߏթটປӮ
ԩࠏᆭࡗ֥๙ྐđఃӾ๙ӈჹཬႿຩ๙ྐ֥Ӿb
• ܋ཚሹཌ֥ջॺğ෮Ⴕԩࠏ܋ཚ၂۱ሹཌջॺđປӮؓଽթଆॶ֥ඔऌ ބI/O
ഡС֥٠໙b
• ᆦӻཨ༏Ԯ־a܋ཚթԥଆൔ֥ѩྛӱഡ࠹b
SMP ऎႵೂ༯ಌׄğ
• ఴॖौğሹཌaթԥఖࠇҠቔ༢ാིॖ֝ᇁ༢ಆ҆คߓb
• ॖঔᅚྟҵğႮႿ෮Ⴕԩࠏ܋ཚ၂۱ሹཌջॺđطሹཌջॺૄ 3 ୍Ҍᄹࡆ 2 Пđ
۵҂ഈԩࠏ؇ބଽթಸਈ֥ؿᅚ҄قbၹՎđSMP ѩྛ࠹ෘࠏ༢֥ԩࠏ۱
ඔ၂ϮഒႿ 64 ۱đ္ࣼᆺିิૄ܂૰ඔϤၡՑ֥ׄڜᄎෘྟିb
SMP ֥ׅսіğ
• SGI Power Challenge XL ༢ਙѩྛ࠹ෘࠏč32 ۱ MIPS R10000 ັԩఖĎ
• COMPAQ Alphaserver 84005/440č12 ۱ Alpha 21264 ັԩఖĎ
• HP HP9000/T600č12 ۱ HP PA9000 ັԩఖĎ
• IBM RS6000/R40č8 ۱ RS6000 ັԩఖĎ
§1.4 ॖঔᅚ֥ѩྛ࠹ෘࠏุ༢ࢲܒ 13
§1.4.2 ܋҃ٳཚթԥԩࠏ༢
HUB HUB
Router M0 Router Mp
Node0 Nodep
1.2: ܋҃ٳཚթԥԩࠏ༢
֥ׄअ҆ۚߏթඔऌაթԥఖᇏ֥ඔऌ൞၂ᇁ֥bൈđૌӫᆃᇕDSM ѩྛ࠹
ෘࠏࢲ ູܒCC-NUMA ࢲܒb
• ֮๙ྐӾაۚ๙ྐջॺğህႨ֥ۚྟି৳ຩ֤ࢫׄࡗ֥٠໙Ӿཬޓđ๙ྐ
ջॺॖၛঔᅚb২ೂđଢభቋऎսіྟ֥DSM ѩྛ࠹ෘࠏ SGI Origin 3000đ֥ච
ཟׄؓׄջॺॖղ 3.2GB/૰đطӾཬႿ 1 ۱ັ૰b
• ॖঔᅚྟۚğDSM ѩྛ࠹ෘࠏॖঔᅚ֞ഈత۱ࢫׄđିิૄ܂૰ඔຣၡՑ֥ׄڜᄎ
ෘྟିb
• ᆦӻཨ༏Ԯ־a܋ཚթԥѩྛӱഡ࠹b
DSM ֥ׅսіğ
• SGI Origin 2000a3000a3800Ġ
• SGI Altixb
§1.4.3 նܿଆѩྛ࠹ෘࠏ༢
M0 M1 Mp
1.3: նܿଆѩྛ࠹ෘࠏ༢
1.3 ൞၂۱նܿଆѩྛ࠹ෘࠏ༢֥ࡥֆࢲܒđ൞ѩྛ࠹ෘࠏؿᅚݖӱᇏ֥ᇶ
৯đགྷᄝၘࣜؿᅚ֞Ⴎഈຣ۱ԩࠏܒӮ၂۱༢đෛሢѩྛ࠹ෘࠏ֥ؿᅚđࠫຣ۱ԩ
ࠏ֥ӑնܿଆ༢္߶ᄝ҂ࣲ֥ࡼট໙ൗb
MPP ֥หׄğ
• ࢫׄඔਈ؟đӮతഈຣđᆃུࢫׄႮअ҆ຩव๙ିྟۚݖ৳ຩ৵ࢤb
• ૄ۱ࢫׄཌྷؓ৫đѩႚႵ၂۱ࠇ؟۱ັԩࠏbᆃུັԩࠏႵअ҆ۚߏ
թđѩ๙ݖअ҆ሹཌࠇ৳ຩაअ҆ଽթଆॶ ބI/O ഡСཌྷ৵ࢤb
• MPP ֥۲۱ࢫׄनႚႵ҂֥Ҡቔ༢႘ཞđ၂Ϯ౦ঃ༯đႨॖၛࡼቔြิࢌ۳
ቔြܵ༢đႮটט؇֒భ༢ᇏႵི֥࠹ෘࢫׄটᆳྛھቔြbൈđMPP
༢္ᄍྸႨ֨֞ᆷׄࢫ֥קđࠇ֞ଖུหׄࢫ֥קഈᄎྛቔြb
• ۲۱ࢫׄഈ֥ଽթଆॶ൞ཌྷ৫֥đ҂թᄝಆअଽթֆჭ֥၂႗ࡱщᆶb၂Ϯ
౦ঃ༯đ۲۱ࢫׄᆺିᆰࢤ٠໙ሱദ֥अ҆ଽթଆॶbೂླݔေᆰࢤ٠໙ఃࢫ֥ׄ
ଽթଆॶđᄵсྶႵҠቔ༢ิ܂ห൹֥ೈࡱᆦӻb
§1.4 ॖঔᅚ֥ѩྛ࠹ෘࠏุ༢ࢲܒ 15
MPP ֥ׅսіğ
• ICT Dawning 1000č32 ۱ԩࠏĎĠ
• IBM ASCI Whiteč8192 ۱ԩࠏĎĠ
• Intel ASCI Redč9632 ۱ԩࠏĎĠ
• Cray T3Eč1084 ۱ԩࠏĎ
§1.4.4 ࠏಕ༢
• Linux ࠏಕ༢࠭Ӯູቋੀྛ֥ۚྟି࠹ෘđᄝۚྟି࠹ෘࠏᇏᅝႵᄀটᄀն֥
бᇗ
• ༢ܿଆॖՖֆࠏaഒඔࠫ৳ຩ֥ັࠏᆰ֞Їওഈత۱ࢲ֥ׄնܿଆѩྛ༢
• ࠻ॖቔູ৷ࡎ֥ѩྛӱט൫ߌđ္ॖഡ࠹Ӯᆇᆞ֥ۚྟିѩྛࠏ
• ௴ࠣѩྛ࠹ෘс҂ॖഒ֥۽ऎ
• ႨႿۚྟି࠹ෘ֥ࠏಕ༢ᄝࢲܒഈaႨ֥ೈࡱ۽ऎഈ๙ӈႵљႿႨႿิ܂ຩa
ඔऌ९ڛༀ֥ࠏಕ (ުᆀၧӫູڛༀఖࠢಕ)
• TOP500 Supercomputer Sites
• Cluster@TOP500
• ҕॉሧਘ: Ⴈܱሳ “cluster howto” ᄝຩഈෆ෬ཌྷܱҋਘ . . .
• ֆࠇ৳ຩ֥؟ັࠏࠇڛༀఖ
16 ֻ၂ᅣ ყСᆩ്
§1.4.4.2 ህႨѩྛࠏಕ
ᆷህࡹᄯ֥ႨႿѩྛ࠹ෘ֥ࠏಕb
• ๙ӈֆྙӮ၂۱अთຩđᄜ๙ݖ၂۱ຩܱ৵ࢤ֞ Internet
• ๙ӈႨଽ҆ IP ֹᆶ (ೂ 192.168.0.x), ؓຓ҆طᆺႵຩܱ൞ॖ֥
• ॖ۴ऌླေഡ৫၂ᇀඔڛༀఖđٳљӵքຩܱaൈᇒ҄ (NTP)aNIS/LDAPaຩ
໓ࡱ༢ (NFS)aሧჷܵaႨ֨aቔြט؇֩ڛༀ
• ๙ ݖIP ເል (IP Masquerading) ࠇຩֹᆶሇߐ (NAT , Network Address Transla-
tion) ֤ଽ҆ࢲׄିܔᆰࢤ٠໙ Internet (ipchains ࠇ iptables)
• ০ႨLVS (Linux Virtual Server) ࡼຓ҆Ⴈٳ֞֨ࢲׄ
• նࠏಕ๙ӈҐႨνልᄝࠏ݊ᇏ֥ࠏࡏൔࠇ֗ோൔڛༀఖđѩႵህС֥ UPS ࠣ
ॢט
§1.5 ݓଽຓӑࠩ࠹ෘᇏྏሑঃ
§1.5.1 ૅݓӑࠩ࠹ෘᇏྏࡥࢺ
֥ൈսđSDSC ၘࣜӮູ॓࿐aఒြa࿐ඌ֥ᅞሧჷđքڵሢඔऌܵaຩ۬࠹ෘa
ളྐ༏aֹྐ༏aۚ؊࠹ෘၛࠣః॓࿐۽ӱ࿐֥॓ਵֹ໊֝bSDSC ֥ଁ൞
ഥ॓࿐Ӯࣼđཟഠ߶ิିྟۚ܂႗ࡱඌaࠢӮೈࡱඌၛࠣധ؇֥ॴ࿐॓ህြ
ିb
• ૅࡅݓݓӑࠩ࠹ෘႋႨᇏྏ (NCSA)ԷࡹႿ 1986 ୍ 1 ᄅbNCSA ᄝۚྟି࠹ෘa
ຩaթԥބඔऌٳ༅ਵთऎႵࢠۚ࠽ݓലუbФ၂ܺಪູ൞Էྍྟ֥॓࿐۽
ӱ༢ބೈࡱ֥༵ڃbNCSA ֥ሷᆻ൞აॖᇕ࣮ਵთކቔđԷࡹ༵ࣉ࠹ෘഡീ
čcyberinfrastructureĎđฐ෬ྍ֥॓࿐ؿགྷb֥ህြหӉ൞ႋႨቋ༵ࣉ֥࠹ෘࠏđ
ࡹܒವކೈࡱႋႨaॖ൪߄۽ऎaඔऌडٳބ༅۽ऎ֥۽ቔ༢bᆃུԷྍ༢ࡼ
Ӯູໃট༵ࣉ࠹ෘഡീ֥ྏނđϜٳ༢৵๙Ӯູֆ၂a֥ډሧჷbNCSA ൞
National Science Foundation ֥ TeraGrid ࠹߃֥ܱކቔࠄϴđ߃࠹ھሧਔ၂ၡ
ૅჭđϺᇹ࣮ದჴჹӱ٠໙ቋॹ֥a֥ࠩפӑࠩ࠹ෘࠏaॖ൪߄۽ऎaႋႨೈࡱa
Ԯۋఖa၎ఖၛࠣնթԥഡСb
• Pittsburgh ӑࠩ࠹ෘᇏྏ ൞ Carnegie Mellon ն࿐aPittsburgh ն࿐ၛࠣ Westing
house Electric ܄ඳ܋ቆࡹ֥bӮ৫Ⴟ 1986 ୍đ֤֞؟۱৳Ϲ҆ၛࠣ Pennsyl-
vania ᇛᆟބکದఒြ܋ุ֥ᆦӻbఃଁ൞ཟࡅݓഠ߶ิ܂၂ੀ֥࠹ෘሧჷđ
ᆦӻ॓࿐۽ӱਵთᇶေ໙ี֥ࢳथĠ࠹ෘ॓࿐a࠹ෘඌၛࠣྐࡅݓ༏ഡീ֥ؿ
ᅚĠཟ࣮ದჴԮ൱ۚྟିඌၛࠣૌ֥ႨĠϺᇹದ҆đष࠹ିྟۚؿෘೈ
ࡱđ՜ࣉૌ֥ࣩᆚႪ൝b
• ...
§1.5.2 ᇏݓնӑࠩ࠹ෘᇏྏࡥࢺ
҆đഈݚ൧॓֊گބն࿐ކሧቆࡹb
• ࠹ିྟۚࡅݓෘᇏྏčݳᇜĎႿ 2001 ୍ 4 ᄅ 1 ರđ၇ກᆄࡾസࠎၹቆྐ༏࿐ᇗׄൌ
ဒ൩aᆄࡾն࿐ࠎၹቆྐ༏࿐࣮෮ᄝݳᇜӮ৫b
• ࠹ିྟۚࡅݓෘᇏྏč༆νĎ Ⴟ 2002 ୍ 4 ᄅ 13 ರᄝ༆νࢌ๙ն࿐ࢣஇbФӫູ”
ᇏݓ༆҆ IT ݴଛ” ྐ༏߄֥ఓđѓᆽሢݓ༆֥҆ྐ༏߄ࡹഡ҄ೆಆࣉ༵ݓ
ྛਙb
• תն࿐ۚྟି࠹ෘᇏྏ ቔູ”ࡅݓ211 ۽ӱ” ൮ᇗׄࡹഡ֥ۚ֩࿐ᆭ၂đת
ն࿐୍࣍ট၂ᆰᇁ৯Ⴟิۚۚྍඌ࣮ඣb2004 ୍đתն࿐ሧඔϤຣჭđቆ
ࡹӮ৫ਔھᇏྏb
• ฿ࣃۚྟି࠹ෘᇏྏ Ⴟ 2004 ୍ 8 ᄅ 23 ರᄝଲषն࿐Ӯ৫bᆻᄝູ฿ࣃအۚྟି
࠹ෘದҌđնܿଆ॓࿐ა۽ӱ࠹ෘ֥ؿᅚđఽᅝሸ॓ކൌ৯ࣩᆚ֥ᇅۚׄb
• КࣘႋႨა࠹ෘඔ࿐࣮෮ - ۚྟି࠹ෘᇏྏ ႚႵӑࠩѩྛ࠹ෘࠏၛࠣഈϤ
ۚྟି࠹ෘ۽ቔᅟđ൞ݓଽܿଆቋն֥ӑࠩ࠹ෘᇏྏᆭ၂bᇏྏა෮ຓࡹ৫ਔࢠܼٗ
֥࿐ඌࢌੀაކቔܱ༢đӵք؟ཛࡅݓሱಖ॓࿐ࠎࣁज़ีđࡅݓᇗնࠎԤ࣮ཛଢज़
ีၛࠣۚࡅݓඌ࣮ཛଢbᇏྏ֥ᇶေༀ൞ູ࣮෮֥ۚྟି࠹ෘิ܂ཌྷܱ֥
॓࿐აඌᆦӻđᇶေЇওğ
1. ۚྟିѩྛ࠹ෘࠏߌ֥ࡹഡაܵ
2. ۚྟିѩྛ࠹ෘೈࡱაં࣮
3. նܿଆ॓࿐࠹ෘॖ൪߄ೈࡱაં࣮
4. նܿଆඔऌܵೈࡱაં࣮
5. ࠹ෘࠏຩඌ֥षؿაႋႨ
6. ྴགྷൌඌ࣮
• ഈݚӑࠩ࠹ෘᇏྏӮ৫ა 2000 ୍ָđ൞ഈݚ൧ྐ༏߄ࡹഡ֥၂۱ᇗေࠎԤഡീbھ
ᇏྏၛഈݚ൧֥॓࢝ტ۽ބြؿᅚູࠎԤđູచӚஷሏଆaԯѷഡ࠹֩ิྟۚ܂
ି࠹ෘି৯bଢభႚႵݓଽ TOP100 ஆֻ၂֥ӑࠩ࠹ෘࠏආܻ 4000Ab
• ᇏ॓ݓ࿐ჽ֥ӑࠩ࠹ෘᇏྏ Ӯ৫Ⴟ 1996 ୍đູᇏ॓ݓ࿐ჽ֥॓࿐࣮ิ࠹܂ෘߌ
đ൞ᇏ॓ݓ࿐ჽྐ༏߄ࡹഡ֥ᇗေࠎԤഡീᆭ၂b
1. ႗ࡱߌğ
A 5 ຣၡՑ૫ཟຩ֥۬ӑࠩ࠹ෘࠏ༢ധอ 6800đЇও 265 ۱ඹਫ਼ࢲׄࠏđᇶ
ູ 1.3GHz ֥νอ 2 ԩྉோčఃᇏ 1024 ۱ԩࠏႨႿ࠹ෘĎđଽթሹಸ
ਈູ 2.6TBđՈթԥሹಸਈູ 80TBčఃᇏđܻ༸ᆔಸਈ 61TBĎbۚ৵
ࢤຩູ QsNet(Quadrics ܄ඳӁ)đׄؓׄ๙ྐջॺնႿૄ૰ 300MBđ
ӾൈࡗཬႿ 7 ັ૰b
B SGI Onyx 350đ32 ۱ MIPS R16000 ԩఖđᇶ 600MHZĠڂᆴ 384 ၡՑׄڜ
§1.5 ݓଽຓӑࠩ࠹ෘᇏྏሑঃ 19
ᄎෘĠI/O ջॺğ1.07GB/sčൌ࠽Ďđ2.4GB/sčڂᆴĎĠթԥջॺğ3.2GB/sčൌ
࠽Ďđ3.2GB/sčڂᆴĎĠଽթğ32GBĠ႗ğ657GBĠྙଆॶğIP ྙ
वđ128M ཁթđ໕ଽթॖղ 104Mđ48 ໊ RGBAb
C ආܻ 2000-II ӑࠩڛༀఖğڂᆴᄎෘඔູૄ૰ 1117 ၡՑׄڜᄎෘĠଽթሹಸ
ਈ 46GBĠ႗ሹಸਈ 628GBđఃᇏህႨ႗ 405GBđ܋ཚ႗ 223GBĠԩ
ࠏሹඔູ 164 ۱Ġࢫׄሹඔູ 82 ۱b
2. ᇶေ࣮ٚཟაႋႨğӑࠩ࠹ෘᇏྏ൞ູჽଽຓ॓ֆ໊ิ܂ӑࠩ࠹ෘڛༀ֥ᆦ
Ӫֆ໊đᇶေՖ൙ѩྛ࠹ෘ֥࣮aൌགྷࠣႋႨڛༀđѩູնܿଆگᄖඌބഅ
ြႋႨิ܂ॖି֥ࢳथٚσbᇏྏ֥ሷᆻ൞૫ཟ॓࿐ჽମᇀഠ߶ิ࣐܂ॖି఼֥
ۚྟି࠹ෘି৯ބඌᆦӻđധอ 6800 ᆞൔᇿҨႨඔၘղ 112 ۱đఃᇏჽଽ
Ⴈ 109 ۱đჽຓႨ 3 ۱b
20 ֻ၂ᅣ ყСᆩ്
ֻؽᅣ ࠎԤѩྛෘم
ѩྛෘم൞ൡކᄝѩྛ࠹ෘࠏഈൌགྷ֥ෘمb၂۱o֥ݺpѩྛෘمႋܔିھԉٳ
ߨؿѩྛ࠹ෘࠏ؟ԩࠏ֥࠹ෘି৯b
§2.1 ѩྛ࠹ෘࠎЧۀ
Sp (q)
Ep (q) = (2.2)
q
W
Perf = (2.3)
T
ᄝ 80 ୍սđႨ FLOP/s ູֆ໊đ90 ୍սđႨ MFLOP/s ބGFLOP/sđ21 ൗࡀ௴
ђႨ GFLOP/s ބTFLOP/sđଢభ္ᇯࡶषႨ PFLOP/sb
ႄ 2.1.1 Amdahl ੰקđؓၘ۳֥ק၂۱࠹ෘ໙ีđࡌഡԱྛ෮ᅝ֥Ϥٳбູ αđᄵ
Ⴈ q ۱ԩࠏ֥ѩྛࡆбູ
1
Sp (q) = (2.4)
α + (1 − α)/q
21
22 ֻؽᅣ ࠎԤѩྛෘم
§2.2 ѩྛෘمഡ࠹ࠎЧჰᄵ
ѩྛෘم൞ѩྛ࠹ෘ֥ࠎԤđაൌགྷඌཌྷࢲކđູིۚੱႨѩྛ࠹ෘࠏิࢳ܂
थٚσbఃࠎЧჰᄵࡥඍೂ༯ğ
1. აุ༢ࢲܒཌྷࢲކĠ
2.1: ཌྟࢲܒ
2.2: 2 ົຩ۬ࢲܒ
2. ऎႵॖঔᅚྟĠѩྛෘم൞ڎ൞ෛԩࠏ۱ඔᄹࡆܔିطཌྟࠇ࣍රཌྟ֥ࡆđᆃ
൞ࡎ၂۱ѩྛෘم൞ڎႵི֥ᇗေѓᆽᆭ၂b္ࣼ൞ඪđೂݔ၂۱ѩྛෘࡆ֥م
б൞ Sp (q) = O(q) ࠇᆀ Sp (q) = O(q/(1 + log(q)))đᄵॖၛӫູऎႵॖঔᅚྟ֥ѩྛ
ෘمb
3. ՙ৬؇Ġ๙ӈ౦ঃ༯đ৬؇ᄀնᄀݺbᆃ൞ၹູᄝૄ۱ԩࠏᇏႵླ؟ޓေ࠹ෘ֥۽
ቔༀđೂՎॖၛԉ؟ߨؿٳԩࠏ֥ቔႨbѩྛࡆбؓ༥৬؇໙ี၂Ϯ౦ঃ༯൞
҂߶֥ۚޓđᆃ္൞ູહѩྛ࠹ෘླေࢳնܿଆ໙ี֥ჰၹ෮ᄝb
4. ࡨഒ๙ྐĠ၂۱ིۚੱ֥ѩྛෘمđ๙ྐ൞ᇀܱᇗေ֥bิۚྟି֥ܱ൞ࡨഒ๙ྐ
ਈބ๙ྐՑඔđఃᇏ๙ྐՑඔ๙ӈ౦ঃ༯൞थקၹb
5. Ⴊ߄ྟିğ၂۱ෘم൞ڎႵིđ҂ࣇ၇ঠႿંٳ༅֥ࢲݔđ္ބᄝൌགྷ֥ݖӱᇏҐ
Ⴈ֥ඌ༏༏ཌྷܱbྟିᇶေुֆԩࠏି࠹ߨؿܔෘି৯֥Ϥٳбđಖު൞ѩྛི
ੱb
႕ཙѩྛෘ֥ੱིمၹॖି؟ޓđ൞ᆃ෮۳ԛ่֥ࠫ൞ᇶေၹbၹՎđᄝෘ
مഡ࠹֥ݖӱᇏđೂࡼܔିݔഈඍ 5 ่ࡆၛር༥ॉ੮đࣼିܔ౼֤٤ӈݔི֥ݺb
§2.3 თࢳٳٚم 23
2.3: ӑ৫ุٚࢲܒ
§2.3 თࢳٳٚم
ܤනၬđთࢳٳٚم൞ࡼთࣉྛ֥ࢳٳ၂ᇕٚمđᄪ௹ႋႨႿࢳງჵொ
ັٳٚӱ֥၂ᇕٚمbࡌഡࢳ֥൞इთഈ֥ Lapalace ໙ีđ૭ඍೂ༯ğ
⎧
⎨−Δu(x, y) = f (x, y) (x, y) ∈ Ω = (0, a) × (0, b)
(2.6)
⎩u(x, y)| = g(x, y)
∂Ω
2.4: ਆᇕთࢳٳҦ
⎧
⎨−Δu(x, y) = f (x, y) (x, y) ∈ Ω2
(2.8)
⎩u(x, y)| = u0
∂Ω2
⎧
⎨u1 = u1 ∈ Ω2
2 2
(2.10)
⎩u1 = u0 ∈ Ω − Ω
2 2
2.5: ջᇗ֥ןთࢳٳ
§2.4 ࢳٳିۿٚم
ࢳٳିۿ൞ࡼ҂ିۿቆӮ֥໙ีđοᅶః֥ࢳٳྛࣉିۿ၂ᇕ൭؍đఃଢ֥൞ᇯ
၂ࢳथ҂֥ିۿ໙ีđՖ֤ࠆطᆜ۱໙ี֥ࢳbᆃૌႨ Newton مࢳ٤ཌྟ
ٚӱ 2.11 ູൕ২đࡥֆඪૼ֥ࢳٳିۿٚمb
§2.5 ੀඣཌඌ 25
ᄝᆃ۱ࢳݖӱᇏđླေႨ֞ݦඔᆴ֝ބඔᆴbၹՎđೂݔ၂҆ٳԩࠏڵᄳ࠹ෘݦඔ
ᆴđਸ਼၂҆ٳԩࠏڵᄳ࠹ෘ֝ඔᆴđࣼॖၛ֤֞၂ᇕѩྛ࠹ෘٚمbᆃൈީ࠹ෘ൞οᅶ
ٳྛࣉିۿ֥đ္࠻൞෮໌֥ࢳٳିۿb
ᄝםս܄ൔ 2.12 ᇏđླေइᆔ֥đ๙ӈᄝ࠹ෘݖӱᇏ൞ࡼఃሇ߄ູࢳཌྟս
ඔٚӱቆbࠧࢳğ
G(x(k) )δ (k) = −F (x(k) ) (2.13)
§2.5 ੀඣཌඌ
ੀඣཌඌ൞ѩྛ࠹ෘᇏ၂۱٤ӈႵི֥aӈႨ֥൭؍đᄝѩྛ࠹ෘᇏఏሢ٤ӈᇗ
ေ֥ቔႨbᆃၛࢳ၂՛־໙ีູ২ࡆၛඪૼb
ࡌഡေࢳ֥໙ี൞ğ
P0 P1 P2
ֻ 1அ ࠹ෘ ai,1 := F (ai−1,1 ), ֩րࢤ൬ an1 −1,1 ֩րࢤ൬ an2 −1,1
i = 1, . . . , n1 − 1,
ؿෂ an1 −1,1 ۳ P1
ֻ 2அ ࠹ෘ ai,2 := F (ai−1,2 ), ࠹ෘ ai,1 := F (ai−1,1 ), ֩րࢤ൬ an2 −1,1
i = 1, . . . , n1 − 1, i = n1 , . . . , n2 − 1,
ؿෂ an1 −1,2 ۳ P1 ؿෂ an2 −1,1 ۳ P2
ֻ 3அ ࠹ෘ ai,3 := F (ai−1,3 ), ࠹ෘ ai,2 := F (ai−1,2 ), ࠹ෘ ai,1 := F (ai−1,1 ),
i = 1, . . . , n1 − 1, i = n1 , . . . , n2 − 1, i = n2 , . . . , n
ؿෂ an1 −1,3 ۳ P1 ؿෂ an2 −1,2 ۳ P2
.. .. .. ..
. . . .
і 2.1: ־ܱ༢ൔ֥ੀඣཌ࠹ෘੀӱ
2.6: ੀඣཌ࠹ෘൕၩ
§2.6 طٳᇍᆭٚم 27
§2.6 طٳᇍᆭٚم
ᆃૌၛ၂۱ࡥֆ֥ބ໙ีູ২đඪૼહ൞طٳᇍᆭٚمbࡌഡᄝ q = 23 ۱
ԩࠏഈ࠹ෘğ
n−1
s= ai (2.15)
i=0
k+l−1
ఃᇏ sxxx (k : l) = i=k ai ൞ᄝԩࠏ Pxxx ᇏປӮ֥࠹ෘđxxx ൞ࣉؽᇅඔbᆃ֥
࠹ෘॖၛႨ 2.7 ࡥֆ֥૭ඍđᄝᇏᆺࡥֆ֥۳ԛԩࠏݼb ᄝ 2.7 ᇏđՖഈᇀ༯
000
000 100
2.7: طٳᇍᆭ࠹ෘބൕၩ
൞ݖ֥ࢳٳӱđՖ༯ᇀഈ൞҆ݖ֥ބٳӱbᆃࣼ൞ႵٳႵᇍ֥၂۱ࡥֆݖӱđ္࠻൞၂
ᇕطٳᇍᆭٚمbطٳᇍᆭٚمᄝѩྛ࠹ෘᇏఏሢईቀᇗ֥ቔႨđࡼᄝࣂު֥ෘمഡ
࠹ᇏࣜӈმ֞b
§2.7 ҄ѩྛෘم
ᄝᆃ၂ࢫᇏđၛ࠹ෘཌྟםս໙ีč۳ קx(0) Ď(2.17) ູ২đؓ҄ѩྛෘࡆمၛඪ
28 ֻؽᅣ ࠎԤѩྛෘم
ૼb
x(k+1) = b + Ax(k) (2.17)
ᆃ A ൞ n × n इᆔđbax(k) ൞ n ົཟਈbࡌഡइᆔᄝԩࠏ൞οᅶྛॶٳթԥ֥đ
2.8 ൞ၛ 4 ۱ԩࠏູ২֥߃ٳbᄝૄ۱ԩࠏᇏ࠹ෘԛ x(k+1) ֥၂҆ٳđ༯၂Ց࠹
2.8: इᆔཟਈӰ߃ٳ
§2.8 ၳ҄ѩྛෘم
ၳ҄ѩྛෘم൞ა҄ѩྛෘمཌྷ֥ؓđ҄ෘمᄝଖ၂ൈख़ླေაః֥ԩࠏ
ࣉྛඔऌࢌߐđಖުҌି࿃ᆳྛbၳ҄ѩྛෘྛࣉمඔऌࢌߐ҂ླေ۬ಒקᄝଖ၂
ൈख़đૄ۱ԩࠏοᅶყ࠹֥קෘༀӻ࿃ᆳྛđ๙ӈླေᄝ၂֥קൈީсྶࣉྛ၂
ՑඔऌࢌߐđၛЌᆣෘ֥مᆞಒྟbܱႿᆃ۱ෘ֥مൌ࠽২ሰࡼᄝइᆔѩྛ࠹ෘᇏࣉྛ
ࢺകb
§2.9 ቔြ
1. Ֆࡆб֥קၬԛؿđᆣૼ Amdahl ބੰקGustafson ܄ൔb
2. ࡌഡ m × n इᆔ A ൞οਙॶٳթԥᄝૄ۱ԩࠏᇏ֥đx թԥᄝԩࠏ P0 ᇏđࡌ
ഡႨ 4 ۱ԩࠏđࠧ A = [A0 , A1 , A2 , A3 ]đఃᇏ Ai թ٢ᄝԩࠏ Pi ᇏb൫۳ԛ
ѩྛ࠹ෘ y = Ax ֥ٚمb
ֻٳ҆ؽ
ѩྛෘمഡ࠹აൌགྷ
ֻᅣ इᆔѩྛ࠹ෘ
31
32 ֻᅣ इᆔѩྛ࠹ෘ
⎛ ⎞
A00 A02 A04 A06 A01 A03 A05 A07
⎜ ⎟
⎜ A30 A32 A34 A36 A31 A33 A35 A37 ⎟
⎜ ⎟
⎜ ⎟
⎜ A60 A62 A64 A66 A61 A63 A65 A67 ⎟
⎜ ⎟
⎜ A10 A12 A14 A16 A11 A13 A15 A17 ⎟
⎜ ⎟
⎜ ⎟ (3.2)
⎜ A40 A42 A44 A46 A41 A43 A45 A47 ⎟
⎜ ⎟
⎜ ⎟
⎜ A70 A72 A74 A76 A71 A73 A75 A77 ⎟
⎜ ⎟
⎜ A20 A22 A24 A26 A21 A23 A25 A27 ⎟
⎝ ⎠
A50 A52 A54 A56 A51 A53 A55 A57
ؓႿ၂Ϯ m × n ॶٳइᆔބ၂Ϯ֥ԩࠏᆔਙ p × q, ཬॶ Aij թ٢ᄝԩࠏ Pkl (k =
i mod p, l = j mod q) ᇏ.
Ֆඔᆴսඔ֥࢘؇ԛؿ, इᆔ࠹ෘ໙ีॖၛ߃ ູٳ4 նো:
• ཌྟսඔٚӱቆ Ax = b
• ཌྟቋཬؽӰ໙ี minx∈Rn Ax − b2 , b ∈ Rm
• इᆔหᆘᆴ໙ี Ax = λx, Ax = λBx
• इᆔఅၳᆴ ࢳٳA = U ΣV T
§3.1 ѩྛइᆔӰم
इᆔӰࠒᄝൌ࠽ႋႨᇏ൞ࣜӈေႨ֥֞, ྸ࠹֥ࣉ༵؟ෘࠏഈႵི֥ۚԱྛӱ
९. ູਔᄝѩྛ࠹ෘߌഈൌགྷइᆔӰࠒ, ࣮ѩྛෘم൞٤ӈсေ֥. Чࢫေॉ੮֥
࠹ෘ໙ี൞
C =A×B (3.3)
§3.1.1 ԱྛइᆔӰم
§3.1.2 ྛਙ߃ٳෘم
ෘ م3.1.1
for i = 0 to p − 1 do
l ≡ i+myid mod p
Cl = A × B, mp1 ≡ myid+1 mod p, mm1 ≡ myid-1 mod p
if i = p − 1, send(B, mm1), recv(B, mp1)
end{f or}
ᄝᆃ۱ෘمᇏ, Cl = Cmyid,l , A = Amyid , B ᄝԩࠏᇏૄՑ࿖ߌཟభ၍၂۱ԩࠏ,
ૄՑࢌߐඔऌູ k × n̄ इᆔ, ࢌߐՑඔູ p − 1 Ց. ೂݔႨ DTA1 іൕᄝෘ م3.1.1
ᇏඔऌ֥ࢌߐਈ, CA1 іൕᄝෘ م3.1.1 ᇏ֥࠹ෘਈ, ᄵႵ DTA1 = 2 × k × (n − n̄),
CA1 = m × k × n/p.
§3.1.3 ྛྛ߃ٳෘم
ՖطႵ
p−1
Ci = Ai × B = Ai,j × Bj
j=0
ෘ م3.1.2
for i = 0 to p − 1 do
l ≡ i+myid mod p
C = C + Al × B, mp1 ≡ myid+1 mod p, mm1 ≡ myid-1 mod p
if i = p − 1, send(B, mm1), recv(B, mp1)
end{f or}
ᆃ۱ෘمᇏ֥ඔऌࢌߐਈ࠹ބෘਈაෘ م3.1.1 ཌྷ, ෮҂֥ᆺ൞࠹ෘ C ֥ٚൔ,
ఃᇏ Al = Amyid,l .
§3.1.4 ਙਙ߃ٳෘم
ᆃൈ C ֥߃ٳა B ֥߃ٳཌྷؓႋ,
္൞οਙ֥ॶٳ, ࣉ၂҄Ϝ Bi οྛٳӮა A ֥ਙ
T
T
ॶٳཌྷؓႋ֥ྛॶٳ, ࠺ Bi = Bi0 T T , ՖطႵ༯૫࠹ෘ C ֥ٚم.
Bi1 . . . Bi,p−1
p−1
Cj = A × Bj = Ai × Bi,j
i=0
ෘ م3.1.3
for i = 0 to p − 1 do
l ≡ i+myid mod p
C = C + A × Bl , mp1 ≡ myid+1 mod p, mm1 ≡ myid-1 mod p
if i = p − 1, send(A, mm1), recv(A, mp1)
end{f or}
ෘ م3.1.3 ֥࠹ෘਈაෘ م3.1.1 ބෘ م3.1.2 ൞ཌྷ֥, ෘ م3.1.3 ֥ඔऌࢌߐਈ
൞ DTA3 = 2 × m × (k − k̄). ֒ m = n ൈ, DTA1 = DTA3 . ਆᇕෘمඔऌࢌߐਈ֥նཬ
§3.1 ѩྛइᆔӰم 35
§3.1.5 ਙྛ߃ٳෘم
ෘ م3.1.4
C = A × Bmyid
for i = 1 to p − 1 do
l ≡ i+myid mod p, k ≡ myid − imodp
T = A × Bl
send(T , l), recv(T , k)
C =C +T
end{f or}
ᆃ۳ԛ֥ෘم൞ࡥࢱၞ, ః๙ྐਈ DTA4 = 2 × m × (n − n̄). ೂݔҐႨοྛٳ
ॶٚൔ࠹ෘ C, ෘ م3.1.4 ္ဢൡކ, ๙ਈ္൞҂э֥đၹՎ࿊ᄴޅᇕٚൔ࠹ෘ C
ॖ۴ऌླေקط.
(l) (l)
ఃᇏ In ބ0n ٳљ൞ n ࢨֆ໊इᆔބਬइᆔ. קၬؓ࢘ॶइᆔ DA = diag(Di ) =
m−1 (l)
diag(Ai,i+l mod m ), ಸၞ֝ԛ A = l=0 DA × Ql . ၹՎ
m−1
(l)
m−1
(l)
C =A×B = DA × Ql × B = DA × B (l)
l=0 l=0
ෘ م3.1.5
C=0
for i = 0 to m − 1 do
k ≡ myrow+i mod m; mp1 ≡ mycol+1 mod m; mm1 ≡ mycol-1 mod m;
if mycol=k then
send(A, (myrow, mp1)); copy(A, tmpA);
else
recv(tmpA, (myrow, mm1));
if k = mp1, send(tmpA, (myrow, mp1));
end{if }
C = C+tmpA ×B; mp1 ≡ myrow+1 mod m; mm1 ≡ myrow-1 mod m;
if i = m − 1 then
send(B, (mm1, mycol)); recv(B, (mp1, mycol));
end{if }
end{f or}
ھෘمऎႵڵ֥ݺޓᄛޙ, ఃหׄ൞ᄝ၂ྛᇏܼѬ A, ࠹ෘԛ C ֥҆ٳᆴᆭު,
ᄝਙᇏ ݏB. ඔऌࢌߐਈ DTA5 = m × 2 × n2 + (m − 1) × 2 × n2 = 2(2m − 1)n2 =
√
4m2 n2 / p − 2m2 n2 /p. ႮႿ࠹ෘਈؓૄ۱ԩࠏটඪ൞ཌྷ֥, ၹՎᄝ࿊ᄴෘمൈᆺླ
ॉ੮๙ྐਈ. Ֆ෮۳ԛ֥ᆃ۱ѩྛ࠹ෘइᆔӰࠒ֥ෘمॖၛु֞, ؓႿٚᆔ֥Ӱࠒ, ֒
p ≥ 4 ൈ, Cannon ෘمऎႵႪᄀྟ.
§3.2 ཌྟսඔٚӱቆѩྛࢳٚم
ཌྟٚӱቆ൞ྸ؟ᇗေ໙ี֥ྏނ, ၹՎႵֹིࢳཌྟٚӱቆᄝ॓࿐ა۽ӱ࠹ෘ
ᇏ൞٤ӈᇗေ֥. ѩྛ࠹ෘࠏ֥໙ൗ, ࢳ໙ี֥؇ܿีࢳބଆնږ؇ֹิۚ,
§3.2 ཌྟսඔٚӱቆѩྛࢳٚم 37
Ax = b
ෘ م3.2.1
for j = 0 to n − 2 do
find l: |alj | = max{|aij |, i = j, . . . , n − 1}
if l = j, swap Aj and Al
if ajj = 0, A is singular and return
aij = aij /ajj , i = j + 1, . . . , n − 1
for k = j + 1 to n − 1 do
aik = aik − aij × ajk , i = j + 1, . . . , n − 1
end{f or}
end{f or}
ᄝෘ م3.2.1 ᇏ, ᇶေ࠹ෘ۽ቔਈ൞ྩᆞइᆔ A, ࠧቓ aik − aij × ajk , ၹՎѩྛ࠹ෘ
֥ᇶေༀࣼ൞ᄝ؟ԩࠏഈൈؓइᆔ A ֥҂҆ٳቓྩᆞ. ᄝ؟ԩࠏഈ LU ٳ
ࢳ֥ᇗေ۽ቔ൞ᄛ࣐ހॖି֥ޙ, ૌҐႨज৺ (wrap) թԥٚൔᄝ۲ԩࠏഈٳ
इᆔ A, Ϝइᆔ A ֻ֥ i ਙթ٢ᄝ Pi mod p ᇏ. ࡌഡ n = p × m, ᄝ༯૫ෘمᇏ A ֻ֥
i ਙູჰট A ֻ֥ i × p + myid ਙ, इᆔᄝԩࠏᇏ֥թ٢ٚൔູ:
A00 A0p ··· A01 A0,p+1 ··· A02 A0,p+2 ··· ···
A10 A1p ··· A11 A1,p+1 ··· A12 A1,p+2 ··· ···
.. .. .. .. .. .. .. .. .. .. (3.7)
. . . . . . . . . .
An−1,0 An−1,p · · · An−1,1 An−1,p+1 · · · An−1,2 An−1,p+2 · · · · · ·
༯૫۳ԛᄝ Pmyid ഈ֥ࢲׄ૭ඍ.
38 ֻᅣ इᆔѩྛ࠹ෘ
ෘ م3.2.2
icol= 0
for j = 0 to n − 2 do
if myid=j mod p then
find l: |al,icol | = max{|ai,icol |, i = j, . . . , n − 1}
if l = j, swap aj,icol and al,icol
if aj,icol = 0, A is singular and kill all processes
ai,icol = ai,icol /aj,icol , i = j + 1, . . . , n − 1
fi−j−1 = ai,icol , i = j + 1, . . . , n − 1
send(l, myid+1) and send(f , myid+1)
icol+1 → icol
else
recv(l, myid-1) and recv(f , myid+1)
if myid+1 = j mod p, send(l, myid+1) and send(f , myid+1)
end{if }
if l = j, swap Aj and Al
for k=icol to m − 1 do
aik = aik − fi × ajk , i = j + 1, . . . , n − 1
end{f or}
end{f or}
ෘ م3.2.2 ൞ᄝ҃ٳൔѩྛ࠹ෘࠏഈቓ LU ֥ࢳٳႵིٚمᆭ၂, ૌᄝݓӁѩྛ
ࠏഈቓਔྸ؟ൌဒ, ིݺޓݔ. ೂݔҐႨॶٳज৺ٚൔթԥ, ᄹնਔෘ֥م৬؇, ིݔ۷
ݺ.
§3.2.2 ࢘ٚӱቆ֥ѩྛࢳم
Чࢫॉ੮࢘ٚӱቆ֥ѩྛ࠹ෘٚم, ૌ҂ٞࣇษંࢳ༯࢘ٚӱቆ Lx = b.
࢘ٚӱቆ֥ѩྛࢳؓႵི֥ѩྛࢳཌྟٚӱቆ൞҂ॖಌഒ֥, ֥ѩྛིߊݺ֥ݔ
ؓࢳᆜ۱໙ีႵᆰࢤ֥႕ཙ, ᆃ۳ԛਆᇕѩྛൌགྷٚم. ൮༵۳ԛ၂۱Աྛෘم.
ෘ م3.2.3
for i = 0 to n − 1 do
xi = bi /lii
for j = i + 1 to n − 1 do
bj = bj − lji × xi
§3.2 ཌྟսඔٚӱቆѩྛࢳٚم 39
end{f or}
end{f or}
ෘ م3.2.4
k=0
for i = 0 to n − 1 do
if myid ≡ i mod p then
gbi = bk /lki , flagi = 1, k + 1 → k
end{if }
if flagi = 1, wait
for j = k to m − 1 do
bj = bj − lji × gbi
end{f or}
end{f or}
ྟսඔٚӱቆ֥ѩྛ࠹ෘݖӱ:
∗
∗ ∗
∗ ∗ ∗
∗ ∗ ∗
∗ ∗ ∗
∗ ∗ ∗
(3.8)
∗ ∗ ∗
∗ ∗ ∗
∗ ∗ ∗
∗ ∗ ∗
∗ ∗ ∗
∗ ∗ ∗
ఃෘ֥مऎุ૭ඍྙൔೂ༯:
ෘ م3.2.5
k=0
if myid=0, then
ui = bi , i = 0, . . . , n − 1, vi = 0, i = 0, . . . , p − 2
else
ui = 0, i = 0, . . . , n − 1
for i = 0 to n − 1 do
§3.3 ؓӫᆞקཌྟٚӱቆ֥ѩྛࢳم 41
ܱႿᆃ۱ෘ֥مབྷ༥ษંॖҕ໓ང [10].
§3.3 ؓӫᆞקཌྟٚӱቆ֥ѩྛࢳم
ؓႿؓӫᆞקइᆔ A ֥ LU ࢳٳ, ૌҐႨCholesky ࢳٳ, ္ࠧ A = RT R, ఃᇏ R
൞ഈ࢘इᆔ. ႮႿ࢘ٚӱቆ֥ࢳᄝభ၂ࢫᇏၘࣜ۳ԛ, ၹՎᆃሢᇗॉ੮ؓӫᆞ
קइᆔ֥Cholesky ࢳٳ. ၂۱ٚم൞ᄝԮ֥ Cholesky ࢳٳਙ۬ൔෘࠎ֥مԤഈ, ؓႿ
ؿෂඔऌ҂ླ֩ր֥ѩྛ༢, ิԛ֥ѩྛෘم. ਸ਼၂۱ٚم൞Ⴈච౷࿈ሇэߐ֥ٚൔ
টቓ Cholesky ࢳٳ. ༯૫ࣼٳљࢺകᆃਆᇕෘم.
ෘ م3.3.1
for j = 0 to n − 1 do
j−1
√
ajj = ajj − ajk × ajk , ajj = ajj
k=0
for i = j + 1 to n − 1
j−1
aij = (aij − ajk × aik )/ajj
k=0
end{f or}
end{f or}
ෘ م2
for i = 0 to m − 1 do
k = i × p + myid, l = k − p + 1
if k > 0 then, recieve G from Pmyid−1
for j = 0 to p − 2 do
j+l−1
ai,j+l = (ai,j+l − ait × gjt )/gj,j+l
t=0
Fj = Gj+1
end{f or}
k−1
aik = aik − ait × ait
√ t=0
aik = aik , Fp−2 = Ai
Send F to Pmyid+1
for e = i + 1 to m − 1 do
for j = 0 to p − 2 do
j+l−1
ae,j+l = (ae,j+l − aet × gjt )/gj,j+l
t=0
k−1
aek = (aek − aet × ait )/aik
t=0
end{f or}
end{f or}
ᄝૌ֥ෘمᇏ, Ⴈ༯૫֥ྙൔ:
1
2 −2 1 −ρ
H = (1 − ρ )
−ρ 1
§3.3 ؓӫᆞקཌྟٚӱቆ֥ѩྛࢳم 43
A = V TV − WTW
ՖطႵ༯૫֥ܱ༢ൔӮ৫:
I 0 R I 0 V
RT 0 = V T WT
0 −I 0 0 −I W
ପહՖభ૫֥ܱ༢ൔᇏࣼॖ֤ԛ A = RT R, ၹՎᇶေༀࣼ൞࿙ᅳເᆞࢌइᆔ Q. ༯૫
҂ࡆᆣૼֹਙԛ໓ང [12] ᇏ֥ႄ.
ႄ 3.3.1 ೂ ݔR ބS ൞ n × n ഈ࢘इᆔ, ֤ RT R − S T S ؓӫᆞק, ᄵ R ൞
ॖ֥, ѩડቀ:
−1
| skk rkk |< 1, 1≤k≤n
ෘ م3.3.2
V 0 = V , W0 = W, A = V TV − WTW
for i = 0 to n − 1 do
V i+1 I 0 V i
i+1
= Q̂(i)
W 0 Q Wi
end { for }
ႄ 3.3.3 ࡌഡ α = L2
L1
,β= b21
b11
. ೂݔ࿊౼ L̄ = (1 − αβ 2 )−1 L, ᄵ
1 −αβ
G=
−β 1
ႄ֤ᆣ.
ႄ 3.3.4 ೂ ݔR ބS ൞ n × n ഈ࢘इᆔ, ѩ E ބF ൞ؓ࢘इᆔ, ֤
RT ER − S T F S ൞ᆞ֥ק, ѩࡌഡ αk = Fk
Ek
, βk = skk
rkk
, ೂݔ
R R
= Q̂
S S
(n) Q
ఃᇏ Q̂ = Q (1) ,Q
(n−1) · · · Q (k) , E ބF ֥ჭ൞ೂ༯קၬ֥:
⎧
⎪
⎪ 1, i=j
⎪
⎪
⎨ −α β , i = k, j = n + k
(k) k k
q̃ij =
⎪
⎪ −βk , i = n + k, j = k
⎪
⎪
⎩
0, ః
ބ
k = Ek Fk
E , Fk = , 1≤k≤n
1 − αk βk2 1 − αk βk2
ᄵR R
T E ൞ഈ࢘इᆔ, S ൞۬ഈ࢘इᆔ.
− ST FS = RT ER − S T F S, ѩ R
ᆃ۱ႄ֥ᆣૼ൞ಸၞ֥, ܣՎಀ.
ࡌഡ A = V T EV − W T F W , ᄵྩᆞ֥ච౷ Cholesky ࢳٳෘمॖФ૭ඍӮೂ༯ྙൔ:
ෘ م3.3.3
V 0 = V , W 0 = W , E 0 = E, F 0 = F
for i = 0 to n − 1 do
V i+1 I 0 V i
= Q̂(i)
W i+1 0 P Wi
Eki Fki
Eki+1 = i2
, Fki+1 = 2, 1≤k≤n
1 − αki βk 1 − αki βki
46 ֻᅣ इᆔѩྛ࠹ෘ
§3.4 ؓ࢘ٚӱቆ֥ѩྛࢳم
ࢳؓ࢘ཌྟٚӱቆᄝொັٳٚӱඔᆴࢳᇏఏሢ٤ӈᇗေ֥ቔႨ, ၹՎၘࣜႵਔޓ
ܱ؟Ⴟ֥ѩྛෘم, ᆃٚ૫֥۽ቔॖҕ໓ང [13]–[14]. ᆃሢᇗࠎႿთٳ֥ࢳٳ
ਚٚم, ၛьູࣉ၂֥҄ѩྛ࠹ෘյ༯ࠎԤ. ᄝᆃေࢳ֥໙ี൞ Ax = d, ఃᇏ
⎡ ⎤
a0 b 0
⎢ ⎥
⎢ c 1 a1 b ⎥
⎢ 1 ⎥
⎢ ... ... ... ⎥
A = T (c, a, b) = ⎢ ⎥
⎢ ⎥
⎢ ⎥
⎣ c n−2 a n−2 b n−2 ⎦
cn−1 an−1
ؓႿ၂Ϯྟ֥ؓ࢘ཌྟսඔٚӱቆđѩྛࢳ֥ٚࣜၘ္مႵྸ۽؟ቔbᆃᇗׄॉ
੮ؓӫᆞקؓ࢘ཌྟٚӱቆ֥ࢳم, ࠎႿؓइᆔ֥ॶٳ, ܣՎӫᆭູٳਚ[ م16, 14] .
ఃྙࢳٳൔູೂ༯֥ॶؓ࢘इᆔ:
⎡ ⎤
A0 B0
⎢ T ⎥
⎢ B0 A1 B1 ⎥
⎢ ⎥
⎢ ... ... ... ⎥
A=⎢ ⎥
⎢ ⎥
⎢ T ⎥
⎣ Bp−3 Ap−2 Bp−2 ⎦
T
Bp−2 Ap−1
ఃᇏ B̄i = L−1 −T −T
i Bi Li+1 = Bi Li+1 , ൞Ԣቋު၂ྛຓनູ 0 ֥इᆔ. ႮႿ Di ൞ؓ࢘इᆔ,
ॖၛٳљϜ B̄i ֥ቋު၂ྛԢቋު၂۱ჭຓनཨູ 0, ࠺ཨಀު֥इᆔູ D i ބB
i , Ֆ
طD i ၛࠣ B
i ބB T ֥ቋު၂۱ჭܒӮ၂۱ྍ֥ཬ֥ؓ࢘ཌྟٚӱቆ. ؓႿᆃ۱
i
ཬ֥ཌྟٚӱቆॖᄝ၂ࠏఖഈটࢳ, Ϝᆃ۱ࢳԮෂ֞෮Ⴕ֥ԩࠏᇏ, ࣼॖԛჰ໙
ี֥ࢳ. ᄝᆃ۱ٚمᇏ, ൮༵ေႨ֥֞൞ LDLT ࢳٳ, ᆃ۱ࢳٳॖႮোරႿഈ၂ࢫᇏ֥
RT R ֥ࢳٳ֤ٚ֞م, ᆃᆺླႨԱྛ֥ࢳٳٚم, ܣ҂ᄜऎุਙԛ LDLT ֥Աྛࢳٳ
ٚم. ሸഈ෮ඍ, ૌॖ۳ԛ༯ඍෘم:
ෘ م3.4.1
(1) ࠹ෘ Li , Di , Ai = Li Di LTi ;
(2) ؓइᆔቓэߐ, ѩؓ Bi ቓభඍ֥ཨಀ;
(3) ྙӮཬ֥ؓ࢘ཌྟٚӱቆ, ѩࢳᆭ;
(4) ࢳᆜ۱໙ี.
§3.5 ࣜםׅսෘ֥مѩྛ߄
ඔᆴսඔٚӱቆ֥ࢳٚمđႵᆰࢤمđ္Ⴕםսمbభ૫ૌࢺകਔ၂ུᆰࢤࢳ
ཌྟսඔٚӱቆ֥ٚمđᆃࡼࡥֆࢺക၂༯ࣜםׅսࢳཌྟսඔٚӱቆ֥ٚمbᄝ
༯૫ࢺക֥ٚمᇏđࡌഡइᆔ֥ؓ࢘ཌჭ൞٤ਬ֥b
ॉ੮ࢳཌྟսඔٚӱቆ
Ax = b (3.9)
Dx = b + (L + U )x (3.10)
end{for}
x(k+1) − x(k) 2 < x(k+1) − x(0) 2 Ĥk = k + 1
ᄝෘ م3.5.2 ᇏđૄՑѩྛ࠹ෘ sjđᆭުॖၛѩྛ࠹ෘࢩᆸ่ࡱ൞ڎડቀbᆃ۱ѩྛ࠹ෘ
ٚمაԱྛෘمᄝ࠹ෘਈഈ൞Ⴕུҵљ֥b
§3.6 ၳ҄ѩྛםսم
ၳ҄םսෘمᄝѩྛ࠹ෘᇏఏሢᇗေ֥ቔႨ, ၹູՎোෘم҂ླေԩࠏᆭࡗ֥֩
ր, ԩࠏ֥۽ቔིੱି֤֞ܔԉߨؿ֥ٳ. ᆃٚ૫֥࣮۽ቔᄪᄝ 60 ୍սࣼၘࣜष
, ໓ང [17] ᇏ۳ԛਔཌྟםս x = Bx + c ֥൬৻ק, ֒௶϶ࣥ ρ(|B|) < 1 ൈ, Վם
սݖӱ൞ၳ҄םս൬৻֥. Վᆭު, ໓ང [18] ۳ԛਔ٤ཌྟםս x = F x ֥൬৻ק,
֒ F ൞ P - ൬෪႘ഝൈ, Վםսݖӱ൞ၳ҄םս൬৻֥. P - ൬෪႘ഝ (P-contraction) ֥
קၬҕ໓ང [19].
§3.6.1 ၳ҄ѩྛםսࠎمԤ
J = {Jj |j = 1, 2, . . .}
(j) (j)
S = {(s1 , . . . , sn ) | j = 1, 2, . . .}
⎧
⎪
⎪
⎨ x(j−1)
i ,i ∈/ Jj
(j)
xi =
⎪
⎪ (j) (j)
⎩ fi (x(s 1
1 ) (s )
, . . . , xn n ), i ∈ Jj
§3.6.2 ཌྟםս֥၂Ϯ൬৻ྟࢲݔ
x = B −1 Cx + B −1 b (3.14)
§3.7 սඔหᆘᆴ໙ี֥ѩྛࢳ
սඔหᆘᆴ໙ีᄝ॓࿐ა۽ӱ࠹ෘᇏ൞٤ӈᇗေ֥đᄝᆃ၂ࢫᇏđૌࡼᇗׄࢺക
ೂޅࢳѓሙหᆘᆴ໙ีbࡌഡ A ൞ n × n ࢨൌؓӫइᆔđࠧ A ∈ Rn bᄵѓሙหᆘᆴ
໙ี൞ğ
Ax = λx (3.15)
§3.7.1 ؓӫؓ࢘इᆔหᆘᆴ໙ี
(A − λI)xk+1 = xk (3.19)
§3.7.2 Householder эߐ
Householder эߐ൞၂۱ห൹֥ᆞࢌэߐđऎႵೂ༯֥ྙൔğ
H = I − 2uuT (3.20)
§3.7.3 ߄ؓӫइᆔູؓ࢘इᆔ
ᄝᆃ၂ࢫᇏđॉ੮ೂؓࡼޅӫइᆔ߄ູؓ࢘इᆔb࠺
α uT
A= (3.22)
u B
1 0
Ⴎభඍ֥ษંॖᆩđթᄝ၂۱ Householder эߐ Hđ֤ Hu = βe1 b G = đ
0 H
ᄵइᆔ G ္൞ᆞࢌइᆔbႵğ
T
1 0 α uT 1 0 α βeT1
GT AG = = (3.23)
0 H u B 0 H βe1 H T BH
vT x
τ = 2/(v T v)đx = Bvđw = 2
v − τ xđᄵğ
H T BH = B − vwT − wv T (3.25)
§3.8 ቔြ
1. ࡌഡइᆔ B ൞οਙज৺ٚൔթ٢ᄝ q ۱ԩࠏᇏđཟਈ u ބv թ٢ᄝૄ۱ԩࠏ
ᇏđ۳ԛѩྛ࠹ෘ A = B − uv T − vuT ֥ٚمb
2. ࡌഡइᆔ A ൞֥ؓ࢘đ൫۳ԛࢳٚӱቆ Ax = b ֥ѩྛ Jacobi םսٚمb
54 ֻᅣ इᆔѩྛ࠹ෘ
ֻ҆ٳ
ѩྛൌགྷ
ֻඹᅣ ѩྛӱഡ࠹
ѩྛӱഡ࠹൞ѩྛೈࡱषࠎ֥ؿԤᆭ၂đᆌؓ҂֥ѩྛ࠹ෘࠏđၛࠣ҂֥ѩ
ྛൌགྷđఃൌགྷٚൔ൞҂֥bᄝᆃ၂҆ٳđࡥֆࢺകѩྛൌགྷݖӱ෮ླ֥ࠎЧ
ඌb
§4.1 ѩྛщӱଆൔ֥ᇶေো
ѩྛщӱଆൔᇶေႵೂ༯֥ᇕোğ
• ᇶՖଆൔ (Master-slave)ğႵ၂۱ᇶࣉӱđఃູՖࣉӱbᄝᆃᇕଆൔᇏđᇶࣉӱ၂
Ϯڵᄳᆜ۱ѩྛӱ֥ඔऌ॥ᇅđՖࣉӱڵᄳؓඔऌ֥ԩ࠹ބෘༀđ֒ಖđᇶࣉ
ӱ္ॖၛҕაؓඔऌ֥ԩ࠹ބෘb၂Ϯ౦ঃ༯đՖࣉӱᆭࡗ҂ؿളඔऌࢌߐđඔऌ
֥ࢌߐݖӱ൞๙ݖᇶࣉӱটປӮ֥b
• ؓӫଆൔ (SPMD)ğᄝᆃᇕщӱଆൔᇏđીႵଧ۱ࣉӱ൞ᇶࣉӱđૄ۱ࣉӱֹ໊֥൞
ཌྷ֥bಖطđᄝѩྛൌགྷݖӱᇏđૌሹ൞ေᄝᆃུࣉӱᇏ࿊ᄴ၂۱ࣉྛൻೆൻԛ
֥ࣉӱđϲဆ֥࢘ބᇶࣉӱোරb
• ؟ӱଆൔ (MPMD)ğᄝૄ۱ԩࠏഈᆳྛ֥ӱॖି൞҂֥đᄝଖུԩࠏഈ
ॖିᆳྛཌྷ֥ӱb
§4.2 ѩྛӱ֥ࠎЧหׄ
ѩྛӱބԱྛӱીႵޓն֥ҵљđ൞ູਔൌགྷѩྛෘمᄝѩྛ࠹ෘࠏഈ֥ᆳྛb
ᇶေЇও۱҆ٳğ
• ࣉೆѩྛߌğᆃ҆ٳ൞ေಞ༢ᆩ֡Վӱ൞ѩྛӱđఓѩྛ࠹ෘߌbᄝᆃ
۱ݖӱᇏđӁളѩྛӱ෮ླေ֥۲ᇕߌэਈb
• ᇶุѩྛༀğᆃ൞ѩྛӱ֥ൌᇉ҆ٳđ෮ႵླေѩྛটປӮ֥ༀᄝᆃࣉ
ྛbᄝᆃ۱҆ٳᇏđൌགྷѩྛෘمᄝѩྛ࠹ෘࠏഈ֥ᆳྛݖӱb
• ԛѩྛߌğ๙ᆩѩྛ࠹ෘ༢đՖᆃषđ҂ᄜႨѩྛ࠹ෘߌb၂Ϯটඪđ
ᆺေԛѩྛ࠹ෘߌđၩሢࡼࢲඏӱ֥ᄎྛb
§4.3 ѩྛӱ֥ൌགྷඌ
ѩྛӱᄝൌགྷݖӱᇏđႵఃหႵ֥ඌđ൞Ӂളིۚੱѩྛӱ֥ࠎԤbᆃၛଢ
భੀྛ֥ѩྛӱଆൔ SPMD ູ২đࡥֆࢺകᆃোӱᄝൌགྷݖӱᇏླေᅧ֥ࠎЧ
57
58 ֻඹᅣ ѩྛӱഡ࠹
ඌb
• ࣉӱ॥ᇅğᄝ SPMD ѩྛӱ֥щཿݖӱᇏđၹູᆺႵ၂ٺӱđૄ۱ԩࠏഈᆳ
ྛ֥൞ཌྷ֥ӱbၹՎđؓႿૄ۱ࣉӱটඪđླေᆩ֡ሱ࠭൞උႿଧ۱ࣉӱđՖط
টಒࣉھקӱླေປӮ֥ༀbࣉӱ॥ᇅ൞ѩྛӱ֥ᇗေቆӮ҆ٳđ෮Ⴕ֥ඔऌԩ
ݖߐࢌބӱ҂षࣉӱѓ്đ൞ᄝൌགྷݖӱᇏсྶൈख़ေহ࠺֥b
• ඔऌࢌߐğᄝ SPMD ଆൔᇏđඔऌࢌߐ൞ఃᇶေหᆘbࣉӱᆭࡗ֥ླྀ۽ቔđྐ༏
๙֩҂षඔऌࢌߐbೂކޅֹൌགྷඔऌࢌߐđ൞ิۚѩྛ࠹ෘӱྟି֥ܱ
ᆭ၂bؓႿ၂۱۳֥קѩྛ࠹ෘٚمđູਔིۚੱ֥ൌགྷđླေር༥ٳ༅ඔऌ၇ঠ
ܱ༢đ࣐ॖିࡨഒ҂сေ֥ඔऌࢌߐđൈ္ေ࣐ቋն୭৯ඔऌࢌߐᄝቋഒ֥Ցඔ
ଽປӮb
• ૫ཟؓའ߄ğࡹ৫ሱ֥࠭๙९đӱऎႵ۷ࡆᆰܴ֥ॖྟbбೂඪđᄝԩࠏ
ᇏေࣉྛइᆔԮൻđପࣼླေקᇅ၂۱ሰӱটປӮᆃཛༀb
ֻᅣ ཨ༏Ԯ־щӱࢤ१ MPI
§5.1 MPI ࡥࢺ
ᄝᆃ၂ࢫᇏđ۳ԛ၂۱࠹ෘ π ֥ѩྛӱbՖັࠒ֥ٳᆩ്ॖᆩ
1
4
π= 2
dx (5.1)
0 1+x
59
60 ֻᅣ ཨ༏Ԯ־щӱࢤ१ MPI
ؓႿ۳֥ࣚק؇ đॖၛಒ קN = 4/3bࠧ֒ n ≥ N ൈđႵğ
1 h
n−1
4 4 4
| dx − [ ( 2
+ )]| < (5.3)
0 1+x 2
i=0
2 1 + xi 1 + x2i+1
২ 5.2.1 ѩྛ࠹ෘ π ᆴ
program computing_pi
include ’mpif.h’
call mpi_init(ierr)
call mpi_comm_dup(mpi_comm_world, comm, ierr)
call mpi_comm_rank(comm, iam, ierr)
call mpi_comm_size(comm, np, ierr)
print *, ’Process ’, iam, ’ of ’, np, ’ is running!’
n = sqrt(4.0/(3.0*eps))
h = 1.0/n
num = n/np
if(iam .eq. 0) then
s = 2.0
xi = 0
is = 0
§5.2 MPI ӱൌ২ 61
ie = num
elseif(iam .eq. np-1) then
s = 1.0
is = iam*num
ie = n - 1
xi = is * h
else
s = 0.0
is = iam*num
ie = is + num
xi = is * h
endif
do 20 i=is+1, ie
xi = xi + h
s = s + 4.0/(1.0+xi*xi)
20 continue
write(*, *) ’The pi = ’, pi
endif
call mpi_finalize(ierr)
end
62 ֻᅣ ཨ༏Ԯ־щӱࢤ१ MPI
ֻੂᅣ MPI ѩྛߌܵݦඔ
ᄝ MPI ѩྛӱᇏ, с҂ॖഒ֥ؽ۱ݦඔ൞ MPI_Init( ) ބMPI_Finalize( ).
ૌ֥བྷ༥קၬೂ༯:
MPI INIT
C int MPI_Init( int *argc, char ***argv )
F MPI_INIT( IERROR )
INTEGER IERROR
MPI FINALIZE
C int MPI_Finalize( void )
F MPI_FINALIZE( IERROR )
INTEGER IERROR
MPI INITIALIZED
C int MPI_Initialized( int flag )
F MPI_INITIALIZED( FLAG, IERROR )
LOGICAL FLAG
INTEGER IERROR
ҕඔඪૼ
63
64 ֻੂᅣ MPI ѩྛߌܵݦඔ
ҕඔඪૼ
ҕඔඪૼ
IN COMM, ๙ྐሰ.
ҕඔඪૼ
ҕඔඪૼ
IN GROUP, ࣉӱቆ.
65
66 ֻᅣ MPI ࣉӱ॥ᇅݦඔ
ҕඔඪૼ
IN GROUP, ࣉӱቆ.
ҕඔඪૼ
IN GROUP1, ࣉӱቆ 1.
IN N, RANKS1 ބ RANKS2 ᇏඔቆჭ۱ඔ.
IN GROUP2, ࣉӱቆ 2.
OUT RANKS2, RANKS1 ᇏ֥ჭᄝࣉӱቆ 2 ᇏ֥ؓႋщݼ.
ҕඔඪૼ
IN GROUP, ࣉӱቆ.
IN N, RANKS ඔቆᇏჭ֥۱ඔࣉྍބӱቆ֥նཬ.
IN RANKS, ࡼᄝྍࣉӱቆᇏԛགྷ֥ࣸࣉӱቆᇏ֥щݼ.
ҕඔඪૼ
IN GROUP, ࣉӱቆ.
IN N, RANKS ඔቆᇏჭ֥۱ඔ.
IN RANKS, ᄝྍࣉӱቆᇏ҂ԛགྷ֥ࣸࣉӱቆᇏ֥щݼ.
ҕඔඪૼ
IN GROUP1, ࣉӱቆ 1.
IN GROUP2, ࣉӱቆ 2.
OUT NEWGROUP, ࣉӱቆ 1 ࣉބӱቆ 2 ֥ѩ.
ҕඔඪૼ
IN GROUP1, ࣉӱቆ 1.
IN GROUP2, ࣉӱቆ 2.
OUT NEWGROUP, ࣉӱቆ 1 ࣉބӱቆ 2 ֥ࢌ.
ҕඔඪૼ
IN GROUP1, ࣉӱቆ 1.
IN GROUP2, ࣉӱቆ 2.
OUT NEWGROUP, ࣉӱቆ 1 ࣉބӱቆ 2 ֥ҵ.
ၛഈܱႿࣉӱቆҠቔ֥ݦඔିۿ, ބඔ࿐ᇏࠢކᄎෘཌྷ.
༯૫ࢺക֥ܱႿ๙ྐሰ֥ҠቔބഈඍܱႿࣉӱቆҠቔٳোර.
ҕඔඪૼ
IN COMM, ๙ྐሰ.
ҕඔඪૼ
IN COMM, ๙ྐሰ.
ҕඔඪૼ
IN COMM, ๙ྐሰ.
ҕඔඪૼ
IN COMM, ๙ྐሰ.
ҕඔඪૼ
IN COMM, ๙ྐሰ.
IN COLOR, ሰࠢ॥ᇅᆴ.
IN KEY, ሰࠢᇏࣉӱщ֥ݼඨ.
ҕඔඪૼ
§8.1 ቅೖൔ๙ྐݦඔ
MPI SEND
C int MPI_Send(void* buf,int count,MPI_Datatype datatype,int dest,
int tag, MPI_Comm comm )
F MPI_SEND(BUF, COUNT, DATATYPE, DEST, TAG, COMM, IERROR )
<type> BUF(*)
INTEGER COUNT, DATATYPE, DEST, TAG, COMM, IERROR
ҕඔඪૼ
IN BUF, ෮ေؿෂཨ༏ඔऌ֥൮ֹᆶ.
IN COUNT, ؿෂཨ༏ඔቆჭ֥۱ඔ.
IN DATATYPE, ؿෂཨ༏֥ඔऌো.
IN DEST, ࢤ൬ཨ༏֥ࣉӱщݼ.
IN TAG, ཨ༏ѓద.
IN COMM, ๙ྐሰ.
MPI RECV
C int MPI_Recv(void* buf,int count,MPI_Datatype datatype,int source,
int tag, MPI_Comm comm, MPI_Status *status )
F MPI_RECV(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, STATUS, IERROR )
<type> BUF(*)
INTEGER COUNT,DATATYPE,SOURCE,TAG,COMM,
STATUS(MPI_STATUS_SIZE),IERROR
71
72 ֻϖᅣ MPI ׄ֞ׄ๙ྐݦඔ
ҕඔඪૼ
IN COUNT, ࢤ൬ཨ༏ඔቆჭ֥ቋն۱ඔ.
IN DATATYPE, ࢤ൬ཨ༏֥ඔऌো.
IN SOURCE, ؿෂཨ༏֥ࣉӱщݼ.
IN TAG, ཨ༏ѓద.
IN COMM, ๙ྐሰ.
ҕඔඪૼ
IN STATUS, ࢤ൬ཨ༏ൈْ֥߭ሑ.
IN DATATYPE, ࢤ൬ཨ༏֥ඔऌো.
MPI SENDRECV
C int MPI_Sendrecv(void *sendbuf,int sendcount,MPI_Datatype sendtype,
int dest,int sendtag,void *recvbuf, int recvcount,
MPI_Datatype recvtype, int source, int recvtag,
MPI_Comm comm, MPI_Status *status )
F MPI_SENDRECV(SENDBUF, SENDCOUNT, SENDTYPE, DEST, SENDTAG, RECVBUF,
RECVCOUNT,RECVTYPE,SOURCE,RECVTAG,COMM,STATUS,IERROR)
<type> SENDBUF(*), RECVBUF(*)
INTEGER SENDCOUNT, SENDTYPE, DEST, SENDTAG, RECVCOUNT, RECVTYPE
SOURCE, RECVTAG, COMM, STATUS(MPI_STATUS_SIZE), IERROR
§8.1 ቅೖൔ๙ྐݦඔ 75
ҕඔඪૼ
IN SENDBUF, ෮ေؿෂཨ༏ඔऌ֥൮ֹᆶ.
IN SENDCOUNT, ؿෂཨ༏ඔቆჭ֥۱ඔ.
IN SENDTYPE, ؿෂཨ༏֥ඔऌো.
IN DEST, ࢤ൬ཨ༏֥ࣉӱщݼ.
IN SENDTAG, ؿෂཨ༏ѓద.
IN RECVCOUNT, ࢤ൬ཨ༏ඔቆჭ֥ቋն۱ඔ.
IN RECVTYPE, ࢤ൬ཨ༏֥ඔऌো.
IN SOURCE, ؿෂཨ༏֥ࣉӱщݼ.
IN RECVTAG, ࢤ൬ཨ༏ѓద.
IN COMM, ๙ྐሰ.
ᆃ൞ؿෂཨ༏ࢤބ൬ཨ༏ቆކᄝ၂ఏ֥၂۱ݦඔ, ݺԩ൞҂Ⴈॉ੮༵ؿෂߎ൞༵ࢤ
൬ཨ༏. ᄝൕ২ 8.1.1 ᇏՖ๙ྐष֞๙ྐࢲඏ҆ٳॖႨೂ༯֥၂۱ݦඔটປӮ:
call mpi_sendrecv(m, 1, mpi_integer, next, 1, n, 1, mpi_integer,
& front, 1, mycomm, status, ierr)
m = n
ႮՎॖႨ MPI_SENDRECV ॖၛӱࡥ߄, ۷ᇗေ֥൞ᄝ๙ྐݖӱᇏ҂ླေॉ
੮ଧ۱ࣉӱ༵ؿෂߎ൞༵ࢤ൬, Ֆطॖၛх૧ཨ༏Ԯݖ־ӱᇏ֥ඵ෭.
ҕඔඪૼ
IN COUNT, ؿෂࢤބ൬ཨ༏ඔቆჭ֥۱ඔ.
IN DATATYPE, ؿෂࢤބ൬ཨ༏֥ඔऌো.
IN DEST, ࢤ൬ཨ༏֥ࣉӱщݼ.
IN SENDTAG, ؿෂཨ༏ѓద.
IN SOURCE, ؿෂཨ༏֥ࣉӱщݼ.
IN RECVTAG, ࢤ൬ཨ༏ѓద.
IN COMM, ๙ྐሰ.
MPI PROBE
C int MPI_Probe(int source,int tag,MPI_Comm comm,MPI_Status *status )
F MPI_PROBE( SOURCE, TAG, COMM, STATUS, IERROR )
INTEGER SOURCE, TAG, COMM, STATUS(MPI_STATUS_SIZE), IERROR
ҕඔඪૼ
IN SOURCE, ؿෂཨ༏ࣉӱ֥щݼ.
IN TAG, ࢤ൬ཨ༏֥ѓద.
IN COMM, ๙ྐሰ.
MPI IPROBE
C int MPI_Iprobe(int source, int tag, MPI_Comm comm, int* flag,
MPI_Status *status )
F MPI_IPROBE( SOURCE, TAG, COMM, FLAG, STATUS, IERROR )
LOGICAL FLAG
INTEGER SOURCE, TAG, COMM, STATUS(MPI_STATUS_SIZE), IERROR
ҕඔඪૼ
IN SOURCE, ؿෂཨ༏ࣉӱ֥щݼ.
IN TAG, ࢤ൬ཨ༏֥ѓద.
IN COMM, ๙ྐሰ.
§8.2 ٤ቅೖൔ๙ྐݦඔ
٤ቅೖൔ๙ྐݦඔ൞ᆷᄝ๙ྐݖӱᇏ, ҂ླေ֩ր๙ྐࢲඏْࣼ߭, ๙ӈᆃᇕ๙ྐݖ
ӱࢌႮ࠹ෘࠏ֥ުটԩ. ೂ࠹ݔෘࠏ༢ิ܂႗ࡱᆦӻ٤ቅೖൔ๙ྐݦඔ, ࣼॖၛ
࠹ෘა๙ྐᄝൈࡗഈ֥ᇗן, Ֆۚิطѩྛ࠹ෘི֥ੱ.
MPI ISEND
C int MPI_Isend(void* buf,int count,MPI_Datatype datatype,int dest,
int tag, MPI_Comm comm, MPI_Request *request )
F MPI_ISEND(BUF, COUNT, DATATYPE, DEST, TAG, COMM, REQUEST, IERROR)
<type> BUF(*)
INTEGER COUNT, DATATYPE, DEST, TAG, COMM, REQUEST, IERROR
78 ֻϖᅣ MPI ׄ֞ׄ๙ྐݦඔ
ҕඔඪૼ
IN BUF, ෮ေؿෂཨ༏ඔऌ֥൮ֹᆶ.
IN COUNT, ؿෂཨ༏ඔቆჭ֥۱ඔ.
IN DATATYPE, ؿෂཨ༏֥ඔऌো.
IN DEST, ࢤ൬ཨ༏֥ࣉӱщݼ.
IN TAG, ཨ༏ѓద.
IN COMM, ๙ྐሰ.
MPI IRECV
C int MPI_Irecv(void* buf,int count,MPI_Datatype datatype,int source,
int tag, MPI_Comm comm, MPI_Request *request )
F MPI_IRECV(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, REQUEST, IERROR)
<type> BUF(*)
INTEGER COUNT, DATATYPE, SOURCE, TAG, COMM, REQUEST, IERROR
ҕඔඪૼ
IN COUNT, ࢤ൬ཨ༏ඔቆჭ֥۱ඔ.
IN DATATYPE, ࢤ൬ཨ༏֥ඔऌো.
IN SOURCE, ؿෂཨ༏֥ࣉӱщݼ.
IN TAG, ཨ༏ѓద.
IN COMM, ๙ྐሰ.
MPI WAIT
C int MPI_Wait( MPI_Request *request, MPI_Status *status )
F MPI_WAIT( REQUEST, STATUS, IERROR )
INTEGER REQUEST, STATUS(MPI_STATUS_SIZE), IERROR
ҕඔඪૼ
MPI TEST
C int MPI_Test(MPI_Request *request, int* flag, MPI_Status *status)
F MPI_TEST( REQUEST, FLAG, STATUS, IERROR )
LOGICAL FLAG
INTEGER REQUEST, STATUS(MPI_STATUS_SIZE), IERROR
ҕඔඪૼ
ҕඔඪૼ
ҕඔඪૼ
IN COUNT, ౨ओѣ֥۱ඔ.
MPI TESTANY
C int MPI_Testany( int count, MPI_Request *array_of_requestS,
int *index, int *flag, MPI_Status *status )
F MPI_TESTANY(COUNT,ARRAY_OF_REQUESTS,INDEX,FLAG,STATUS,IERROR)
LOGICAL FLAG
INTEGER COUNT, ARRAY_OF_REQUESTS(*), INDEX,
STATUS(MPI_STATUS_SIZE), IERROR
ҕඔඪૼ
IN COUNT, ౨ओѣ֥۱ඔ.
ᆃ۱ݦඔંႵીႵ๙ྐҠቔປӮࡼ৫ْࠧ߭.
MPI WAITALL
C int MPI_Waitall( int count, MPI_Request *array_of_requests,
MPI_Status *array_of_statuses )
F MPI_WAITALL(COUNT,ARRAY_OF_REQUESTS,ARRAY_OF_STATUSES,IERROR)
INTEGER COUNT, ARRAY_OF_REQUESTS(*),
ARRAY_OF_STATUSES(MPI_STATUS_SIZE, *), IERROR
ҕඔඪૼ
IN COUNT, ౨ओѣ֥۱ඔ.
ᆃ۱ݦඔ֒෮Ⴕ๙ྐҠቔປӮᆭުҌْ߭, ڎᄵࡼ၂ᆰ֩ր.
§8.2 ٤ቅೖൔ๙ྐݦඔ 81
MPI TESTALL
C int MPI_Testall( int count, MPI_Request *array_of_requests,
int *flag, MPI_Status *array_of_statuses )
F MPI_TESTALL(COUNT,ARRAY_OF_REQUESTS,FLAG,ARRAY_OF_STATUSES,IERROR)
LOGICAL FLAG
INTEGER COUNT, ARRAY_OF_REQUESTS(*),
ARRAY_OF_STATUSES(MPI_STATUS_SIZE, *), IERROR
ҕඔඪૼ
IN COUNT, ౨ओѣ֥۱ඔ.
ᆃ۱ݦඔં෮Ⴕ๙ྐҠቔ൞ڎປӮࡼ৫ْࠧ߭.
MPI CANCEL
C int MPI_Cancel( MPI_Request *request )
F MPI_CANCEL( REQUEST, IERROR )
INTEGER REQUEST, IERROR
ҕඔඪૼ
ҕඔඪૼ
IN STATUS, ཨ༏֥ሑ.
§8.3 ห൹֥ׄ֞ׄ๙ྐݦඔ
MPI SEND INIT
C int MPI_Send_init(void* buf,int count,MPI_Datatype datatype,int dest,
int tag, MPI_Comm comm, MPI_Request *request )
F MPI_SEND_INIT(BUF, COUNT, DATATYPE, DEST, TAG, COMM, REQUEST, IERROR )
<type> BUF(*)
INTEGER COUNT, DATATYPE, DEST, TAG, COMM, REQUEST, IERROR
ҕඔඪૼ
IN BUF, ෮ေؿෂཨ༏ඔऌ֥൮ֹᆶ.
IN COUNT, ؿෂཨ༏ඔቆჭ֥۱ඔ.
IN DATATYPE, ؿෂཨ༏֥ඔऌো.
IN DEST, ࢤ൬ཨ༏֥ࣉӱщݼ.
IN TAG, ཨ༏ѓద.
IN COMM, ๙ྐሰ.
ҕඔඪૼ
IN COUNT, ࢤ൬ཨ༏ඔቆჭ֥۱ඔ.
IN DATATYPE, ࢤ൬ཨ༏֥ඔऌো.
IN SOURCE, ؿෂཨ༏֥ࣉӱщݼ.
IN TAG, ཨ༏ѓద.
IN COMM, ๙ྐሰ.
MPI START
C int MPI_Start( MPI_Request *request )
F MPI_START( REQUEST, IERROR )
INTEGER REQUEST, IERROR
ҕඔඪૼ
MPI STARTALL
C int MPI_Startall( int count, MPI_Request *array_of_request )
F MPI_STARTALL( COUNT, ARRAY_OF_REQUEST, IERROR )
INTEGER COUNT, ARRAY_OF_REQUEST, IERROR
ҕඔඪૼ
IN COUNT, ླေࠗࠃ֥౨ओѣ۱ඔ.
c
m = myid
front = mod(p+myid-1, p)
next = mod(myid+1, p)
call mpi_send_init(m, 1, mpi_integer, next, 1, mycomm,
& requests(1), ierr)
call mpi_recv_init(n, 1, mpi_integer, front, 1, mycomm,
& requests(2), ierr)
do 10 i=1, iter
call mpi_startall(2, requests, ierr)
call mpi_waitall(2, requests, status, ierr)
m = n
10 continue
print *, ’The value of m is ’, m, ’ on Process ’, myid
c
call mpi_comm_free(mycomm, ierr)
call mpi_finalize(ierr)
stop
end
Ⴕܱཨ༏ߏԊ֥ܵ, ॖၛႨೂ༯֥ؽ۱ݦඔ:
ҕඔඪૼ
IN BUFFER, Ԛ߄ߏԊ֥൮ֹᆶ.
IN SIZE, ߏԊοሳࢫ֥նཬ.
ᆃ۱ݦඔᆷૼႨཨ༏ߏԊଆൔ๙ྐൈႨଧ၂۱ߏԊ.
ҕඔඪૼ
§9.1 Ⴈקၬ֥ඔऌো
ᄝ MPI ᇏႨקၬ֥ඔऌো ބC ეᇏ֥ࢲܒ൞٤ӈোර֥, Їওඔऌোa
ඔऌӉ؇ބඔऌఏ໊ᇂ, ᆃ۱ྍקၬ֥ඔऌোః MPI קၬ֥ѓሙඔऌো၂
ဢ, ॖၛႨটቔູؿෂࢤބ൬ཨ༏֥ඔऌো. ؓႿᆃ۱ྍקၬ֥ඔऌো, ऎֹุඪ
֥ቆӮॖၛۀওູೂ༯֥ྙའ૭ඍ:
• Їݣਔ၂༢ਙ֥ჰඔऌো;
• ބ၂༢ਙ֥ӫᆭູ໊၍ (displacement) ֥ᆜඔ.
ඔऌোა໊၍൞Ӯؓԛགྷ֥, ᆃ၂༢ਙ֥ඔऌؓࣼ൞ӫᆭູো႘ഝ (type map). Ⴈ
ো႘ഝটіൕ၂۱ྍ֥ඔऌোູ:
ҕඔඪૼ
IN OLDTYPE, ჰඔऌো.
87
88 ֻࣴᅣ MPI Ⴈሱקၬ֥ඔऌোაյЇ
ҕඔඪૼ
IN BLOCKLENGTH, ૄॶ֥Ӊ؇.
IN OLDTYPE, ჰඔऌো.
ҕඔඪૼ
IN BLOCKLENGTH, ૄॶ֥Ӊ؇.
IN STRIDE, Ⴈሳࢫඔ؇ਈ֥ૄॶఏ֥ࡗए.
IN OLDTYPE, ჰඔऌো.
ҕඔඪૼ
IN ARRAY_OF_BLOCKLENGTHS, ૄॶӉ؇ඔቆ.
IN ARRAY_OF_DISPLACEMENTS, Ⴈჭ۱ඔקၬ֥ૄॶ֥ఏ໊၍ਈඔቆ.
IN OLDTYPE, ჰඔऌো.
ҕඔඪૼ
IN ARRAY_OF_BLOCKLENGTHS, ૄॶӉ؇ඔቆ.
IN ARRAY_OF_DISPLACEMENTS, Ⴈሳࢫඔקၬ֥ૄॶ֥ఏ໊၍ਈඔቆ.
IN OLDTYPE, ჰඔऌো.
ၛഈ۳ԛ֥ܱႿඔऌোܒᄯݦඔ൞ֆ၂֥ჰඔऌো, ༯૫ࡼ۳ԛ၂۱ቋ၂
Ϯ֥ܒᄯྍඔऌো֥ݦඔ.
90 ֻࣴᅣ MPI Ⴈሱקၬ֥ඔऌোაյЇ
ҕඔඪૼ
IN COUNT, ॶ֥۱ඔ.
IN ARRAY_OF_BLOCKLENGTHS, ૄॶӉ؇ඔቆ.
IN ARRAY_OF_DISPLACEMENTS, Ⴈሳࢫඔקၬ֥ૄॶ֥ఏ໊၍ਈඔቆ.
IN ARRAY_OF_TYPES, ჰඔऌোඔቆ.
ҕඔඪૼ
ҕඔඪૼ
ҕඔඪૼ
IN DATATYPE, ඔऌো.
MPI ADDRESS
C int MPI_Address( void* location, MPI_Aint *address )
F MPI_ADDRESS( LOCATION, ADDRESS, IERROR )
<type> LOCATION(*)
INTEGER ADDRESS, IERROR
ҕඔඪૼ
IN LOCATION, ᄝթԥఖᇏ֥эਈіൕ.
if (myid == 0)
for(i=0; i<3; i++) { tst[i].value = 1.0; tst[i].str=’a’; }
printf("\nThe Process %1d of %1d is running.\n", myid, p);
MPI_Address(&tst[0], &disp[0]); MPI_Address(&tst[0].str, &disp[1]);
for (i=1; i>=0; i--) disp[i] -= disp[0];
MPI_Type_struct(3, lens, disp, type, &new);
MPI_Type_commit(&new);
MPI_Type_extent(new, &size);
ҕඔඪૼ
IN DATATYPE, ඔऌো.
ҕඔඪૼ
IN STATUS, ࢤ൬ཨ༏֥ሑ.
IN DATATYPE, ඔऌো.
൬֥ଢ֥. ൞ؓႿگᄖ֥౦ঃႨඔऌյЇॖି߶൬֞ݺԩ.
MPI PACK
C int MPI_Pack(void* inbuf, int incount, MPI_Datatype datatype,
void* outbuf,int outsize,int *position,MPI_Comm comm)
F MPI_PACK(INBUF, INCOUNT, DATATYPE, OUTBUF, OUTSIZE, POSITION,
COMM, IERROR )
<type> INBUF(*), OUTBUF(*)
INTEGER INCOUNT, DATATYPE, OUTSIZE, POSITION, COMM, IERROR
ҕඔඪૼ
IN INBUF, ሙСյᄝЇᇏ֥ൻೆߏԊ.
IN INCOUNT, ൻೆჭ֥۱ඔ.
IN DATATYPE, ඔऌো.
IN OUTSIZE, Ⴈሳࢫඔקၬ֥յЇߏԊ֥նཬ.
IN COMM, յЇཨ༏֥๙ྐሰ.
MPI UNPACK
C int MPI_Unpack(void* inbuf,int insize,int *position,void* outbuf,
int outcount, MPI_Datatype datatype, MPI_Comm comm)
F MPI_UNPACK( INBUF, INSIZE, POSITION, OUTBUF, OUTCOUNT, DATATYPE,
COMM, IERROR )
<type> INBUF(*), OUTBUF(*)
INTEGER INSIZE, POSITION, OUTCOUNT, DATATYPE, COMM, IERROR
ҕඔඪૼ
IN INBUF, ҷЇߏԊ.
IN INSIZE, Ⴈሳࢫඔקၬ֥ҷЇߏԊ֥նཬ.
IN OUTCOUNT, ൻԛඔऌߏԊჭ֥۱ඔ.
IN DATATYPE, ඔऌো.
IN COMM, ๙ྐሰ.
§9.2 MPI ֥ඔऌյЇაҷЇ 95
ҕඔඪૼ
IN INCOUNT, ሙСյЇ֥ჭ۱ඔ.
IN DATATYPE, ඔऌো.
IN COMM, ๙ྐሰ.
ia(i) = i
a(i) = dble(i)
10 continue
endif
call mpi_pack_size(len, mpi_integer, mycomm, count1, ierr)
call mpi_pack_size(len, mpi_double_precision, mycomm, count2, i)
print *, ’The pack size of 10 integer and real8 are:’,
& count1, count2
pos = 1
if(myid .eq. 0 .and. p .gt. 1) then
call mpi_pack(ia, len, mpi_integer, buf, maxbuf, pos,
& mycomm, ierr)
call mpi_pack(a, len, mpi_double_precision, buf, maxbuf, pos,
& mycomm, ierr)
call mpi_send(buf, pos-1, mpi_packed, 1, 1, mycomm, ierr)
elseif(myid .eq. 1) then
call mpi_recv(buf, maxbuf, mpi_packed, 0, 1, mycomm,
& status, ierr)
call mpi_unpack(buf, maxbuf, pos, ia, len, mpi_integer,
& mycomm, ierr)
call mpi_unpack(buf, maxbuf, pos, a, len, mpi_double_precision,
& mycomm, ierr)
print *, ’The received values are: ’, a(1), a(2), a(3)
endif
call mpi_comm_free(mycomm, ierr)
call mpi_finalize(ierr)
stop
end
ֻᅣ MPI ऊކ๙ྐ
A0 P0 A0
P1 Q
Q
A0
P2 A0
P3 A0
10.1: ܼѬݦඔ֥ቔႨ
A0 A1 A2 A 3 P 0 Q
Q
A0
P1 A1
P2 A2
QQ
P3 A3
10.2: Ѭა൬ࠢݦඔ֥ቔႨ
§10.1 ᅰθ҄
MPI BARRIER
C int MPI_Barrier( MPI_Comm comm )
F MPI_BARRIER( COMM, IERROR )
INTEGER COMM, IERROR
97
98 ֻᅣ MPI ऊކ๙ྐ
A0 A1 A2 A3 P0 A0
A0 A1 A2 A3 P1 A1
QQ
A0 A1 A2 A3 P2 A2
A0 A1 A2 A3 P3 A3
10.3: ૄ۱ࣉӱ൬ࠢݦඔ֥ቔႨ
A0 A1 A2 A3 P0 A0 B0 C0 D0
B0 B1 B2 B3 P1 A1 B1 C1 D1
QQ
C0 C1 C2 C3 P2 A2 B2 C2 D2
D0 D1 D2 D3 P3 A3 B3 C3 D3
10.4: ಆࢌߐݦඔ֥ቔႨ
§10.2 ֆׄაׄ؟๙ྐݦඔ 99
ҕඔඪૼ
IN COMM, ๙ྐሰ.
§10.2 ֆׄაׄ؟๙ྐݦඔ
MPI BCAST
C int MPI_Bcast( void* buffer, int count, MPI_Datatype datatype,
int root, MPI_Comm comm )
F MPI_BCAST( BUFFER, COUNT, DATATYPE, ROOT, COMM, IERROR )
<type> BUFFER(*)
INTEGER COUNT, DATATYPE, ROOT, COMM, IERROR
ҕඔඪૼ
IN COUNT, ߏԊᇏჭ֥۱ඔ.
IN DATATYPE, ߏԊ֥ඔऌো.
IN ROOT, ၛູჷࣉྛܼѬ֥ࣉӱщݼ.
IN COMM, ๙ྐሰ.
MPI GATHER
C int MPI_Gather( void* sendbuf, int sendcount, MPI_Datatype sendtype,
void* recvbuf, int recvcount, MPI_Datatype recvtype,
int root, MPI_Comm comm )
F MPI_GATHER( SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT,
RECVTYPE, ROOT, COMM, IERROR )
<type> SENDBUF(*), RECVBUF(*)
INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, ROOT, COMM, IERROR
100 ֻᅣ MPI ऊކ๙ྐ
ҕඔඪૼ
IN SENDBUF, ؿෂߏԊ֥൮ֹᆶ.
IN SENDCOUNT, ေؿෂ֥ჭ֥۱ඔ.
IN SENDTYPE, ؿෂߏԊ֥ඔऌো.
IN RECVCOUNT, ࢤ൬ૄ۱ࣉӱᇏඔऌჭ֥۱ඔ.
IN RECVTYPE, ࢤ൬ߏԊ֥ඔऌো.
IN ROOT, ࢤ൬ࣉӱ֥щݼ.
IN COMM, ๙ྐሰ.
ҕඔඪૼ
IN SENDBUF, ؿෂߏԊ֥൮ֹᆶ.
IN SENDCOUNT, ေؿෂ֥ჭ֥۱ඔ.
IN SENDTYPE, ؿෂߏԊ֥ඔऌো.
IN RECVCOUNTS, ࢤ൬ૄ۱ࣉӱඔऌჭ֥۱ඔᆜඔඔቆ.
IN DISPLS, ࢤ൬ඔऌթ٢໊֥ᇂඔቆ.
IN RECVTYPE, ࢤ൬ߏԊ֥ඔऌো.
IN ROOT, ࢤ൬ࣉӱ֥щݼ.
IN COMM, ๙ྐሰ.
stop
end
ᆃ۱ӱ֥ൻԛᆴႋٳљູ: 1, 11, 21 ބ2, 12, 22. MPI_GATHER ࢤ൬֥֞ඔऌᄝࢤ
൬ߏԊᇏ൞৵࿃թ٢֥, طMPI_GATHERV ࢤ൬֥֞ඔऌᄝࢤ൬ߏԊᇏ൞҂৵࿃թ٢
֥, ᄝૌᆃ۳ԛ֥২ሰᇏ, ႮႿ COUNTS ֥෮Ⴕٳਈ൞ཌྷ֥, ॖၛुӮ൞ૄ҄ۯӉ
ູ 20 ໊֥ᇂթ٢၂۱ྍࢤ൬֥ඔऌ.
MPI SCATTER
C int MPI_Scatter( void* sendbuf, int sendcount, MPI_Datatype sendtype,
void* recvbuf, int recvcount, MPI_Datatype recvtype,
int root, MPI_Comm comm )
F MPI_SCATTER( SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT,
RECVTYPE, ROOT, COMM, IERROR )
<type> SENDBUF(*), RECVBUF(*)
INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, ROOT, COMM, IERROR
ҕඔඪૼ
IN SENDBUF, ؿෂߏԊ֥൮ֹᆶ.
IN SENDCOUNT, ؿෂ֞ૄ۱ࣉӱᇏ֥ჭ֥۱ඔ.
IN SENDTYPE, ؿෂߏԊ֥ඔऌো.
IN RECVCOUNT, ࢤ൬ඔऌჭ֥۱ඔ.
IN RECVTYPE, ࢤ൬ߏԊ֥ඔऌো.
IN ROOT, ؿෂࣉӱ֥щݼ.
IN COMM, ๙ྐሰ.
MPI SCATTERV
C int MPI_Scatterv(void* sendbuf, int *sendcounts, int *displs,
MPI_Datatype sendtype, void* recvbuf, int recvcount,
MPI_Datatype recvtype, int root, MPI_Comm comm )
F MPI_SCATTERV( SENDBUF, SENDCOUNTS, DISPLS, SENDTYPE, RECVBUF, RECVCOUNT,
RECVTYPE, ROOT, COMM, IERROR )
<type> SENDBUF(*), RECVBUF(*)
INTEGER SENDCOUNTS(*), DISPLS(*), SENDTYPE, RECVCOUNT, RECVTYPE, ROOT,
COMM, IERROR
§10.3 ׄ؟აׄ؟๙ྐݦඔ 103
ҕඔඪૼ
IN SENDBUF, ؿෂߏԊ֥൮ֹᆶ.
IN SENDCOUNTS, ؿෂ֞ૄ۱ࣉӱᇏ֥ჭ֥۱ඔඔቆ.
IN DISPLS, ؿෂ֞ૄ۱ࣉӱᇏ֥ඔऌఏ໊၍.
IN SENDTYPE, ؿෂߏԊ֥ඔऌো.
IN RECVCOUNT, ࢤ൬ඔऌჭ֥۱ඔ.
IN RECVTYPE, ࢤ൬ߏԊ֥ඔऌো.
IN ROOT, ؿෂࣉӱ֥щݼ.
IN COMM, ๙ྐሰ.
§10.3 ׄ؟აׄ؟๙ྐݦඔ
MPI ALLGATHER
C int MPI_Allgather( void* sendbuf, int sendcount, MPI_Datatype sendtype,
void* recvbuf, int recvcount, MPI_Datatype recvtype,
MPI_Comm comm )
F MPI_ALLGATHER( SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT,
RECVTYPE, COMM, IERROR )
<type> SENDBUF(*), RECVBUF(*)
INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, COMM, IERROR
ҕඔඪૼ
IN SENDBUF, ؿෂߏԊ֥൮ֹᆶ.
IN SENDCOUNT, ေؿෂ֥ჭ֥۱ඔ.
IN SENDTYPE, ؿෂߏԊ֥ඔऌো.
IN RECVCOUNT, ࢤ൬ૄ۱ࣉӱᇏඔऌჭ֥۱ඔ.
IN RECVTYPE, ࢤ൬ߏԊ֥ඔऌো.
IN COMM, ๙ྐሰ.
104 ֻᅣ MPI ऊކ๙ྐ
MPI ALLGATHERV
C int MPI_Allgatherv( void* sendbuf, int sendcount, MPI_Datatype sendtype,
void* recvbuf, int recvcount, MPI_Datatype recvtype,
MPI_Comm comm )
F MPI_ALLGATHERV( SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT,
RECVTYPE, COMM, IERROR )
<type> SENDBUF(*), RECVBUF(*)
INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, COMM, IERROR
ҕඔඪૼ
IN SENDBUF, ؿෂߏԊ֥൮ֹᆶ.
IN SENDCOUNT, ေؿෂ֥ჭ֥۱ඔ.
IN SENDTYPE, ؿෂߏԊ֥ඔऌো.
IN RECVCOUNT, ࢤ൬ૄ۱ࣉӱᇏඔऌჭ֥۱ඔ.
IN RECVTYPE, ࢤ൬ߏԊ֥ඔऌো.
IN COMM, ๙ྐሰ.
MPI ALLTOALL
C int MPI_Alltoall( void* sendbuf, int sendcount, MPI_Datatype sendtype,
void* recvbuf, int recvcount, MPI_Datatype recvtype,
MPI_Comm comm )
F MPI_ALLTOALL( SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT,
RECVTYPE, COMM, IERROR )
<type> SENDBUF(*), RECVBUF(*)
INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, COMM, IERROR
§10.3 ׄ؟აׄ؟๙ྐݦඔ 105
ҕඔඪૼ
IN SENDBUF, ؿෂߏԊ֥൮ֹᆶ.
IN SENDCOUNT, ေؿෂ֥ჭ֥۱ඔ.
IN SENDTYPE, ؿෂߏԊ֥ඔऌো.
IN RECVCOUNT, ࢤ൬ૄ۱ࣉӱᇏඔऌჭ֥۱ඔ.
IN RECVTYPE, ࢤ൬ߏԊ֥ඔऌো.
IN COMM, ๙ྐሰ.
MPI ALLTOALLV
C int MPI_Alltoallv(void* sendbuf, int *sendcounts, int *sdispls,
MPI_Datatype sendtype, void* recvbuf, int *recvcounts,
int *rdispls, MPI_Datatype recvtype, MPI_Comm comm )
F MPI_ALLTOALLV( SENDBUF, SENDCOUNTS, SDISPLS, SENDTYPE, RECVBUF,
RECVCOUNTS, RDISPLS, RECVTYPE, COMM, IERROR )
<type> SENDBUF(*), RECVBUF(*)
INTEGER SENDCOUNTS(*), SDISPLS(*), SENDTYPE, RECVCOUNTS(*), RDISPLS(*),
RECVTYPE, COMM, IERROR
ҕඔඪૼ
IN SENDBUF, ؿෂߏԊ֥൮ֹᆶ.
IN SENDCOUNTS, ؿෂ֞ૄ۱ࣉӱᇏ֥ჭ֥۱ඔඔቆ.
IN SDISPLS, ؿෂ֞ૄ۱ࣉӱᇏ֥ඔऌఏ໊၍.
IN SENDTYPE, ؿෂߏԊ֥ඔऌো.
IN RECVCOUNTS, ࢤ൬ඔऌჭ֥۱ඔඔቆ.
IN RDISPLS, ࢤ൬ࣉӱᇏթ٢ඔऌ֥ఏ໊၍.
IN RECVTYPE, ࢤ൬ߏԊ֥ඔऌো.
IN COMM, ๙ྐሰ.
ᆃؽ۱ݦඔ֩ࡎႿᄝ෮Ⴕࣉӱᇏ֥ඔऌࣉྛ҃. ູਔьႿࢳބᆞಒႨՎݦඔ,
ૌߎ൞۳ԛ၂۱ऎุ২ሰ.
program allall
include ’mpif.h’
integer maxbuf, len, mp
parameter (maxbuf = 200, len = 10, mp = 5)
106 ֻᅣ MPI ऊކ๙ྐ
A0 A1 A2 P0 A0 + B0 + C0 A1 + B1 + C1 A2 + B2 + C2
Q
B0 B1 B2 P1 Q
C0 C1 C2 P2
11.1: ၂۱ࣉӱࣉྛ݂ჿҠቔ
A0 A1 A2 P0 A0 + B0 + C0 A1 + B1 + C1 A2 + B2 + C2
Q
B0 B1 B2 P1 Q
A0 + B0 + C0 A1 + B1 + C1 A2 + B2 + C2
C0 C1 C2 P2 A0 + B0 + C0 A1 + B1 + C1 A2 + B2 + C2
11.2: ෮Ⴕࣉӱࣉྛ݂ჿҠቔ
A0 A1 A2 P0 A0 + B0 + C0
Q
B0 B1 B2 P1 Q
A1 + B1 + C1
C0 C1 C2 P2 A2 + B2 + C2
11.3: ࣉྛ݂ჿؿٳҠቔ
ഈඍ 4 ۱൞݂ؓჿҠቔ֥၂ྙൔ૭ඍ.
MPI REDUCE
C int MPI_Reduce(void* sendbuf, void* recvbuf, int count,
MPI_Datatype datatype,MPI_Op op,int root,MPI_Comm comm)
F MPI_REDUCE( SENDBUF, RECVBUF, COUNT, DATATYPE, OP, ROOT, COMM, IERROR )
<type> SENDBUF(*), RECVBUF(*)
INTEGER COUNT, DATATYPE, OP, ROOT, COMM, IERROR
107
108 ֻ၂ᅣ MPI ಆअ݂ჿҠቔ
A0 A1 A2 P0 A0 A1 A2
Q
B0 B1 B2 P1 Q
A0 + B0 A1 + B1 A2 + B2
C0 C1 C2 P2 A0 + B0 + C0 A1 + B1 + C1 A2 + B2 + C2
11.4: భሗ݂ჿҠቔ
ҕඔඪૼ
IN SENDBUF, ؿෂߏԊ֥൮ֹᆶ.
IN COUNT, ߏԊᇏჭ֥۱ඔ.
IN DATATYPE, ߏԊ֥ඔऌো.
IN OP, ޅᇕ݂ჿҠቔ.
IN ROOT, ࢤ൬ࣉӱщݼ.
IN COMM, ๙ྐሰ.
Ҡቔ ၩၬ
MPI_MAX ቋն
MPI_MIN ቋཬ
MPI_SUM ބ
MPI_PROD ࠒ
MPI_LAND આࠠა
MPI_BAND ο໊ა
MPI_LOR આࠠࠇ
MPI_BOR ο໊ࠇ
MPI_LXOR આࠠაࠇ
MPI_BXOR ο໊აࠇ
MPI_MAXLOC ቋն໊ބᇂ
MPI_MINLOC ቋཬ໊ބᇂ
ᆃུᄎෘ൞Ⴕඔऌোေ֥, ൮༵ؓඔऌোࣉྛٳো:
109
གྷᄝؓૄᇕҠቔᄍྸ֥ඔऌোܿקೂ༯:
OP ᄍྸ֥ඔऌো
MPI_MAX, MPI_MIN C integer, Fortran integer, Floating point
MPI_SUM, MPI_PROD C integer, Fortran integer, Floating point, Complex
MPI_LAND, MPI_LOR, MPI_LXOR C integer, Logical
MPI_BAND, MPI_BOR, MPI_BXOR C integer, Fortran integer, Byte
Fortran ӱ
ކگඔऌো ো૭ඍ
MPI_2REAL pair of REALs
MPI_2DOUBLE_PRECISION pair of DOUBLE PRECISIONs
MPI_2INTEGER pair of INTEGERs
C ӱ
ކگඔऌো ো૭ඍ
MPI_FLOAT_INT float and int
MPI_DOUBLE_INT double and int
MPI_LONG_INT long and int
MPI_SHORT_INT short and int
MPI_LONG_DOUBLE_INT long double and int
MPI_2INT pair of ints
c
integer myid, p, mycomm, ierr, m, n, root, pair(2), answer(2)
c
call mpi_init( ierr )
call mpi_comm_dup( mpi_comm_world, mycomm, ierr)
call mpi_comm_rank( mycomm, myid, ierr )
call mpi_comm_size( mycomm, p, ierr )
print *, ’Process ’, myid, ’ of ’, p, ’ is running’
root = 0
m = myid
call mpi_reduce(m, n, 1, mpi_integer, mpi_max, root, mycomm, ierr)
c
if(myid .eq. root) print *, ’The maxmum value is ’, n
pair(1) = mod(myid + 1, p)
pair(2) = myid
call mpi_reduce(pair, answer, 1, mpi_2integer, mpi_maxloc, root,
& mycomm, ierr)
if(myid .eq. root) print *, ’The maxmum value is ’, answer(1),
& ’ on process ’, answer(2)
c
call mpi_comm_free(mycomm, ierr)
call mpi_finalize(ierr)
stop
end
MPI ALLREDUCE
C int MPI_Allreduce( void* sendbuf, void* recvbuf, int count,
MPI_Datatype datatype, MPI_Op op, MPI_Comm comm )
F MPI_ALLREDUCE( SENDBUF, RECVBUF, COUNT, DATATYPE, OP, COMM, IERROR )
<type> SENDBUF(*), RECVBUF(*)
INTEGER COUNT, DATATYPE, OP, COMM, IERROR
ҕඔඪૼ
IN SENDBUF, ؿෂߏԊ֥൮ֹᆶ.
IN COUNT, ߏԊᇏჭ֥۱ඔ.
IN DATATYPE, ߏԊ֥ඔऌো.
IN OP, ޅᇕ݂ჿҠቔ.
IN COMM, ๙ྐሰ.
ҕඔඪૼ
IN SENDBUF, ؿෂߏԊ֥൮ֹᆶ.
IN RECVCOUNTS, ჭ۱ඔ֥ඔቆ.
IN DATATYPE, ߏԊ֥ඔऌো.
IN OP, ޅᇕ݂ჿҠቔ.
IN COMM, ๙ྐሰ.
MPI SCAN
C int MPI_Scan(void* sendbuf, void* recvbuf, int count,
MPI_Datatype datatype, MPI_Op op, MPI_Comm comm)
F MPI_SCAN(SENDBUF, RECVBUF, COUNT, DATATYPE, OP, COMM, IERROR)
<type> SENDBUF(*), RECVBUF(*)
INTEGER COUNT(*), DATATYPE, OP, COMM, IERROR
ҕඔඪૼ
IN SENDBUF, ؿෂߏԊ֥൮ֹᆶ.
IN COUNT, ჭ۱ඔ.
IN DATATYPE, ߏԊ֥ඔऌো.
IN OP, ޅᇕ݂ჿҠቔ.
IN COMM, ๙ྐሰ.
MPI OP CREATE
C int MPI_Op_create(MPI_User_function *function,int commute,MPI_Op *op)
F MPI_OP_CREATE( FUNCTION, COMMUTE, OP, IERROR )
EXTERNAL FUNCTION
LOGICAL COMMUTE
INTEGER OP, IERROR
ҕඔඪૼ
IN FUNCTION, Ⴈקၬ֥ݦඔ.
Վݦඔקၬਔ၂۱ྍ֥݂ჿҠቔ OP.
MPI OP FREE
C int MPI_Op_free( MPI_Op *op )
F MPI_OP_FREE( OP, IERROR )
INTEGER OP, IERROR
114 ֻ၂ᅣ MPI ಆअ݂ჿҠቔ
ҕඔඪૼ
IN OP, ݂ჿҠቔ.
༯૫֥২ሰ൞Ⴈሱקၬ֥ݦބඔটൌགྷಆअҠቔ֥:
program userdef
include ’mpif.h’
integer len
parameter (len = 100)
integer myid, p, mycomm, ierr, m, root, myop
real x(len), y(len)
external userfunc
call mpi_init( ierr )
call mpi_comm_dup( mpi_comm_world, mycomm, ierr)
call mpi_comm_rank( mycomm, myid, ierr )
call mpi_comm_size( mycomm, p, ierr )
print *, ’Process ’, myid, ’ of ’, p, ’ is running’
m = 100
root = 0
call initx(m, myid, x)
call mpi_op_create(userfunc, .true., myop, ierr)
call mpi_reduce(x, y, m, mpi_real, myop, root, mycomm, ierr)
call mpi_op_free(myop, ierr)
if(myid .eq. root)
& print *, ’The values of answer are ’, y(1), y(2), y(3)
call mpi_comm_free(mycomm, ierr)
call mpi_finalize(ierr)
stop
end
return
end
117
118 ֻؽᅣ HPL ӱൌ২௩༅
ҕॉ໓ང
119
120 ҕॉ໓ང
ڸ၂ ѩྛӱष۽ؿऎაۚྟିӱ९
§A.1 BLASaLAPACKaScaLAPACK
§A.2 FFTW
§A.3 PETSc
121
122 ڸ၂ ѩྛӱष۽ؿऎაۚྟିӱ९
ڸؽ MPI ݦඔ reference
෬ႄ: MPI ݦඔđᇗေۀaՍ
123
124 ڸ ؽMPI ݦඔ reference
෬ ႄ
LU ࢳٳ, 37 PVP, 11
طٳᇍᆭ, 27
recv, 31
ࢳٳିۿ, 24, 25
ࡆб, 21 send, 31
इᆔӰࠒ, 32 SIMD ༢, 11
ऍն็ᅞ, 5 SMP, 11–13
ज৺թԥ, 37–39
TOP500, 9, 11
ॖঔᅚྟ, 9
৬؇, 21
ਙೡ૭, 39
ੀඣཌ, 25
თࢳٳ, 23
ඔऌԮൻ, 31
ච౷эߐ, 42, 44
҄ѩྛෘم, 27, 28
ເᆞࢌ, 43
ၳ҄ѩྛෘم, 28
ၳ҄םս, 49, 50
Amdahl ੰק, 21
ASCI ࠹߃, 6
Cannon ෘم, 35
Cholesky ࢳٳ, 41, 42
Cluster, 11, 15
Gustafson ܄ൔ, 21
HPCC ࠹߃, 5
Linpack, 37
MIMD ༢, 11
MPP, 11, 14, 15, 31
125