䞊åå
ãã®èšäºã¯æ€èšŒå¯èœãªåèæç®ãåºå
žãå
šã瀺ãããŠããªãããäžååã§ãã (2022幎12æ) |
䞊ååïŒãžããã€ããè±: parallelizationïŒã¯ãã³ã³ãã¥ãŒã¿ã«ãããŠãåæã«è€æ°ã®æŒç®åŠçãå®è¡ããããšïŒäžŠåèšç®ïŒã«ãã£ãŠåŠçã®ã¹ã«ãŒããããäžããããã°ã©ãã³ã°ææ³ã§ããã察矩èªã¯é次åïŒè±: serializationïŒãããŒããŠã§ã¢ã®è³æºãæå¹æŽ»çšããããã®æé©åææ³ã®ã²ãšã€ã§ããã
æŠèŠ
[ç·šé]ã³ã³ãã¥ãŒã¿ã«ãããŠåŠçãå®è¡ããå Žåããã£ãšãåçŽãªæ¹æ³ã¯ãäžããããããã°ã©ã ã¹ããããæåããæåŸãŸã§ã²ãšã€ãã€é çªã«å®è¡ããŠããããšã§ãããããã鿬¡åŠç (serial processing) ãšåŒã¶ãäžæ¹ãSIMDåœä»€ããµããŒãããããã»ããµããè€æ°ã®ããã»ããµïŒãã«ããœã±ããããã»ããµãããã¯ãã«ãã³ã¢ããã»ããµïŒãæèŒããã³ã³ãã¥ãŒã¿ã§ã¯ãè€æ°ã®ç°ãªãããŒã¿ãåæã«åŠçããããè€æ°ã®ç°ãªãã¹ããããåæã«å®è¡ãããããããšãã§ãããããã䞊ååŠç (parallel processing) ãšåŒã¶ã鿬¡åŠçã䞊ååŠçã«ããããšã䞊ååãšãããã·ã³ã°ã«ã³ã¢æ§èœã®åäžãé æã¡ã«ãªãã«ã€ãã䞊ååã«ããé«éåã¯éèŠæ§ãå¢ããŠããææ³ã§ããã
è€æ°ã®ç°ãªãã¹ãããïŒã¿ã¹ã¯ïŒã䞊åå®è¡ã§ããããšãã¿ã¹ã¯äžŠåæ§ãè€æ°ã®ç°ãªãããŒã¿ã«å¯ŸããŠåãåŠçã䞊åå®è¡ã§ããããšãããŒã¿äžŠåæ§ãšããã
䞊ååã®äž»ãªå 容ã¯ãå šäœã®åé¡ãããã€ãã®ç¬ç«ããã¿ã¹ã¯ãããã¯ããŒã¿ã¹ããªãŒã ã«åå²ããã¿ã¹ã¯ãããã¯ããŒã¿ã¹ããªãŒã ãè€æ°ã®ããã»ããµ (å ·äœçã«ã¯CPUãGPUãªã©ã«ãããåã³ã¢) ã«å²ãåœãŠãåŠçãåæå®è¡ãããæåŸã«åå²ãããã¿ã¹ã¯ãå調ããããããããã¯ããŒã¿ã¹ããªãŒã ãçµ±åãããããŠæçµçµæãåŸãããšã§ããããœãããŠã§ã¢ã¬ãã«ã§ã¯äžŠååã®å®è£ åäœã«ããã»ã¹ãã¹ã¬ãããå©çšãããã䞊ååã¯æ¬è³ªçã«äžŠååå¯èœãªïŒäž»ã«ããŒã¿éã«çžäºäŸåæ§ã®ãªãïŒåé¡ã«ã®ã¿é©çšã§ãããåé¡ã®å岿æ³ã«ã¯é ååå²ïŒããŒã¿åå²ïŒãæ©èœåå²ïŒã¿ã¹ã¯åå²ïŒããããäž¡æ¹ãçµã¿åãããããšãããã
䞊ååã«ã¯äž»ã«2ã€ã®ã¢ãããŒããããã
- æç€ºçãªäžŠååãŸãã¯æåã§ã®äžŠåå
- ããã°ã©ããæç€ºçã«ããã°ã©ã ããã³ããŒã¿ã®å岿¹æ³ãæå®ãã
- æé»çãªäžŠååãŸãã¯èªå䞊åå
- åŠçç³»ïŒã³ã³ãã€ã©ãªã©ïŒãèªåçã«åé¡ã®ã¿ã¹ã¯ããã³ããŒã¿ãåå²ãã
å€ãã®èŠå ã»ææ³ã䞊ååã®ããã©ãŒãã³ã¹ã«åœ±é¿ãåãŒãã䞊ååã«ãããããã»ããµã®æ°ïŒãããã¯SIMDåœä»€ã«ããåæåŠçã§ããããŒã¿ã®æ°ïŒã«æ¯äŸããŠããã°ã©ã ã®åŠçé床ãåéåãããããå®éã«ã¯ããã°ã©ã äžã«å ãã䞊ååå¯èœãªé åã®å²åã«å·Šå³ããããã䞊åã¢ã«ãŽãªãºã ã®å 容ãããŒããŠã§ã¢ã®ãã£ãã·ã¥èœåã«äŸåããããããã¢ã ããŒã«ã®æ³åãåœå ±æãåç §ã
ããŒããã©ã³ã·ã³ã°ã¯è² è·ã®é«ãããã»ããµããè² è·ã®äœãããã»ããµãžãšã¿ã¹ã¯ãç§»ãããšã§ããã¹ãŠã®ããã»ããµãããžãŒã«ä¿ãšããšããã
åäžCPUã®ã·ã¹ãã ã§æ£ããåäœããããã°ã©ã ã§ã䞊åç°å¢ã§ã¯ããã§ã¯ãªãããšããããããã¯åäžã®ããã°ã©ã ã®è€æ°ã®ã³ããŒãäºãã«å¹²æžãããïŒäŸãã°ãåæã«åãã¡ã¢ãªé åãèªã¿æžãããïŒããã§ããããã®ããã䞊åç°å¢ã§ã¯å ¥å¿µãªããã°ã©ãã³ã°ïŒæä»å¶åŸ¡ïŒãå¿ èŠãšãªãã
ããã³ã³ãã¥ãŒã¿ã«ããã»ããµãã²ãšã€ãããªãããªããã€SIMDåœä»€ããµããŒãããªãå Žåã¯é次åŠçããã§ããã䞊ååŠçïŒäžŠåèšç®ïŒã¯ã§ããªããäžæ¹ã䞊è¡åŠçïŒäžŠè¡èšç®ïŒã¯å¯èœã§ããå ŽåããããäŸãã°æ±çšçãªãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã§ã¯ããçæéã§å®è¡ã¿ã¹ã¯ãåãæ¿ããŠè€æ°ã®ã¿ã¹ã¯ãç䌌çã«åæå®è¡ããããšã®ã§ãããã«ãã¿ã¹ã¯ã·ã¹ãã ãæ¡çšãããããšãå€ãã䞊è¡åŠçã¯ã¹ã«ãŒãããã®æ¹åã®ããã§ã¯ãªããäž»ã«ã·ã¹ãã ã®å¿çæ§ã®æ¹åã®ããã«å©çšãããã
èªå䞊åå
[ç·šé]èªå䞊ååãšã¯ã䞊ååã³ã³ãã€ã©ã䜿çšããŠãåé¢çã«ãã®ãŸãŸè§£éããã°é次çã«èšç®ãè¡ããããªããã°ã©ã ã®ãœãŒã¹ã³ãŒãã倿ãã䞊åèšç®ãè¡ããããªãªããžã§ã¯ãã³ãŒããåŸãææ³ã§ããã䞊åèšç®æ©ã®äžŠåèšç®èœåãæŽ»çšããããã«è¡ããããèªå䞊ååã®ç®çã¯ããã°ã©ããéå±ã§ãšã©ãŒã®èµ·ãããã䞊ååäœæ¥ããè§£æŸããããšã§ãããæè¡çã«ã¯éåžžã«é²æ©ããããå¿ èŠãªããã°ã©ã è§£æã®è€éããã³ã³ãã€ã«æã«ã¯äžæãªèŠå ïŒäŸãã°ãå ¥åããŒã¿ã®ç¯å²ïŒãªã©ã®ããã«ã鿬¡çãªããã°ã©ã ã®å®å šãªèªå䞊ååã¯æªã éæãããŠããªãã
èªå䞊ååã§äž»ã«çŠç¹ãåœãŠãããããã°ã©ã å¶åŸ¡æ§é ã¯ã«ãŒãã§ããããªããªããäžè¬çã«ããã°ã©ã ã®å®è¡æéã®ã»ãšãã©ã¯äœããã®ã«ãŒãã®äžã§æ¶è²»ãããããã§ãããèªå䞊ååã³ã³ãã€ã©ã¯ã«ãŒããåè§£ããç¹°ãè¿ããå¥ã ã®ããã»ããµã§äžŠè¡ã«å®è¡ãããããã«ããã
䞊åããã°ã©ãã³ã°ã¢ãã«
[ç·šé]䞊åããã°ã©ãã³ã°ã¢ãã«ãšã¯ã䞊åãªã¢ã«ãŽãªãºã ã衚çŸããã¢ããªã±ãŒã·ã§ã³ãåäœç°å¢ã§ãã䞊åã·ã¹ãã ã«é©åãããããã®ãœãããŠã§ã¢çŸ€ã§ããããããã®ãœãããŠã§ã¢ã¯äžŠååããŒã«ããããªã©ãšãåŒã°ããã䞊åããã°ã©ãã³ã°ã¢ãã«ãæ±ãé åã«ã¯ãã¢ããªã±ãŒã·ã§ã³ãèšèªãã³ã³ãã€ã©ãã©ã€ãã©ãªãéä¿¡ã·ã¹ãã ã䞊åå ¥åºåãªã©ããããããã¯æç€ºçãªäžŠååã®ææ³ã§ãããèªå䞊ååã®é©çšã®é£ãããé¿ããŠããã䞊åããã°ã©ã ã®çç£æ§ãé«ããããã䞊åã¢ããªã±ãŒã·ã§ã³ã®éçºè ã¯é©åãªïŒåäžãŸãã¯è€æ°ã®ïŒäžŠåããã°ã©ãã³ã°ã¢ãã«ãéžãã§äœ¿çšããã
䞊åããã°ã©ãã³ã°ã¢ãã«ã®å®è£ æ¹æ³ã«ã¯ããã€ãçš®é¡ããããæ¢åã®é次åŠçèšèªçšã®ã©ã€ãã©ãªãèšèªã®æ¡åŒµä»æ§ããŸãã¯ãŸã£ããæ°ããå®è¡ã¢ãã«ãªã©ã§ããããããã¯ããã«2çš®é¡ã«å€§ãŸãã«åé¡ããããã¡ã¢ãªå ±æåãšã¡ã¢ãªåæ£åã§ãããããããªããããã®2ã€ã®å¢çã¯ææ§ãªãã®ãšãªã£ãŠããã
䞊åããã°ã©ãã³ã°ã¢ãã«ã®äŸ
[ç·šé]- OpenMP
- MPI
- PVM
- Linda
- ã¹ããªãŒã ã»ããã»ãã·ã³ã° (stream processing)
- 䞊è¡è«çããã°ã©ãã³ã° (concurrent logic programming)
- Intel Threading Building Blocks
- X10
- CUDA
- OpenACC
é¢é£é ç®
[ç·šé]- å¶åŸ¡äŸå
- æŒç®ã®ç¬ç«æ§
- 䞊åã¢ã«ãŽãªãºã
- ã°ããŒãã«ã³ã³ãã¥ãŒãã£ã³ã°
- ããŒã¿ãããŒã³ã³ãã¥ãŒãã£ã³ã°
- ã°ãªããã³ã³ãã¥ãŒã¿
- ã¹ãŒããŒã³ã³ãã¥ãŒã¿
- ã¹ã¬ãã (ã³ã³ãã¥ãŒã¿)
- VLIW
- ã¹ãŒããŒã¹ã«ã©ãŒ
- Lock-freeãšWait-freeã¢ã«ãŽãªãºã
- ã€ãã³ãã¥ã¢ã«ã»ã³ã³ã·ã¹ãã³ã·ãŒ