Intel Parallel Studio XEããã±ãŒãžã¯ãHabréã®Intelããã°ã§ã®åºçç©ãå«ããéçºè
ã«é·ãéç¥ãããŠããŸãã æè¿ãã¢ããããŒããçºè¡šãããŸãã
-Intel Parallel Studio XE 2013 Service Pack 1ïŒSP1ïŒã«ã¯ãå€ãã®èå³æ·±ãé©æ°ããããŸãã OpenMP 4.0æšæºïŒéšåïŒã®ãµããŒãã®ãããã§ãã³ããã»ããµãŒãšçµ±åã°ã©ãã£ãã¯ã¹ã®ããã°ã©ãã³ã°ã容æã«ãªã£ãŠããŸãã ãšã©ãŒã®æ€çŽ¢ãããæè»ã«ãªããããã»ã¹ã®å®äºåã«ã¡ã¢ãªãªãŒã¯ãæ€åºãããããã«ãªããŸããã é·æã«ããããµãŒãã¹ããèœäžãã¢ããªã±ãŒã·ã§ã³ã§æ¢ãããšãã§ããŸãã æ°ããã³ãŒã«ããªãŒãã¥ãŒããªãŒããŒãããã®èŠç©ãããããã³äžŠåèšèšã«é¢ãã詳现æ
å ±ã«ãããããã©ãŒãã³ã¹ã®ããã«ããã¯ãç°¡åã«èŠã€ããããšãã§ããŸãã
Intel Composer XEã¯ãC / C ++ããã³Fortranã³ã³ãã€ã©ããã«ãã¹ã¬ãããæ°åŠããã®ä»ã®ã©ã€ãã©ãªãçµã¿åãããŠããŸãã Intel Composer XE 2013 SP1ã«ã¯å€ãã®æ¹åç¹ããããŸããããã§ã¯ãOpenMP * 4.0æšæºã«ç»å Žãããã¯ãã«åæ©èœãšã³ããã»ããµãŒãšã¢ã¯ã»ã©ã¬ãŒã¿ãŒã®äœ¿çšã«çŠç¹ãåœãŠãŸãã
OpenMP * SIMDãã¶ã€ã³
SIMDïŒåäžåœä»€è€æ°ããŒã¿ïŒåœä»€ãŸãã¯ãã¯ãã«åã䜿çšãããšãããŒã¿ã®äžŠååŠçãå¯èœã«ãªããŸãã ããã¯ããœãããŠã§ã¢ã®ããã©ãŒãã³ã¹ãæé©åããæãå¹æçãªæ¹æ³ã®1ã€ã§ãã ã€ã³ãã«Â®ã³ã³ãã€ã©ãŒã¯ãã³ãŒããèªåçã«ãã¯ãã«åããããã«å¯èœãªãã¹ãŠã®ããšãè¡ããŸãããããšãã°äŸåé¢ä¿ã®å¯èœæ§ãçãããå Žåãããã¯åžžã«å¯èœãšã¯éããŸããã OpenMP 4.0æšæºã§ã¯ãäŸåé¢ä¿ããªãããïŒpragma omp simdãã³ã³ã¹ãã©ã¯ãã䜿çšããŠãã¯ãã«åã§ããããšãã³ã³ãã€ã©ãŒã«æ瀺çã«äŒããããšãã§ããŸãïŒFortranã«ãé¡äŒŒããŠããŸãïŒã ã«ãŒãã®åã«ãomp simdããããå Žåãã³ã³ãã€ã©ã¯è€æ°ã®å埩ãåæã«åŠçã§ãããã¯ãã«åœä»€ãçæããå¿
èŠããããŸãã ããšãã°ããåæžãã®ããã«è¿œå ã®æ§é ã䜿çšã§ããŸãã
double pi() { double pi = 0.0; double t; #pragma omp simd private(t) reduction(+:pi) for (i=0; i<count; i++) { t = (double)((i+0.5)/count); pi += 4.0/(1.0+t*t); } pi /= count return pi; }
éçºè
ãåã
ã®ããŒã¿èŠçŽ ã«å¯ŸããŠå®è¡ãããæäœãèšè¿°ãããèŠçŽ ããšã®ãSIMDé¢æ°ãå®çŸ©ã§ããŸãã åæã«ãã³ã³ãã€ã©ãŒã¯ãé¢æ°ãSIMDãµã€ã¯ã«ã§å®å
šã«äœ¿çšã§ããããšãç¥ã£ãŠããŸãã SIMDé¢æ°ãå®çŸ©ããã«ã¯ãomp declareã³ã³ã¹ãã©ã¯ãã䜿çšãããŸãã
#pragma omp declare simd notinbranch float min(float a, float b) { return a < b ? a : b; } #pragma omp declare simd notinbrach float distsq(float x, float y) { return (x - y) * (x - y); }
ãã®ãããªããšã«ãããåäžã®ã³ã¢å
ã§ããŒã¿äžŠååŠçïŒSIMDïŒãçµã¿åãããããè€æ°ã®ã³ã¢ã§å®è¡ãããã¹ã¬ãã䞊ååŠçãã¿ã¹ã¯ãå®è¡ãããã§ããŸãã 次ã®ã«ãŒãã¯æåã«ãã¯ãã«åããããã®åŸãç°ãªãã¹ã¬ããã§æ®ãã®å埩åæ°ãå®è¡ã§ããŸãã
#pragma omp parallel for simd for (i=0; i<N; i++) d[i] = min(distsq(a[i], b[i]), c[i]);
ã³ããã»ããµãŒã䜿çšãã
Intel Xeon Phiãªã©ã®ã¢ã¯ã»ã©ã¬ãŒã¿ãšã³ããã»ããµã人æ°ãéããŠããŸãã OpenMP 4.0ã§ã¯ããomp targetãã䜿çšããŠãã³ããã»ããµãŒã«èšç®ãéä¿¡ã§ããŸãïŒããã¯ååã«äžŠåã§ãïŒã ãã®èšèšã¯ãããã«ç¶ãã¢ã¯ã»ã©ã¬ãŒã¿ã³ãŒããããã¯ãèµ·åããŸãã ãµããŒããããŠããªãå ŽåããŸãã¯ãµããŒããããŠããªãå Žåãã³ãŒãã¯CPUã§éåžžã¢ãŒãã§åäœããŸãã ãããããèšèšã«ãããã³ããã»ããµãŒã«éä¿¡ãããããŒã¿ãæŽçã§ããŸãã
#pragma omp target map(to(b:count)) map(to(c,d)) map(from(a:count)) { #pragma omp parallel for for (i=0; i<count; i++) a[i] = b[i] * c + d; }
Intel Advisor XEã¯ããã©ã¬ã«ã·ãªã¢ã«ã³ãŒãã®å®è¡ãã·ãã¥ã¬ãŒãããŸãã 䞊åã¢ã«ãŽãªãºã ã®ãããã¿ã€ããäœæããããã«äœ¿çšãããã¢ãŒããã¯ãã¯ãå®è£
ã«ããªãã®ãªãœãŒã¹ãè²»ããããåã«ãããŸããŸãªèšèšãªãã·ã§ã³ããã°ããè©Šãæ©äŒãäžããŸãã ãã®çµæãããã°ã©ã ã®å®è¡ãšã¹ã±ãŒã©ããªãã£ã®å éãäºæž¬ããã䞊åããŒãžã§ã³ã§è¡šç€ºãããå¯èœæ§ã®ãã競åããŒã¿ã瀺ãããŸãã
é«åºŠãªå éããã³ã¹ã±ãŒã©ããªãã£åæ
以åã¯ãã¹ã±ãŒã©ããªãã£ã®è©äŸ¡ã¯2ã32ã³ã¢ã§è¡ãããŠããŸããã ããã¯éåžžCPUã«ã¯ååã§ãããã240ãè¶
ããããŒããŠã§ã¢ã¹ã¬ãããåããIntel Xeon Phiã³ããã»ããµãŒã«ã¯ååã§ã¯ãããŸããã§ããã Advisor XEã®æ°ããããŒãžã§ã³ã§ã¯ãç¡å¶éã®æ°ã®ã³ã¢ã«å¯Ÿããã¢ã«ãŽãªãºã ã®ã¹ã±ãŒã©ããªãã£ãè©äŸ¡ããŸãã 次ã®å³ã¯ã512ã³ã¢ã®äŸã瀺ããŠããŸãã ããã§ãã¹ã¬ããã®æ°ã®èŠ³ç¹ãããã¢ã«ãŽãªãºã ãã€ã³ãã«Xeon Phiã«ç§»æ€ããæºåãã§ããŠããéãè©äŸ¡ã§ããŸãïŒAdvisor XEããŸã å®è¡ããŠããªãã³ãŒãã®ããã¯ãã«åå¯èœæ§ããã¡ã¢ãªå¶éãªã©ãè©äŸ¡ããå¿
èŠããããŸãïŒã
å®éšã®ã³ããŒïŒå®éšã¹ãããã·ã§ããïŒ
Inspector XEããã³VTune Amplifier XEã®ãŠãŒã¶ãŒã¯ãå€ãã®ãã¹ããè¡ã£ãŠãã¹ãŠã®çµæãä¿åããããã©ãŒãã³ã¹ã®å€åãšåé¡ã®ã¹ããŒã¿ã¹ã远跡ããããšãã§ããŸãã æè¿ãŸã§ãAdvisor XEã¯ãã®ãããªæ©äŒã奪ãããŠããŸãã-ãããã¡ã€ã«ã®æ§é ã®è€éããšçŸåšã®ããŒãžã§ã³ã®ã³ãŒããšã®å¯æ¥ãªé¢ä¿ã®ãããæåŸã®å®éšã®çµæã®ã¿ãä¿åãããŠããŸããã
Parallel Studio XE 2013 SP1ã«å梱ãããŠããIntel Advisor XE 2013ã¢ããããŒã4ã«ã¯ãå®éšã®ã³ããŒïŒã¹ãããã·ã§ããïŒãäœæããæ©èœããããŸãã ãã®ã³ããŒã¯èªã¿åãå°çšã§ããã以åã®ããŒãžã§ã³ã®ã³ãŒãã®ããã©ãŒãã³ã¹è©äŸ¡ã確èªããçŸåšã®ããŒãžã§ã³ãšæ¯èŒã§ããŸãã
ã³ãŒãã®åã
ã®ã»ã¯ã·ã§ã³ã®åæ
ã¢ããã€ã¶XEåæã¯ãããªãã®ãªãŒããŒããããè¿œå ã§ããŸãã ããªã¢ã«ã¿ã€ã ãã§ã®äžŠåå®è¡ã®è€éãªã¢ããªã³ã°ãå®è¡ãããŸãã æéãç¯çŽããããã«ãåæãå¿
èŠãªã³ãŒãã®åã
ã®ã»ã¯ã·ã§ã³ãããŒã¯ã§ããããã«ãªããŸããã ããã«ããã®ãããªããããŒã€ã³ã°ãã¯ãããã°ã©ã ã®ä»ã®éšåã®åœ±é¿ãæé€ããããšã«ãããåæã®ç²ŸåºŠãé«ããããšãã§ããŸãã ããã¯ãã¹ãŠãæ°ããã¿ã€ãã®ã泚éãïŒANNOTATE_DISABLE_COLLECTION_PUSHããã³ANNOTATE_DISABLE_COLLECTION_POPïŒæåå¶åŸ¡çšã®ãã¿ã³ããããŸãïŒã«ãã£ãŠå®è£
ãããŸãã
int main(int argc, char* argv[]) { ANNOTATE_DISABLE_COLLECTION_PUSH // Do initialization work here ANNOTATE_DISABLE_COLLECTION_POP // Do interesting work here ANNOTATE_DISABLE_COLLECTION_PUSH // Do finalization work here ANNOTATE_DISABLE_COLLECTION_POP return 0; }
Intel Inspector XEã¯ãã¢ããªã±ãŒã·ã§ã³å®è¡äžã«åçåæãå®è¡ããæšæºãããã¬ãŒãšçµ±åã§ããã¡ã¢ãªããã³ã¹ã¬ãããããã¬ãŒã§ãã ãªãŒã¯ãã¡ã¢ãªãžã®äžæ£ã¢ã¯ã»ã¹ãªã©ã®ã¡ã¢ãªæäœã®ãšã©ãŒãããã³ã¹ããªãŒã ã®æäœãšã©ãŒïŒãããããã¯ãããŒã¿ç«¶åãªã©ïŒãèŠã€ããããšãã§ããŸãã ãã®ãããªåé¡ã¯ãå®æçãªæ©èœãã¹ããŸãã¯éçã³ãŒãåæã«ãã£ãŠèŠèœãšãããå ŽåããããŸãã
Valgrind *ããã³Rational Purify *æå¶ã«ãŒã«ã®ã€ã³ããŒã
Inspector XEã«ã¯ãéçºè
ã«ãšã£ãŠé¢å¿ã®ãªãåã
ã®åé¡ãŸãã¯åé¡ã®ã°ã«ãŒããæå¶ããæ©èœããããŸãã ããšãã°ãä»ã®äººã®ã¢ãžã¥ãŒã«ã®åé¡ã誀æ€ç¥ã ä»ã®ããŒã«ã«ãåæ§ã®æ©èœããããŸãã 倧èŠæš¡ãããžã§ã¯ãã®æå¶ã«ãŒã«ã¯ãã³ãŒããã¢ãžã¥ãŒã«ãåé¡ã®çš®é¡ãããã³ãã®ä»ã®æ
å ±ã®å Žæã決å®ããåå¥ã®ãã¡ã€ã«ã«ä¿åãããŸãã
Inspector XEã®æ°ããŒãžã§ã³-ã¢ããããŒã7ã«ã¯ãä»ã®ããŒã«ïŒValgrindããã³Rational PurifyïŒã«ãã£ãŠçæãããæå¶ã«ãŒã«ãå«ããã¡ã€ã«ãã€ã³ããŒãããæ©èœããããŸãã ãããã®ãã¡ã€ã«ã¯ãInspector XE圢åŒã«å€æãããŸãã ããã«ãããä»ã®ããŒã«ããInspector XEãžã®ç§»è¡ãç°¡åã«ãªããæå¶ã«ãŒã«ããŒã¹ã®åœ¢æã«ãããæéãšéå»ã®æè³ãç¯çŽã§ããŸãã
ããã«ãInspector XEæå¶ã«ãŒã«ãããã¹ã圢åŒã§ä¿åãããããã«ãªããæåã§ç·šéã§ããããã«ãªããŸããã
ã¢ããªã±ãŒã·ã§ã³ã®çµäºåã«ã¡ã¢ãªãªãŒã¯ãæ€çŽ¢ãã
ã¡ã¢ãªãªãŒã¯æ€åºã¯ãInspector XEã§æãäžè¬çãªã¡ã¢ãªåé¡åææ©èœã®1ã€ã§ãã 以åã®ããŒãžã§ã³ã§ã¯ããªãŒã¯ãæ€åºããããã«ãInspector XEãã¡ã¢ãªã®ãã¹ãŠã®å²ãåœãŠãšè§£æŸã远跡ã§ããããã«ãããã°ã©ã ãæåããæåŸãŸã§å®è¡ããå¿
èŠããããŸããã ããã¯ãããšãã°ãã¢ããªã±ãŒã·ã§ã³ãé·æéå®è¡ãããå ŽåããŸãã¯äžè¬çã«ããŒã¢ã³ããµãŒãã¹ã®ããã«ãæ°žä¹
ã«ãå®è¡ãããå Žåãå¿
ããã䟿å©ã§ã¯ãããŸããã ããã«ãããã°ã©ã ãæ£ããå®äºããªããšã¯ã©ãã·ã¥ãããã®æ¹æ³ã§ãªãŒã¯ã远跡ããããšãã§ããŸããã
Inspector XEã®æ°ããããŒãžã§ã³ã§ã¯ãããã°ã©ãã¯ã¡ã¢ãªãªãŒã¯ãæ¢ãã³ãŒãã®é åãããŒã¯ã§ããŸãã ãã®ãããªé åããœãŒã¹ã³ãŒãå
ã®ç¹å¥ãªAPIã«å¶éã§ããŸãã ã°ã©ãã£ã«ã«ã€ã³ã¿ãŒãã§ã€ã¹ã®ãã¿ã³ãšã³ãã³ãã©ã€ã³ã®ã³ãã³ãã䜿çšããŠãçŸæç¹ã§æ€åºããããªãŒã¯ã«é¢ããã¬ããŒããåŒã³åºãããšãã§ããŸãã
ã€ãŸã ããã»ã¹ã®å®äºãåŸ
ããã«ãã³ãŒãã®1ã€ã®ã»ã¯ã·ã§ã³ã§ãªãŒã¯ãæ€çŽ¢ãããããã«ã€ããŠç¥ãããšãã§ããŸãã
Intel VTune Amplifier XE-ããã©ãŒãã³ã¹ãããã¡ã€ã©ãŒã CPUãªãœãŒã¹ã®èŠ³ç¹ãããã¹ã¬ãããã¢ãžã¥ãŒã«ãé¢æ°ãåœä»€ãªã©ã«ãããã¢ããªã±ãŒã·ã§ã³ã®æãé«äŸ¡ãªã»ã¯ã·ã§ã³ã衚瀺ãããŸãã ãã®ããŒã«ã¯ããããã®æåŸ
ã®åå ãšãªãã¹ã¬ãããåŸ
ã¡æéãããã³åæãªããžã§ã¯ãéã®è² è·åæ£ã«é¢ããæ
å ±ãæäŸããŸãã VTune Amplifier XEã¯ããã£ãã·ã¥ãã¹ãåœå
±æãªã©ããã€ã¯ãã¢ãŒããã¯ãã£ã®ããã©ãŒãã³ã¹ã®åé¡ãæ€åºããŸãã
詳现ãªãªãŒããŒãããã¬ããŒã
ãã«ãã¹ã¬ããããã°ã©ã ã§ã¯ãCPUã®æéã®äžéšã¯ãã¹ã¬ããã®åæãã¹ã¬ããéã®äœæ¥ã®åæ£ãªã©ã«å¿
ç¶çã«è²»ããããŸãã ãã®æéã¯ãåºæ¬çãªèšç®ã«è²»ããããããªãŒããŒããããŸãã¯ããªãŒããŒãããããšåŒã°ããŸãã ããã©ãŒãã³ã¹ãæ¹åããã«ã¯ããããã®ãªãŒããŒããããæå°éã«æããå¿
èŠããããŸãã VTune Amplifier XEã¯ããªãŒããŒããããšã¢ã¯ãã£ãåŸ
æ©ïŒã¹ãã³åŸ
æ©ïŒã«é¢ãã詳现æ
å ±ãæäŸã§ããããã«ãªããŸããã ç¹å®ã®é¢æ°ãã¢ãžã¥ãŒã«ããŸãã¯åœä»€ã§ãªãŒããŒãããã«è²»ããããCPUæéãèŠç©ããããšãã§ããŸãã ãã®ããŒã«ã¯ãOpenMPãIntel Threading Building BlocksããŸãã¯Intel Cilk Plusããã®ãªãŒããŒãããã衚瀺ã§ããŸãã ããŒãã«å
ã®æéå€ãšã¿ã€ã ã©ã€ã³äžã®ã°ã©ãã£ãã¯è¡šç€ºã®äž¡æ¹ã䜿çšã§ããŸãã
OpenMP *ã¢ããªã±ãŒã·ã§ã³åæã®æ¹å
æ°ããVTune Amplifier XEã«ã¯ãOpenMPé ååææ©èœã匷åãããŠããŸãã ããã ã¢ããããã«ã®ããã¬ãŒã ãã¡ã€ã³ãã§ã°ã«ãŒãåãããšãOpenMPãªãŒãžã§ã³ããã¬ãŒã ãšããŠè¡šç€ºãããŸã-äžã®å³ãåç
§ããŠãã ããã ãã£ã«ã¿ãŒã䜿çšãããšãããã©ãŒãã³ã¹ãããã¡ã€ã«ãå¥ã®äžŠåé åã«çµã蟌ãã ããããã§è²»ãããæéãèŠç©ãã£ãããè² è·ãã©ã³ã¹ãã©ã®ããã«ããããªã©ãæšå®ãããã§ããŸãã ã[ãã¬ãŒã ãã¡ã€ã³ãªã-ä»»æã®ãã¬ãŒã ã®å€]ããšããè¡ã¯ããã°ã©ã ã®é£ç¶éšåãè¡šããŠãããããã³ãŒãã®ã䞊åæ§ãã®çšåºŠãè©äŸ¡ã§ããŸãïŒ
ã¢ã ããŒã«ã®æ³åãæãåºããŠãã ããïŒã
OpenMPã«é¢é£ãããªãŒããŒããããšã¬ã€ãã³ã·ã¯ãIntel OpenMPã ãã§ãªããGCC *ããã³Microsoft OpenMP *ã«ã€ããŠã決å®ãããŸãã äžã®å³ïŒé«åºŠãªãããã¹ãããåæïŒã§ã¯ãã[OpenMP worker]ããšã[OpenMP for]ãã¯Microsoft OpenMP *ã©ã€ãã©ãª-ã¢ãžã¥ãŒã«vcomp100.dllãæããŸãã
ã³ãã³ãã©ã€ã³ãããœãŒã¹ã³ãŒããšã¢ã»ã³ãã©ã衚瀺ãã
å Žåã«ãã£ãŠã¯ãã°ã©ãã£ã«ã«ã€ã³ã¿ãŒãã§ã€ã¹ãããã³ãã³ãã©ã€ã³ã䜿çšããæ¹ã䟿å©ã§ãã ããšãã°ãSSHçµç±ã§ãªã¢ãŒãLinuxãµãŒããŒã§äœæ¥ããŠããå Žåã ããã§ãã³ãã³ãã©ã€ã³ããçŽæ¥VTune Amplifier XEãããã¡ã€ã«ã®ãœãŒã¹ãèŠãããšãã§ããŸãã ãã®ããããªã¢ãŒããã·ã³ãããããã¡ã€ãªã³ã°çµæãã³ããŒããããVNCãæ§æãããããå¿
èŠããªãå ŽåããããŸããããŒã¿ã®åéãéå§ããåãã·ã§ã«ãããããã¡ã€ã«ããã°ãã確èªã§ããŸãã
çºä¿¡è
/çä¿¡è
ã®ã³ãŒã«ããªãŒåæ
æ°ããçºä¿¡è
/çä¿¡è
ã¿ãã¯ãããã ã¢ãããšãããããŠã³ã®æé«ã®çµã¿åããã§ãã åŒã³åºãããé¢æ°ãèæ
®ããŠãåé¢æ°ã®å®è¡æéãšåèšæéã衚瀺ããŸãã 匷調衚瀺ãããé¢æ°ã®å Žåããã®èŠªïŒåŒã³åºãå
ïŒãå³äžã®ãŠã£ã³ããŠã«è¡šç€ºãããåŒã³åºãããé¢æ°ïŒåŒã³åºãå
ïŒãå³äžã«è¡šç€ºãããŸãã [åŒã³åºãå
/åŒã³åºãå
]ãŠã£ã³ããŠã§ãåŒã³åºãã·ãŒã±ã³ã¹ãšåã¬ãã«ã®CPUæ¶è²»ãžã®å¯äžã調ã¹ãããšãã§ããŸãã ä»»æã®é¢æ°ã®ãã«ã¿ã€ã ã§ãã£ã«ã¿ãªã³ã°ããä»»æã®ã¬ãã«ã§ãã®é¢æ°ãæã€ãã¹ãŠã®ããªãŒãååŸã§ããŸãã ãããã£ãŠãæãéèŠãªã³ãŒã«ã®ãã©ã³ããèŠã€ããããšãã§ããŸãã
GPUãããã¡ã€ãªã³ã°
VTune Amplifier XEã¯ãIntelããã»ããµãŒã°ã©ãã£ãã¯ã¹ã§å®è¡ãããã³ãŒãããããã¡ã€ã«ã§ããããã«ãªããŸããã GPUã®å
šäœçãªã¢ã¯ãã£ããã£ã远跡ã§ããŸãããããªã®ãã³ãŒãã«äœ¿çšãããŠããŸããïŒ ã©ã®CPUã¹ã¬ãããGPUã³ã³ãã¥ãŒãã£ã³ã°ãããªã¬ãŒããŸããïŒ ãã¹ãŠã®GPUãªãœââãŒã¹ã䜿çšãããŠããŸããïŒ ãã®æ©èœã¯ãOpenCLãä»ããŠGPUã§å®è¡ãããã¿ã¹ã¯ãèšç®ããå Žåã«ç¹ã«èå³æ·±ããã®ã§ã*ã VTune Amplifier XEã¯OpenCLã«ãŒãã«ïŒãŸãã¯ã³ã³ãã¥ãŒãã£ã³ã°ã¿ã¹ã¯ïŒãèªèããäœæ¥ã®ãµã€ãºãšL3ãã£ãã·ã¥ãã¹ãªã©ã®ãã€ã¯ãã¢ãŒããã¯ãã£ã®åé¡ã確èªã§ããŸãã OpenCLã¿ã€ã ã©ã€ã³ã§ã¯ãã«ãŒãã«ã¯ããããéå§ããCPUã¹ã¬ããã§ããŒã¯ãããŸãã GPUå®è¡ãŠãããïŒGPUïŒã®ç¶æ
ïŒã¢ã¯ãã£ããã¢ã€ãã«ãã¹ããŒã«ïŒãçµæçã«èŠ³å¯ã§ããŸãã GPUã®ããŒãã«é¢ããããŒã¿ããããããããã°ã©ã ã®ããã©ãŒãã³ã¹ãå¶éãããŠãããã©ãããè©äŸ¡ã§ããŸããCPUãŸãã¯GPUãOpenCLã«ãŒãã«ãããå€ãã®ãªãœãŒã¹ãæ¶è²»ããŸããGPUãããã«ããŒãããããã«å¿ããŠCPUãã¢ã³ããŒãããæ©äŒããããŸãã
第4äžä»£Intel Coreããã»ããµãŒã®ãããããŠã³ããã©ãŒãã³ã¹åæ
ãã€ã¯ãã¢ãŒããã¯ãã£ã®åé¡ã®ç 究ã¯éèŠãªäœæ¥ã§ãã CPUã®ãã€ã¯ãã¢ãŒããã¯ãã£ã®ç解ãšãããã»ããµã§äœãèµ·ãã£ãŠããããèšé²ããããŒããŠã§ã¢ã€ãã³ãã®ç¥èãå¿
èŠã§ãã ãã®åæãããæ§é åããããããããããã®ã«ããããã«ãäžè¬æ¢æ»åæã®ããŒããŠã§ã¢ã«ãŠã³ã¿ãŒããã®ããŒã¿ã¯ãããç解ããããã¡ããªãã¯ã«ã³ã³ãã€ã«ãããäžããäžãžããŸãã¯äžè¬ããç¹å®ã«ç·šæãããŸããã ããŒã«èªäœããããŒã¿ãåéããããã©ãããã©ãŒã ã®ã¡ããªãã¯ãèšç®ããããã©ãŒãã³ã¹ãå¶éããå¯èœæ§ã®ããåé¡ã匷調衚瀺ããŸãã ããŒã¿ã®é局衚çŸã«ããã詳现ã¬ãã«ãå¶åŸ¡ã§ããããã²ãŒã·ã§ã³ããã䟿å©ã«ãªããŸãã
ãŸãšãã€ã³ãã«Â®Parallel Studio XE 2013 SP1ã¯ãã³ããã»ããµãŒåãã«å¹æçã«ããã°ã©ã ããæ°ããªæ©äŒãæäŸããOpenMPãªã©ã®äžŠåã¢ãã«ããããå€ãã®ãã®ãååŸããæ°ãããã€ã¯ãã¢ãŒããã¯ãã£ãŒã§è€éãªããã©ãŒãã³ã¹åé¡ãèŠã€ããŠä¿®æ£ããåªãããœãããŠã§ã¢è£œåãäœæããŸã
æ°ããããŒãžã§ã³ãããŠã³ããŒãããŠãæ°ããæ©èœãçŸåšã®ãããžã§ã¯ããã©ã®ããã«æ¹åã§ããããã芧ãã ããã