
ãããã®èšäºã¯ãäžçŽã¬ãã«ã®éçºè ã察象ãšããŠããŸãã èªè ã¯ãC ++ããã³Fortran *ã®äžè¬çãªããã°ã©ãã³ã°æ©èœã䜿çšããŠãããã°ã©ã ã®ããã©ãŒãã³ã¹ãæé©åããããšããããšãåæãšããŠããŸãã ã¢ã»ã³ãã©ãŒãšçµã¿èŸŒã¿é¢æ°ã®äœ¿çšã¯ãçµéšè±å¯ãªãŠãŒã¶ãŒã«ä»»ããŸãã èè ã¯ãããã»ããµã®åœä»€ã»ããã®ã¢ãŒããã¯ãã£ãšãããŒã¿æ§é ã®åæãšèšèšã«é¢ããåªããèšäºãçºè¡ããå€æ°ã®ç 究ãžã£ãŒãã«ã«ç²Ÿéããããã«ããã詳现ãªè³æãå ¥æããã人ã«å§ããŠããŸãã
ããŒã¿ãšã³ãŒããæŽçãããšãã2ã€ã®åºæ¬ååã䜿çšãããŸããããŒã¿ã®ç§»åãæå°éã«æããããŒã¿ã䜿çšããããšãªã¢ã®ã§ããã ãè¿ãã«ããŒã¿ãé 眮ããå¿ èŠããããŸãã ããŒã¿ãããã»ããµã¬ãžã¹ã¿ã«ïŒãŸãã¯ã¬ãžã¹ã¿ã«ã§ããã ãè¿ãïŒèœã¡ãå Žåãã¡ã¢ãªããåé€ããåããŸãã¯å®è¡å¯èœãªããã»ããµãããã¯ãã移åããåã«ãæãå¹æçã«äœ¿çšããå¿ èŠããããŸãã
ããŒã¿é 眮
ããŒã¿ãé 眮ã§ãã3ã€ã®ã¬ãã«ãæ€èšããŸãã å®è¡å¯èœãããã¯ã«æãè¿ãå Žæã¯ãããã»ããµã¬ãžã¹ã¿ã§ãã ã¬ãžã¹ã¿å ã®ããŒã¿ãåŠçã§ããŸããä¹ç®ãšå ç®ãé©çšããæ¯èŒãšè«çæŒç®ã§äœ¿çšããŸãã ãã«ãã³ã¢ããã»ããµã§ã¯ãéåžžãåã³ã¢ã«ã¯ç¬èªã®1次ãã£ãã·ã¥ïŒL1ïŒããããŸãã äžæ¬¡ãã£ãã·ã¥ããã¬ãžã¹ã¿ã«ããŒã¿ãéåžžã«è¿ éã«ç§»åã§ããŸãã ãã£ãã·ã¥ã«ã¯ããã€ãã®ã¬ãã«ããããŸãããéåžžãæåŸã®ã¬ãã«ã®ãã£ãã·ã¥ïŒLLCïŒã¯ãã¹ãŠã®ããã»ããµã³ã¢ã«å ±éã§ãã äžéãã£ãã·ã¥ã¬ãã«ã®é 眮ã¯ãããã»ããµã¢ãã«ã«ãã£ãŠç°ãªããŸãã ãããã®ã¬ãã«ã¯ããã¹ãŠã®ãã¥ãŒã¯ãªã¢ã¹ã«å ±éããããšããåãã¥ãŒã¯ãªã¢ã¹ããšã«åå¥ã«ããããšãã§ããŸãã Intelãã©ãããã©ãŒã ã§ã¯ãåããã©ãããã©ãŒã å ã§ã®äžè²«ãããã£ãã·ã¥æäœããµããŒããããŸãïŒè€æ°ã®ããã»ããµãããå Žåã§ãïŒã ãã£ãã·ã¥ããã¬ãžã¹ã¿ãžã®ããŒã¿ã®ç§»åã¯ãã¡ã€ã³ã¡ã¢ãªããããŒã¿ãååŸãããããé«éã§ãã
ããŒã¿ã®æŠç¥çãªäœçœ®ãããã»ããµã¬ãžã¹ã¿ãžã®è¿æ¥æ§ãããã³çžå¯Ÿã¢ã¯ã»ã¹æéãå³ã«ç€ºããŸãã 1.ãããã¯ãã¬ãžã¹ã¿ã«è¿ãã»ã©ãããŒã¿ãå®è¡ã®ããã«ã¬ãžã¹ã¿ã«å°çãããšãã®åããéããªããé 延ãçããªããŸãã ãã£ãã·ã¥ã¯ãé 延ãæå°ã®æéã®ã¡ã¢ãªã§ãã é床ã®æ¬¡ã¯ã¡ã€ã³ã¡ã¢ãªã§ãã ãã®èšäºã®åŸåã§ã¯ãè€æ°ã¬ãã«ã®ã¡ã¢ãªããã€ã¹ã«ã€ããŠèª¬æããŸãããã¡ã¢ãªã«ã¯ããã€ãã®ã¬ãã«ããããŸãã ã¡ã¢ãªããŒãžãããŒããã£ã¹ã¯ãŸãã¯ãœãªããã¹ããŒããã©ã€ãäžã®ããŒãžã³ã°ãã¡ã€ã«ã®ä»®æ³ã¡ã¢ãªã«ããå Žåãé床ã¯å€§å¹ ã«äœäžããŸãã ãããã¯ãŒã¯ïŒã€ãŒãµããããInfinibandãªã©ïŒã§ããŒã¿ãéåä¿¡ããåŸæ¥ã®MPIã¢ãŒããã¯ãã£ã¯ãããŒã«ã«ã·ã¹ãã ã§ããŒã¿ãåä¿¡ãããããå€ãã®é 延ããããŸãã MPIã¢ã¯ã»ã¹ã®ãããªã¢ãŒãã·ã¹ãã ããããŒã¿ã移åãããšãã®é床ã¯ã䜿çšããæ¥ç¶æ¹æ³ïŒã€ãŒãµããããInfinibandãIntel True ScaleããŸãã¯Intel Omni ScaleïŒã«ãã£ãŠç°ãªãå ŽåããããŸãã

å³1.ã¡ã¢ãªã¢ã¯ã»ã¹é床ãããŒã¿ã¢ã¯ã»ã¹ã®çžå¯Ÿçãªé 延
å®è¡å¯èœãããã¯ã«æãè¿ãå Žæã¯ãããã»ããµã¬ãžã¹ã¿ã§ãã ã¬ãžã¹ã¿ã®æ°ãšã¬ãžã¹ã¿ãžã®ããŒã¿ã®ããŒãã«é¢é£ããé 延ãããã³ã¡ã¢ãªã䜿çšããæäœã®ãã¥ãŒã®ãµã€ãºã®ããã«ãã¬ãžã¹ã¿å ã®åå€ãäžåºŠäœ¿çšããŠããã¹ãŠã®å®è¡å¯èœãããã¯ãå®å šã«å æãããã»ã©ååã«éãããŒã¿ãéä¿¡ããããšã¯äžå¯èœã§ãã ããŒã¿ãå®è¡å¯èœãããã¯ã®è¿ãã«ããå Žåããã£ãã·ã¥ããæåºãããããã¬ãžã¹ã¿ããåé€ãããåã«ããã®ããŒã¿ãåå©çšããããšããå§ãããŸãã äžéšã®å€æ°ã¯ã¬ãžã¹ã¿å€æ°ãšããŠã®ã¿ååšããã¡ã€ã³ã¡ã¢ãªã«ä¿åãããããšã¯ãããŸããã ã³ã³ãã€ã©ã¯ã倧æåãšå°æåãåºå¥ããå Žåã«ã®ã¿å€æ°ã䜿çšããæ¹ãé©åãªå Žåãå®å šã«èªèãããããC / C ++ã§registerããŒã¯ãŒãã䜿çšããããšã¯æšå¥šãããŸããã ã³ã³ãã€ã©èªäœã¯æé©åã®å¯èœæ§ãååã«èªèããŠããã registerããŒã¯ãŒããç¡èŠã§ããŸãã
éçºè ã¯ã³ãŒããåæããããŒã¿ãã©ã®ããã«äœ¿çšãããã©ã®ãããã®æéååšããå¿ èŠãããããç解ããå¿ èŠããããŸãã ãäžæå€æ°ãäœæããå¿ èŠããããŸããïŒãããäžæé åãäœæããå¿ èŠããããŸããïŒãããéåžžã«å€ãã®äžæå€æ°ãä¿åããå¿ èŠããããŸããïŒã çç£æ§ãåäžãããããã»ã¹ã§ã¯ãããã©ãŒãã³ã¹ã¡ããªãã¯ãåéããã³ãŒãã®å®è¡ã«ããªãã®æéãè²»ããããã¢ãžã¥ãŒã«ãŸãã¯ã³ãŒããã©ã³ããžã®ããŒã¿ã®è¿äŒŒã«éäžããå¿ èŠããããŸãã ããã©ãŒãã³ã¹ããŒã¿ãååŸããããã®äžè¬çãªããã°ã©ã ã«ã¯ãIntel VTune Amplifier XEãgprofãããã³Tau *ãå«ãŸããŸãã
ããŒã¿ã®äœ¿çšãšåå©çš
è¡åä¹ç®ã®äŸã¯ããã®æ®µéãç解ããã®ã«æé©ã§ãã 3ã€ã®æ£æ¹nÃnè¡åã®è¡åä¹ç®A = A + B * Cã¯ã次ã«ç€ºãããã«ã3ã€ã®åçŽãªãã¹ããããforã«ãŒãã§è¡šãããšãã§ããŸãã
for (i=0;i<n; i++) // line 136 for (j = 0; j<n; j++) // line 137 for (k=0;k<n; k++) // line 138 A[i][j] += B[i][k]* C[k][j] ; // line 139
ãã®é åºã®äž»ãªåé¡ã¯ãè¡åã®çž®å°æäœãå«ãŸããŠããããšã§ãïŒè¡138ããã³139ïŒã è¡139ã®å·ŠåŽã¯åäžã®å€ã§ãã ã³ã³ãã€ã©ã¯ã138è¡ç®ã§ãµã€ã¯ã«ãéšåçã«æ¡åŒµããSIMDã¬ãžã¹ã¿ãæ倧éã«æºãããèŠçŽ Bããã³Cãã4ãŸãã¯8åã®ããŒã¹ââã圢æããã«ã¯ããããã®ããŒã¹ã1ã€ã®å€ã«è¿œå ããå¿ èŠããããŸãã 4åãŸãã¯8åã1ã€ã®äœçœ®ã«è¿œå ããããšã¯ã䞊åèšç®ããã©ãŒãã³ã¹ã䜿çšãããæ倧ã®å¹çã§ãã¹ãŠã®SIMDã¬ãžã¹ã¿ã䜿çšããªããã£ã¹ãæäœã§ãã ãã£ã¹ãæäœãæå°åãŸãã¯å®å šã«æé€ããããšã«ããã䞊ååŠçã®ããã©ãŒãã³ã¹ãæ¹åã§ããŸãã ã«ãŒãå ã®è¡ã®å·ŠåŽã«å€ã1ã€ããå Žåãããã¯ãã£ã¹ãã®å¯èœæ§ã瀺ããŠããŸãã è¡137ã®1åã®ç¹°ãè¿ãã®ããŒã¿ã¢ã¯ã»ã¹ãã¹ãå³4ã«ç€ºããŸãã 2ïŒiãj = 2ïŒã

å³2.åçåã è¡åAã®åäžã®å€
å Žåã«ãã£ãŠã¯ã䞊ã¹æ¿ãæäœã䜿çšããŠãã£ã¹ããåé€ã§ããŸãã 2ã€ã®å éšãµã€ã¯ã«ã亀æããé åºãæ€èšããŠãã ããã æµ®åå°æ°ç¹æŒç®ã®æ°ã¯åããŸãŸã§ãã ãã ãããã£ã¹ãæäœïŒè¡ã®å·ŠåŽã®å€ãåèšããïŒã¯é€å€ããããããããã»ããµã¯ãã¹ãŠã®SIMDå®è¡å¯èœãããã¯ãšã¬ãžã¹ã¿ã䜿çšã§ããŸãã ããã«ãããçç£æ§ãå€§å¹ ã«åäžããŸãã
for (i=0;i<n; i++) // line 136 for (k = 0; k<n; k++) // line 137new for (j=0;j<n; j++) // line 138new a[i][j] += b[i][k]* c[k][j] ; // line 139
ãã®åŸãèŠçŽ Aããã³Cãžã®é£æ¥ã¢ã¯ã»ã¹ã

å³3.æŽæ°ãããé£æ¥é åº
åæé åºijkã¯ã¹ã«ã©ãŒä¹ç®æ³ã§ãã 2ã€ã®ãã¯ãã«ã®ã¹ã«ã©ãŒä¹ç®ã䜿çšããŠãè¡åAã®åèŠçŽ ã®å€ãèšç®ããŸãã次æ°ikjã¯ãsaxpyïŒå粟床ã®A * X + YïŒãŸãã¯daxpyïŒå粟床ã®A * X + YïŒã®æŒç®ã§ãã ãããã¯ãã«ãšå®æ°ã®ç©ã¯ãå¥ã®ãã¯ãã«ã«å ç®ãããŸãã ã¹ã«ã©ãŒç©ãšA * X + YæŒç®ã®äž¡æ¹ãã¬ãã«1 BLASããã·ãŒãžã£ã§ãã 泚æikjã§ã¯ããã£ã¹ãã¯äžèŠã§ãã è¡åCã®è¡ã®ãµãã»ããã¯ãè¡åBã®ã¹ã«ã©ãŒå€ã§ä¹ç®ãããè¡åAã®è¡ã®ãµãã»ããã«è¿œå ãããŸãïŒã³ã³ãã€ã©ã¯ã䜿çšãããSIMDã¬ãžã¹ã¿ã®ãµã€ãºã«å¿ããŠãµãã»ããã®ãµã€ãºã決å®ããŸã-SSE4ãAVXãŸãã¯AVX512ïŒã 137newãµã€ã¯ã«ã®1åã®ç¹°ãè¿ãã«å¯Ÿããã¡ã¢ãªã¢ã¯ã»ã¹ã¯ãäžèšã®å³ã«ç€ºãããŠããŸãã 3ïŒåã³iãj = 2ïŒã
ã¹ã«ã©ãŒä¹ç®ã®ãã£ã¹ãã®äŸå€ã¯ãããã©ãŒãã³ã¹ã®å€§å¹ ãªåäžã§ãã O2æé©åã¬ãã«ã§ã¯ãIntelã³ã³ãã€ã©ãŒãšgcc *ã®äž¡æ¹ããSIMDã¬ãžã¹ã¿ãŒãšå®è¡å¯èœãããã¯ã䜿çšããŠãã¯ãã«åã³ãŒããäœæããŸãã ããã«ãã€ã³ãã«Â®ã³ã³ãã€ã©ãŒã¯jã«ãŒããškã«ãŒããèªåçã«äº€æããŸãã ããã¯ãã³ã³ãã€ã©ã®æé©åã¬ããŒãã§ç¢ºèªã§ããŸããæé©åã¬ããŒãã¯ã opt-reportã³ã³ãã€ã©ãªãã·ã§ã³ïŒLinuxã§ã¯-qopt-report ïŒã䜿çšããŠååŸã§ããŸãã æé©åã¬ããŒãã¯ãããã©ã«ãã§ã¯ãã¡ã€ã«filename.optrptã«åºåãããŸãã ãã®å Žåãæé©åã¬ããŒãã«ã¯æ¬¡ã®ããã¹ããã©ã°ã¡ã³ããå«ãŸããŸãã
LOOP BEGIN at mm.c(136,4) remark #25444: Loopnest Interchanged: ( 1 2 3 ) --> ( 1 3 2 )
ã¬ããŒãã¯ã䞊ã¹æ¿ãããããµã€ã¯ã«ããã¯ãã«åãããããšã瀺ããŠããŸãã
LOOP BEGIN at mm.c(137,7) remark #15301: PERMUTED LOOP WAS VECTORIZED LOOP END
gccã³ã³ãã€ã©ïŒããŒãžã§ã³4.1.2-55ïŒã¯ãã«ãŒããèªåçã«äžŠã¹æ¿ããŸããã éçºè ã¯é åºã®å€æŽã«æ³šæããå¿ èŠããããŸãã
ãããã¯ãµã€ã¯ã«ã«ãããããã©ãŒãã³ã¹ãããã«åäžããŸãã ããã«ãããããŒã¿ã®åå©çšã容æã«ãªããŸãã äžèšã®è¡šçŸïŒå³3ïŒã§ã¯ãäžéãµã€ã¯ã«ã®åå埩ã§ãé·ãnïŒããã³ã¹ã«ã©ãŒå€ïŒã®2ã€ã®ãã¯ãã«ãåç §ãããããã2ã€ã®ãã¯ãã«ã®åèŠçŽ ã¯1åã ã䜿çšãããŸãã nã®å€ã倧ããå Žåããã¯ãã«ã®åèŠçŽ ãäžéã«ãŒãã®åå埩ã®éã«ãã£ãã·ã¥ããããã·ã¥ãããå¯èœæ§ããããŸãã ãµã€ã¯ã«ãããã¯ããŠããŒã¿ãåå©çšãããšãããã©ãŒãã³ã¹ãåã³åäžããŸãã
ã³ãŒãã®æåŸã®ããŒãžã§ã³ã§ã¯ããµã€ã¯ã«jãškã䞊ã¹æ¿ããããããã¯ãé©çšãããŸãã ã³ãŒãã¯ã blockSizeã®ãµã€ãºã®è¡åãŸãã¯ãããã¯ã®ãµãã»ããã§å®è¡ãããŸã ã ãã®åçŽãªäŸã§ã¯ã blockSizeã¯nã³ãŒãã®åæ°ã§ãã
for (i = 0; i < n; i+=blockSize) for (k=0; k<n ; k+= blockSize) for (j = 0 ; j < n; j+=blockSize) for (iInner = i; iInner<i+blockSize; iInner++) for (kInner = k ; kInner<k+blockSize; kInner++) for (jInner = j ; jInner<j+blockSize ; jInner++) a[iInner,jInner] += b[iInner,kInner] * c[kInner, jInner]
ãã®ã¢ãã«ã§ã¯ããµã€ã¯ã«jã®1ã€ã®å埩ããããŒã¿ã«ã¢ã¯ã»ã¹ãããšã次ã®ããã«ãªããŸãã

å³4.ãããã¯ã¢ãã«ã®è¡šç€º
ãããã¯ãµã€ãºãæ£ããéžæãããŠããå Žåã3ã€ã®å éšã«ãŒãã®åäœäžã«åãããã¯ããã£ãã·ã¥ïŒããã³å Žåã«ãã£ãŠã¯SIMDã¬ãžã¹ã¿å ïŒã«æ®ããšæ³å®ã§ããŸãã è¡åAãBãããã³Cã®åèŠçŽ ã¯ãSIMDã¬ãžã¹ã¿ããåé€ããããããã£ãã·ã¥ãã匷å¶çã«åé€ãããåã«ã blockSizeã«çããåæ°äœ¿çšãããŸãã ãã®å ŽåãããŒã¿ã®åå©çšã¯blockSizeã«çããåæ°ã ãå¢å ããŸã ã å°ããªè¡åã䜿çšããå Žåããããã¯ã䜿çšããŠãå®éã«ã¯ã²ã€ã³ãåŸãããŸããã ãããªãã¯ã¹ã®ãµã€ãºã倧ãããªãã»ã©ãããã©ãŒãã³ã¹ã®åäžã倧ãããªããŸãã
以äžã®è¡šã¯ãç°ãªãã³ã³ãã€ã©ãŒãæèŒããã·ã¹ãã ã§æž¬å®ãããããã©ãŒãã³ã¹ã®é¢ä¿ã瀺ããŠããŸãã Intelã³ã³ãã€ã©ã¯137è¡ç®ãš138è¡ç®ã®ã«ãŒããèªåçã«ã¹ã¯ããããããšã«æ³šæããŠãã ããããããã£ãŠãIntelã³ã³ãã€ã©ã®ããã©ãŒãã³ã¹ã¯ãijkãšikjã®é åºã§å®è³ªçã«åãã§ãã ããã«ãããã€ã³ãã«Â®ã³ã³ãã€ã©ãŒã®åºæ¬ããã©ãŒãã³ã¹ãã¯ããã«é«ããããããŒã¹ãšæ¯èŒããå Žåã®é床ã®åäžã¯å°ãªãããã§ãã
ã泚æ | ãããªãã¯ã¹/ãããã¯ãµã€ãº | Gcc * 4.1.2 -O2ãããŒã¹ã©ã€ã³ãè¶ ããé床/ããã©ãŒãã³ã¹ã®åäž | Intel 16.1-O2ã³ã³ãã€ã©ãããŒã¹ã©ã€ã³ãè¶ ããé床/ããã©ãŒãã³ã¹ã®æ¹å |
---|---|---|---|
ijk | 1600 | 1ïŒåºæ¬ã¬ãã«ïŒ | 12.32 |
ikj | 1600 | 6.25 | 12.33 |
IKJããã㯠| 1600/8 | 6.44 | 8.44 |
ijk | 4000 | 1ïŒåºæ¬ã¬ãã«ïŒ | 6.39 |
ikj | 4000 | 6.04 | 6.38 |
IKJããã㯠| 4000/8 | 8.42 | 10.53 |
瀺ãããŠãããµã³ãã«ã³ãŒãã¯åçŽã§ãããäž¡æ¹ã®ã³ã³ãã€ã©ãSIMDåœä»€ãçæããŸãã ããã¯å»æ¢ãããgccã³ã³ãã€ã©ã§ããããã§ã¯ãã³ã³ãã€ã©ã®ããã©ãŒãã³ã¹ãæ¯èŒããã®ã§ã¯ãªãããã£ã¹ããããããŒã¿ã䞊ååŠçãããå Žåã§ããæäœãšãã£ã¹ãã®é åºã®åœ±é¿ã瀺ãããã«äœ¿çšãããŸãã å€ãã®ã«ãŒãã¯ããè€éã§ãããã³ã³ãã€ã©ãŒã¯äžŠååã®å¯èœæ§ãèªèã§ããŸããã ãããã£ãŠãéçºè ã¯ãå®äºãããŸã§ã«æãæéããããã³ãŒãã®éšåã調ã¹ãã³ã³ãã€ã©ã¬ããŒãã衚瀺ããŠãã³ã³ãã€ã©ãæé©åãé©çšãããã©ããããŸãã¯åå¥ã«é©çšããå¿ èŠããããã©ããã確èªããããšããå§ãããŸãã ãŸããããŒã¿éã倧ãããªããããå Žåã«ããŒã¿ããããã¯ããããšã®éèŠæ§ã«ã泚æããŠãã ããã 2ã€ã®ãããªãã¯ã¹ã®ãã¡å°ããæ¹ã®å Žåãããã©ãŒãã³ã¹ã¯åäžããŸããã ãã倧ããªãããªãã¯ã¹ã®å Žåãçç£æ§ãå€§å¹ ã«åäžããŸãã ãããã£ãŠãéçºè ã¯ããããã³ã°ãé©çšããåã«ãããŒã¿ãšãã£ãã·ã¥ã®çžå¯Ÿçãªãµã€ãºãèæ ®ããå¿ èŠããããŸãã ããã€ãã®ãã¹ããããã«ãŒããšå¯Ÿå¿ããå¢çãè¿œå ããããšã«ãããéçºè ã¯å ã®ã³ãŒãã«æ¯ã¹ãŠ2ã10åã®çç£æ§ã®åäžãéæã§ããŸãã ããã¯ãéåžžã«åççãªåŽåã§éæãããçç£æ§ã®å€§å¹ ãªåäžã§ãã
æé©åãããã©ã€ãã©ãªã®äœ¿çš
ãåç¥ã®ããã«ãå®ç§ã«å¶éã¯ãããŸããã ãããã¯ã³ãŒãã¯äŸç¶ãšããŠæéã§ã¯åäœããŸãããIntelMath Kernel LibraryïŒIntel MKLïŒãªã©ã®æé©åãããLAPACKã©ã€ââãã©ãªã®BLAS DGEMMã¬ãã«3ããã·ãŒãžã£ã䜿çšããŠé«éåã§ããŸãã éåžžã®ç·åœ¢ä»£æ°ããã³ããŒãªãšå€æã®å ŽåãIntel Math Kernel Libraryãªã©ã®ææ°ã®ã©ã€ãã©ãªã¯ãåçŽãªãããã¯åã䞊ã¹æ¿ããããå¹ççãªæé©åãæäŸããŸãã éçºè ã¯ãå¯èœãªéããã®ãããªæé©åãããã©ã€ãã©ãªã䜿çšããããšããå§ãããŸãã
è¡åä¹ç®çšã®ãã®ãããªã©ã€ãã©ãªããããŸãããæé©åãããã©ã€ãã©ãªã¯ãããããã³ã°ã䜿çšããŠããã©ãŒãã³ã¹ãæ¹åã§ãããã¹ãŠã®ç¶æ³ã«å¯ŸããŠååšããããã§ã¯ãããŸããã è¡åä¹ç®ã¯ãæé©åã®åçã説æãã䟿å©ãªäŸã§ãã ãã®åçã¯ãæéå·®åãã¿ãŒã³ã«ãé©ããŠããŸãã

å³5.ãããã¯ã¢ãã«ã®2次å è¡šçŸ
åçŽãª9ãã€ã³ããã¿ãŒã³ã¯ã以äžã«ç€ºã匷調衚瀺ããããããã¯ã䜿çšããŠãäžå€®ãããã¯ã®å€ãæŽæ°ããŸãã 1ã€ã®åºåç³èŸŒæ å ±ãæŽæ°ããã«ã¯ã9ã€ã®å€ã䜿çšãããŸãã é£æ¥ããèŠçŽ ãæŽæ°ãããšããããã®å€ã®ãã¡6ã€ãåã³äœ¿çšãããŸãã ã³ãŒãã瀺ãããŠããé åºã§æ©èœããå Žåãåäœã¯é£æ¥ããå³ã«ç€ºãããŠãããã®ãšåæ§ã«ãªããŸãã3ã€ã®äœçœ®ãæŽæ°ããããã«15ã®å€ã䜿çšãããŸãã ããã«ããã®æ¯çã¯åŸã ã«1ïŒ3ã«è¿ã¥ããŠããŸãã
å³ã«ç€ºãããã«ãããŒã¿ã2次å ãããã¯ã«å ¥ãããšã 5ããã®åŸã6ã€ã®äœçœ®ãæŽæ°ããããã«ã20åã®å€ã䜿çšããã2ã€ã®ãããã¯ã®ã¬ãžã¹ã¿ã«é 眮ãããŸãã æ¯çã¯1ïŒ2ã«è¿ã¥ããŸãã
Cedric Andreolli ã«ããåªããèšäºã 3次å æéå·®åïŒ3DFDïŒçæ¹æ§ã³ãŒãïŒISOïŒãæé©åããããã®8ã€ã®æ¹æ³ãã§ãæéå·®åææ³ã«ç²Ÿéããããšããå§ãããŸãã ãã®èšäºã§ã¯ãããããã³ã°ã ãã§ãªããä»ã®ã¡ã¢ãªæé©åææ³ã«ã€ããŠã説æããŸãã
ãããã«
ãŸãšãããšã ãã®èšäºã§ã¯ãéçºè ãããââã°ã©ã ã«é©çšã§ãã3ã€ã®äŸã瀺ããŸãã ãŸãã䞊ååãã£ã¹ããåé¿ããããã«æäœãåçåããŸãã 次ã«ãããŒã¿ã®åå©çšãªãã·ã§ã³ãèŠã€ãããããã¯æ§é ããã¹ããããã«ãŒãã«é©çšããŠãããŒã¿ã®åå©çšããµããŒãããŸãã å Žåã«ãã£ãŠã¯ãããã«ããçç£æ§ã2åã«ãªããŸãã 第äžã«ãå¯èœãªéãæé©åãããã©ã€ãã©ãªã䜿çšããŸãã éåžžã®éçºè ã䞊ã¹æ¿ãã䜿çšããŠåä¿¡ããã³ãŒããããå€§å¹ ã«é«éã§ãã
å®å šãªã³ãŒãã¯ãã¡ãããããŠã³ããŒãã§ããŸã ã
第2éšã§ã¯ãSIMDã¬ãžã¹ã¿ã ãã§ãªããè€æ°ã®ã³ã¢ã§ã®è² è·ã®äžŠååã«ã€ããŠèª¬æããŸãã ããã«å ããŠãæ§é ã®åœå ±æãšé åã«ã€ããŠèª¬æããŸãã