ã¯ããã«
ã€ã³ãã«ã¹ã¬ããã£ã³ã°ãã«ãã£ã³ã°ãããã¯ïŒã€ã³ãã«TBBïŒã©ã€ãã©ãªãŒã¯ãC ++ããã°ã©ããŒã«ãã¢ããªã±ãŒã·ã§ã³ãšã©ã€ãã©ãªãŒã«äžŠè¡æ§ãè¿œå ãããœãªã¥ãŒã·ã§ã³ãæäŸããŸãã ã€ã³ãã«TBBã©ã€ãã©ãªã®ããç¥ãããŠããå©ç¹ã¯ãã¢ã«ãŽãªãºã ããµã€ã¯ã«ãŸãã¯ã¿ã¹ã¯ã«åºã¥ããŠããå Žåãéçºè ãã¢ããªã±ãŒã·ã§ã³ã®ã¹ã±ãŒã©ããªãã£ãšäžŠåå®è¡ã®ãã¯ãŒã容æã«ããããšã§ãã ã©ã€ãã©ãªã®äžè¬çãªæŠèŠã¯ããã¿ãã¬ã®äžã«èŠãããšãã§ããŸãã
å³æžé€šã«ã€ããŠ
ã©ã€ãã©ãªã«ã¯ãäžè¬çãªäžŠåã¢ã«ãŽãªãºã ãã¹ã±ãžã¥ãŒã©ãšã¿ã¹ã¯ãã©ã³ãµãŒãã¹ã¬ããã»ãŒãã³ã³ãããŒãã¡ã¢ãªãããŒãžã£ãŒãåæããªããã£ããªã©ãå«ãŸããŸãïŒå³1ïŒã åºæ¬çãªäžŠåããã°ã©ãã³ã°ãã³ãã¬ãŒãããããã®ãã«ãã£ã³ã°ãããã¯ãšçµã¿åãããŠäœ¿çšââããããšã§ãéçºè
ã¯ãç¹å®ã®ãã©ãããã©ãŒã ã§ãã«ãã¹ã¬ããã¡ã«ããºã ãå®è£
ããåé¡ãæœè±¡åãã䞊åã¢ããªã±ãŒã·ã§ã³ãäœæãããšåæã«ãã³ã¢æ°ã®å¢å ã«å¿ããããã©ãŒãã³ã¹ãå®çŸããŸãã
å³1ïŒããã«ãã£ã³ã°ãããã¯ãIntel Threading Building Blocks
æ¬ãæ§é å䞊åããã°ã©ãã³ã°ã[1]ã¯ãã€ã³ãã«TBBã¢ã«ãŽãªãºã ã«é©ããããã€ãã®æçšãªäžŠåãã¿ãŒã³ã«ã€ããŠèª¬æããŠããŸãã
Intel TBBã©ã€ãã©ãªã¯ãä»»æã®C ++ã³ã³ãã€ã©ã§äœ¿çšã§ããŸãã ãŸãããŠãŒãã£ãªãã£ãã¡ã³ã¯ã¿ãŒã¯ã©ã¹ãèšè¿°ããå¿ èŠããªããããã³ãŒãã®èšè¿°ãšå¯èªæ§ãç°¡çŽ åããã©ã ãåŒãªã©ã®C ++ 11æšæºããµããŒãããŸãã ããŸããŸãªã©ã€ãã©ãªã³ã³ããŒãã³ããåå¥ã«äœ¿çšããããä»ã®äžŠåããã°ã©ãã³ã°ãã¯ãããžãšçµã¿åããããããããšãã§ããŸãã
Intel TBB 4.2ã¯ãWindowsã§ã®Intel Transactional Synchronization ExtensionsïŒIntel TSXïŒãIntel Xeon Phiã³ããã»ããµãŒã®ãµããŒããªã©ãææ°ã®ã¢ãŒããã¯ãã£ãŒæ©èœã®ãµããŒããå«ãæ°æ©èœãå°å ¥ããŸããã Windows Store *ããã³Android * [2ã3]ã®ã¢ããªã±ãŒã·ã§ã³ã®ãµããŒããç»å ŽããŸããã ããã«ãçŸåšã®ã³ã³ããŒãã³ããæ¹åãããŸããïŒããã¥ã¡ã³ããåç §ïŒã ã€ã³ãã«TBB 4.2ã¯ãã€ã³ãã«INDEãã€ã³ãã«ã¯ã©ã¹ã¿ãŒã¹ã¿ãžãªXEãã€ã³ãã«ãã©ã¬ã«ã¹ã¿ãžãªXEãã€ã³ãã«C ++ã¹ã¿ãžãªXEãã€ã³ãã«Composer XEãã€ã³ãã«C ++ Composer XEãªã©ã®è£œåã®äžéšãšããŠãåå¥ã«å ¥æã§ããŸãã
ãªãŒãã³ãœãŒã¹ã©ã€ãã©ãªããŒãžã§ã³ã¯ãã³ãã¥ããã£ã®è²¢ç®ã«ãããããå€ãã®ã¢ãŒããã¯ãã£ãã³ã³ãã€ã©ãããã³ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ããµããŒãããŠããŸãã ãã®ã©ã€ãã©ãªã¯ãSolaris *ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãšãIntelã¢ãŒããã¯ãã£ã³ã³ãã€ã©çšã®Oracle * C ++ã³ã³ãã€ã©ãSPARC *äºæã¢ãŒããã¯ãã£ãIBM * Blue Gene *ã¹ãŒããŒã³ã³ãã¥ãŒã¿ãããã³PowerPC *äºæã¢ãŒããã¯ãã£çšã®C ++ã³ã³ãã€ã©ã§åäœããŸãã ãŸããARM *äºæã¢ãŒããã¯ãã£ãFreeBSD *ãRobot *ãããã³GCC *ã³ã³ãã€ã©ã«çµã¿èŸŒãŸããã¢ãããã¯æäœããµããŒãããä»ã®å€ãã®ãã©ãããã©ãŒã ã®Android *ãWindows Phone * 8ãããã³Windows RT *ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã§ãåäœããŸãã ãã®åºç¯ãªã¯ãã¹ãã©ãããã©ãŒã ã¢ãããŒãã«ãããIntel TBBã©ã€ãã©ãªã䜿çšããŠäœæãããã¢ããªã±ãŒã·ã§ã³ã¯ãåºæ¬çãªã¢ã«ãŽãªãºã ãæžãæããããšãªããä»ã®å€ãã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãŸãã¯ã¢ãŒããã¯ãã£ã«ç§»æ€ã§ããŸãã
å³1ïŒããã«ãã£ã³ã°ãããã¯ãIntel Threading Building Blocks
æ¬ãæ§é å䞊åããã°ã©ãã³ã°ã[1]ã¯ãã€ã³ãã«TBBã¢ã«ãŽãªãºã ã«é©ããããã€ãã®æçšãªäžŠåãã¿ãŒã³ã«ã€ããŠèª¬æããŠããŸãã
- parallel_for ïŒããããã¹ãã³ã·ã«ïŒå€æ¬¡å ããŒã¿ããŒãã«ïŒ
- parallel_reduceãparallel_scan ïŒåæžïŒåæžïŒãã¹ãã£ã³ïŒéšååæžã®èšç®ïŒ
- parallel_do ïŒworkpileïŒå®è¡éå§æã«èŠçŽ æ°ãäžæãªå€æ¬¡å ããŒã¿ããŒãã«ïŒ
- parallel_pipeline ïŒãã€ãã©ã€ã³
- parallel_invokeãtask_group ïŒfork-joinãã¿ãŒã³
- flow_graph ïŒã°ã©ããã³ãã¬ãŒãã®èšç®
Intel TBBã©ã€ãã©ãªã¯ãä»»æã®C ++ã³ã³ãã€ã©ã§äœ¿çšã§ããŸãã ãŸãããŠãŒãã£ãªãã£ãã¡ã³ã¯ã¿ãŒã¯ã©ã¹ãèšè¿°ããå¿ èŠããªããããã³ãŒãã®èšè¿°ãšå¯èªæ§ãç°¡çŽ åããã©ã ãåŒãªã©ã®C ++ 11æšæºããµããŒãããŸãã ããŸããŸãªã©ã€ãã©ãªã³ã³ããŒãã³ããåå¥ã«äœ¿çšããããä»ã®äžŠåããã°ã©ãã³ã°ãã¯ãããžãšçµã¿åããããããããšãã§ããŸãã
Intel TBB 4.2ã¯ãWindowsã§ã®Intel Transactional Synchronization ExtensionsïŒIntel TSXïŒãIntel Xeon Phiã³ããã»ããµãŒã®ãµããŒããªã©ãææ°ã®ã¢ãŒããã¯ãã£ãŒæ©èœã®ãµããŒããå«ãæ°æ©èœãå°å ¥ããŸããã Windows Store *ããã³Android * [2ã3]ã®ã¢ããªã±ãŒã·ã§ã³ã®ãµããŒããç»å ŽããŸããã ããã«ãçŸåšã®ã³ã³ããŒãã³ããæ¹åãããŸããïŒããã¥ã¡ã³ããåç §ïŒã ã€ã³ãã«TBB 4.2ã¯ãã€ã³ãã«INDEãã€ã³ãã«ã¯ã©ã¹ã¿ãŒã¹ã¿ãžãªXEãã€ã³ãã«ãã©ã¬ã«ã¹ã¿ãžãªXEãã€ã³ãã«C ++ã¹ã¿ãžãªXEãã€ã³ãã«Composer XEãã€ã³ãã«C ++ Composer XEãªã©ã®è£œåã®äžéšãšããŠãåå¥ã«å ¥æã§ããŸãã
ãªãŒãã³ãœãŒã¹ã©ã€ãã©ãªããŒãžã§ã³ã¯ãã³ãã¥ããã£ã®è²¢ç®ã«ãããããå€ãã®ã¢ãŒããã¯ãã£ãã³ã³ãã€ã©ãããã³ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ããµããŒãããŠããŸãã ãã®ã©ã€ãã©ãªã¯ãSolaris *ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãšãIntelã¢ãŒããã¯ãã£ã³ã³ãã€ã©çšã®Oracle * C ++ã³ã³ãã€ã©ãSPARC *äºæã¢ãŒããã¯ãã£ãIBM * Blue Gene *ã¹ãŒããŒã³ã³ãã¥ãŒã¿ãããã³PowerPC *äºæã¢ãŒããã¯ãã£çšã®C ++ã³ã³ãã€ã©ã§åäœããŸãã ãŸããARM *äºæã¢ãŒããã¯ãã£ãFreeBSD *ãRobot *ãããã³GCC *ã³ã³ãã€ã©ã«çµã¿èŸŒãŸããã¢ãããã¯æäœããµããŒãããä»ã®å€ãã®ãã©ãããã©ãŒã ã®Android *ãWindows Phone * 8ãããã³Windows RT *ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã§ãåäœããŸãã ãã®åºç¯ãªã¯ãã¹ãã©ãããã©ãŒã ã¢ãããŒãã«ãããIntel TBBã©ã€ãã©ãªã䜿çšããŠäœæãããã¢ããªã±ãŒã·ã§ã³ã¯ãåºæ¬çãªã¢ã«ãŽãªãºã ãæžãæããããšãªããä»ã®å€ãã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãŸãã¯ã¢ãŒããã¯ãã£ã«ç§»æ€ã§ããŸãã
次ã«ãã©ã€ãã©ãªã®ããã€ãã®ç¹å®ã®éšåã«çŠç¹ãåœãŠãŸãã æåã«ã ãããŒã°ã©ãã®æŠèŠããããŸã ãããã¯ãIntel TBB 4.0以éã§å©çšå¯èœã§ãã 次ã«ãã€ã³ãã«TBB 4.2ã§æåã«ãªãªãŒã¹ãããã©ã€ãã©ãªã®2ã€ã®ã³ã³ããŒãã³ãã«ã€ããŠèª¬æããŸãã ãããã¯ãIntel Transactional Synchronization ExtensionsïŒIntel TSXïŒãã¯ãããžãŒãšãã¿ã¹ã¯ã®äžŠè¡æ§ãšåé¢ã®é«åºŠãªå¶åŸ¡ãšç®¡çãæäŸãããŠãŒã¶ãŒç®¡çã¿ã¹ã¯ã¢ãªãŒãã掻çšããææ©çããã¯ã§ãã
ã°ã©ãã®èšç®
ã€ã³ãã«TBBã©ã€ãã©ãªã¯ã«ãŒã䞊ååã§æåã§ãããèšç®ã°ã©ãã€ã³ã¿ãŒãã§ã€ã¹[4]ã¯ãããŒã¿ããã³/ãŸãã¯å®è¡äŸåã°ã©ãã«åºã¥ãã¢ã«ãŽãªãºã ã®é«éãã€å¹ççãªå®è£ ã®æ©èœãæ¡åŒµããéçºè ãã¢ããªã±ãŒã·ã§ã³ã§ããé«ãã¬ãã«ã§äžŠååŠçã䜿çšã§ããããã«ããŸãã
ããšãã°ãå³4ã«ç€ºãããã«ã4ã€ã®æ©èœãé çªã«å®è¡ããåçŽãªã¢ããªã±ãŒã·ã§ã³ãèããŠã¿ãŸãããã 2ïŒaïŒã ã«ãŒã䞊ååã¢ãããŒãã¯ãéçºè ãparallel_forãparallel_reduceãªã©ã®ã¢ã«ãŽãªãºã ã䜿çšããŠãããã®åé¢æ°ã䞊ååããããšãæ€èšã§ããããšãæå³ããŸãã ããã§ååãªå ŽåããããŸãããä»ã®å Žåã§ã¯ååã§ã¯ãªãå ŽåããããŸãã ããšãã°ãå³ å³2ïŒbïŒã¯ãé¢æ°Bãšé¢æ°Dããµã€ã¯ã«ã§äžŠååã§ããããšã瀺ããŠããŸããããã®å Žåãå®è¡æéã¯ççž®ãããŸãããçç£æ§ã®åäžãããã§ãååã§ãªãå Žåã¯ã©ãã§ããããã
å³ 2ïŒäžŠè¡æ§ã®ããŸããŸãªåœ¢åŒã®ç°¡åãªäŸ
é¢æ°åŒã³åºãã«ã¯ã次ã®ãããªé床ã®å¶éã課ããããå ŽåããããŸããé¢æ°åŒã³åºãã®é åºã¯ãå®å šã§ã¯ãªããé¢æ°éã®éšåçãªäŸåé¢ä¿ã®å Žåã§ããå³å¯ã«é çªã«å®çŸ©ããå¿ èŠããããŸãã å³ 2ïŒaïŒé¢æ°ã¯ãåã®å®è¡äžã«ãã¹ãŠã®å ¥åå€ãåãåã£ãåŸã«ã®ã¿é¢æ°ãå®è¡ãããããã«ãéçºè ã«ãã£ãŠäœæãããŸãã ããããé¢æ°BãšCãé¢æ°Aã§èšç®ãããããŒã¿ã«äŸåããé¢æ°Cãé¢æ°Bã®ããŒã¿ã«äŸåããªãå Žåã¯ã©ãã§ããããïŒ å³ 2ïŒcïŒã¯ãã°ã©ããšã«ãŒãã®äžŠååã«ãããã®äŸã®å®è£ ã瀺ããŠããŸãã ãã®å®è£ ã§ã¯ããµã€ã¯ã«ã¬ãã«ã§ã®äžŠååã䜿çšãããå®å šãªé åºä»ããéšåçãªé åºä»ãã«çœ®ãæããããŸããããã«ãããé¢æ°BãšCãåæã«å®è¡ã§ããŸãã
ã€ã³ãã«TBBãããŒã°ã©ãã€ã³ã¿ãŒãã§ã€ã¹ã«ãããéçºè ã¯ã°ã©ãã¬ãã«ã®åæå®è¡æ§ãç°¡åã«è¡šçŸã§ããŸãã ãã«ãã¡ãã£ã¢åŠçãã²ãŒã ãéèããã³é«æ§èœã³ã³ãã¥ãŒãã£ã³ã°ããã«ã¹ã±ã¢ã³ã³ãã¥ãŒãã£ã³ã°ãªã©ãå€ãã®åéã§èŠãããããŸããŸãªã¿ã€ãã®ã°ã©ãããµããŒãããŸãã ãã®ã€ã³ã¿ãŒãã§ã€ã¹ã¯ã©ã€ãã©ãªã§å®å šã«ãµããŒããããŠãããIntel TBB 4.0以éã§äœ¿çšã§ããŸãã
Intel TBBãããŒã°ã©ãã䜿çšããå Žåãèšç®ã¯ããŒãã§è¡šããããããã®ããŒãéã®éä¿¡ãã£ãã«ã¯ãšããžã§è¡šãããŸãã ãŠãŒã¶ãŒã¯ãšããžã䜿çšããŠãããŒããå®è¡ãã¥ãŒã«å ¥ããéã«èæ ®ããå¿ èŠãããäŸåé¢ä¿ãæå®ããIntel TBBã¿ã¹ã¯ã¹ã±ãžã¥ãŒã©ãã°ã©ãããããžã¬ãã«ã§äžŠååŠçãå®è£ ã§ããããã«ããŸãã ã°ã©ãå ã®ããŒããã¡ãã»ãŒãžãåä¿¡ãããšããã®ã¡ãã»ãŒãžã§ãã¡ã³ã¯ã¿ãŒãå®è¡ããã¿ã¹ã¯ã¯ãIntel TBBã¹ã±ãžã¥ãŒã©ãŒã«ããå®è¡ã®ããã«ãã¥ãŒã«å ¥ããããŸãã
ãããŒã°ã©ãã€ã³ã¿ãŒãã§ã€ã¹ã¯ãããã€ãã®ç°ãªãã¿ã€ãã®ããŒãããµããŒãããŸãïŒå³3ïŒïŒãŠãŒã¶ãŒå®çŸ©æ©èœãå®è¡ããæ©èœããŒããã°ã©ããééããã¡ãã»ãŒãžãæŽçããã³ãããã¡ãªã³ã°ããããã«äœ¿çšã§ãããããã¡ãªã³ã°ããŒããã¢ã°ãªã²ãŒã·ã§ã³/ãã¢ã°ãªã²ãŒã·ã§ã³ããŒããã¡ãã»ãŒãžã®æ¥ç¶ãŸãã¯åæãããã³ãã®ä»ã®æçšãªããŒãã ãŠãŒã¶ãŒã¯ããããã®ããŒãã®ãªããžã§ã¯ãããšããžã§æ¥ç¶ããŠããããã®éã®äŸåé¢ä¿ã瀺ãããããã®ããŒãã§äœæ¥ãå®è¡ãããªããžã§ã¯ããæäŸããŸãã
å³ 3ïŒãããŒã°ã©ãã§ãµããŒããããããŒãã®ã¿ã€ã
åçŽãªãããŒã°ã©ãã¢ããªã±ãŒã·ã§ã³ãHello Worldãã®ãœãŒã¹ã³ãŒããæ€èšããŠãã ããã ãã®äŸã¯éåžžã«åçŽã§ããã䞊ååŠçã¯å«ãŸããŠããŸãããããã®ã€ã³ã¿ãŒãã§ã€ã¹ã®æ§æã瀺ããŠããŸãã ãã®äŸã§ã¯ãã©ã ãåŒã䜿çšããŠã helloãšworldã® 2ã€ã®ããŒããäœæããããããããHelloããšãWorldããåºåãããŸãã ã¿ã€ãcontinue_nodeã®åããŒãã¯ãã€ã³ã¿ãŒãã§ãŒã¹ã«ãã£ãŠæäŸãããã¿ã€ããæã€é¢æ°ããŒãã§ãã make_edgeåŒã³åºãã¯ã helloããŒããšworldããŒãã®éã«ãšããžãäœæããŸãã helloããŒãã«ãã£ãŠèµ·åãããã¿ã¹ã¯ãå®äºãããã³ã«ã ã¯ãŒã«ãããŒãã«ã¡ãã»ãŒãžãéä¿¡ããã¿ã¹ã¯ãå®è¡ããŠã©ã ãåŒãå®è¡ããŸãã
#include "tbb/flow_graph.h" #include <iostream> using namespace std; using namespace tbb::flow; int main() { graph g; continue_node< continue_msg> hello( g, []( const continue_msg &) { cout << "Hello"; } ); continue_node< continue_msg> world( g, []( const continue_msg &) { cout << " World\n"; } ); make_edge(hello, world); hello.try_put(continue_msg()); g.wait_for_all(); return 0; }
äžèšã®ã³ãŒãã§ã¯ã hello.try_putïŒcontinue_msgïŒïŒïŒãåŒã³åºããšãã¡ãã»ãŒãžãhelloããŒãã«éä¿¡ããããªããžã§ã¯ãæ¬äœãå®è¡ããã¿ã¹ã¯ãåŒã³åºãããŸãã ã¿ã¹ã¯ãå®äºãããšã ã¯ãŒã«ãããŒãã«ã¡ãã»ãŒãžãéä¿¡ãããŸãã ããŒãã«ãã£ãŠéå§ããããã¹ãŠã®ã¿ã¹ã¯ãçµäºãããšãã«ã®ã¿ã g.wait_for_allïŒïŒé¢æ°ããã®æ»ããå®è¡ãããŸãã
Intel TBBãããŒã°ã©ãã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšãããšãæ°åã®ããŒãããšããžãã«ãŒãããã®ä»ã®èŠçŽ ãå«ãéåžžã«è€éãªã°ã©ããããã°ã©ã ã§ããŸãã å³ å³4ã¯ãã³ã¬ã¹ããŒå解ã®2ã€ã®å®è£ ã°ã©ãã®èŠèŠçè¡šçŸã瀺ããŠããŸããããã¯ã[5]ã§èŠã€ãã£ããã®ãšåæ§ã®ã¢ã«ãŽãªãºã ã䜿çšããŠããŸãã å³ 4ïŒaïŒIntel Math Kernel LibraryïŒIntel MKLïŒ dpotf2m ã dtrsm ã dgemm ãããã³dsyrkã®åé¢æ°åŒã³åºãã¯ãã°ã©ãå ã®åå¥ã®ããŒãã§ãã ãã®å Žåãã°ã©ãã¯å·šå€§ã§ãè¡åãããã¯ããšã«å€ãã®ããŒãããããŸãããé¢æ°åŒã³åºããããŒããšãšããžã®äœæã«çœ®ãæããããšã«ãããæåã®é£ç¶ãããã¹ããããã³ã¬ã¹ããŒå解ãµã€ã¯ã«ãå€æŽããããšã§ç°¡åã«å®è£ ã§ããŸãã ãã®ã°ã©ãã§ã¯ããšããžã¯äŸåé¢ä¿ã瀺ãããã«äœ¿çšãããŸãã åããŒãã¯ãäŸåãããã¹ãŠã®ããŒããå®è¡ããããŸã§åŸ æ©ããŸãã ãã®ã°ã©ãã§äžŠååãã©ã®ããã«å®è£ ãããŠããããç°¡åã«ç¢ºèªã§ããŸãã
å³ 4ïŒãããŒã°ã©ãã€ã³ã¿ãŒãã§ã€ã¹ã«åºã¥ãã³ã¬ã¹ããŒå解ã®2ã€ã®äžŠåå®è£
å³ 4ïŒaïŒæåéå·¡åã°ã©ãã®äœ¿çš
å³ 4ïŒbïŒã³ã³ãã¯ããªããŒã¿äŸåã°ã©ãã®äœ¿çš
å³ 4ïŒaïŒæåéå·¡åã°ã©ãã®äœ¿çš
å³ 4ïŒbïŒã³ã³ãã¯ããªããŒã¿äŸåã°ã©ãã®äœ¿çš
å³ å³4ïŒbïŒã¯ã ãããŒã°ã©ãã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšããŠå®è£ ããããšãã§ãã代æ¿ããŒãžã§ã³ã瀺ããŠããŸãã ãã®å°ãããŠã³ã³ãã¯ããªããŒãžã§ã³ã®ã°ã©ãã«ã¯ãã€ã³ãã«MKLã©ã€ãã©ãªã®å¿ èŠãªãã¹ãŠã®é¢æ°ãåŒã³åºã責任ãããudinããŒãã®ã¿ããããŸãã ãã®å®è£ ã§ã¯ããããã¯ã¯ã°ã©ãå ã®ããŒãéã§ã¡ãã»ãŒãžãšããŠéä¿¡ãããŸãã ããŒããç¹å®ã®ã¿ã€ãã®ãããã¯ã®ã»ãããåãå ¥ãããšããããã®ãããã¯ãåŠçããã¿ã¹ã¯ãåŒã³åºããŠãããæ°ããçæããããããã¯ãä»ã®ããŒãã«è»¢éããŸãã ãã®ãããªã°ã©ãã®äžŠååã¯ãåã°ã©ãããŒãã®ãªããžã§ã¯ãã®å€ãã®ã€ã³ã¹ã¿ã³ã¹ãåæã«å®è¡ããã©ã€ãã©ãªã®æ©èœã«ããå®è£ ãããŸãã
å®è£ ã®è©³çŽ°ã¯å³ã§èª¬æããŠããŸãã 4ã¯ãã®èšäºã®ç¯å²å€ã§ã;ãã®äŸã¯ãIntel TBBãããŒã°ã©ãã€ã³ã¿ãŒãã§ã€ã¹ã匷åãã€æè»ãªæœè±¡åã¬ãã«ã§ããããšã瀺ããŠããŸãã äŸãã°ãå³4ïŒaïŒã®ããã«ã倧ããªæåé埪ç°ã°ã©ããäœæããããã«äœ¿çšã§ããŸããéçºè ã¯ãã€ã³ãã«MKLã©ã€ãã©ãªãŒã®åŒã³åºãããšã«å°çšããŒããäœæããŸãã äžæ¹ãIntel TBBãããŒã°ã©ãã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšãããšãå³5ã«ç€ºãããã«ãã«ãŒããšæ¡ä»¶ä»ãå®è¡ãå«ãã³ã³ãã¯ããªããŒã¿äŸåã°ã©ããäœæã§ããŸãã 4ïŒbïŒã
ãããŒã°ã©ãã€ã³ã¿ãŒãã§ã€ã¹ã®è©³çŽ°ã«ã€ããŠã¯ãIntel TBBãªãã¡ã¬ã³ã¹ã¬ã€ããåç §ããŠãã ããã
èšäºã®æ¬¡ã®ååã§ã¯ãIntel Transactional Synchronization ExtensionsïŒIntel TSXïŒãã¯ãããžãŒãå©çšããææ©çããã¯ãšã䞊ååã¬ãã«ãšã¿ã¹ã¯åé¢ã®é«åºŠãªå¶åŸ¡ãšç®¡çãæäŸãããŠãŒã¶ãŒç®¡çã®ã¿ã¹ã¯ã¢ãªãŒããåãäžããŸãã ã
ç¶ç¶ããã«ã¯...
æžèª
[1] Michael McCoolãArch RobisonãJames Reindersãæ§é å䞊åããã°ã©ãã³ã°ã parallelbook.com
[2] Vladimir PolinããAndroid *ãã¥ãŒããªã¢ã«ïŒIntel Threading Building Blocksã䜿çšãããã«ãã¹ã¬ããã¢ããªã±ãŒã·ã§ã³ã®äœæãã software.intel.com/en-us/android/articles/android-tutorial-writing-a-multithreaded-application-using-intel-threading-building-blocks
[3] Vladimir PolinããWindows * 8ãã¥ãŒããªã¢ã«ïŒWindowsã¹ãã¢çšã®ãã«ãã¹ã¬ããã¢ããªã±ãŒã·ã§ã³ã®äœæ* Intel Threading Building Blocksã䜿çšãã software.intel.com/en-us/blogs/2013/01/14/windows-8-tutorial-writing-a-multithreaded-application-for-the-windows-store-using
[4] Michael J. VossããIntel Threading Building Blocks Flow Graphãã
å士 Dobb'sã2011幎10æã www.drdobbs.com / tools / the-intel-threading-building-blocks-flow / 231900177
[5] Aparna ChandramowlishwaranãKathleen Knobeãããã³Richard Vuducããããã©ãŒãã³ã¹
é«æ§èœãã«ãã³ã¢ã³ã³ãã¥ãŒãã£ã³ã°ã·ã¹ãã ã§ã®åæã³ã¬ã¯ã·ã§ã³ã®è©äŸ¡ãã
2010䞊åããã³åæ£åŠçã«é¢ããã·ã³ããžãŠã ïŒIPDPSïŒã2010幎4æã
[2] Vladimir PolinããAndroid *ãã¥ãŒããªã¢ã«ïŒIntel Threading Building Blocksã䜿çšãããã«ãã¹ã¬ããã¢ããªã±ãŒã·ã§ã³ã®äœæãã software.intel.com/en-us/android/articles/android-tutorial-writing-a-multithreaded-application-using-intel-threading-building-blocks
[3] Vladimir PolinããWindows * 8ãã¥ãŒããªã¢ã«ïŒWindowsã¹ãã¢çšã®ãã«ãã¹ã¬ããã¢ããªã±ãŒã·ã§ã³ã®äœæ* Intel Threading Building Blocksã䜿çšãã software.intel.com/en-us/blogs/2013/01/14/windows-8-tutorial-writing-a-multithreaded-application-for-the-windows-store-using
[4] Michael J. VossããIntel Threading Building Blocks Flow Graphãã
å士 Dobb'sã2011幎10æã www.drdobbs.com / tools / the-intel-threading-building-blocks-flow / 231900177
[5] Aparna ChandramowlishwaranãKathleen Knobeãããã³Richard Vuducããããã©ãŒãã³ã¹
é«æ§èœãã«ãã³ã¢ã³ã³ãã¥ãŒãã£ã³ã°ã·ã¹ãã ã§ã®åæã³ã¬ã¯ã·ã§ã³ã®è©äŸ¡ãã
2010䞊åããã³åæ£åŠçã«é¢ããã·ã³ããžãŠã ïŒIPDPSïŒã2010幎4æã