ç§åŠçãªé«æ§èœã³ã³ãã¥ãŒãã£ã³ã°ã®åéã«ãããFPGAã®ã¢ããªã±ãŒã·ã§ã³ã«ã€ããŠãHabrã«èŽè¡ã«äŒããæºåã¯ãã¹ãŠæŽã£ãŠããŸãã ãããŠããã®åé¡ã§ãã¯ãããããã®ããã©ãŒãã³ã¹ã ãã§ãªããèšç®é床ã®é¢ã§ãGPUïŒNvidia K40ïŒãå€§å¹ ã«äžåãããã©ãŒãã³ã¹ãå®çŸããæ¹æ³ã«ã€ããŠèª¬æããŸããã PCIeãä»ããŠãã¹ãã³ã³ãã¥ãŒã¿ãŒã«æ¥ç¶ãããã¶ã€ãªã³ã¯ã¹Virtex-7 2000tãããã¯ãFPGAãã©ãããã©ãŒã ãšããŠäœ¿çšãããŸããã ããŒããŠã§ã¢ã³ã³ãã¥ãŒãã£ã³ã°ã«ãŒãã«ãäœæããããã«ãC ++èšèªïŒVivado HLSïŒã䜿çšãããŸããã
ã«ããã®äžã«ã¯ãå ã®èšäºã®ããã¹ãããããŸãã ããã«ãéåžžèµ·ããããã«ãæåã«ããããã¹ãŠå¿ èŠãªçç±ãšã¢ãã«ãé·ã説æãããããããèªãæå¿ããªãå Žåã¯ãããã«å®è£ ã«é²ã¿ãå¿ èŠã«å¿ããŠåŸã§ã¢ãã«ãèŠãããšãã§ããŸãã äžæ¹ã§ãã¢ãã«ã«ç²ŸéããŠããªããŠããèªè ã¯FPGAã«ã©ã®ãããªè€éãªèšç®ãå®è£ ã§ãããã®å°è±¡ãåŸãããšãã§ããŸããã
泚é
ãã®ãã¯ã€ãããŒããŒã§ã¯ãCèšèªVivado HLSã®é«ã¬ãã«ãã©ã³ã¹ã¬ãŒã¿ãŒã䜿çšããŠãã¶ã€ãªã³ã¯ã¹Virtex-7ããã°ã©ããã«ããžãã¯éç©åè·¯ïŒFPGAïŒãããã§ãã©ãŠã³ãã€ããã¯ã¹æ³ã䜿çšããã¿ã³ãã¯è³ªåŸ®å°ç®¡è§£éåã®èšç®ã®ããŒããŠã§ã¢å®è£ ãæ€èšããŸãã FPGAå®è£ ã¯ãããã©ãŒãã³ã¹ãšãšãã«ã®ãŒå¹çã®åºæºã«åŸã£ãŠãIntel Xeonãã«ãã³ã¢ããã»ããµããã³Nvidia K40 GPUã§ã®åãã¢ã«ãŽãªãºã ã®äžŠåå®è£ ãšæ¯èŒãããŸãã ãã®ã¢ã«ãŽãªãºã ã¯ãã©ãŠã³æéã§åäœãããããå€æ°ã®æ£èŠååžä¹±æ°ãå¿ èŠã§ãã å ã®ã·ãªã¢ã«ã³ãŒãã¯ãOpenMPã䜿çšãããã«ãã³ã¢ã¢ãŒããã¯ãã£ãGPUãããã³OpenCLã䜿çšããŠæé©åãããFPGAãžã®å®è£ ã¯ãé«ã¬ãã«ãã©ã³ã¹ã¬ãŒã¿ãŒVivado HLSãä»ããŠååŸãããŸããã ãã®è«æã¯ãFPGAãžã®å®è£ ãCPUããã17åãGPUããã11åéãããšã瀺ããŠããŸãã ãšãã«ã®ãŒå¹çïŒã¯ãããããã®ããã©ãŒãã³ã¹ïŒã®ç¹ã§ã¯ãFPGAã¯CPUã®160åãGPUã®80åã§ããã FPGAå éã¢ããªã±ãŒã·ã§ã³ã¯ãSDKã䜿çšããŠéçºãããŸãããSDKã«ã¯ãå®æããFPGAãããžã§ã¯ããå«ãŸããŸãããã®ãããžã§ã¯ãã«ã¯ããã¹ãã³ã³ãã¥ãŒã¿ãŒãšã®éä¿¡çšã®PCI Expressã€ã³ã¿ãŒãã§ãŒã¹ãšããã¹ãã¢ããªã±ãŒã·ã§ã³ãšFPGAã¢ã¯ã»ã©ã¬ãŒã¿ãŒãšã®éä¿¡çšã®ãœãããŠã§ã¢ã©ã€ãã©ãªããããŸãã æçµéçºè ããã¯ãVivado HLSç°å¢ã§Cã¢ã«ãŽãªãºã ã®ã³ã³ãã¥ãŒãã£ã³ã°ã³ã¢ãéçºããã ãã§æžã¿ãç¹å¥ãªFPGAéçºã¹ãã«ã¯å¿ èŠãããŸããã§ããã
ã¯ããã«
é«æ§èœã³ã³ãã¥ãŒãã£ã³ã°ã¯ãã¯ã©ã¹ã¿åããã³/ãŸãã¯ããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã¿ãåããããã»ããµïŒCPUïŒã§å®è¡ãããŸã-ãããªã«ãŒãïŒGPUïŒãŸãã¯ããã°ã©ããã«ããžãã¯éç©åè·¯ïŒFPGAïŒäžã®ã°ã©ãã£ãã¯ããã»ããµ[1]ã ææ°ã®ããã»ããµèªäœã¯ãé«æ§èœã³ã³ãã¥ãŒãã£ã³ã°ã®åªãããã©ãããã©ãŒã ã§ãã CPUã®å©ç¹ã«ã¯ãå ±éã®ã³ããŒã¬ã³ããã£ãã·ã¥ã¡ã¢ãªãåãããã«ãã³ã¢ã¢ãŒããã¯ãã£ããã¯ãã«åœä»€ã®ãµããŒããé«é »åºŠãããã³ãœãããŠã§ã¢ããŒã«ãã³ã³ãã€ã©ãã©ã€ãã©ãªã®èšå€§ãªã»ããããããé«ãããã°ã©ãã³ã°ã®æè»æ§ãæäŸããŸãã GPUãã©ãããã©ãŒã ã®é«æ§èœã¯ãç¬ç«ããããŒããŠã§ã¢ã³ã¢ã§æ°åã®äžŠåã³ã³ãã¥ãŒãã£ã³ã°ã¹ã¬ãããå®è¡ããèœåã«åºã¥ããŠããŸãã GPUçšã®å®è©ã®ããéçºããŒã«ïŒCUDAãOpenCLïŒã䜿çšããŠãGPUãã©ãããã©ãŒã ã䜿çšããŠèšç®ã¿ã¹ã¯ãå®è¡ããããã®ãããå€ãäžããããšãã§ããŸãã ããã«ãããããããè¿å¹ŽãFPGAã¯ãå®äžçã®ã³ã³ãã¥ãŒãã£ã³ã°ã䜿çšããã¿ã¹ã¯ãå«ãã¿ã¹ã¯ãé«éåããããã®ãã©ãããã©ãŒã ãšããŠãŸããŸã䜿çšãããŠããŸã[2]ã FPGAã«ã¯ãCPUããã³GPUãšæ確ã«åºââå¥ãããç¬èªã®ç¹æ§ãã€ãŸãç¹å®ã®èšç®ã¢ã«ãŽãªãºã çšã®ãã€ãã©ã€ã³åãããããŒããŠã§ã¢åè·¯ãæ§ç¯ããæ©èœããããŸãã ãããã£ãŠãFPGAãåäœããã¯ããã¯é床ãïŒCPUããã³GPUãšæ¯èŒããŠïŒèããäœãã«ãããããããäžéšã®FPGAã¢ã«ãŽãªãºã ã§ããé«ãããã©ãŒãã³ã¹ãéæããããšãå¯èœã§ã[3]-[5]ã äžæ¹ãåäœåšæ³¢æ°ãäœãã»ã©æ¶è²»é»åãå°ãªããªããã¯ãããããã®ããã©ãŒãã³ã¹ã¡ããªãã¯ã䜿çšããå ŽåãFPGAã¯CPUããã³GPUãããã»ãšãã©åžžã«å¹ççã§ã[5]ã
é«æ§èœã³ã³ãã¥ãŒãã£ã³ã°ãå¿ èŠãšããå€å žçãªã¢ããªã±ãŒã·ã§ã³ã®1ã€ã¯ãååãŸãã¯ååã®ã·ã¹ãã ã®åããèšç®ããããã«äœ¿çšãããåååååŠæ³ã§ãã ãã®æ¹æ³ã®æ çµã¿ã§ã¯ãååãšååéã®çžäºäœçšã¯ãçžäºäœçšããã³ã·ã£ã«ã䜿çšãããã¥ãŒãã³ååŠã®æ³åã®æ çµã¿ã§èª¬æãããŸãã çžäºäœçšåã®èšç®ã¯å埩çã«å®è¡ãããã·ã¹ãã å ã®å€æ°ã®åå/ååãšå€æ°ã®èšç®ãããå埩ãäžãããããšãèšç®äžã®å€§ããªè€éããè¡šããŸãã åååååŠèšç®ã®é«éåã¯ãã¹ãŒããŒã³ã³ãã¥ãŒã¿ãŒ[6]ãã¯ã©ã¹ã¿ãŒ[7]ãåååååŠèšç®å°çšã®ãã·ã³[8]-[10]ãGPU [11]ããã³FPGAã«åºã¥ãã¢ã¯ã»ã©ã¬ãŒã¿ãŒãåãããã·ã³ãªã©ãããŸããŸãªã·ã¹ãã ã®æç®ã§æ³šç®ãããŠããŸã[12]-[17]ã FPGAã¯å€ãã®å ŽåãåååååŠèšç®çšã®ããŒããŠã§ã¢ã¢ã¯ã»ã©ã¬ãŒã¿ãšããŠç«¶äºåã®ãã代æ¿åã§ããããšãå®èšŒãããŠããŸãããçŸåšãFPGAãã©ãããã©ãŒã ã䜿çšããã»ããåçæ§ã®é«ãã¿ã¹ã¯ãšã¢ã«ãŽãªãºã ã«ã€ããŠã®ã³ã³ã»ã³ãµã¹ã¯ãããŸããã ãã®è«æã§ã¯ãåååååŠã®éèŠãªç¹å¥ãªã±ãŒã¹ã§ãããã©ãŠã³åååŠãæ€èšããŸãã åååååŠãšæ¯èŒãããã©ãŠã³åååŠæ³ã®äž»ãªç¹åŸŽã¯ãååã·ã¹ãã ããã倧ãŸãã«ã¢ãã«åãããŠããããšã§ãã ã¢ããªã³ã°ã®åºæ¬ãªããžã§ã¯ãã¯ãåã ã®ååã§ã¯ãªããé«ååã®åã ã®ãã¡ã€ã³ãŸãã¯é«ååå šäœãªã©ã®å€§ããªç²åã§ãã 溶åªååããã®ä»ã®å°ååã¯æ瀺çã«ã¢ãã«åãããŠãããããããã®å¹æã¯ã©ã³ãã ãªåãšããŠèæ ®ãããŸãã ãããã£ãŠãã·ã¹ãã ã®æ¬¡å æ°ãå€§å¹ ã«åæžããããšãã§ããããã«ãããã¢ãã«èšç®ã§ã«ããŒãããæéééãæ¡éãã«å¢ããããšãã§ããŸãã ãã©ãŠã³ãã€ããã¯ã¹ã®åé¡ãå éããããã®ä»£æ¿ãã©ãããã©ãŒã ãšæ¯èŒããŠãFPGAã®æå¹æ§ãç 究ããããã®æç®ã«èšèŒãããŠããè©Šã¿ãèªèããŠããŸããã ãããã£ãŠãæã ã¯ããã©ãŠã³ååŠæ³ã䜿çšãã埮å°ç®¡è§£éåã®ã¢ããªã³ã°ã®åé¡ã®äŸã«ã€ããŠããã®åé¡ã®ç 究ã«çæããŸããã 埮å°ç®¡ã¯ããã¥ãŒããªã³ã¿ã³ãã¯è³ªããæããç现èã®å éšéªšæ Œã®äžéšã§ãããçŽåŸçŽ25 nmãé·ãæ°åããã¡ãŒãã«ããæ°åãã¯ãã³ã®ãã¥ãŒãã§ãã 埮å°ç®¡ã®éèŠãªç¹åŸŽã¯ããã®åçãªäžå®å®æ§ã§ãã éåãšè§£éåã®æ®µéãèªçºçã«åãæ¿ããèœå[18]ã ãã®æåã¯ãäž»ã«çŽ°èåè£äžã®åŸ®å°ç®¡ã«ããæè²äœã®æç²ãšç§»åã«ãšã£ãŠéèŠã§ãã ããã«ã埮å°ç®¡ã¯ã现èå 茞éãç¹æ¯ãšéæ¯ã®åããããã³çŽ°èã®åœ¢ç¶ã®ç¶æã«éèŠãªåœ¹å²ãæãããŸã[19]ã
埮å°ç®¡ã®ä»äºã®æ ¹åºã«ããã¡ã«ããºã ã¯æ°å幎ã«ããã£ãŠç 究ãããŠããŸããããããæè¿ã§ã¯ãèšç®æè¡ã®éçºã«ããã埮å°ç®¡ã®æåãååã¬ãã«ã§èšè¿°ããããšãå¯èœã«ãªããŸããã Brownianãã€ããã¯ã¹æ³ã«åºã¥ããŠç§ãã¡ã®ã°ã«ãŒãã«ãã£ãŠæè¿äœæããã埮å°ç®¡ãã€ããã¯ã¹ã®æã詳现ãªååã¢ãã«ã¯ãCPUã«åºã¥ããŠå®è£ ãããæ°ç§ã®ãªãŒããŒã§åŸ®å°ç®¡ã®éå/解éåæéãèšç®ã§ããããã«ãªããŸãã[20]ã ããã«ããã埮å°ç®¡ã®ãã€ããã¯ã¹ã®å€ãã®éèŠãªåŽé¢ãæããã«ãªããŸããããããã«ãããããããå®éšçã«èŠ³å¯ãããå€ãã®éèŠãªçŸè±¡ã¯çè«çãªèª¬æã®ç¯å²å€ã§ããã ãããã¯ãæ°åç§ããæ°çŸç§ã®æã«åŸ®å°ç®¡ã§çºçããŸã[21]ã ãããã£ãŠãçè«ãšå®éšãçŽæ¥æ¯èŒããããã«ã¯ã埮å°ç®¡ãã€ããã¯ã¹ã®èšç®ãå°ãªããšã1æ¡å éããããšãéåžžã«éèŠã§ãã
ãã®ãã¯ã€ãããŒããŒã§ã¯ãFPGAã§ã®ãã©ãŠã³åŸ®å°ç®¡ãã€ããã¯ã¹ã®èšç®ãå éããå¯èœæ§ã調æ»ããããã©ãŒãã³ã¹ãšãšãã«ã®ãŒå¹çã®åºæºã«åŸã£ãŠ3ã€ã®ç°ãªããã©ãããã©ãŒã ã§åã埮å°ç®¡ãã€ããã¯ã¹ã¢ã«ãŽãªãºã ãå®è£ ããããšã§åŸãããçµæãæ¯èŒããŸãã
æ°åŠã¢ãã«
äžè¬çãªåŸ®å°ç®¡æ§é
æ§é çã«ã¯ã埮å°ç®¡ã¯ããããã£ã©ã¡ã³ããšãã13ã®éãããªãåæ±ã§ãã
å·Šã®å³ã¯ã埮å°ç®¡ã¢ãã«ã®å³ã§ãã ãã¥ãŒããªã³ã®ãµããŠãããã¯ç°è²ã§ç€ºããããããã®éã®çžäºäœçšã®äžå¿ã¯é»ãç¹ã§ç€ºãããŠããŸãã å³åŽã¯ããã¥ãŒããªã³éã®çžäºäœçšã®ãšãã«ã®ãŒããã³ã·ã£ã«ã®ãã¥ãŒã§ãã
åããããã£ã©ã¡ã³ãã¯ããã¥ãŒããªã³ã¿ã³ãã¯è³ªäºéäœããæ§æãããŠããŸãã é£æ¥ããããããã£ã©ã¡ã³ãã¯ãåŽæ¹çµåã«ãã£ãŠäºãã«æ¥ç¶ãããŠããã1ã€ã®ã¢ãããŒã®é·ãã®3/13ã®è·é¢ã ãäºãã«å¯ŸããŠã·ããããŠããããã埮å°ç®¡ã¯ããªã·ãã£ãæã¡ãŸãã éåäžããã¥ãŒããªã³äºéäœã¯ããããã£ã©ã¡ã³ãã®æ«ç«¯ã«ä»çãã埮å°ç®¡ã®ããããã£ã©ã¡ã³ãã¯çŽæ¥ç«äœæ§é ãåãåŸåããããŸãã 解éåäžã埮å°ç®¡ã®ç«¯ã®ããããã£ã©ã¡ã³ãéã®æšªæ¹åã®çµåãç Žå£ãããããããã£ã©ã¡ã³ããå€åŽã«ããããŸãã åæã«ããã¥ãŒããªã³ãªãªãŽããŒãã©ã³ãã ã«è±èœããŸãã
ãã©ãŠã³åååŠãçšãã埮å°ç®¡è§£éåã®ã·ãã¥ã¬ãŒã·ã§ã³
ããã§äœ¿çšããã埮å°ç®¡ã®ååã¢ãã«ã¯ãæåã«[20]ã§æ瀺ãããŸããã ãã®ç 究ã®ç®çã¯ããŸããŸãªã³ã³ãã¥ãŒãã£ã³ã°ãã©ãããã©ãŒã ã®ããã©ãŒãã³ã¹ãæ¯èŒããããšã§ãã£ãããã埮å°ç®¡ã®è§£éåã®ã¿ã®ã¢ããªã³ã°ã«éå®ããŸããã
ç°¡åã«èšãã°ã埮å°ç®¡ã¯ããã¥ãŒããªã³ã¢ãããŒã§ããçç¶ç²åã®ã»ãããšããŠã¢ãã«åãããŸããã ã¢ãããŒã¯ã察å¿ããæŸå°ç¶å¹³é¢ãã€ãŸã 埮å°ç®¡ã®è»žãšå¯Ÿå¿ããããããã£ã©ã¡ã³ããéãå¹³é¢å ã ãããã£ãŠãåã¢ãããŒã®äœçœ®ãšæ¹åã¯ã3ã€ã®åº§æšïŒã¢ãããŒã®äžå¿ã®2ã€ã®ãã«ã«ã座æšãšæ¹åè§ïŒã«ãã£ãŠå®å šã«æ±ºå®ãããŸããã åã¢ãããŒã®è¡šé¢ã«ã¯ã4ã€ã®çžäºäœçšäžå¿ããããŸããã2ã€ã®æšªæ¹åçžäºäœçšäžå¿ãš2ã€ã®çžŠæ¹åçžäºäœçšäžå¿ã§ãã ãã¥ãŒããªã³-ãã¥ãŒããªã³çžäºäœçšã®ãšãã«ã®ãŒã¯ãé£æ¥ãµããŠãããã®è¡šé¢äžã®çžäºäœçšéšäœéã®è·é¢rãšãããããã£ã©ã¡ã³ãå ã®é£æ¥ãã¥ãŒããªã³ã¢ãããŒéã®åŸæè§ã«äŸåããŠããŸããã ãã¥ãŒããªã³äºéäœéã®æšªæ¹åããã³çžŠæ¹åã®çžäºäœçšã¯ã次ã®åœ¢åŒã®ããã³ã·ã£ã«ã«ãã£ãŠæ±ºå®ãããŸããã
ããã§ãAãšbã¯ããã³ã·ã£ã«äºæžã®æ·±ããšãšãã«ã®ãŒéå£ã®é«ãã決å®ããr0ãšdã¯ããã³ã·ã£ã«äºæžã®å¹ ãšããã³ã·ã£ã«å šäœã®åœ¢ç¶ãå®çŸ©ãããã©ã¡ãŒã¿ãŒã§ãã ãã©ã¡ãŒã¿ãŒAã¯ã暪çµåãšçžŠçµåã«å¯ŸããŠç°ãªãå€ããšã£ãããã暪çžäºäœçšã¯çžŠçµåãã匱ããä»ã®ãã¹ãŠã®ãã©ã¡ãŒã¿ãŒã¯äž¡æ¹ã®ã¿ã€ãã®çµåã§äžèŽããŸããïŒãã©ã¡ãŒã¿ãŒãšãã®å€ã®å®å šãªãªã¹ãã¯ã[20]ã®è¡š1ã«ç€ºãããŠããŸãïŒã äºéäœå éšã®çžŠæ¹åã®çžäºäœçšã¯ãäºæ¬¡ãšãã«ã®ãŒããã³ã·ã£ã«u_rãæã€é£ç¶ãããšããŠã¢ãã«åãããŸããã
ããã§ãkã¯ãã¥ãŒããªã³ãšãã¥ãŒããªã³ã®çžäºäœçšã®çµååæ§ã§ãã æ²ããšãã«ã®ãŒgïŒÏïŒã¯ãã¢ãããŒã®çžå¯Ÿå転ã«é¢é£ä»ããããŠããã2次ã®äžå¯è§£ãªé¢æ°ã«ãã£ãŠã説æãããŸããã
ããã§ãÏã¯ããããã£ã©ã¡ã³ãå ã®é£æ¥ãããã¥ãŒããªã³ã¢ãããŒéã®è§åºŠãÏ0ã¯2ã€ã®ã¢ãããŒéã®å¹³è¡¡è§ãBã¯æ²ãåæ§ã§ãã 埮å°ç®¡ã®ç·ãšãã«ã®ãŒã¯æ¬¡ã®ããã«èšè¿°ãããŸããã
ããã§ãnã¯ããããã£ã©ã¡ã³ãçªå·ãiã¯nçªç®ã®ããããã£ã©ã¡ã³ãã®ã¢ãããŒçªå·ãKnã¯nçªç®ã®ããããã£ã©ã¡ã³ãã®ãã¥ãŒããªã³ãµããŠãããã®æ°ã暪æ¹åã®çžäºäœçšv_k_lateralã¯ã¢ãããŒéã®æšªæ¹åã®çžäºäœçšã®ãšãã«ã®ãŒãv_k_longitudinalã¯ãã€ããŒéã®çžŠæ¹åã®çžäºäœçšã®ãšãã«ã®ãŒã§ãã
ã·ã¹ãã ã®é²åã¯ããã©ãŠã³åååŠæ³ã䜿çšããŠèšç®ãããŸãã[22]ã åæã®åŸ®å°ç®¡æ§æã¯ãåããããã£ã©ã¡ã³ãã«12åã®ãã¥ãŒããªã³ã¢ãããŒãå«ãçããã·ãŒããã§ããã MT解éåã®ã¿ãèæ ®ãã平衡è§Ï0 = 0.2 radã®ãã¹ãŠã®ãã¥ãŒããªã³ãã·ãã¥ã¬ãŒãããŸããã içªç®ã®å埩ã§ã®ãã¹ãŠã®ã·ã¹ãã ã¢ãããŒã®åº§æšã¯ã次ã®ããã«è¡šãããŸããã
ããã§ãdtã¯æéã¹ããããU totalã¯ïŒ4ïŒã§è¡šãããk_Bã¯ãã«ããã³å®æ°ãTã¯æž©åºŠãNïŒ0,1ïŒã¯ã¡ã«ã»ã³ã枊ã¢ã«ãŽãªãºã ã«ãã£ãŠçæãããæ£èŠååžããã®ä¹±æ°ã§ã[23]ã γqãšÎ³Ïã¯ãããããååŸr = 2 nmã®çã«å¯ŸããŠèšç®ãããããæãšå転ã®æµæã®ç²æ§ä¿æ°ã§ãã
ç¬ç«ãã座æšq {kãn}ã«é¢ããç·ãšãã«ã®ãŒã®å°é¢æ°ã¯ãé£æ¥ããäºéäœãšäºéäœã®å éšã®çžäºäœçšãšãã«ã®ãŒã®æšªæ¹åã瞊æ¹åæåãããã³æ²ããšãã«ã®ãŒã«ãã£ãŠè¡šãããŸããã
èšç®ãé«éåããããã«ã
ãã¹ãŠã®ãšãã«ã®ãŒåŸé
ïŒ
ãã®ã¿ã¹ã¯ã®ãµã€ãºã¯æ¯èŒçå°ããããšã«æ³šæããŠãã ããã ã¢ãããŒã®12å±€ã®ã¿ãèæ ®ããŸãããããã«ããã156ã«çããç²åã®ç·æ°ãåŸãããŸãããã ããèšç®ã®éèŠæ§ã¯ãŸã£ããæžããŸããã å®éã®èšç®ã§ã¯ãã¢ãããŒã®æåŸã®æ°ã¯ãŒãïŒ10ãªãŒããŒïŒã®äœçœ®ãèšç®ããã ãã§ååã§ãã 埮å°ç®¡ã®æé·ã«äŒŽãã埮å°ç®¡ã®ç«¯ããé ããã¥ãŒããªã³ååã¯å®å®ããåç圢ã圢æããããããèæ ®ããæå³ã¯ãããŸããã
èšç®ã¢ã«ãŽãªãºã ã®æ¬äŒŒã³ãŒã
ã¢ã«ãŽãªãºã ã¯ã0.2 nsã®ã¹ãããã§æéçã«å埩ãããŸãã ååã®3次å 座æšã®é åãšã暪æ¹åïŒæšªæ¹åïŒããã³çžŠæ¹åïŒçžŠæ¹åïŒã®çžäºäœçšã®åã®é åããããŸãã æéã®åå埩ã§ãååã®2ã€ã®ãã¹ãããããµã€ã¯ã«ãé çªã«å®è¡ãããŸããæåã¯çžäºäœçšåãæ¢ç¥ã®åº§æšã«ãã£ãŠèšç®ããã2çªç®ã¯åº§æšèªäœãæŽæ°ãããŸãã çžäºäœçšåãèšç®ãããµã€ã¯ã«ã§ã¯ã3ã€ã®ååã®åº§æšãèªã¿åãå¿ èŠããããŸãã1ã€ã¯äžå€®ã®ååã§ã2ã€ã¯é£æ¥ããŠããŸãïŒãå·Šããšãäžããå³2ãåç §ïŒãèšç®ã®çµæã¯ãäžå€®ãšå·Šã®ååéã®æšªæ¹åã®çžäºäœçšã®åãšãäžå€®ã®çžŠæ¹åã®çžäºäœçšã®åŒ·ãã§ããããŠãããã
å³ 2.埮å°ç®¡ã¢ãã«ã«ãããçžäºäœçšãããµããŠãããã®é 眮
ãã®çµæããã®ãµã€ã¯ã«ã®åŸããã¹ãŠã®ååéã®ãã¹ãŠã®çžäºäœçšåãèšç®ãããŸãã æ¢ç¥ã®åã䜿çšããŠåº§æšãæŽæ°ãããµã€ã¯ã«ã§ã¯ã座æšã®å€åãèšç®ããããã©ãŠã³éåãèæ ®ããããã«ã©ã³ãã ãªå ç®ãèæ ®ãããŸãã ãããã£ãŠãã¢ã«ãŽãªãºã ã®æ¬äŒŒã³ãŒãã¯æ¬¡ã®ããã«èšè¿°ã§ããŸãã
: M = {x, y, teta}. . : M K for t in {0.. K-1} do for i in {0.. 13} // for j in {0.. 12} do // Mc <- M[i,j] Ml <- M[i+1,j] Mu <- M[i,j+1] // (7, 8, 9, 10) F_lat[i,j] <- calc_calteral(Mc, Ml) F_long[i,j] <- calc_long(Mc, Mu) end for end for for i in {0.. 13} for j in {0.. 12} do // (5) M[i,j] <- update_coords(F_lat[i,j], F_long[i,j]) end for end for end for
CPUããã³GPUã§ã®ãœãããŠã§ã¢å®è£
CPUã®å®è£
OpenMPã©ã€ãã©ãªã䜿çšããŠãUbuntu 12.04ãå®è¡ããŠããIntel Xeon E5-2660 2.20GHz CPUã«ã³ãŒãã䞊ååããããšããŸããã 䞊åã»ã¯ã·ã§ã³ã¯ãæéãµã€ã¯ã«ã®åã«å§ãŸããŸããã çžäºäœçšåã®èšç®ãšåº§æšã®æŽæ°ã®ãµã€ã¯ã«ã¯ãomp for scheduleïŒéçïŒãã£ã¬ã¯ãã£ãã䜿çšããŠäžŠååããããµã€ã¯ã«éã«ããªã¢åæãæ¿å ¥ãããŸããã çžäºäœçšåãšåå座æšãå«ãé åã¯ãåã¹ããªãŒã ã«å¯ŸããŠãã©ã€ããŒããšå®£èšãããŸããã
CPUã«èšç®ãå®è£ ãããšãã¿ã¹ã¯ã®ãµã€ãºãå¹æçã«äžŠååã§ããªãããšãããããŸããã 1åã®å埩ã®å®è¡æéã®äžŠåã¹ã¬ããæ°ãžã®äŸåã¯ãå調ã§ã¯ãããŸããã§ããã 1åã®å埩ã§ã®æå°èšç®æéã¯ã2ã€ã®ã¹ã¬ããïŒCPUã³ã¢ïŒã®ã¿ã䜿çšããŠååŸãããŸããã ããã¯ãã¹ããªãŒã ã®æ°ãå¢ãããšãã¹ããªãŒã éã§ããŒã¿ãã³ããŒããããããåæããæéãé·ããªããšããäºå®ã«ãã£ãŠèª¬æãããŸãã åæã«ãåé¡ã®ãµã€ãºã¯éåžžã«å°ãããããã³ã¢ã®æ°ãå¢ããããšã«ããå©åŸã¯ãã®ãªãŒããŒããããè¶ ããŸãã åæã«ãå®éšã¯ããµã€ãºã®å¢å ïŒåŒ±ãã¹ã±ãŒãªã³ã°ïŒã«å¯ŸããŠåé¡ã®ã¹ã±ãŒãªã³ã°ãäžååã§ããããšã瀺ããŸããã åé¡ã®ãµã€ãºãšäžŠåã¹ã¬ããã®æ°ãåæã«å¢å ããŠããèšç®æéã¯ã»ãŒåããŸãŸã§ããã ãã®çµæããã®CPUã§ã®æè¯ã®çµæã¯ã2ã€ã®CPUã³ã¢ã䜿çšããå Žåãæéã®å埩ããšã«22ÎŒsã§ããã çžäºäœçšã®åã®èšç®ãè€éã§ãããããã³ãŒãã¯ãã¯ãã«åãããŸããã§ããã
GPUã®å®è£
Nvidia Tesla K40ã°ã©ãããã»ããµã§OpenCLå®è£ ãéå§ããŸããã çžäºäœçšåãšåº§æšæŽæ°ãèšç®ãããµã€ã¯ã«ã¯äžŠååãããã¡ã€ã³ãµã€ã¯ã«ã¯æéçã«å埩ãããŸããã 2ã€ã®ãªãã·ã§ã³ãå®è£ ãããŸãã-1ã€ããã³ããã€ãã®ã¯ãŒã¯ã°ã«ãŒãããããŸãã æåã®ã±ãŒã¹ã§ã¯ã1ã€ã®äœæ¥é ç®ãåååã«å²ãåœãŠãããŸããã åã¹ããªãŒã ã«ã¯ããããŒååã®åãšåº§æšãèšç®ãããã¿ã€ã ãµã€ã¯ã«ããããŸããã ãã®å Žåãåã®èšç®åŸããã³åº§æšã®æŽæ°åŸã«ããªã¢åæã䜿çšãããŸããã ãã®å Žåããã¹ãã®åå ã¯èšç®ã«å¿ èŠã§ã¯ãªããã³ã¢ã®ç®¡çãšèµ·åã«ã®ã¿é¢äžããŠããŸããã
2çªç®ã®ã±ãŒã¹ã§ã¯ã2ã€ã®ã¿ã€ãã®ãããŒãããã1ã€ã§ã¯1ã€ã®ååã®åãåçŽã«èšç®ããã2ã€ç®ã§ã¯-座æšãæŽæ°ãããŸããã ã¡ã€ã³ã¿ã€ã ã«ãŒãã¯ãã¹ãäžã«ãããã¿ã€ã ã«ãŒãã®åå埩ã§ã«ãŒãã«ã®éå§ãšåæãå¶åŸ¡ããŸããã
1ã€ã®ã°ã«ãŒãã®ãããŒãšãããã®éã®ããªã¢åæã䜿çšããèšç®ã§ãæé«ã®ããã©ãŒãã³ã¹ãåŸãããŸããã æ¬äŒŒä¹±æ°ãžã§ãã¬ãŒã¿ãŒã䜿çšããªãå Žåã5ÎŒs以å ã«1åã®å埩ãèšç®ãããŸããããã¹ãŠã®ãããŒã«1ã€ã®ãžã§ãã¬ãŒã¿ãŒã䜿çšãããå Žåãåäœæéã¯9ÎŒsã«å¢å ããå ±æã¡ã¢ãªãŒããã£ã±ãã«ãªããšã7ã€ã®ç¬ç«ãããžã§ãã¬ãŒã¿ãŒããªã³ã«ãªããèšç®æéã¯æéã®1ã€ã®å埩ã¯14ÎŒsã§ãCPUã§ã®å®è£ ããã1.57åé«éã§ããã
GPUã³ã¢ã®è² è·ã¯1ã€ã®ãã«ãããã»ããµïŒSMïŒã®7ïŒ ã§ããããæ¬äŒŒä¹±æ°ãžã§ãã¬ãŒã¿ãŒã®ãã©ãŒã¹ã座æšãããŒã¿ãããã¡ãŒã®é åãé 眮ãããåèšã¡ã¢ãªã¯100ïŒ ã§ããã ã€ãŸã äžæ¹ã§ãGPUãå®å šã«ããŒãããã«ã¯ã¿ã¹ã¯ãµã€ãºãæããã«å°ããã£ãäžæ¹ã§ãã¿ã¹ã¯ãµã€ãºãå¢å ããå Žåãã°ããŒãã«DDRã¡ã¢ãªã䜿çšããå¿ èŠããããçç£æ§ã®åäžã«éçãçããå¯èœæ§ããããŸããã
FPGAå®è£
ãã©ãããã©ãŒã ã®èª¬æ
FPGAã®èšç®ã¯ãNPO Rostaã補é ããRB-8V7ãã©ãããã©ãŒã ã§è¡ãããŸããã 1Uã©ãã¯ããŠã³ããŠãããã§ãã ãã®ãŠãããã¯ã8ã€ã®ã¶ã€ãªã³ã¯ã¹Virtex-7 2000T FPGAã¯ãªã¹ã¿ã«ã§æ§æãããŠããŸãã åFPGAã«ã¯ã1 GBã®å€éšDDR3ã¡ã¢ãªãšãå éšPCIeã¹ã€ãããžã®PCI Express x4 2.0ã€ã³ã¿ãŒãã§ã€ã¹ããããŸãã ãŠãããã«ã¯ãå ã±ãŒãã«ãä»ãããã¹ãã³ã³ãã¥ãŒã¿ãŒãžã®PCIe x4 3.0ã€ã³ã¿ãŒãã§ã€ã¹ã2ã€ããããã¹ãã³ã³ãã¥ãŒã¿ãŒã«ã€ã³ã¹ããŒã«ãããç¹å¥ãªã¢ããã¿ãŒã«æ¥ç¶ããå¿ èŠããããŸãã
ãã¹ãã³ã³ãã¥ãŒã¿ãŒãšããŠãUbuntu 12.04 LTS OSã§å®è¡ãããŠããIntel Xeon E5-2660 2.20 GHz CPUãæèŒãããµãŒããŒã䜿çšããŸãããOpenMPã䜿çšããCPUã§ã®èšç®ãšåãã§ãã ãã¹ãCPUã§å®è¡ãããŠãããœãããŠã§ã¢ã¯ãRB-8V7ãŠããããPCI Expressãã¹çµç±ã§æ¥ç¶ããã8ã€ã®ç¬ç«ããFPGAããã€ã¹ãšããŠãèªèãããŸãã 次ã«ãCPUãš1ã€ã®FPGA XC7V72000Tã®ã¿ã®çžäºäœçšã«ã€ããŠèª¬æããŸãããã·ã¹ãã ã§ã¯FPGAãç¬ç«ããŠäžŠè¡ããŠäœ¿çšã§ããŸãã
FPGAã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ã¢ããªã±ãŒã·ã§ã³ã¯ãSDKãšæ¬¡ã®ã¢ãã«ã䜿çšããŠéçºãããŸããã ã¡ã€ã³ããã°ã©ã ã¯ãã¹ãã³ã³ãã¥ãŒã¿ãŒã®CPUïŒä»¥äžãåã«CPUãšåŒã³ãŸãïŒã§å®è¡ãããæãèšç®éã®å€ãæé ã§FPGAã¢ã¯ã»ã©ã¬ãŒã¿ãŒã䜿çšããŸãã CPUã¯FPGAã«æ¥ç¶ãããå€éšDDRã¡ã¢ãªãä»ããŠã¢ã¯ã»ã©ã¬ãŒã¿ã«ããŒã¿ã転éããFPGAã®ã³ã³ãã¥ãŒãã£ã³ã°ã³ã¢ã®åäœãå¶åŸ¡ããŸãã ã³ã³ãã¥ãŒãã£ã³ã°ã³ã¢ã¯ãC / C ++ã§äºåã«äœæãããæ€èšŒãããVivado HLSããŒã«ã䜿çšããŠRTLã³ãŒãã«å€æãããŸãã ã³ã³ãã¥ãŒãã£ã³ã°ã³ã¢ã®RTLã³ãŒãã¯ã¡ã€ã³ã®FPGAãããžã§ã¯ãã«æ¿å ¥ãããPCI Expressã³ã¢ãDDRã³ã³ãããŒã©ãŒããããäžã®ãã¹ãªã©ãå¿ èŠãªå¶åŸ¡ããã³ããŒã¿è»¢éããžãã¯ãæ¢ã«å®è£ ããŠããŸãïŒå³3ïŒã ã¡ã€ã³FPGAãããžã§ã¯ãã¯ãããŒããµããŒãããã±ãŒãžïŒBSPïŒãšåŒã°ããããšããããæ©åšã¡ãŒã«ãŒã«ãã£ãŠéçºãããŠããããŠãŒã¶ãŒãå€æŽããå¿ èŠã¯ãããŸããã éå§åŸãHLSã³ã³ãã¥ãŒãã£ã³ã°ã³ã¢èªäœãDDRã¡ã¢ãªã«ã¢ã¯ã»ã¹ããããããåŠçã®ããã«å ¥åããŒã¿ãããã¡ãŒãèªã¿åããããã«èšç®çµæãæžã蟌ã¿ãŸãã C ++èšèªã®ã¬ãã«ã§ã¯ãã¡ã¢ãªã¢ã¯ã»ã¹ã¯ããã€ã³ã¿åã®èšç®ã«ãŒãã«ã®ãããã¬ãã«ã®é¢æ°ã®åŒæ°ãä»ããŠçºçããŸãã
å³ 3. FPGAãããžã§ã¯ãã®ãããã¯å³ã BSPã«å«ãŸãããããã¯ã¯ãéãšé»è²ã§ããŒã¯ãããŠããŸãã ç·ã¯ã³ã³ãã¥ãŒãã£ã³ã°HLSã³ã¢ã瀺ããŸãã ãããžã§ã¯ãã³ã¢ããããã¯ïŒpBlocksïŒã«åå²ããããšãããã¬ãŒã¹äžã«ç©ºéçå¶çŽã課ãããã«ç€ºãããŠããŸãã
é«éåãããã¢ããªã±ãŒã·ã§ã³ãäœæããããã«ãããã€ãã®ã¹ãããã§æ§æãããæ¹æ³è«ãéçºãããŸããã æåã«ãå ã®ã·ãªã¢ã«ã³ãŒããVivado HLSç°å¢ã§ã³ã³ãã€ã«ããããã®æ¹æ³ã§ã³ã³ãã€ã«ãããã³ãŒããåç §ã·ãªã¢ã«ã³ãŒãã®åºåãå€æŽããªãããšãæ€èšŒãããŸããã 次ã«ãäž»èŠãªèšç®éšåãšå éã«é©ããéšåããã®ã³ãŒãããå²ãåœãŠãããŸããã ãã®éšåã¯ãã©ãããŒé¢æ°ã䜿çšããŠã¡ã€ã³ã³ãŒãããåé¢ãããŸããã ãã®åŸããã®ãããªé¢æ°ã®2ã€ã®ã³ããŒãäœæãããäž¡æ¹ã®éšåã®çµæã®ã³ã³ãã©ã€ã¢ã³ã¹ããã§ãã¯ããããžãã¯ãäœæãããŸããã æåã®ã³ããŒã¯Vivado HLSã®ã¢ã«ãŽãªãºã ã®ãªãã¡ã¬ã³ã¹å®è£ ã§ããã2çªç®ã¯RTLã³ãŒããžã®å€æçšã«æé©åãããŸããã æé©åã«ã¯ãåçé åã®ä»£ããã«éçé åã䜿çšãããHLSã«ãŒãã«ãžã®å ¥å/åºåã«ç¹å¥ãªé¢æ°ã䜿çšãããã¡ã¢ãªãç¯çŽããæ¹æ³ãèšç®çµæãåå©çšãããªã©ãã³ãŒãã®æžãæããå«ãŸããŸãã å€æŽã®ãã³ã«ãé¢æ°ã®çµæãåç §å®è£ ã®çµæãšæ¯èŒãããŸããã å¥ã®æé©åæ¹æ³ã¯ãè«ççãªåäœãå€æŽããªãããRTLã³ãŒãã®æçµçãªããã©ãŒãã³ã¹ã«åœ±é¿ãäžããç¹å¥ãªVivado HLSãã£ã¬ã¯ãã£ãã®äœ¿çšã§ãã ãã®æ®µéã§ã¯ãåè·¯ããã©ãŒãã³ã¹ã䜿çšãªãœãŒã¹ãªã©ãCãRTLã«å€æããæºè¶³ã®ããäºåçãªçµæãåŸããããŸã§æ»åšããå¿ èŠããããŸãã
次ã®æ®µéã¯ãã¡ã€ã³ãããžã§ã¯ãã®ã³ã³ããã¹ãå€ã§éçºãããã³ã³ãã¥ãŒãã£ã³ã°ã³ã¢ãVivadoã·ã¹ãã ã«å®è£ ããããšã§ãã ããã§ã®ã¿ã¹ã¯ã¯ãéçºãããã³ã³ãã¥ãŒãã£ã³ã°ã³ã¢å ã§æ¢ã«é¢å©ãããã¶ã€ã³ã®äžæçãªãšã©ãŒããªããããšã§ãã ãã®æ®µéã§äžæçãªãšã©ãŒãçºçããå Žåã¯ãä»ã®å®è£ ãã©ã¡ãŒã¿ãŒãé©çšããããåã®æ®µéã«æ»ã£ãŠC ++ã³ãŒããå€æŽããããä»ã®ãã£ã¬ã¯ãã£ãã䜿çšããŸãã
次ã®æ®µéã§ã¯ãã¡ã€ã³ãããžã§ã¯ããšãã®æéçããã³ç©ºéçå¶éãšãšãã«ãã³ã³ãã¥ãŒãã£ã³ã°ã³ã¢ãå®è£
ããå¿
èŠããããŸãã ãã®æ®µéã§ã¯ãäžæçãªãšã©ãŒããªãããã«ããããšãå¿
èŠã§ãã ãããã芳å¯ãããå Žåãèšç®åè·¯ã®åšæ³¢æ°ãå€æŽãããããããäžã®åè·¯ã®é
眮ã«ä»ã®ç©ºéçå¶éã課ããããåã³åãäžãããããããšãã§ããŸãã
C ++ã³ãŒãã®å€æŽããã³/ãŸãã¯ä»ã®ãã£ã¬ã¯ãã£ãã®äœ¿çšã
éçºã®æçµæ®µéã¯ãããŒããŠã§ã¢ã§å®éã«å®è¡ããCPUã§åç §ã¢ãã«ã䜿çšããŠåŸãããçµæã®ã³ã³ãã©ã€ã¢ã³ã¹ã®ãã§ãã¯ã§ãã çæéã§å®è¡ãããŸãããé·æéå®è¡ãããšïŒCPUãšã®æ¯èŒã§ã¯ãã§ã«åé¡ãããå ŽåïŒãFPGAãœãªã¥ãŒã·ã§ã³ã¯æ£ããçµæãæäŸãããšèããããŠããŸãã
Vivado HLSã®ç°å¢ã§äœæ¥ãã
2ã€ã®Vivado HLSã³ã¢ãäœæ¥ã«äœ¿çšãããŸããïŒå³3ïŒïŒåŸ®å°ç®¡ã®åååååŠã¢ã«ãŽãªãºã ãå®è£ ããã¡ã€ã³ã³ã¢ïŒMTã³ã¢ïŒãããã³æ¬äŒŒä¹±æ°ãçæããããã®ã³ã¢ïŒRANDã³ã¢ïŒã 次ã®çç±ã«ãããã¢ã«ãŽãªãºã ã2ã€ã®ã³ã¢ã«åå²ããå¿ èŠããããŸããã Virtex-7 2000T FPGAã¯ãåžå Žã®Virtex-7ãã¡ããªã§æ倧ã®FPGAãããã§ãã å®éã«ã¯ãããŸããŸãªååç©ã«ãã£ãŠåºæ¿äžã«æ¥ç¶ãããåäžã®ãããæ¬äœã«çµåããã4ã€ã®ã·ãªã³ã³çµæ¶ã§æ§æãããŠããŸãã ã¶ã€ãªã³ã¯ã¹ã®çšèªã§ã¯ããã®ãããªæ°Žæ¶ã¯ããããSLRïŒã¹ãŒããŒããžãã¯é åïŒãšåŒã°ããŸãã ãã®ãããªå€§èŠæš¡ãªFPGAã䜿çšããå ŽåãSLRã®å¢çãè¶ããåè·¯ã«ã¯åžžã«åé¡ããããŸãã ã¶ã€ãªã³ã¯ã¹ã§ã¯ãSLRå¢çã®äž¡åŽã®åè·¯ã«ã¬ãžã¹ã¿ãæ¿å ¥ããããšããå§ãããŸãã
MTã³ã¢ãšRANDã³ã¢ã®äž¡æ¹ãå«ãå®å šãªHLSã³ã¢ã¯ã1ã€ã®SLRã§å©çšå¯èœãªãã®ãããå€ãã®ããŒããŠã§ã¢ãªãœãŒã¹ãå¿ èŠãšãããããç¬ç«ããã·ãªã³ã³ã¯ãªã¹ã¿ã«ã®å¢çãè¶ãããã§ãŒã³ããããŸããã C ++ããRTLãžã®å€æã®æ®µéã§ã¯ãVivado HLSã¯ã©ã®åè·¯ããã®åŸå¢çãè¶ãããã«ã€ããŠäœãç¥ããªããããäºåã«è¿œå ã®åæã¬ãžã¹ã¿ãæ¿å ¥ããããšã¯ã§ããŸããã ãããã£ãŠãã³ã¢ã2ã€ã«åå²ãã空éçã«ç°ãªãSLRã«å¶éããRTLã¬ãã«ã§ã³ã¢éã®ã€ã³ã¿ãŒãã§ã€ã¹åè·¯ã«åæã¬ãžã¹ã¿ãæ¿å ¥ããããšã«ããŸããã
MTã³ã¢
ãã®ã¢ã«ãŽãªãºã ã¯FPGAã§ã®å®è£ ã«éåžžã«é©ããŠãããããã¡ã¢ãªããã®æ¯èŒçå°éã®ããŒã¿ïŒ2ã€ã®ååã®åº§æšïŒã®å Žåãçžäºäœçšåã®è€éãªé¢æ°ãèšç®ããå¿ èŠããããé·ãã³ã³ãã¥ãŒãã£ã³ã°ãã€ãã©ã€ã³ãæ§ç¯ããããšãå¯èœã§ãã
å³ 4. MTã«ãŒãã«ããŒããŠã§ã¢ã³ã³ãã¥ãŒãã£ã³ã°æé ã®ãããã¯å³ã ç·è²ã¯ãååã®åº§æšãä¿åããããã®ããŒããŠã§ã¢ã¡ã¢ãªãããã¯ã瀺ããŸãã èšç®ãã©ãŒã¹ã³ã³ãã€ãšåº§æšæŽæ°ãããã³èšç®ã®äžéçµæãä¿åããããã®Save Regsãããã¯ãæå®ãããŠããŸãã æ¬äŒŒä¹±æ°ã¯ãå¥ã®HLSã«ãŒãã«ãã座æšæŽæ°ãã€ãã©ã€ã³ã«å°çããŸãã
åååãããªãã¡ ãã¥ãŒããªã³ã¢ãããŒã¯ãé£æ¥ãã4ã€ã®ã¿ãšçžäºäœçšããŸãïŒå³2ïŒã æéå ã®åå埩ã§ãæåã«çžäºäœçšåãèšç®ãã次ã«ååã®åº§æšãæŽæ°ããå¿ èŠããããŸãã çžäºäœçšåãèšç®ããé¢æ°ã«ã¯ãå€ãã®ç®è¡æŒç®åãææ°æŒç®åãäžè§é¢æ°æŒç®åãå«ãŸããŸãã æåã®ã¿ã¹ã¯ã¯ããããã®æ©èœã®ãã€ãã©ã€ã³ãåæããããšã§ããã äœæ¥ããŒã¿åã¯floatåã§ããã Vivado HLSã¯ãçŽ130ã¯ããã¯ãµã€ã¯ã«ã®ã¬ã€ãã³ã·ã§ã200 MHzã®åšæ³¢æ°ã§åäœãããã€ãã©ã€ã³ã®åœ¢åŒã§ãã®ãããªé¢æ°ãåæããŸããã åæã«ãã³ã³ãã€ãŒã¯ã·ã³ã°ã«ãµã€ã¯ã«ã§ããïŒã€ãŸããåæåééã1ã«ãªã£ãŠããŸãïŒãã€ãŸããå ¥åã®åã¹ãããã§æ°ããååã®åº§æšãååŸããæåã®é 延ïŒã¬ã€ãã³ã·ïŒã®åŸããµã€ã¯ã«ããšã«æŽæ°ãããåå€ãåºåã§ããŸãã åºåçžäºäœçšåã䜿çšããŠåº§æšãæŽæ°ããããããã€ãã©ã€ã³åãããŸããã åååã®å座æšãæŽæ°ããã«ã¯ãå¥ã®HLSã³ã¢ããååŸããç¬ç«ããæ¬äŒŒä¹±æ°æ£èŠååžæ°ãå¿ èŠã§ããã 3ã€ã®ååïŒãçŸåšãããå·ŠãããäžãïŒãååŸãããšããã€ãã©ã€ã³ãçµã¿åãããŠåãèšç®ãã1ã€ã®ååã®ãã¹ãŠã®èšç®ãå®è¡ãã1ã€ã®ã³ã³ãã€ãŒã§åº§æšãæŽæ°ã§ããŸãã ãã®ãããªã³ã³ãã¢ã®ã¬ã€ãã³ã·ã¯191ã¯ããã¯ãµã€ã¯ã«ã§ããïŒå³4ïŒã
ã¢ã«ãŽãªãºã ã¯ããµã€ã¯ã«å ã®ãã¹ãŠã®ååãå®è¡ããŸãã ãµã€ã¯ã«ã®åå埩ã§ã¯ã3ã€ã®ååã®åº§æšãæã€å¿ èŠããããŸãã1ã€ã®ååã¯ãçŸåšããšèŠãªããããå·Šããšãå³ãã®ååããããŸãã ãããã£ãŠãããã3ã€ã®ååéã®çžäºäœçšã®åãèšç®ãããŸãã ããã«ãçŸåšã®ååã®åº§æšãæŽæ°ãããšããçžäºäœçšåã®å·Šãšäžã®æåã¯çŸåšã®å埩ã§ã®èšç®ããååŸãããäžãšå³ã®æåã¯å¢çæ¡ä»¶ãŸãã¯ããŒã«ã«ã¬ãžã¹ã¿ãã¡ã€ã«Save Regsããã®ä»¥åã®å埩ããååŸãããŸããïŒå³4ïŒã
ã·ã¹ãã å ã®Nååã®æ°ã¯å°ãªãã£ãïŒ13ããããã£ã©ã¡ã³ãx 12åå= 156ååïŒã åååã«ã¯12ãã€ããå¿ èŠã§ãã ãã®ã¹ããŒã ã§ã¯ãããããm4ãšm2ã®åèš2ã€ã®åº§æšm1ãšm2ã®2ã€ã®é åã䜿çšããŸããããã®ããŒã¿ã¯ãHLSã«ãŒãã«å ã«å®è£ ãããå éšã¡ã¢ãªFPGAïŒBRAMïŒã«ç°¡åã«é 眮ã§ããŸããã ãã®ã¹ããŒã ã¯ãå¶æ°åã®å埩ã§åº§æšãé åm1ããèªã¿åããïŒãããŠm2ã«èšé²ããïŒãå¥æ°åã®å埩ã§ãã®éãè¡ãããããã«é 眮ãããŸããã ã¢ã«ãŽãªãºã ã®èŠ³ç¹ããã¯ã1ã€ã®åº§æšé åã§èªã¿åããšæžã蟌ã¿ãè¡ãããšã¯ã§ããŸããããVivado HLSã¯ãåãã¯ããã¯ãµã€ã¯ã«ã§åãããŒããŠã§ã¢é åãèªã¿æžãã§ããåè·¯ãäœæã§ããŸããã§ãããããã¯ãã·ã³ã°ã«ãµã€ã¯ã«ãã€ãã©ã€ã³ã«å¿ èŠã§ãã ãããã£ãŠãç¬ç«ããã¡ã¢ãªãããã¯ã®æ°ã2åã«ããããšã決å®ãããŸããã
å³ 5.埮å°ç®¡å ã®ãã¥ãŒããªã³ã®çžäºäœçšã®ã³ã³ãã€ãŒèšç®ã®ã¹ããŒã ã
ãµã€ã¯ã«ããšã«3ã€ã®ååã®åº§æšãæŽæ°ã§ãã3ã€ã®å®å
šãªå¹³è¡ã³ã³ãã€ãŒãå®çŸã§ããããšãå€æããŸããïŒå³5ïŒã 次ã«ãã¢ã€ãã«ãã€ãã©ã€ã³ãåé¿ããããã«ãããŒã«ã«ã¡ã¢ãªãžã®ã¹ã«ãŒããããå¢ãããåãµã€ã¯ã«ã§7ã€ã®ååã®åº§æšãèªã¿åãå¿
èŠããããŸããã ãã®åé¡ã¯ããœãŒã¹C ++ã³ãŒããå®è³ªçã«å€æŽããããšãªãç°¡åã«è§£æ±ºãããŸããããç¹å¥ãªãã£ã¬ã¯ãã£ãã䜿çšããã ãã§ã
å
ã®ããŒã¿é
åã4ã€ã®ç¬ç«ããããŒããŠã§ã¢ã«ç©ççã«åå²ãã
ã¡ã¢ãªãããã¯ã ãªããªã FPGAã®BRAMã¡ã¢ãªã¯ãã¥ã¢ã«ããŒãã§ããããã4ã€ã®ã¡ã¢ãªãããã¯ãããµã€ã¯ã«ããšã«8ã€ã®å€ãèªã¿åãããšãã§ããŸãã ãããã3ã€ã®ã³ã³ãã€ãŒã¯ãµã€ã¯ã«ããšã«7ååã®åº§æšãå¿
èŠãšããããïŒå³5ãåç
§ïŒãããã§åé¡ã¯è§£æ±ºããŸããã
#pragma HLS DATA_PACK variable=m1, m2 #pragma HLS ARRAY_PARTITION variable=m1, m2 cyclic factor=4 dim=2
æé | L | II | ãã©ã | DSP | Ff | ã | å»æ£ |
---|---|---|---|---|---|---|---|
5 ns | 191ããŒã | 1æ | 52 | 498 | 282550 | 331027 | 絶察 |
2ïŒ | 23ïŒ | 11ïŒ | 27ïŒ | çžå¯Ÿ |
ã¿ãã 1ïŒ3ã€ã®å®å šãªãã€ãã©ã€ã³ãåããHLSã¹ããŒã ã®ããã©ãŒãã³ã¹ãšå©çšç
è¡šã®äžã å³1ã¯ãHLSåè·¯ã®äœ¿çšçïŒã€ãŸããæ¶è²»ããFPGAããŒããŠã§ã¢ãªãœãŒã¹ã®éãVirtex-7 2000Tãããã®çµ¶å¯Ÿããã³çžå¯ŸåäœïŒãšãã®ããã©ãŒãã³ã¹ã瀺ããŠããŸãã Lã¯ãåè·¯ã®é 延ãŸãã¯é 延ãã€ãŸã æåã®å ¥åããŒã¿ããã€ãã©ã€ã³ã«äŸçµŠããŠããæåã®åºåãåãåããŸã§ã®ã¯ããã¯ãµã€ã¯ã«æ°.IIã¯ãã€ãã©ã€ã³ã®åæåééïŒãŸãã¯ã¹ã«ãŒãããïŒã§ããããã¯ãåŸç¶ã®ããŒã¿ããã€ãã©ã€ã³å ¥åã«äŸçµŠããããšãã§ããã¯ããã¯ãµã€ã¯ã«æ°ãæå³ããŸãã
åŠçã¯ãåè·¯ã®å®è£ ã®ããã®çµ¶å¯Ÿå€ïŒFFããªã¬ãŒãŸãã¯LUTããŒãã«ã®æ°ïŒãšãã¯ãªã¹ã¿ã«å ã®ãã®ãªãœãŒã¹ã®åèšéã®äž¡æ¹ã§è¡ãããŸãã è¡šãããããããã«ã ãã«ãã€ãã©ã€ã³ã®1ã¬ã€ãã³ã·ãŒLã¯191ã¯ããã¯ãµã€ã¯ã«ã«çãããåãã€ãã©ã€ã³ã¯ãã¹ãŠã®ååã®3åã®1ãåŠçããå¿ èŠããããããã¯TïŒFPGAïŒ=ïŒL + N / 3ïŒ* 5ns = 1.2ÎŒsã«çãã1å埩ã®èšç®æéã®çè«çæšå®å€ãäžããŸã
ããŒãã«ããã å³1ã¯ãã¯ãªã¹ã¿ã«å ã«æªäœ¿çšã®ããžãã¯ããŸã ããããããããšã瀺ããŠããŸããã䞊åãã€ãã©ã€ã³ã®æ°ãããã«å¢ããããšã¯å®çšçã§ã¯ãããŸããã 第2é ã®ã¿ãæžå°ããåæé 延ã¯æäœäžã«äŸç¶ãšããŠå€§ããªè²¢ç®ãããŸãã åæã«ãããžãã¯ã®éãå¢ãããšãVivadoã§ã®ãããžã§ã¯ãéçºã®æ¬¡ã®æ®µéã§åè·¯ã®é 眮ãšãã¬ãŒã¹ãè€éã«ãªããŸãã
ã«ãŒãã«RAND
瀺ãããŠããããã«ãã¢ã«ãŽãªãºã ã¯ååã®ãã©ãŠã³éåãèæ ®ããŸãããã®èšç®æ¹æ³ã®1ã€ã¯ãæéã®åå埩ã§åº§æšã®å€åã«éåžžã®ã©ã³ãã å ç®ãè¿œå ããããšã§ãã å埩ããšã«å€ãã®æ£èŠååžä¹±æ°ãå¿ èŠã§ããåN 3åã®æ°å€ã¯ã420 10 ^ 6åã®æ°å€/ç§ã®ã¹ããªãŒã ãæäŸããŸã ã ãã®ãããªã¹ããªãŒã ã¯ãã¹ãããããŒãã§ããªããããFPGAå ã§ãªã³ã¶ãã©ã€ã§çæããå¿ èŠããããŸãã ããã«ã¯ãCPUã®åç §ã³ãŒãã®ããã«ãMersenne vortex generatorãéžæãããŸãããããã«ãããåäžã«ååžããæ¬äŒŒä¹±æ°ãåŸãããŸãã 次ã«ãBox-Mullerå€æããããã«é©çšãããæ£èŠååžã·ãŒã±ã³ã¹ãåºåã§ååŸãããŸããã Mersenne vortexã®å ã®ãªãŒãã³ãœãŒã¹ã³ãŒãã¯ã1ã¯ããã¯ãµã€ã¯ã«ã®åæåééã§ããŒããŠã§ã¢ãã€ãã©ã€ã³ãååŸããããã«å€æŽãããŸããã ã¢ã«ãŽãªãºã ã«ã¯ãµã€ã¯ã«ããšã«9åã®éåžžã®æ°å€ãå¿ èŠã§ãããããã£ãŠãRANDã³ã¢ã«ã¯10åã®ç¬ç«ããã¡ã«ã»ã³ã枊çºçåšãå«ãŸããŠããŸããã Box-Mullerå€æã§ã¯ã2ã€ã®æ£èŠååžãåŸãããã«2ã€ã®åäžã«ååžããæ°å€ãå¿ èŠã§ãã è¡šã®äžã å³2ã¯ãRANDã«ãŒãã«ã®åŠçã瀺ããŠããŸãã
ãã©ã | DSP | Ff | ã | å»æ£ |
---|---|---|---|---|
30 | 41 | 48395 | 64880 | 絶察 |
1.2ïŒ | 9ïŒ | 0.1ïŒ | 5.3ïŒ | çžå¯Ÿ |
ã¿ãã 2ïŒRANDã³ã¢ã®å»æ£
ãã®ãããªã³ã¢ã«ã¯æ°Žæ¶ã®DSPãªãœãŒã¹ã®ããªãã®éšåãå¿ èŠã§ããããã®ã³ã¢ã¯MTã³ã¢ãæã€1ã€ã®SLRã«é 眮ããã®ãé£ããããšãããããŸãã å°ãªããšãDSPãªãœãŒã¹ã«å¯Ÿãã2ã€ã®ã³ã¢ã®äœ¿çšçã¯ã1ã€ã®SLRïŒ25ïŒ ïŒãå容ã§ãã31ïŒ ä»¥äžã§ãã
ç䌌乱æ°ãžã§ãã¬ãŒã¿ãŒãéžæããŠVivado HLSã§åæããæ¹æ³ã®è©³çŽ°ã«ã€ããŠã¯ãååã®èšäºhttps://habrahabr.ru/post/266897/ãåç §ããŠãã ããã
ãããã¹ããªãŒã ã®äœæ
ã³ã³ãã¥ãŒãã£ã³ã°ã³ã¢ãVivadoã«çµ±åããåŸããããžã§ã¯ãã¯IPãããã¯ã®é 眮ã«é¢ããŠç©ºéçãªå¶éãåããŸããã 䜿çšãããŠããVirtex-7 2000T FPGAã«ã¯ã4ã€ã®ç¬ç«ããã·ãªã³ã³ã¯ãªã¹ã¿ã«ïŒSLR0ãSLR1ãSLR2ãSLR3ïŒããããŸãã , MT SLR, (pBlock): pBloch_hls MT pBlock_base (. 3). pBlock_hls SLR0 SLR1, pBock_base â SLR2. , , ( SLR) .
, , .
Board Support Package (PCIe core, DDR3 Interface, Internal AXI Bus), â MT HLS , â RAND.
çµæ
æ§èœ
(CPU, GPU FPGA) . 10^7 , . GPU FPGA - .
. , , CPU 1. . 3, , â .
ãã©ãããã©ãŒã | , | æ§èœ |
---|---|---|
CPU | 22 | 1 |
GPU | 14 | 1.6 |
FPGA | 1.3 | 17 |
ã¿ãã 3:
, GPU CPU 1.6 , FPGA CPU 17 . , FPGA GPU 11 . FPGA 1.3 1.2 - PCI Express.
. CPU â Intel Power Gadget. GPU â Nvidia-smi. FPGA â - , RB-8V7. . 4.
ãã©ãããã©ãŒã | , | Ex | Ex_rel |
---|---|---|---|
CPU | 89.6 | 0.011 | 1 |
GPU | 67 | 0.023 | 2 |
FPGA | 9.6 | 1.77 | 160 |
ã¿ãã 4:
, . ( ) , :
, :
, x = {CPU, GPU, FPGA}.
, FPGA , FPGA . , FPGA .
è°è«
FPGA [12]â[17]. CAAD , ProcStar-III ( Gidel), FPGA Altera Stratix-III SE260. PCI Express -. , 26 CPU Apoal. [24] LAMMPS FPGA. . , . Maxwell, Intel Xeon FPGA Xilinx Virtex-4 [25]. , Maxwell. , 13 . - , CPU SDRAM, FPGA 96% . , , 8-9 .
FPGA . - , FPGA 17 CPU 11 GPU. . , .
FPGA . , .
FPGA . , [26] RTL . , Altera Xilinx (Altera SDK for OpenCL Xilinx Vivado HLS). C/C++ (Xilinx) OpenCL (Altera) . , FPGA [27]â[29]. , [28] Vivado HLS Xilinx Zynq-7000. CPU, 7 . , HLS RTL . Vivado HLS , FPGA. FPGA .
, ! pdf- ,