GPUæŒç®åšã«ããŒã¿ãäŸçµŠããã¬ãžã¹ã¿
GPUã¯è¶ ãã«ãã¹ã¬ããã®è¶ 䞊åã®é«æ§èœããã»ãµã§ãããNVIDIAã®ãK40 GPUãã«äœ¿çšãããŠãããGK110B GPUããããã«ã¯å粟床浮åå°æ°ç¹æŒç®åšã192Ã15=2,880åæèŒãããŠããããããã®ç©å(A+=BÃC)æŒç®ãé£ç¶ããŠå®è¡ããæé«æ§èœãåŒãåºãããšããã°ã 1åãããAãBãCã®3ã€ã®å€ãäŸçµŠããæŽæ°ãããAã®å€ãæ ŒçŽããå¿ èŠããããã€ãŸããæ¯ãµã€ã¯ã«4Ã2,880=11,520åã®32bitããŒã¿ã®èªã¿æžããåºæ¥ãªããã°ãªããªããããã¯46,480ãã€ãã§ãããã¯ããã¯ã1GHzãšãããš46.48TB/sã®ãã³ãå¹ ãå¿ èŠãšããã
ãã®èšå€§ãªãã³ãå¹ ãå®çŸãããããNVIDIAã®ãã€ãšã³ãGPUã§ããKeplerã¢ãŒããã¯ãã£ã®ãSM(Streaming Multiprocessor)ãã¯ã64Kåã®32bitã¬ãžã¹ã¿ãæã£ãŠããã
ããã¯256KBã®å®¹éã§ãããGK110ãããã¯15åã®SMãéç©ããŠããã®ã§ãåèšã§ã¯3,840KBã®å®¹éã§ãããGK110ãããã«æèŒãããŠããã¬ãã«2ãã£ãã·ã¥ã®å®¹éã¯ã1,536KBã§ããããããã®ã¬ãžã¹ã¿ãã¡ã€ã«(倿°ã®ã¬ãžã¹ã¿ããŸãšããŠãã¢ãã¬ã¹ã§éžæããŠã¢ã¯ã»ã¹ã§ããããã«ãããã®)ã¯ãGK110ãããã®äžã§æã倧ããªå®¹éã®èšæ¶è£ 眮ã§ããã
ãããŠãAãBãCã3ã€ã®å€ã®èªã¿åºãããŒããšãæŽæ°ãããAã®ããã®1ã€ã®æžã蟌ã¿ããŒããæã€3R1Wã®æ§é ã®ã¬ãžã¹ã¿ãã¡ã€ã«ãå¿ èŠã«ãªãã
å³3-16ã¯éåžžã®1RW(Read ãWriteã®ã©ã¡ãããã§ããããŒãã1å)ã®SRAMã»ã«ã®åè·¯ã§ãããäžå€®ã®éšåãã€ã³ããŒã¿ãã«ãŒãç¶ã«ã€ãªãã ã©ããã§ãããã¯ãŒãç·ãã°ã©ã³ãã«ããŠãã¹ãã©ã³ãžã¹ã¿ããªãã«ããç¶æ ã§ã¯ããã®éšåã§1/0ã®ç¶æ ãä¿æããã
èªã¿åºãã®å Žåã¯ãã¯ãŒãç·ãVddã«äžãããšãã¹ãã©ã³ãžã¹ã¿ããªã³ã«ãªããã©ããã®ç¶æ ãïŒãšâã®ãããç·ã«èªã¿åºãããããããå·®ååè·¯ã®ã»ã³ã¹ã¢ã³ãã§èªã¿åºããæžã蟌ã¿ã®å Žåã¯ãã¯ãŒãç·ãVddã«äžããŠãã¹ãã©ã³ãžã¹ã¿ããªã³ã«ããŠãïŒãšâã®ãããç·ã«æžãèŸŒãæ å ±ãäžããã
ãã ãããã©ã³ãžã¹ã¿ã®åŒ·ãã«ã¯è£œé ãã©ã€ããããã®ã§1/0ã©ã¡ããã®ç¶æ ã«ãªãããããšããããšãèµ·ããããã¹ãã©ã³ãžã¹ã¿ã倧ããããèšèšã ãšãèªã¿åºãã®æã«ãªããããæ¹ã®ç¶æ ã«ãªã£ãŠããŸããã©ããã«èšæ¶ãããŠããããŒã¿ãå転ããŠããŸãããšãèµ·ããåŸãããŸãããã¹ãã©ã³ãžã¹ã¿ãå°ãããããšãåããšã¯éã®ããŒã¿ã®æžã蟌ã¿ãã§ããªããšããåé¡ãèµ·ãããã¡ã¢ãªã»ã«ã埮现åãããšãã©ã€ããå¢ãåãã倧ãããªãã®ã§ã埮å°ãªã¡ã¢ãªã»ã«ã¯åäœããŒãžã³ãå°ãããèšèšãé£ãããªã£ãŠããããããã¯æšªéã®è©±ã§ããã
äžæ¹ãã¬ãžã¹ã¿ãã¡ã€ã«ã«äœ¿ãã»ã«ã¯3ã€ã®èªã¿åºããš1ã€ã®æžã蟌ã¿ãåæã«å®è¡ã§ããå¿ èŠãããããã®3R1Wã»ã«ã®åè·¯ã®äžäŸãå³3-17ã«ç€ºããæ å ±ãèšæ¶ããã©ãããšæžã蟌ã¿åè·¯ã¯å³3-16ãšã»ãŒåãã§ããããå³åŽã«3çµã®èªã¿åºãåè·¯ãä»ããããŠãããReadã®ã¯ãŒãç·1ã2ã3ãVdd ã«äžãããšã察å¿ããReadãããç·1ã2ã3ã«ã»ã«ã®ç¶æ ãèªã¿åºãããšãã§ããã
ãªããæžã蟌ã¿åè·¯ã¯âã®ãããç·ãçãããã®ä»£ããã«Writeãããç·ã«ã²ãŒããæ¥ç¶ãããã©ã³ãžã¹ã¿ãä»ããŠããã1RWã®ã¡ã¢ãªã»ã«ã®å Žåã¯ããã©ã³ãžã¹ã¿ã1åå¢ããããšã§é¢ç©ãå¢ããŠããŸããã3R1Wã®å Žåã¯ãããç·ã1æ¬æžãæ¹ãé¢ç©åæžå¹æã倧ããã®ã§ããã®ãããªåè·¯ãçšããããã
ç¹ã«ãã»ã«ã®å€§ããã¯ãããªãã®çšåºŠãé ç·ã®é¢ç©ã§æ±ºãŸãã瞊æ¹åãšæšªæ¹åã®ç·ã®æ¬æ°ã®ç©ãåé¡ã«ãªããæšªæ¹åã«é»æº(Vdd)ãšã°ã©ã³ã(Vss)ç·ããããšãããšã1RWã»ã«ã¯çžŠæ¹å2æ¬ã暪æ¹å3æ¬ã§ãäž¡è ã®ç©ã¯6ãšãªããäžæ¹ã3R1Wã»ã«ã¯çžŠæ¹åã4æ¬ã暪æ¹åã6æ¬ã§ãç©ã¯24ãšãªããã€ãŸããé ç·ã ãã§ã»ã«é¢ç©ã決ãŸããšããç²ãã¢ãã«ã§ã¯ã3R1Wã®ã»ã«ã¯ã1RWã»ã«ã®4åã®é¢ç©ãå ãããšããèŠç©ããã«ãªãã
ã€ãŸããGK110ãããã®ã¬ãžã¹ã¿ãã¡ã€ã«ã¯L2ãã£ãã·ã¥ã®2å以äžã®å®¹éã§ããã ãã§ãªãããããã»ã«ã®é¢ç©ã(ç°¡æãªèŠç©ããã§ããã)4åãšå€§ããã®ã§ã5ïœ8åãããã®ãããé¢ç©ãå ããŠãããšæãããã
NVIDIAã®GPUã§ã¯ã32ã¹ã¬ããããŸãšããŠWarpãšåŒãã§ããããªããThreadã¯è±èªã§ã¯çžŠç³žã§ãããWarpã¯æšªç³žã§ãããGPUã®åœä»€å®è¡ã®æ§åãç¹ç©ã®çšèªã䜿ã£ãŠè¡šãããã®ã§ãWarpã¯SFã®å®å®è¹ã®ã¯ãŒãã§ã¯ãªãã
64Kåã®ãšã³ããªãæã€ã¬ãžã¹ã¿ãã¡ã€ã«ãšããã®ã¯èšå€§ãªã¬ãžã¹ã¿æ°ã§ããããWarpã¯32ã¬ãŒã³ã§äžŠåã«å®è¡ãããã®ã§ã1ã¬ãŒã³åã§èŠãã°2Kã¬ãžã¹ã¿ã§ããããããŠãæå€§64åã®Warpãåãæ¿ããŠå®è¡ããã®ã§ããã®å Žåã¯1ã€ã®ã¹ã¬ããã䜿çšã§ããã¬ãžã¹ã¿æ°ã¯ãå¹³å32åãšããããšã«ãªããããã¯CPUã³ã¢ã®ã¬ãžã¹ã¿æ°ãšåãã§ããã
ãã ããCPUã®å Žåã¯ã1ã€ã®ã¹ã¬ããã䜿ããã¬ãžã¹ã¿æ°ã¯32åãšããããã«åºå®ã§ããããGPUã®å Žåã¯1ã€ã®SMã§åæäžŠåçã«åãå šéšã®ã¹ã¬ãããå¿ èŠãšããã¬ãžã¹ã¿æ°ã®åèšã64Kå以äžã§ããã°ãããå€ãã®ã¬ãžã¹ã¿ã䜿ãããšãã§ããããã«ãªã£ãŠããŠã1ã€ã®ã¹ã¬ããã䜿ããã¬ãžã¹ã¿æ°ã¯ãNVIDIAã®Kepler GPUã®å Žåæå€§63åãMaxwell GPUã®å Žåæå€§255åãšãªã£ãŠããã
1ã€ã®ã¯ãŒãã«å«ãŸãã32ã¹ã¬ããã¯åãããã°ã©ã ãå®è¡ãããããã¯ããæå³ã§ã¯SIMD(Single Instruction Multiple Thread)æ¹åŒã®å®è¡ã§ããããã¹ã¬ããããšã«ã¢ãã¬ã¹èšç®ãè¡ãªãããã©ãã©ã®ã¢ãã¬ã¹ãã¢ã¯ã»ã¹ã§ãããšããç¹ã§ãé£ç¶ã¢ãã¬ã¹ã®ããŒã¿ããã¢ã¯ã»ã¹ã§ããªãSIMDãšã¯ç°ãªãããŸããã¹ã¬ããããšã«æ¡ä»¶å€å®ãè¡ãã®ã§ãã¹ã¬ããããšã«æ¡ä»¶åå²ã®æ¹åãç°ãªãå Žåããããšããç¹ã§ãSIMDãšã¯ç°ãªã£ãŠããããã®å®è¡æ¹åŒã¯SIMT(Single Instruction Multiple Thread)æ¹åŒãšåŒã°ããŠããã
ãªããæè¿ã§ã¯SIMDã§ããã©ãã©ã®ã¢ãã¬ã¹ãã¢ã¯ã»ã¹ã§ããScatter/Gatherãšããæ©èœããµããŒããããããã¹ã¯ã¬ãžã¹ã¿ãèšããŠäžŠåã«å®è¡ããæŒç®ã®ããããã®å®è¡/éå®è¡ãå¶åŸ¡ã§ãããããSIMDããã»ãµãå¢ããŠãããSIMDãšSIMTã®æ©èœçãªå·®ã¯å°ãããªã£ãŠããŠãããããããScatter/Gatherã®ã¢ãã¬ã¹ã®ãªã¹ããäœã£ããããã¹ã¯ãäœã£ããããæéãæããã®ã§ãããã°ã©ãã³ã°ã®èгç¹ããèšããšSIMTã®æ¹ã䜿ãæããšæãããã

