åã®èšäºãSDAccel-ç¥ãåãã㧠ãã¶ã€ãªã³ã¯ã¹FPGAã§OpenCLã䜿çšããåºæ¬ã«ã€ããŠèª¬æããããšããŸããã ä»ãããADM-PCIe-KU3ã¢ãžã¥ãŒã«ã§ã®ããŒã¿è»¢éã«é¢ããå®éšçµæãå ±æãããšãã§ãã åæ¹åã®ããŒã¿è»¢éã確èªããŸãã ããã°ã©ã ã®ãœãŒã¹ã³ãŒãã¯GitHubã«æçš¿ãããŠããŸãïŒ https : //github.com/dsmv/sdaccel
è£ åå
ãã¹ãŠã®å®éšã¯ãAlpha-Data ADM-PCIe_KU3ã¢ãžã¥ãŒã«ã§å®è¡ãããŸãã
äžå¿çãªèŠçŽ ã¯ãXilinx Kintex UltraScale KU060 FPGAã§ãã
2ã€ã®SODIMM DDR3-1600ã¢ãžã¥ãŒã«ãFPGAã«æ¥ç¶ãããŠããŸãã ã¡ã¢ãªå¹
ã¯72ãããã§ããããã«ããããšã©ãŒèšæ£ä»ãã®ã¡ã¢ãªã³ã³ãããŒã©ã䜿çšã§ããŸãã
2ã€ã®QSFPã¢ãžã¥ãŒã«ãæ¥ç¶ããããšãå¯èœã§ãã åQSFPã¢ãžã¥ãŒã«ã¯ãæ倧10 Gb / sã®äŒéé床ãæã€4ã€ã®åæ¹åãªã³ã¯ã§ãã ããã«ãããäœé 延ãããã¯ãŒã¯ã«ãŒãã®å®è£ ãå«ãã1Gã10Gã40Gã€ãŒãµãããã䜿çšã§ããŸãã èå³æ·±ãç¹æ§ããããŸã-GPSåä¿¡æ©ãã2çªç®ã®ããŒã¯ãå ¥åããŸãã ãããããã®äœæ¥ã§ã¯ãããã¯ãã¹ãŠäœ¿çšãããŸããã
NIMBIXãµãŒããŒ
NIMBIXãµãŒããŒã¯ãSDAcceléçºç°å¢ãå«ãããŸããŸãªã³ã³ãã¥ãŒãã£ã³ã°ãµãŒãã¹ãæäŸããããã«éèŠãªããšã«ãéžæããããŒããŠã§ã¢ã¢ãžã¥ãŒã«ã§ããã°ã©ã ãå®è¡ããŸãã
é»åã¢ãã«
OpenCLã·ã¹ãã ãšã¯äœããæãåºãããŠãã ããã
ãã®ã·ã¹ãã ã¯ããã¹ãã³ã³ãã¥ãŒã¿ãŒãšã³ã³ãã¥ãŒã¿ãŒã§æ§æããããã¹ãä»ããŠçžäºæ¥ç¶ãããŠããŸãã ãã®å ŽåãPCI Express v3.0 x8ã§ãã
ã¢ããªã±ãŒã·ã§ã³ãœãããŠã§ã¢ã¯2ã€ã®éšåã§æ§æãããŠããŸãã
- ã³ã³ãã¥ãŒã¿ãŒã®HOSTããã°ã©ã ã
- é»åã§åäœãã1ã€ä»¥äžã®é¢æ°ã
ããŒã¿ã¯ã°ããŒãã«ã¡ã¢ãªãä»ããŠã®ã¿äº€æãããŸãããã®å Žåããããã¯2ã€ã®SODIMMã¢ãžã¥ãŒã«ã§ãã
ã¢ããªã±ãŒã·ã§ã³ãœãããŠã§ã¢ã«ã¯ã誰ããæäŸããªããã°ãªããªãã€ã³ãã©ã¹ãã©ã¯ãã£ãå¿ èŠã§ãã ãã®å Žåãã¶ã€ãªã³ã¯ã¹ã ã€ã³ãã©ã¹ãã©ã¯ãã£ã«ã¯æ¬¡ã®ãã®ãå«ãŸããŸãã
- openclã©ã€ãã©ãª-OpenCLæšæºæ©èœã®å®è£ ã
- ã¢ãžã¥ãŒã«ãã©ã€ããŒ-ã¢ãžã¥ãŒã«ãšã®çžäºäœçšãæäŸããŸãã
- DSAããã±ãŒãžã ããã¯ãç¬èªã®FPGAãã¡ãŒã ãŠã§ã¢ãéçºããããã®åºç€ã§ãã
DSAããã±ãŒãžã«ã¯ãPCI Expressããã€ãããã¯ã¡ã¢ãªãããã³å Žåã«ãã£ãŠã¯ä»ã®ããŒãçšã®ã³ã³ãããŒã©ãŒãå«ãåºæ¬çãªãã¡ãŒã ãŠã§ã¢ãå«ãŸããŠããŸãã åºæ¬ãã¡ãŒã ãŠã§ã¢ã«ã¯ãOpenCLãªãŒãžã§ã³ãšåŒã°ããèŠçŽ ããããŸãã OpenCLã«ãŒãã«ã®ãã¹ãŠã®æ©èœãå®è£ ãããã®ã¯ããã®èŠçŽ å ã§ãã ãã¡ãŒã ãŠã§ã¢ã¯ãããŒã·ã£ã«ãªã³ã³ãã£ã®ã¥ã¬ãŒã·ã§ã³ãã¯ãããžãŒã䜿çšããŠPCI Expressçµç±ã§OpenCLãªãŒãžã§ã³å ã«ããŠã³ããŒããããŸãã ã¶ã€ãªã³ã¯ã¹ãããŠã³ããŒãé床ãå€§å¹ ã«åäžãããããšã«æ³šæããŠãã ããã 以åã®ããŒãžã§ã³ã§ããŠã³ããŒãã«æ°åããã£ãå ŽåãçŽ5ç§ããããŸãã ãŸããããŒãžã§ã³2017.2ã§ã¯ããã¡ãŒã ãŠã§ã¢ããŸã£ããåããŠã³ããŒãã§ããªãããšãçºè¡šãããŸããã
çŸåšã2ã€ã®ããã±ãŒãžããSDAccelããã±ãŒãžã®äžéšãšããŠADM-PCIe-KU3ã¢ãžã¥ãŒã«ã§å©çšã§ããŸãã
- xilinxïŒadm-pcie-ku3ïŒ2ddrïŒ3.3
- xilinxïŒadm-pcie-ku3ïŒ2ddr-xprïŒ4.0
ã©ã¡ãã®ããã±ãŒãžãã2ã€ã®ã¡ã¢ãªã³ã³ãããŒã©ãŒãšPCI Express v3.0 x8ããµããŒãããŠããŸãã æ¥å°ŸèŸ-xprã«æ³šæããŠãã ããã ããã¯éèŠãªéãã§ãã xprãªãã®ãªãã·ã§ã³ã¯ãDDRã³ã³ãããŒã©ãŒãšPCI Expressã®äœçœ®ãä¿®æ£ããŸãã xprããªã¢ã³ãã¯PCI Expressã®äœçœ®ã®ã¿ããã£ããã£ããDDRã³ã³ãããŒã©ãŒã¯OpenCLã¢ããªã±ãŒã·ã§ã³æ©èœã®ãã¬ãŒã¹ã«é¢äžããŸãã ãã®éãã¯çµæã®éãã«ã€ãªãããŸãã xprã䜿çšããªãããªã¢ã³ãã¯ããé«éã«äœæãããxprã䜿çšããããªã¢ã³ãã¯ããæé©ãªãã¬ãŒã¹ãååŸã§ããŸãã ãã®ãããžã§ã¯ãã§ã¯ãxprãªãã®ãªãã·ã§ã³ã§ã¯1æé11åãxprãªãã·ã§ã³ã§ã¯1æé32åã§ããã ãã°ã¯ãã¡ãã§ãã
ãšããã§ãåDSAããã±ãŒãžã«ã¯ç¬èªã®ãã©ã€ããŒãå«ãŸããŠããŸãã
CHECK_TRANSFERããã°ã©ã
ãã®ããã°ã©ã ã¯ã3ã€ã®ã¢ãŒãã§ã®é£ç¶ããŒã¿è»¢éãæ€èšŒããããã«èšèšãããŠããŸãã
- FPGAããSODIMããã³ã³ã³ãã¥ãŒã¿ãŒãž
- ã³ã³ãã¥ãŒã¿ãŒããSODIMMããã³FPGAãž
- åæ¹ååæéä¿¡
ç§ã®æèŠã§ã¯ãããŒã¿ããã§ãã¯ããã«äœæ¥ã®é床ããã§ãã¯ããããšã¯ããŸãæå³ããããŸããã ãã®ãããOpenCLã䜿çšããŠããã¹ãã·ãŒã±ã³ã¹ãžã§ãã¬ãŒã¿ãŒããŒããšãã¹ãã·ãŒã±ã³ã¹æ€èšŒããŒããFPGAã«å®è£ ããŸããã
OpenCLæšæºã¯ãããã€ã¹ã®ã°ããŒãã«ã¡ã¢ãªãä»ããŠã®ã¿ããã€ã¹ãšã³ã³ãã¥ãŒã¿ãŒéã®äº€æãæäŸããŸãã ããã¯éåžžãSODIMMã®åçã¡ã¢ãªã§ãã ãããŠããã§ãæ倧é床ã§ããŒã¿ã転éããå¯èœæ§ã«ã€ããŠéåžžã«èå³æ·±ã質åãçããŸãã ADM-PCIe-KU3ã¯2ã€ã®SODIM DDR3-1600ã䜿çšããŸãã 1ã€ã®SODIMMã®äº€æã¬ãŒãã¯çŽ10 GB /ç§ã§ãã PCI Express v3.0 x8ãã¹ã®äº€æé床ã¯çŽ5 GB / sã§ãïŒãããŸã§ã®ãšãããã¯ããã«å°ãªãããšãå€æããŠããŸãïŒã ããªãã¡ PCI Expressããã®1ã€ã®ãããã¯ãã¡ã¢ãªã«æžã蟌ããšåæã«ãFPGAå ã§åŠçããããã«2çªç®ã®ãããã¯ãèªã¿åãããšãã§ããŸãã ãããŠããŸã çµæãè¿ãå¿ èŠãããå Žåã¯ã©ããªããŸããïŒ PCI Expressã¯ãé«éã§åæ¹åã®ãããŒãæäŸããŸãã ãã ããã¡ã¢ãªãã¹ã¯1ã€ã§ãããé床ã¯èªã¿åããšæžã蟌ã¿ã«åå²ãããŸãã ããã¯ã2çªç®ã®SODIMMãå¿ èŠãªå Žæã§ãã åŠççšã®ãããã¡ãé 眮ããã¢ãžã¥ãŒã«ãæå®ããæ©äŒããããŸãã
ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã
SDAccelã¯ç¹å®ã®Linuxã·ã¹ãã ã§ã®ã¿æ©èœããŸãã å©çšå¯èœãªã·ã¹ãã ã®ãªã¹ãã§ãCentOS 6.8ãCentOS 7.3ãUbuntu 16.04ãRedHat 6.8ãRedHat 7.3ã CentOs 6.7ã§å§ããæåã®å®éšã ãããããUbuntu 16.04ã䜿çšããããšããŸãããããã¹ãŠãåäœããŸããã§ããã çŸåšãCentOS 7.3ã䜿çšããŠããŸããããã®ã·ã¹ãã ã«éåžžã«æºè¶³ããŠããŸãã ãã ããSDAccelãã»ããã¢ããããéã«ã¯ãããã€ãã®åŸ®åŠãªç¹ããããŸãã äž»ãªåé¡ã¯ãããã©ã«ãã§ãããã¯ãŒã¯ã€ã³ã¿ãŒãã§ãŒã¹ã®ååããenp6s0ãã§ããããšã§ãã ãã®ååã¯ãã¶ã€ãªã³ã¯ã¹ã©ã€ã»ã³ã¹ãµãŒããŒã§ã¯èªèãããŸããã éåžžã®ãeth0ããå¿
èŠã§ãã
ã»ããã¢ããã¯ãã¡ãïŒ https : //github.com/dsmv/sdaccel/wiki/note_04---Install-CentOS-7-and-SDAccel-2017.1
Qt 5.9.1ã¯ã€ã³ã¹ããŒã«ãããŸãããæ©èœããŸããã æ°ããgccããã³gitã³ã³ãã€ã©ãå¿ èŠã§ãã ããã解決ãããŠããŸãã詳现ã¯ãã¡ãïŒ https : //github.com/dsmv/sdaccel/wiki/note_05---Install-Qt-5.9.1-and-Git-2.9.3
éçºã·ã¹ãã
éçºã«ã¯ã2ã€ã®ã·ã¹ãã ã䜿çšããŸãã
- SDAccel 2017.1-ã«ãŒãã«éçºããã³å°èŠæš¡ãªãã¹ããã¹ãããã°ã©ã çš
- Qt 5.9.1-ããè€éãªããã°ã©ã ã®éçºçšã Qtã¯ãHOSTããã°ã©ã ã®éçºã«ã®ã¿äœ¿çšãããŸãã
GitHubãããžã§ã¯ãã®çµç¹
dsmv / sdaccelãªããžããªã¯ãSDAccelã®äŸãéçºããããã«èšèšãããŠããŸã ã çŸæç¹ã§ã¯ãcheck_transferããã°ã©ã ã¯1ã€ã ãã§ãã ãããžã§ã¯ãã§ã¯ãå€ãã®GitHubæ©èœã䜿çšãããŸãã
- README.md-蚪åè ã«è¡šç€ºãããæåã®ãã¡ã€ã«ã
- WiKi-ããã°ã©ã ã®èª¬æ
- éçºããŒã - éçºäžã®ããŒã
- åé¡ -ã¿ã¹ã¯ãªã¹ã
- ãããžã§ã¯ã -ãããžã§ã¯ã管ç
- Doxygenã«ãã£ãŠçæãããããã°ã©ã ã®ããã¥ã¡ã³ãããããŸã
ã¡ã€ã³ããã°ã©ã ãã£ã¬ã¯ããª
- æçš-ã·ã¹ãã ãæ§æããããã®æçšãªã¹ã¯ãªãã
- qt-QtãœãŒã¹ã®ãã£ã¬ã¯ããª
- sdx_wsp / check_transfer-äœæ¥ãã£ã¬ã¯ããªSDAccel
ãã®ãããžã§ã¯ãã§ã¯ãQtãšSDAsselã®ãœãŒã¹ã¯åãã§ããããã£ã¬ã¯ããªã¯ç°ãªããŸãã ãã ããQtã§ã¯ããã«è€éãªããã°ã©ã ãéçºãããããšãäºæ³ãããŸãã
2ã€ã®åºåã¢ãŒã
ïŒç»åãã¯ãªãã¯ãããšæ¡å€§ããŸãïŒ
å³ã¯ãããã°ã©ã ã®å®è¡äžã®ç«¯æ«ã®å€èŠ³ã瀺ããŠããŸãã ããŒãã«ã«æ³šæããŠãã ããã ããã¯ããã¹ãã®çŸåšã®ã¹ããŒã¿ã¹ã瀺ãè¡šã§ãã äœæ¥äžãå®éã«äœãèµ·ãã£ãŠããã®ããç¥ãããšã¯éåžžã«èå³æ·±ãã§ãã ããã«ãæéå¶éã®ãªãã¢ãŒãããããŸãã ããŒãã«ã¯éåžžã«åœ¹ç«ã¡ãŸãã æ®å¿µãªãããåé¡ããããŸãã SDAccelã¯Eclipseã«åºã¥ããŠäœãããŠããŸãã å€éšç«¯æ«ã®ç°å¢ããããã°ã©ã ãå®è¡ããæ¹æ³ãåŠã¶ããšãã§ããŸããã§ããã ãŸãããã«ãã€ã³ã¿ãŒããã«ã§ã¯ãããŒãã«ãæ©èœããŸããã ããŒãã«ãªãã§èµ·åã¢ãŒããäœæããå¿ èŠããããŸããã ãšããã§ãNVIDIAããã€ã¹ãããã°ã©ãã³ã°ããããã®Nsight Eclipse Editionã·ã¹ãã ã¯ãå€éšç«¯æ«ã§ããã°ã©ã ãå®è¡ããããšãã§ããŸããã ãããšããç§ã¯äœããç¥ããªãã®ã§ããããïŒ
ã¡ã¬ãã€ããã¡ã¬ãã€ããïŒ
ç§ã¯ã1ãããã€ãã1024ãã€ãã§ããããšã確å®ã«ç¥ã£ãŠãã人ã ã«å±ããŸãïŒãŸãã1ããã¡ãŒãã«ã§1,024ã¡ãŒãã«ãšä»®å®ããŸãïŒã ããããããã¯ãã§ã«éæ³ã§ãã æ··ä¹±ãé¿ããããã«ãããã°ã©ã ã¯äž¡æ¹ã®ã¢ãŒãã§æž¬å®ã§ããçŸåšã®ã¢ãŒãããã°ã«è¡šç€ºãããŸãã
ããã°ã©ã ã³ãŒãã®äžéšãèŠãŠã¿ãŸãããã
ã«ãŒãã«gen_cnt
gen_cntïŒïŒã®ã³ã¢ã³ãŒãã¯éåžžã«åçŽã§ãã ãã®é¢æ°ã¯ãæå®ããããµã€ãºã®é åããã¹ãããŒã¿ãããã¯ã§åããŸãã
__kernel __attribute__ ((reqd_work_group_size(1,1,1))) void gen_cnt( __global ulong8 *pOut, __global ulong8 *pStatus, const uint size ) { uint blockWr; ulong8 temp1; ulong8 checkStatus; ulong8 addConst; checkStatus = pStatus[0]; temp1 = pStatus[1]; addConst = pStatus[2]; blockWr = checkStatus.s0 >> 32; __attribute__((xcl_pipeline_loop)) for ( int ii=0; ii<size; ii++) { pOut[ii] = temp1; temp1.s0 +=addConst.s0; temp1.s1 +=addConst.s1; temp1.s2 +=addConst.s2; temp1.s3 +=addConst.s3; temp1.s4 +=addConst.s4; temp1.s5 +=addConst.s5; temp1.s6 +=addConst.s6; temp1.s7 +=addConst.s7; } blockWr++; checkStatus.s0 = ((ulong)blockWr)<<32 | 0xAA56; pStatus[0] = checkStatus; pStatus[1] = temp1; }
å€æ°temp1ã¯ãulong8åã§ãã ããã¯ã8ã€ã®64ãããæ°ã®ãã¯ãã«ã§ããæšæºOpenCLã¿ã€ãã§ãã s0..s7ãšããååãŸãã¯temp1.s [ii]ã§ãã¯ã¿ãŒã®èŠçŽ ã«ã¢ã¯ã»ã¹ã§ããŸãã ããã¯éåžžã«äŸ¿å©ã§ãã ãã¯ãã«ã®å¹ ã¯512ãããã§ãã ããã¯ãSODIMMã®å éšãã¹å¹ ã«å¯Ÿå¿ããŸãã æé©åèŠçŽ ã®1ã€ã¯ãæ£ç¢ºã«512ãããããŒã¿ã®ã¿ãã¡ã¢ãªãšäº€æããããšã§ãã pStatusãã€ã³ã¿ãŒã«ã¯ãã¹ããŒã¿ã¹æ å ±ãæã€ãããã¯ãå«ãŸããçŸåšã®å€ãšå®æ°ãããããèªã¿åãããŸãã å64ããããã£ãŒã«ãã¯ãç¬èªã®å®æ°ã䜿çšããŸãã ããã«ãããåçŽãªã«ãŠã³ã¿ãŒã ãã§ãªããããè€éãªã«ãŠã³ã¿ãŒãäœæã§ããŸãã ãããŸã§ã®ãšãããããã°ã©ã ã¯åçŽãªã«ãŠã³ã¿ãŒã®ã¿ãå®è¡ããŸãã é¢æ°ã®æåŸã«ãçŸåšã®ããŒã¿å€ãšå¡ãã€ã¶ããããããã¯ã®æ°ãèšé²ãããŸãã
check_cnt_m2aããã³check_read_input
æ€èšŒãå®è£ ããããã«ã2ã€ã®é¢æ°ãäœæããŸããã1ã€ã¯check_read_input-åçã¡ã¢ãªããããŒã¿ãèªã¿åãããã€ãã«æžã蟌ã¿ãŸãã 2çªç®ã®check_cnt_m2aã¯ããã€ãããããŒã¿ãèªã¿åãããã§ãã¯ããŸãã ãããããã®å Žåã2ã€ã®ã«ãŒãã«ãžã®åå²ãšãã€ããä»ããæ¥ç¶ã¯åé·ã§ãã ããããç§ã¯ãã®æè¡ã®ãã¹ãã«èå³ããããŸããã
ããã«ã³ãŒã
ãã¹ãããã°ã©ã ã®æ§é
ãã®ããã°ã©ã ã¯ãä»®æ³ã¯ã©ã¹TF_Testããã³TF_TestThreadã®äœ¿çšã«åºã¥ããŠããŸãã ãããã®ã¯ã©ã¹ã«åºã¥ããŠã2ã€ã®ãã¹ãã¯ã©ã¹ãéçºãããŸããã
- TF_CheckTransferOut-ããã€ã¹ããã³ã³ãã¥ãŒã¿ãŒãžã®è»¢éã確èªããŸã
- TF_CheckTransferIn-ã³ã³ãã¥ãŒã¿ãŒããããã€ã¹ãžã®è»¢éã確èªããŸã
åºæ¬ã¯ã©ã¹TF_Testã«ã¯æ¬¡ã®é¢æ°ãå«ãŸããŸãã
åœ¹è· | äºå® |
---|---|
æºåïŒïŒ | æºåãã |
éå§ïŒïŒ | æã¡äžã |
åæ¢ïŒïŒ | ãã㊠|
StepTableïŒïŒ | ããŒãã«è¡šç€ºã¹ããã |
isCompleteïŒïŒ | ãã¹ãå®äº |
GetResultïŒïŒ | åºåçµæ |
mainïŒïŒé¢æ°ã¯ãåã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã1ã€äœæããå®è¡ãéå§ããŸãã
åãã¹ãã¯ã©ã¹ã¯ç¬èªã®å®è¡ã¹ã¬ãããäœæããã¢ãžã¥ãŒã«ãšã®ããåããè¡ãããŸãã ã¡ã€ã³é¢æ°ã¯ãã¯ã©ã¹ããšã«PrepareïŒïŒãåŒã³åºããŸãã ãã®é¢æ°å
ã§ãã¹ããªãŒã ãäœæãããã¡ã¢ãªãå²ãåœãŠããããã¹ãŠã®æºåãå®è¡ãããŸãã äž¡æ¹ã®ã¯ã©ã¹ã®æºåãæŽã£ãããéå§ãåŒã³åºãããã¡ã€ã³ã®ãã¹ããµã€ã¯ã«ãéå§ãããŸãã Ctrl-CãæŒãããæå®ããããã¹ãæéã®çµããã«StopïŒïŒãåŒã³åºããŸãã ã¯ã©ã¹ã¯åäœãåæ¢ããisCompleteïŒïŒé¢æ°ã䜿çšããŠãããmainïŒïŒã«éç¥ããŸãã åæ¢åŸãçµæãååŸããããã«GetResultïŒïŒãåŒã³åºãããŸãã ãã¹ãäžãã¡ã€ã³ïŒïŒé¢æ°ã¯100ããªç§ããšã«StepTableãåŒã³åºããŠããŒãã«ãæŽæ°ããŸãã ããã«ãããããŒã¿äº€æã劚ããããšãªãã¹ããŒã¿ã¹æ
å ±ãæŽæ°ã§ããŸãã
ãã®ã¢ãããŒãã¯ããã¹ãããã°ã©ã ã®æ§ç¯ã«éåžžã«äŸ¿å©ã§ããããšãå€æããŸããã ããã§ã¯ããã¹ãŠã®ãã¹ããåããã³ãã¬ãŒãã«åºã¥ããŠæ§ç¯ãããŠããŸãã çµæãšããŠããããã¯äžŠè¡ããŠå®è¡ããããšããåå¥ã«å®è¡ããããšãã§ããŸãã ãã®ããã°ã©ã ã§ã¯ããã¹ãã®1ã€ãåæã«èµ·åããã¢ãŒããšãåæã«èµ·åããã¢ãŒãã®äž¡æ¹ãç°¡åã«æ§æã§ããŸãã
OpenCLããã°ã©ã å®è¡ã¢ãŒã
SDAccelã·ã¹ãã ã¯ãããã°ã©ã å®è¡ã®3ã€ã®ã¢ãŒããæäŸããŸãã
- ãšãã¥ã¬ãŒã·ã§ã³CPU-ãã¹ãŠããã¹ãããã»ããµã§å®è¡ãããŸã
- Emulation-HW-OpenCLé¢æ°ã¯Vivadoã·ãã¥ã¬ãŒã¿ãŒã§å®è¡
- ã·ã¹ãã -å®éã®ããŒããŠã§ã¢ã§åäœããŸãã
詳现ã«ã€ããŠã¯ãåã®èšäºãã芧ãã ãã ã
3ã€ã®ç°å¢ã®é床ãæ¯èŒããããšã¯èå³æ·±ãã§ãã æ¯èŒã¯éåžžã«æçœã§ãïŒ
ãšãã¥ã¬ãŒã·ã§ã³CPU | ãšãã¥ã¬ãŒã·ã§ã³hw | ã·ã¹ãã |
---|---|---|
200 MB /ç§ | 0.1 MB /ç§ | 2000 MB /ç§ |
é åºãããããããããããã«ãæ°å€ãäžžããŸããã å®éããšãã¥ã¬ãŒã·ã§ã³CPUãšãšãã¥ã¬ãŒã·ã§ã³HWã®é床ã®éãã¯ãFPGAãã¡ãŒã ãŠã§ã¢ã®éçºã§ã¯ãC / C ++ãªã©ã«åãæ¿ããå¿ èŠãããããšã瀺ããŠããŸãã 4ã€ã®æ³šæã§åã€ããšã¯ãC ++ã®ãã¹ãŠã®æ¬ ç¹ãã«ããŒããŠããŸãã VHDL / Verilogã§ã®éçºãæ¶æ» ããããšã¯ãªãããããã®èšèªã䜿çšããŠç©¶æ¥µã®ããã©ãŒãã³ã¹ãå®çŸããå¿ èŠãããå¯èœæ§ãé«ãããšã«æ³šæããŠãã ããã VHDL / Verilogã§OpenCLã«ãŒãã«ãäœæããå¯èœæ§ã¯éåžžã«ææã«èŠããŸããããã«ãããé«ãéçºé床ãšæ¥µç«¯ãªFPGAããã©ãŒãã³ã¹ãçµã¿åãããããšãã§ããŸãã ããããããã¯å¥ã®ç 究ãšå¥ã®èšäºã®ãããã¯ã§ãã
ãã¬ãŒã¹çµæ
ãããäœãèµ·ãã£ãã®ãã§ãã gen_cntã®DSPã®æ°ã«æ³šæããŠãã ããã 8åã®64ãããã«ãŠã³ã¿ãŒãå®è£ ããã«ã¯ã128åã®DSPãããã¯ãå¿ èŠã§ããã ããã¯ãã«ãŠã³ã¿ãŒããã16ãããã¯ã§ãã ããããããã¯ããªããã£ãã€ã¶ãŒããµã€ã¯ã«ã®é瀺ã«åãçµãã§ããçµæã§ãã
FPGAãšGPUã®æé©åæ¹æ³ã®éã
æçµçãªçµæãåŸãã«ã¯ãããŸããŸãªæé©åæ¹æ³ãé©çšããå¿ èŠããããŸãã GPUã®æ§é ã¯åºå®ãããŠããŸãã çžå¯Ÿçã«èšãã°ã1ã€ã®GPUããã»ããµãŒèŠçŽ ã1ã€ã®æäœãå®è¡ã§ããå Žåã100ã®æäœã䞊åã«å®è¡ããã«ã¯ã100ã®ããã»ããµãŒèŠçŽ ã䜿çšããå¿ èŠããããŸãã ããããFPGAã§ã¯ãããå¯äžã®ãªãã·ã§ã³ã§ã¯ãããŸããã ã¯ãã1ã€ã®ã«ãŒãã«ãèšè¿°ããFPGAã«è€æ°ã®ã€ã³ã¹ã¿ã³ã¹ãé 眮ã§ããŸãã ããããããã¯å€§ããªãªãŒããŒãããã«ã€ãªãããŸãã ã¶ã€ãªã³ã¯ã¹ã§ã¯ã16å以äžã®ã«ãŒãã«ããŸãã¯ã¡ã¢ãªããŒãã䜿çšããããšããå§ãããŸãã ãã ãã1ã€ã®èŠçŽ ã®å éšã«ã¯ã䞊ååã«é¢ããå¶éã¯ãããŸããã å®éãgen_cntã®äŸã¯ããã瀺ããŠããŸãã ããã«ã¯ã8ã€ã®64ãããå ç®åšãããã«ã³ãŒãã«æžã蟌ãŸããŸãã ããã«ããªããã£ãã€ã¶ãŒãæ©èœããã«ãŒããéå§ããŸããã GPUã®å Žåããã®äŸã¯å¥ã®æ¹æ³ã§èšè¿°ããå¿ èŠããããŸããããšãã°ã1ã€ã®ã«ãŒãã«ãäœæããŠ64ãããã®èªã¿åãå€ãååŸããäžåºŠã«8ã€ã®ã€ã³ã¹ã¿ã³ã¹ãå®è¡ããŸãã
ãšãã¥ã¬ãŒã·ã§ã³HWã衚瀺ã§ãããã®
ãã®ã¢ãŒãã§ã¯ãã¡ã¢ãªã¢ã¯ã»ã¹ãã¹ã§äœãèµ·ãã£ãŠãããã衚瀺ã§ããŸãã ãã®å³ã¯ãcheck_read_inputïŒïŒé¢æ°ã䜿çšããŠã¡ã¢ãªããããŒã¿ãèªã¿åãããã»ã¹ã瀺ããŠããŸãã
ïŒã¯ãªãã¯ããŠæ¡å€§ïŒ
ãŸããããŒã¿ãã©ãã ãé 延ãããã確èªã§ããŸãã æåã®èŠæ±ããæåã®ããŒã¿ãŸã§ã®é 延ã¯512 nsã§ãã 第äºã«ãèªã¿åãã¯16ã¯ãŒãïŒãµã€ãºã512ãããïŒã®ãããã¯ã§å®è¡ãããããšãããããŸãã VHDLã§éçºããå Žåããã倧ããªãããã¯ãµã€ãºã䜿çšããŸãã ããããã©ãããã³ã³ãããŒã©ãŒã¯ãããã¯ãçµã¿åãããããšãã§ããããã«ããé床ãäœäžããããšã¯ãããŸããã 第äžã«ãããŒã¿ã®åä¿¡ã«ã®ã£ãããããããšã¯æããã§ãã ãããã説æå¯èœã§ãã OpenCLã®åäœåšæ³¢æ°ã¯250 MHzãSODIMM DDR3-1600ã®ã¡ã¢ãªãã¹åšæ³¢æ°ã¯200 MHzã§ãã ã®ã£ããã¯ã200 MHzãã¹ãã250 MHzãã¹ãžã®ç§»è¡ã«æ£ç¢ºã«å¯Ÿå¿ããŠããŸãã
çµæ
çµæã¯ãããããã§ãããé«éåãæåŸ ãããŠããŸãã
ã·ã³ã°ã«ãã¹ã
ããœã³ã³ | å ¥å[MiB / s] | åºå[MiB / s] |
---|---|---|
Intel Core-i5ãPCIe v2.0 x8 | 2048 | 1837 |
Intel Core-i7ãPCIe v3.0 x8 | 2889 | 2953 |
åæ¹åãã¹ã
ããœã³ã³ | å ¥å[MiB / s] | åºå[MiB / s] |
---|---|---|
Intel Core-i5ãPCIe v2.0 x8 | 1609 | 1307 |
Intel Core-i7ãPCIe v3.0 x8 | 2048 | 2057 |
æ¯èŒã®ããã«ãåæ§ã®FPGAã䜿çšããã¢ãžã¥ãŒã«ã§ã¯ãèšé²å ¥åé床ã¯5500 MiB / sã§ããããããã€ãã®çç±ã§5000ã«æžããå¿ èŠããããŸããããããã£ãŠã亀æé床ãäžããæ©äŒããããŸãã
次ã¯äœã§ãã
äœæ¥ã¯ç¶ç¶ãããŸãã
- SDAccel 2017.2æ©èœã®èª¿æ»
- Alexander KapitanovïŒ capitanov ïŒã«ããFPFFTKã©ã€ãã©ãªã«åºã¥ãç³ã¿èŸŒã¿ããŒãã®å®è£
- 10Gã€ãŒãµãããããµããŒããããã®ãå«ããç¬èªã®DSAããã±ãŒãžã®éçº
- ãããŠæãéèŠãªããš-ç¬èªã®ã¢ãžã¥ãŒã«ã®éçºãååã¯ãã§ã«ååšããŸã-DSP135P
PSãã¹ãããã°ã©ã ãã³ãã¬ãŒãã®éçºãæ¯æŽããŠããããŠã©ãžããŒã«ã«ã©ã³ãŸãã«æè¬ããŸãã