JP Morgan Chaseãããªããã£ãå°ç¨ã¹ãã³ã³ãFPGAã§ä½ã£ã話 #fpgax
éèç³»ã§FPGAã¨ããã¨HFTへの応用ãç¥ããã¦ããã©ããã®äºä¾ã¯ãªã¢ã«ã¿ã¤ã ãã¬ã¼ãã®è©±ã§ã¯ãªããéèæ¥åã§å¿ è¦ã¨ããããããå¦çãHPCï¼High Performance Computingï¼ã§ãFPGAãæ¬æ ¼çã«ä½¿ããå§ãã¦ãã¨ãã話ã ã
å ãã¿ã¯ã2011å¹´ã«JP Morgan Chaseã®äººãã¹ã¿ã³ãã©ã¼ã大å¦ã§è¬æ¼ããå 容ããã®ãããªãè¦ã¦ãããã¨ã£ã£ã£ã¦ãé¢ç½ãã£ãã®ã§ã #fpgax 第3回ã§ä½¿ãè³æã¨ãã¦è¦ç¹ã訳ãã俺ã®ã³ã¡ã³ããè£è¶³ã追å ãã¦ã¿ãã

http://www.youtube.com/watch?v=9NqX1ETADn0 ï¼ã¹ã©ã¤ãã¯こちらï¼
ãªããFPGAãéèãç´ äººãªã®ã§ãåéãã誤訳ããããããããªããFPGAã¨ã¯ä½ãããç¥ããªã人ã¯こちらãã©ããã
ãªã¼ãã³ã»ã·ã§ãã¯å¯¾çã®ã¹ãã³ã³éçº
JP Morgan Chaseã¯ã社åµãã¢ã¼ã²ã¼ã¸ï¼ä¸åç£ãæ ä¿ã«ãã証å¸ï¼ãªã©ãè¨å¤§ãªéã®æä¾¡è¨¼å¸ãä¿æãã¦ãããããããä¾ãã°ã²ã¨ã¤ã®ç¤¾åµããªã¹ã¯ã®é«ãé¨åã¨ä½ãé¨åã«åãé¢ãã¦ããããããã¤ãéãã¦æ°ãã証å¸ãä½ã£ããããCDOだのCDSだのã¨ãã£ãè¤éãªããªããã£ãã¯ããã£ãããããç¾æç¹ã§ã©ããªãªã¹ã¯ãæ±ãã¦ããã®ããå»ã ã¨å¤åããå¸å ´ååã«å¿ãã¦ã¤ãã«åè¨ç®ãã¦ããå¿ è¦ãããããªã¼ãã³ã»ã·ã§ãã¯ã§ãCDSã®ãªã¹ã¯ã®ä¸éæããå¸å ´ãæ··ä¹±ãããè¦å ã¨ãªã£ã¦ããã
ãããã®ããªããã£ãã¯ããªã¹ã¯ãã¨ã«åãåããããããã©ã³ã·ã§ãã¨ããåä½ã§è©ä¾¡ãããããããªå¼ã使ããããï¼
...俺ã«ã¯ããåãããªããã©ãã¾ãã¨ã«ããç³ã¿è¾¼ã¿ã®FFTãè¨ç®ã®ä¸å¿ã¨ã®ãã¨ãæ°å¦ã徿ãªäººã¯このあたりãèªãã¨ãããã®ã ããã
JP Morgan Chaseã§ã¯ããã¾ã§ãå社ãä¿æãããã¹ã¦ã®ãã©ã³ã·ã§ã«å¯¾ãã¦ãã®ãªã¹ã¯è¨ç®ã宿½ããããã«C++ã§æ¸ããã³ã¼ãã¨å¤§éã®ãµã¼ãã¼ãç¨ãã¦ããããè¨ç®éãå¤ãããä¸åããã8æéã»ã©è¦ãã¦ããããã®éã«ããèªåãæã£ã¦ãã証å¸ã®ãªã¹ã¯ãã©ãã©ãå¤åãã¦ããããããªãããã£ã¨éãæ£ç¢ºã«ããã£ã¨ããç´°ããè¨ç®ãã¦ããªã¼ãã³ã»ã·ã§ãã¯ã®ãããªãªã¹ã¯ã®ä¸éææ§ã«ããæ··ä¹±ã®åçºãé¿ããããããã§å社ã¯ãMaxeler Technologiesã¨å ±åã§ãªã¹ã¯è¨ç®å°ç¨ã®FPGAãµã¼ãã¼ã¯ã©ã¹ã¿ãä½ããã¨ã«ãããã¨ãããããã¤ã§ããã
ã¡ãªã¿ã«Maxelerã¯ãSIMDãMIMDãªã©ã®ã³ã³ãã¥ã¼ã¿ã¢ã¼ããã¯ãã£ã®åé¡ã§æåãªã¹ã¿ã³ãã©ã¼ã大å¦ã®Flynnææãè¨ç«ããä¼ç¤¾ã§ãéèåéãç³æ²¹æ¢ç´¢åéã§ã®FPGAå°å ¥ã«ããããªã¼ãã£ã³ã°ãã³ãã¼ã ããã®ããã¸ã§ã¯ãã«ãããFPGAãµã¼ãã¼ã®è¨è¨ãæ å½ããã»ãããã®ä¸ã§åãFPGAç¨OSãã³ã³ãã¤ã©ãè§£æãã¼ã«ãªã©ã®ã³ã¢ãªãã¯ããã¸ã¼ãã²ã¨éãæä¾ãã¦ãããããã¸ã§ã¯ãã¸ã®è²¢ç®ã®å¤§ããã¨ãã®æåãåãã¦ãJP Morganã¯å¾ã«Maxelerã«è³æ¬åå ã¾ã§ãã¦ããã
CPU vs. FPGA
ã§ã¯ãªãæ®éã®CPUã使ããã«FPGAã使ã£ãã®ãï¼
- åºãCPUãããã®ä¸ã§ããï¼ãªã¹ã¯è¨ç®ã«å¿ è¦ã¨ãããï¼æ°å¤æ¼ç®ãå®è¡ãã¦ããé¨åã¯ã¨ã¦ãå°ãããã¾ããæã ã¯ã¨ã¦ãæ·±ãæ¼ç®ãã¤ãã©ã¤ã³ãå®è£ ãããã®ã ããCPUã«ã¯ãã®è½åããªãã
ãããã«CPUã£ã¦ãã¤ã®å¤§åããã£ãã·ã¥ããå¶å¾¡ç¨ã«ä½¿ããã¦ã¦ãå®éã®æ¼ç®å¨ã«ä½¿ããã¦ãã·ãªã³ã³ã®é¢ç©ã£ã¦ã¨ã¦ãå°ãããCPUã¯å®ã¯ããã¾ãè¨ç®ãã¦ãªãã®ã ããã®å°ãªãæ¼ç®å¨ã«å¤§éã®æ¼ç®ãããããããã¨ã£ããã²ã£ããé«éã«ãã¼ã¿ãããã°ã©ã ãæµãããå¿ è¦ãããããããã¼ã¿ãã£ãã·ã¥ãå½ä»¤ãã£ãã·ã¥ã«ãã®ãããå ´æãåãããã
- CPUã«æ¯ã¹ãFPGAã®åä½ã¯ããã¯ã¯ãã¾ãéããªããã§ã¯ãªãFPGAãé¸ã¶ã®ããããã¯ãFPGAã使ããã¨ã§æ°100段ã¨ãã£ãéå¸¸ã«æ·±ãæ¼ç®ãã¤ãã©ã¤ã³ã¨ãã¨ã¦ãç´°ããç²åº¦ã§ã®ä¸¦ååã«ããã¹ããªã¼ã ã»ã³ã³ãã¥ã¼ãã£ã³ã°ãå®ç¾ã§ããããã ãããã«ãããCPUã«æ¯ã¹æ°100åã®ã¹ã«ã¼ããããå¾ãããã±ã¼ã¹ãããã
ä¾ãã°ä¸å³ã®ããã«ãx^2 + xã£ã¦ããå¼ã ããã²ããã大éã«ä¸¦åå¦çããããã«ããããæ¼ç®å¨ä¸¦ã¹ãããã¨æã£ã¦ããæ±ç¨æ§ãæ±ããããCPUã«ã¯ãããã§ããªããã¾ããCPUã¯é次å¦çã¯å¾æã ãã©ã䏦忧ã¯ãã¾ãé«ããªãããããã8ã³ã¢ã¨ã16ã³ã¢ã¨ãã£ãç¨åº¦ã§ããã¤ããã»ã¹ãã¹ã¬ããã¨ãã£ãç²åº¦ã®å¤§ããåä½ã§ã®ä¸¦åæ§ããå¾ãããªããããCPUã§ã256åã®xã«ã¤ãã¦x^2 + xã並åã«è¨ç®ãããã¨ãããããã¡ãã¡256åã®ã¹ã¬ããä½ã£ã¦ãåã¹ã¬ããéã§ã³ã³ããã¹ãã¹ã¤ããããã®ã«æ°10μSããã£ã¦ãããªãã¦æãã§ä¸¦ååã®ãªã¼ãã¼ãããã鬼ã®ããã«é«ããªãã®ã§ãæ®éã¯ãããªãã¨ããã«ã«ã¼ããæ¸ããããªãã
FPGAã§ã¯ãä¸å³ã®ããã«èªåã®å¥½ããªæ¼ç®å¨ãæ¸ãã¦æ¨ªã«256å並ã¹ããããæ¼ç®ã®ã²ã¨ã¤ã²ã¨ã¤ããã¹ã¦ä¸¦ååã§ããã¨ããç²åº¦ã®ç´°ããã ããã¤ãã³ã³ããã¹ãã¹ã¤ãããOSã®ãªã¼ãã¼ããããã¾ã£ãããªãã®ã§ã1ã¯ããã¯ãã¤ã¾ãæ°nsãæ°10nsã§ãã¹ã¦ã®è¨ç®ãçµãã£ã¦ããã ãããæ°100åã®ã¹ã«ã¼ããããã¨ãã表ç¾ã決ãã¦å¤§ãããããªãã®ã ã
ã¹ããªã¼ã ã»ã³ã³ãã¥ã¼ãã£ã³ã°ï¼
JP Morganã®äººã¯FPGAåã®ããã²ã¨ã¤ã®ã¡ãªããã¨ãã¦ãã¹ããªã¼ã ã»ã³ã³ãã¥ã¼ãã£ã³ã°ãã¨ããè¨èã使ã£ã¦ãããã¡ãªã¿ã«ãStormãDSMSãCEPãªã©ã®ããã°ãã¼ã¿çéã§ããã¹ããªã¼ã ã¨ãHPCãGPU/FPGAã¾ããã§è¨ãã¹ããªã¼ã ã¯ãä¼¼ã¦ããã©ã¡ãã£ã¨æéï¼ç©ºéã®ã¹ã±ã¼ã«ãéããã©ã¡ãã大éã®ãã¼ã¿ãããã£ãããã¹ã¦è²¯ãããã§ããå¦çãããã®ã§ã¯ãªããæµãã¦ãããã®å ´ã§ã©ãã©ãå¦çããã¦ã¹ã«ã¼ããããä¸ããã¨ããææ³ã ããåè ã¯ããã«ã¦ã§ã¢ãã¯ã©ã¹ã¿è¦æ¨¡ã®è©±ã§ãå¾è ã¯ã·ã¹ãã å é¨ã®è¦æ¨¡ã®è©±ã
ãã®FPGAã«ããã¹ããªã¼ã ã»ã³ã³ãã¥ã¼ãã£ã³ã°ã®ã¡ãªããã«ã¤ãã¦ã¯ãHisa Andoさんが書いたMaxelerの石油探査事例のFPGA技術解説ã§è§£èª¬ããã¦ããã
æµ·åºæ²¹ç°ã®æ¢æ»ã§ã¯ãæ¯è¹ãããã«ã¹é³ãçºçãããæµ·åºå°å±¤ããã®åå°é³ãæ³èªãã3ä¸åãã®ãã¤ã¯ã§æãããè¹ãç§»åãããªããããã10ç§ãã¨ã«ç¹°ãè¿ãã®ã§ãçµæã¨ãã¦ã1æ¥ã«ãã©ãã¤ãç´ã®ãã¼ã¿ãæ¡åãããã¨ããããã®åå°æ³¢ã®ãã¼ã¿ã使ã£ã¦ãå¾ãããåå°æ³¢ã¨ä¸è´ãããããªæµ·åºå°å±¤ãè¨ç®ã§æ±ããããã®è¨ç®ã¯è¨å¤§ã§ãæ°1000æã®ãã¬ã¼ããµã¼ãã使ã£ã¦ã使¥ãããããFlynnææã¯ããã®ãããªè¨ç®ãMonolithic Computationã¨å¼ãã§ããã

æ¡å¤§ç»å 001 | ãã¬ãã¼ããã¹ã¿ã³ãã©ã¼ã大å¦Flynnææã®ç¹å¥è¬ç¾© - FPGAã§è¶ é«éè¨ç®â¦â¦ | ãã¤ãããã¥ã¼ã¹ via kwout
é常ã®ããã»ãµã§ã¯ãä¸éçµæãã¡ã¢ãªã«æ¸ãåºãã¦ã次ã®å¦çã§èªã¿è¾¼ãã¨ãããããªå¦çããããããã«ä¼´ã£ã¦ãã£ãã·ã¥ãã¹ãªã©ãçºçãããããããFPGAãã¼ã¹ã®ã¹ããªã¼ã å¦çã®å ´åã¯ãååããã¼ã¿ã®åãæ¸¡ãã¯ç´æ¥æ¬¡ã®å¦çã¹ãã¼ã¸ã«æ¸¡ãããã¡ã¢ãªãçµç±ããªããã¿ã¤ãã³ã°ãåãããããã«ãããã¡æ©è½ãå¿ è¦ã«ãªãå ´åãããããããã¯FPGAã®å é¨ã¡ã¢ãªã§å¯¾å¿ããããã®ããã«FPGAå ã§ãã¼ã¿ãåãæ¸¡ãã¦ãã¾ãã®ã§ããã£ãã·ã¥ãã¹ãçºçããªãã

æ¡å¤§ç»å 003 | ãã¬ãã¼ããã¹ã¿ã³ãã©ã¼ã大å¦Flynnææã®ç¹å¥è¬ç¾© - FPGAã§è¶ é«éè¨ç®â¦â¦ | ãã¤ãããã¥ã¼ã¹ via kwout
ã¤ã¾ããã§ããã ããã£ãã·ã¥ã¡ã¢ãªãã¡ã¤ã³ã¡ã¢ãªãä»ããã«ãå°ããªãããã¡ãæãã§æ¼ç®å¨å士ã§ãã¼ã¿ããã±ããªã¬ã¼ãã¦ã¯ããã¯ãã¨ã«åãæ¸¡ããã¨ã§ã徿¥ã®CPUã®ãããªãã¤ãã³åã³ã³ãã¥ã¼ã¿ã«ãããã¡ãªã¡ã¢ãªããã«ããã¯ããªããªããã¨ããã¡ãªããã ãæ±ç¨ã®CPUã§ã¯ç¹å®ã®ã¢ããªã±ã¼ã·ã§ã³ãåæã¨ãã¦æ¼ç®å¨éãã¹ããªã¼ã ã§ã¤ãªãã§ãããã¨ã¯ã§ããªãããã¢ããªãã¨ã«åè·¯ãæ¸ãæãã§ããFPGAãªãèªç±ã«è¨è¨ã§ããã
ãã 䏿¹ã§ãã¹ããªã¼ã åããã¾ãå¹ããªãç¨éã«ã¤ãã¦ã¯ãã®ææ³ã®æå¹æ§ã¯ä½ããªããä¾ãã°æ¼ç®å¨éã®ãããã¡ã§åã¾ããªã大ããªä¸éãã¼ã¿ãçããç¨éã§ã¯ããããã¡ã¤ã³ã¡ã¢ãªã«ã¾ã§æã£ã¦ããå¿ è¦ããããããããã«ããã¯ã«ãªã£ã¦ãã¾ããã¯ããã¦FPGAã¯ã¹ããªã¼ã åãå¤§è¦æ¨¡ä¸¦ååã«åããã¢ããªã±ã¼ã·ã§ã³ã«ã®ã¿æå¹ãªã®ãï¼ããã以å¤ã®ã¢ããªã±ã¼ã·ã§ã³ã§ã¯CPUã«å¯¾ãã¦åã¡ç®ã¯ããã®ãï¼ãã«ã¤ãã¦ã¯è°è«ãå¿ è¦ã ããã
ã¾ããã¹ããªã¼ã ã»ã³ã³ãã¥ã¼ãã£ã³ã°ãå¤§è¦æ¨¡ä¸¦åæ¼ç®ã¨ããã°GPUã®å¾æåéã ããªãJP Morganã¯GPUã使ããã«FPGAã使ã£ãã®ã ãããã
- GPUã¨ã®æ¯è¼ï¼GPUã¨FPGAãããããç¨ãã¦è©¦ä½ããæ¯è¼ããããã®çµæãã©ã¡ãã«ãåãä¸åãããããã¨ãæããã«ãªã£ããä¾ãã°ããã©ã³ã·ã§è©ä¾¡ã«ã¯FPGAãé©ããããã©ã«ãï¼ãµãã¤ãã«ã«ã¼ãã®çæã«ã¯GPUãåãã¦ãããåè ã«ã¤ãã¦ã¯FPGAã®æ¹ã15åã»ã©é«éã§ãã£ããããFPGAãæ¡ç¨ããã
GPUã¯ãããããã¢ã¼ããã¯ãã£ãåºå®ããã¦ãããããããã«ãã¾ããããæ¼ç®ãªãFPGAããéããéç©åº¦ãé«ãã䏿¹ã§ãHPCåéã§ã¯GPUã«ãã¾ãã¯ã¾ããªãç¨éãå°ãªããªãã¨èãããããããç¨éã§ã¯ã¼ãããèªç±ã«ã¢ã¼ããè¨è¨ã§ããFPGAã«è»é ãä¸ãããæ¢æã®é«å質ãªã¯ã«ããè²·ãããã¡ãã£ã¨é«ããã©ã¯ã«ãã®å·¥å ´ãè²·ã£ã¦èªå好ã¿ã®ã¯ã«ããä½ãããã®é¸æã®ãããªãã®ã§ããã䏿¦ã«ã©ã£ã¡ãåªãã¦ããã¨ã¯è¨ãé£ãã®ã§ãCPUãGPUãFPGAã驿驿ã§ä¸¡æ¹ä½¿ãåããããã®ããã¹ãã ãããã¡ãªã¿ã«JP Morganã§ã¯ãGPUã¨FPGAããããã®ãµã¼ãã¼ã»ã¯ã©ã¹ã¿ãä½µç¨ãã¦ããã
ãã¼ã¿ã»ã³ã¿ã¼ã®å¹çãå·¦å³ãããé»åæ§è½æ¯ã
ããã¦JP MorganãFPGAãé¸ãã æ±ºå®çãªè¦å ã®ã²ã¨ã¤ã¯ãæ¶è²»é»åã®ä½ãã ã
- JP Morganãéç¨ããè¨ç®ãµã¼ãã¼ã«ããã¦æãéè¦ãªè¦ä»¶ã®ä¸ã¤ãé»åæ¶è²»ããã¼ã¿ã»ã³ã¿ã¼ã®ã¹ãã¼ã¹ãè¶³ããªããªããã¨ã¯ãªããã黿ºå®¹éã¯ã¤ãã«ä¸è¶³ããã¡ããã®ããããµã¼ãã¼ã鏿ããä¸ã§ã¯é»åæ§è½æ¯ãã¨ã¦ãéè¦ãªææ¨ã¨ãªãã
FPGAã¯åä½å¨æ³¢æ°ãæ°100MHzã¨CPUãã䏿¡ãããä½ãããã®ãããã§æ¶è²»é»åãããã¨å°ãªãããµã¼ãã¼æ°å°è¦æ¨¡ãªããã¾ãæ°ã«ããã»ã©ã®å·®ã§ã¯ãªããã©ãããããã¼ã¿ã»ã³ã¿ã¼è¦æ¨¡ã«ã¾ã§ç©ã¿éãªãã¨æ ¼æ®µã®å·®ç°ãçãããããã¦ãä¸è¬çãªãã¼ã¿ã»ã³ã¿ã¼ã®é»å容éã¯æ°MWç¨åº¦ãä¸éãã©ããå¤é»è¨åã®å¶ç´ã§ãã以ä¸ã¯ä¸ãã«ãããããããã®éãããé»åã§ã©ãã ãã®æ å ±å¦çãããªãããã¯ãJP Morganã«éããã¯ã©ã¦ãè¦æ¨¡ã®ãã¼ã¿ã»ã³ã¿ã¼ãéç¨ãã伿¥ã«ã¨ã£ã¦å ±éã®èª²é¡ã ãä¾ãã°ãHP Labsã¨Facebookã¨ARMãæ°ãæåã«çºè¡¨ããmemcachedのFPGA実装に関する論文ã§ããFPGAã®é»åæ§è½æ¯ã®é«ããéè¦ãªã¢ããã¼ã·ã§ã³ã¨ãªã£ã¦ããã
FPGAã§ã¤ãã£ãã¹ãã³ã³ã§134åéããªã£ã
ã§ã¯ãFPGAã§ã¤ãã£ãã¹ãã³ã³ã¨ã¯ãå ·ä½çã«ã¯ã©ã®ãããªãã¼ãã¦ã§ã¢æ§æã§ãã©ã®ç¨åº¦ã®ããã©ã¼ãã³ã¹ãéæã§ããã®ã ãããã
- FPGA2åã¨48GBã¡ã¢ãªãæè¼ããFPGAãµã¼ãã¼ã40ãã¼ã並ã¹ãæ§æã®ã·ã¹ãã ãæ§ç¯ããã®è¦æ¨¡ã«ãªãã¨ã¹ã¼ãã¼ã³ã³ãã¥ã¼ã¿ã¼ã¨è¨ã£ã¦ããã ããã
- ããã¾ã§å ¨ç¤¾è¦æ¨¡ã®ãã¼ããã©ãªãªè©ä¾¡ã«8æéã»ã©ããã£ã¦ãããã40ãã¼ãã®FPGAãµã¼ãã¼ã«ãã£ã¦238ç§ã«ã¾ã§ç縮ããããCPUåä½ã¨FPGAåä½ã§æ¯ã¹ãã¨134åã®é«éåã¨ãªã£ãã
- CPUä¸ã§ã¯è¨ç®éçã«å®æ½ã§ããªãã£ãè¤éãªçµã¿åããã®ã·ããªãªãè¨ç®å¯è½ã«ãªãããã¼ããã©ãªãªã®ãªã¹ã¯ã«ã¤ãã¦ããæ·±ãæ´å¯ãå¾ãããããã«ãªã£ãã
8æéãã4åã¸ãFPGAéã£ãã¨ãããã徿¥ã®ã½ããã¦ã§ã¢å®è£ ã§ã¯CPUãOSã®ããã«ããã¯ãããããã大ããã£ãã¨ãããã¨ã§ãããã
C++ã³ã¼ãããFPGAã¸è½ã¨ãããã»ã¹
ãã®äºä¾ã®ã¨ã¦ãé¢ç½ãã¨ããã¯ãJP Morganãã©ã®ãããªããã»ã¹ãçµã¦æ¢åã®ãªã¹ã¯è¨ç®å¦çãFPGAåãã¦ãã£ãã®ããè¦å´è©±ãå«ãã¦ç´¹ä»ããã¦ããç¹ã ã
- å ã®C++ã³ã¼ãã®è§£æã«å§ã¾ããã³ã¼ãã®å¤æãã«ã¼ãã«ã¸ã®åå²ãããã¦FPGAã§ã®å®è£ ããã®ï¼ã¤ã®ããã»ã¹ã宿½ãããã®çµæãè¸ã¾ãã¦ä½åº¦ãã®ã¤ãã¬ã¼ã·ã§ã³ã宿½ããããã®FPGAåã¯é常ï¼ãæç¨åº¦ã§å®äºããã
æåã¯æ¢åã³ã¼ãã®è§£æããå§ã¾ãã徿¥ã®ã·ã¹ãã ã«ããããã©ã³ã·ã§ã®ãªã¹ã¯è©ä¾¡ã¯ããããã£ã±ã«ã¯ä»¥ä¸ã®ãããªC++ã³ã¼ãã§è¨ç®ããã¦ããã
ãã®Maxelerã®ãã¼ã«MaxPartonãå©ç¨ãã¦ãæ¢åã®C++ã³ã¼ããåæããã
- ã³ã¼ãã®ã³ã³ããã¼ã«ããã¼ããã¼ã¿ããã¼ãä¾åé¢ä¿ãè§£æãããã³å®è¡æéã¨ã¡ã¢ãªæ¶è²»ã®ãããã¡ã¤ãªã³ã°ã宿½ãããã«ãããã³ã¼ãã®ã©ã®é¨åããããã¹ããããªã®ãããããããã¼ã¿ãç§»åãã¦ãã®ãè¨ç®ãã¦ãã®ãçãæããã«ããã
ãã®è§£æã®çµæãFPGAã«è½ã¨ãã¹ããéãé¨åããæ´ãåºãããã
- CDOãã©ã³ã·ã§ã®è©ä¾¡ã¢ã«ã´ãªãºã ã«ããã¦éãã®ã¯ï¼ã¤ã®æ¼ç®ã«ã¼ãã§ããã1) ã³ãã¥ã©ãç¨ããconditional survival probabilitiesã®ç®åºã2) ç³ã¿è¾¼ã¿ãç¨ããprobability of loss distributionã®ç®åºã
- ã¯ãªã³ããæ¸ããå ã®C++ã³ã¼ãã¯ãªãã¸ã§ã¯ãããã³ãã¬ã¼ããå¤ç¨ããè¤éãªãã®ã ããC++ã®ãããã®æ©è½ã®å¤ç¨ããCPUä¸ã§ã®æ¼ç®ãé ãåå ã®ä¸ã¤ã§ãã£ãã
- ãã®ã¢ã«ã´ãªãºã ã«å¯¾ãã¦MaxPartonã«ããåæã宿½ããçµæãå¦çæéã®23%ãã³ãã¥ã©ã®è¨ç®ã«ã75%ãç³ã¿è¾¼ã¿ã«è²»ãããã¦ãããã¨ãåãã£ãã
コピュラï¼copulaï¼ã£ã¦ããåãããªããã©ãçµ±è¨ã§ä½¿ã颿°ãããããã®ã³ãã¥ã©ã¨ç³ã¿è¾¼ã¿ã®FFTãè¨ç®ã®å¤§åãå ãã¦ããã
ã¡ãªã¿ã«ããã§åºã¦ããクオンツã¨ã¯ãéèå·¥å¦ãé§ä½¿ãã¦ããªããã£ããè¨è¨ãããããã®ããããèªåã§C++ã§æ¸ãããã§ããrocket scientistãªäººãã¡ã ã給æè¯ãããã ãªã¼ã£ãã
JP Morganã®ã¯ãªã³ããæ¸ãC++ã³ã¼ãã¯ããªãOOPã£ã½ãã³ã¼ããããããã®ãªã¼ãã¼ãããã大ããã¨ææãã¦ãããã¾ããã³ãã¥ã©ã ã®è¤éãªçµ±è¨çæ¦å¿µããã£ã±ãåºã¦ããã³ã¼ããªããã©ãã©ãæ½è±¡åããããªããããä¸ã«ç¤ºããC++ã³ã¼ãã¯ããã¨ã®è¤éãªOOPçã³ã¼ããCã£ã½ãå¹³ãã«æ¸ããªããããã®ã ã
æé軸ãã空é軸ã¸ã®å±é
以ä¸ã®ãããªåæã«ãã£ã¦æããã«ãªã£ãéãå¦çãä¾ãã°ç³ã¿è¾¼ã¿ç©åã®é¨åãªã©ãä¸å¿ã«FPGAã§è¨è¨ãã¦ããã
- convoluterï¼ç³ã¿è¾¼ã¿ç©åå¨ï¼ã®è¨è¨ãããã§éè¦ãªç¹ã¯ãã«ã¼ãã®ä¸ã§æé軸ã«ä¸¦ã¹ããã¦ããæ¼ç®ãã空é軸ï¼ã¤ã¾ãFPGAä¸ã«ä¸¦ã¹ã夿°ã®æ¼ç®å¨ï¼ã«å±éãã¦ããç¹ã
- ã¯ãªã³ãã¯æ®éãããã®æç¹ããå§ã¾ã£ã¦ãã®æç¹ã§çµãããã¨ãã£ãæé軸ã«ãã£ã¦ã³ã¼ããæ¸ããã¡ã ããããã空éã®ä¸¦åæ§ã«ç½®ãæãã¦è¨è¨ããã¨ããçºæ³ã®è»¢æã«æ £ããããã®ãé£ããã£ãã
æé軸ãã空é軸ã¸ã®å±éããããFPGAã®å¤§ããªãã©ãã¤ã ã»ã·ããã®ã²ã¨ã¤ã§ãã½ããã¦ã§ã¢ã»ããã°ã©ãã¼ã«ã¯ããã¾ã§ãªãã£ãçºæ³ãæ±ãããããç°¡åã«è¨ãã¨ãã«ã¼ããåããæ¼ç®å¨ã並ã¹ãã£ã¦ãã¨ã ãGPUã®ããã°ã©ãã³ã°ãããã«è¿ããã©ãèªåã®å¥½ããªããã«æ¼ç®å¨ãè¨è¨ãã¦ã©ãã©ãæ·±ããã¤ãã©ã¤ã³ãçµãã ãã¹ããªã¼ã ãæ§æã§ããã¨ããèªç±åº¦ã®é«ãã大ããç°ãªãã
ãã«ã¼ãã«ãéãã¹ããªã¼ã ã§ã¤ãªãã§ãã
ãããã¦ãã¼ãã¦ã§ã¢ã¨ãã¦è¨è¨ãããã³ãã¥ã©ãconvoluterãªã©ã®æ¼ç®å¨ã¯ãFPGAä¸ã§ã¯ãã«ã¼ãã«ãã¨å¼ã°ããåä½ã§é ç½®ããããããã®ã«ã¼ãã«éãã¤ãªããã¼ã¿ã¹ããªã¼ã ãã½ããã¦ã§ã¢ã§è¨è¿°ããã
- C++ã§è¨è¿°ããã以åã®è¨ç®ã¢ãã«ãå ã«ãFPGAä¸ã«CopulaãConvolutorçã®ãã«ã¼ãã«ããæ§æã
- FPGAä¸ã®ã«ã¼ãã«ã«æµããã¼ã¿ã¹ããªã¼ã ã管çããAPIãMaxelerOSä¸ã«ä½æã
ã«ã¼ãã«éãã¤ãªããã¼ã¿ã¹ããªã¼ã ã®å¸¯åãã©ã®ã¡ã¢ãªã使ãã®ãã¨ãã£ã夿ããã®æç¹ã§è¡ãã
- åæã§æããã«ãªã£ãå¿ è¦ãªãã¼ã¿ã®éã¨å¸¯åã«åããã¦ãã·ã¹ãã ã®ãªã½ã¼ã¹ãå²ãå½ã¦ããæ°MBç¨åº¦ã®éã®ãã¼ã¿ãªãFPGAã®BRAMã使ãã24GB以ä¸ãªãDDRã¡ã¢ãªããã以ä¸ãªããã¹ãã¡ã¢ãªãã¾ããæ°TB/sã®å¸¯åãå¿ è¦ãªãBRAMãæ°10GB/sãªãDDRãæ°GB/sãªãPCIeãã¹ããªã©ã
- ãã®çµæãå ã«ãåã ã®æ¼ç®ãCPUã«ç½®ãã®ãFPGAã«ç½®ãã®ã決å®ãããã
- FPGAä¸ã«å®è£ ããå ´åã®æ¼ç®ç²¾åº¦ãã¬ã¤ãã³ã·ãããã³ã¹ã«ã¼ãããããå®è£ åã®åææ®µéã§è¦ç©ããã
ããã¨ãä¾ãã°ä¸è¿°ã®C++ã³ã¼ãã¯ä»¥ä¸ã®ãããªJavaã³ã¼ãã«ç½®ãæããããã
ã«ã¼ããåãã¦æ¼ç®ãã¦ãã³ã¼ãããFPGAä¸ã®æ¼ç®å¨ã®éãã¤ãªãã¹ããªã¼ã ãå®ç¾©ããã³ã¼ãã«ç½®ãæãã¦ããããã ãã¾ããããã®ãããã¯å¸¯åãã£ã·ãã»ããããPCIeãã¹ã4æ¬ä½¿ã£ã¨ãããã¿ãããªãã¼ãè¨è¨ã¾ã§Javaã§æ¸ãã¡ããã®ãããã¸ãæå¿«ã§ããããã®ãããã¯Maxelerã®MaxCompilerã«ããé«ä½åæï¼é«ç´è¨èªãããã¸ã¿ã«åè·¯ãçæããæè¡ï¼ã®è½åã«ä¾ãã¨ããã大ããã
ãã¤ãã©ã¤ã³åã§ããã©ã¼ãã³ã¹ã追ãè¾¼ã
ããã¦éçºãã§ã¼ãºã®å¾åã§ã¯ãããã©ã¼ãã³ã¹ã®è¿½ãè¾¼ã¿ã«å ¥ããåã ã®ã«ã¼ãã«ãã§ããã ãæ·±ããã¤ãã©ã¤ã³åãã¦ãããã¨ã§ãã¹ã«ã¼ããããå¼ãä¸ãã¦ãã使¥ã ã
- ã«ã¼ãã«ã®åºæ¬è¨è¨ãã¾ã¨ã¾ã£ãããç¶ãã¦ã¯åã«ã¼ãã«ã«ã¤ãã¦100段ã«ããã¶æ·±ããã¤ãã©ã¤ã³ãFPGAä¸ã§æ§æããããã¤ãã©ã¤ã³åã«ãã£ã¦ãåã ã®æ¼ç®ã®ã¬ã¤ãã³ã·ã¯ä¼¸ã³ãããã¹ã«ã¼ãããã¯å¤§å¹ ã«ä¼¸ã³ãã
- æçµçã«ã¯ãã³ãã¥ã©ããã³convoluterã®ã«ã¼ãã«ã1ã¤ã®FPGAãããä¸ã§100段ã®ãã¤ãã©ã¤ã³ã§æ§æã
ãã®æ®µéã«ãªãã¨ããªããã¼ãã¦ã§ã¢è¨è¨ã®è·äººæãè¦æ±ããããåè·¯ä¸ã®ã©ã®é¨åãã¯ãªãã£ã«ã«ã»ãã¹ã«ãªã£ã¦ããããããã»ã«ã³ãåä½ã§è¿½ã£ã¦ãã£ããããã®é¨åããã¤ãã©ã¤ã³ã«åè§£ãã¦ã¯ããã¯å¨æ³¢æ°ãè©°ãã¦ãã£ãããã¨ãã£ãæè½ãå¿ è¦ãªã®ã§ããããã«ããã¯ãã¼ãã¦ã§ã¢ã»ã¨ã³ã¸ãã¢ãããªãã¨é£ããã¯ãã
æµ®åå°æ°ç¹æ¼ç®ã®æé©å
GPUã¨æ¯ã¹ãFPGAã®å¼±ç¹ã¨ãã¦ææææãããã®ãæµ®åå°æ°ç¹æ¼ç®ã ãFPGAä¸ã§doubleãæ±ãæ¼ç®å¨ãè¨è¿°ããã¨å ´æãåããã¯ããã¯æ°ããããã使ã£ã¦ãã¾ãã®ã§ããªãã¹ããªãdoubleã使ããã«æ¸ã¾ãããããããéèã®ãªã¹ã¯è¨ç®ã«ä½¿ãã¨ãªãã¨è¨ç®ç²¾åº¦ãæ éã«èæ ®ããå¿ è¦ãããã
- MaxCompilerã§ã¯ãIEEE754æºæ ã®å精度ã»å精度æ¼ç®ããµãã¼ããããã¾ãè¦ä»¶ã«åããã¦ææ°é¨ã¨ä»®æ°é¨ã®ç²¾åº¦ããããã¹ããªã¼ã ãã¨ã«æå®ãããã¨ãå¯è½ããã¹ã¦ã®æ¼ç®ã«å精度ãå¿ è¦ãªããã§ã¯ãªãã®ã§ããã®æ©è½ã¯å¤§å¤ä¾¿å©ã精度ãè½ã¨ãã»ã©ããã©ã¼ãã³ã¹ãåä¸ãFPGAä¸ã®ãªã½ã¼ã¹æ¶è²»ãæãããããæå¤§ã§20%ã®é度åä¸ãå¯è½ã§ã精度ãããç¨åº¦ä½ãã¦ãã¹ãã¼ããåªå ãããããªãããã¹ããªã¼ã ã«ç¨ãã¦ããã
- å ã®C++ã³ã¼ãã§ã¯å¤ãã®å¤æ°ãdoubleã§å®ç¾©ããã¦ããããå精度ãä¸è¦ãªé¨åã«ã¤ãã¦ã¯ç²¾åº¦ãè½ã¨ãã¦ããããã®ç¹ãã¯ãªã³ãã«ç´å¾ãããã®ãã¨ã¦ãé¢åãã¯ãªã³ãã«ã¯ãã¹ã¦ãå精度ã§è¨ç®ããªãã¨æ°ãæ¸ã¾ãªã人ãå¤ãã䏿¹ã§ããæçµçã¯ã»ã³ãåä½ã§æ£ããçµæããã°ããåºããã°ããã®ã ãã¨ããèãã®ã¨ã³ã¸ãã¢ãå¤ãããã®ä¸¡è ã®ãããããã«ãªãã
- éè¦ãªç¹ã¯ãã©ã®ç¨åº¦ã®æéããããã°ã©ã®ç¨åº¦ã®ç²¾åº¦ãå¾ããããã®ãã¬ã¼ããªããç¥ããã¨ã
è¦ä»¶çãªãã¬ã¼ããªãã ãã§ã¯ãªããã¯ãªã³ãã¨ã®æåçè¡çªãé£ããç¹ã§ãã£ãã¨ãã話ãã¨ã¦ãé¢ç½ããã¾ãããã»ã©æ°ã«ããdoubleãå¯è±ªçã«ä½¿ããã½ããã¦ã§ã¢å®è£ ã¨ã¯ç°ãªããããã»ã«ã³ãåä½ã§ã®é度åä¸ãç¦ç¹ã¨ãªãFPGAéçºã§ã¯ãã®ã³ã¹ãã¨ç²¾åº¦ã®ãã¬ã¼ããªããæèããå¿ è¦ãçããã
FPGAéçºã¯ã¾ã é£ãã
æå¾ã«ãFPGAéçºã®èª²é¡ã¨ä»å¾ã«ã¤ãã¦ã¾ã¨ãã
- FPGAä¸ã§ã®åæ§ã®è¨è¨ãæé©åãè¡ã£ãç ç©¶çã¯åå¨ãã¦ããããæ¥çã§ãæå¤§è¦æ¨¡ã®åå¼ãæ±ãåç¨ãµã¼ãã¹ã®ãããã¯ã·ã§ã³ç°å¢ã§ãããå®ç¾ããã®ã¯å®¹æãªãã¨ã§ã¯ãªãã£ãã
å¤§è¦æ¨¡ãªãããã¯ã·ã§ã³ç°å¢ã§ã®FPGAã®æå ¥ã¯JP Morganã«ã¨ã£ã¦è¦å´ãå¤ãã£ãããããã¾ããCPUãGPUã«ããéçºã¨ã¯ã¾ã£ããç°ãªãã¹ãã«ã¨çµé¨ãè¦æ±ããããããèªç¤¾åç¬ã§ã®éçºã¯é£ãããJP Morganã®äºä¾ã§ãMaxelerã®ãã¼ã«ãã¨ã³ã¸ãã¢ã®è½åã«å¤§ããä¾åãã¦ããæ§åã伺ãããHisa Andoããã®åè¿°ã®è¨äºã§ããFPGAéçºã®ã³ã¹ãã«ã¤ãã¦ä»¥ä¸ã®ããã«ææããã¦ãã
ãã®ãããªæé©åãããã¹ããªã¼ã å¦çãFPGAã«å®è£ ããã®ã¯ç°¡åã§ã¯ãªããMaxelerã§ã¯ãé常ã2人ã®å°éå®¶ããã¢ã§ä»äºãããFPGAå®è£ ã®ãããã¿ã¤ããä½ã£ã¦ãã¢ãè¡ãã¾ã§ã«3ã«æããã®å¾ãç´å ¥ãã製åã¬ãã«ã«ä»ä¸ããã®ã«ããã«3ã«æç¨åº¦ããããå ¨ä½ã§ã¯1人年ç¨åº¦ãå¿ è¦ã¨ããã¨ãããï¼ä¸ç¥ï¼ãã®ããã«FPGAã®éçºã«ã¯1人年ç¨åº¦ã®å·¥æ°ããããã®ã§ãã³ã¢å¦çé¨ãã¹ããªã¼ã çã«å¦çã§ãããã¤ãå¹´éãéãã¦å¦çæéã®é·ãMonolithicãªå·¨å¤§è¨ç®ã§ãªãã¨ãã¤ããªããããã®ãããªæ¡ä»¶ãæºè¶³ããã±ã¼ã¹ã§ã¯æ±ç¨CPUã使ç¨ããã®ã«æ¯ã¹ã¦å¤§å¹ ãªé«éåã¨ä½é»ååãå®ç¾ã§ããææ³ã§ããã
ã¤ã¾ãç¾ç¶ã§ã¯ãJP Morganã®ããã«å¤§è¦æ¨¡ãªHPCäºä¾ã§ãªãã¨Maxelerã®ã¨ã³ã¸ãã¢ãéã£ãããã¼ã«ãè²·ã£ãããããããªã³ã¹ãã¯ãã¤ããªãããã§ããã
CPUï¼FPGAã®SoCã§ããããå¤ãã
ã¨ã¯ããããã®ç¶æ³ã¯ãã2ã3å¹´ã§å¤§ããå¤ããã¨æããFPGAã®ã³ã¹ããã¦ã³ã¨é«éç©åã¯ããªãã®å¢ãã§é²ãã§ãã¦ãä¸è¬çãªCPUããµã¼ãã¼ã«ãæ®éã«FPGAãè¼ãã¤ã¤ãããFPGAå°å ¥ã®ãã¼ãã«ãããã¨ä½ããªã£ã¦ããããã ãä¾ãã°IBMはPOWER8で外部FPGAとCPUとのキャッシュ連携を可能にする機能を載せてãã¦ããããHPãæ¬¡ä¸ä»£ãµã¼ãã¼ã®HP MoonshotでFPGAカードããµãã¼ããããããã«ã¯ãARMã³ã¢ã¨FPGAãã²ã¨ã¤ã®ãããã«æ··è¼ãããããããSoCï¼System On Chipï¼ã§ããXilinx ZynqãAltera SoCãæè¼ããLinux組み込みボードãæè¿ã«ãªã£ã¦ããããåºåãå§ãã¦ãã¦ã安いものは2万円ほどã§è²·ããããã«ãªã£ããããããSoCã®ç»å ´ã§ãã½ããã¦ã§ã¢ã»ã¨ã³ã¸ãã¢ã«ã¨ã£ã¦ã¯ä¸æ®µã¨FPGAå°å ¥ãããããããªãã
Zynqã§ã¯ãARMã¨FPGAéã§L2ãã£ãã·ã¥ãå ±æãã¦ã¦ãGPUã¨åãããã«FPGAãARMã®ã³ããã»ããµã¨ãã¦ä½¿ãããARMä¸ã®Linuxã§åãã¢ããªããFPGAã«è¼ããæ©è½ãAPIã³ã¼ã«ã§å¼ã³åºããããã£ã¦ããã¹ã¦ã®æ©è½ãFPGAä¸ã§ã¼ãããéçºããã®ã§ã¯ãªããæ¢åã®ã½ããã¦ã§ã¢ã®ä¸é¨åã®ã¿FPGAåãã¦ã¢ã¯ã»ã©ã¬ã¼ã·ã§ã³ãããã¨ãã£ã段éçãªå°å ¥ãå¯è½ã ãXilinxãåºãã¦ãããµã³ãã«ã«ã¯ãOpenCVアプリの画像処理部分をFPGA化してケタ違いに高速化ã¨ããã®ããããã¾ãç»åå¦çãHPCå¿ç¨ã«éãããä¾ãã°Zynqã®FPGAã¯GbEã«ãç´çµã§ãããããæè¿ã®å¦ä¼çºè¡¨ã§æµè¡ã£ã¦ãFPGAで実装した鬼速のmemcachedã®ãããªãããã¯ã¼ã¯ã¢ããªãå¤§è¦æ¨¡ãã¼ã¿å¦çã¢ããªãã以åã«æ¯ã¹ã¦å®è£ ããããã¯ãã ããã¤ãã¯ãã£ã¦ã¿ããï¼
ãã¨ã¯Maxelerã®MaxCompilerï¼ãã¶ããããé«ãï¼ãXilinxã®Vivado HLSï¼50ä¸åï¼ã®ãããªé«æ©è½ã®é«ä½åæãã¼ã«ãå®ããã§ããã°ç¡åã§æä¾ãããã°ãã½ããã¦ã§ã¢ã»ã¨ã³ã¸ãã¢ã«ã¨ã£ã¦ã®FPGAéçºã®ãã¼ãã«ã¯ããã«ä½ããªããå¿ç¨ç¯å²ãåºããã¯ãããããªæ¥ãæ¥ããã¨ãæå¾ ãã¤ã¤ããã¾ã®ãã¡ã«FPGAã®ç·´ç¿ããã¦ãããã°ããã¨æã£ãã®ã§ãã£ãã











