/ *ãã®èšäºã§ã¯ããªãã®æ°ã®è±èªã®åŒçšã䜿çšããŠããŸããèªè ã«ååãªã¬ãã«ã®èªåŠãã¬ãŒãã³ã°ãè¡ã£ãŠãããšæããŸã* /
ç§ã®å€åãµãŒãã¹ã¢ããªã±ãŒã·ã§ã³ã®1ã€ã¯ãããŒã¿ããŒã¹ããã®èŠå ã®é·ãã·ãŒã±ã³ã¹ã§ã·ãã¥ã¬ãŒã·ã§ã³ã¢ãã«ãå®è¡ããŸãã 詳现ã«å ¥ãããšãªããå°æ¥ã®çµæãäºæž¬ããéã®äžç¢ºå®æ§ãæžããããã«ãå®éã®å®è£ ã®å±¥æŽããã©ã³ãã æ§ã®åŒ·ãèŠçŽ ãæã€ç¹°ãè¿ããã€ããªïŒ2ãœãŒã¹ïŒããã»ã¹ã®ç¢ºççç¹æ§ãç 究ãããšããã¿ã¹ã¯ãæè¿çºçããŸããã ããã»ã¹ã®å®è£ ã¯äºãã«ç¬ç«ããŠãããåçã«ïŒéåžžïŒåæ£ããŠãããšèŠãªãããããã»ã¹ã¯åºå®ãããŠãããšèŠãªãããŸãã ç®æš-å¯èœãªéãNåã®é£ç¶ããããã»ã¹å®è£ ã®çµæã®æãæ£ç¢ºãªäºæž¬-ã¯ãé·ãNã®æéã«ãããè¯å®çãªããã»ã¹å®è£ ã®å¹³åããã³æäœäºæ³é »åºŠã®è©äŸ¡ã䌎ããŸãã
ããã§ã確çå€æ°ã®å®çŸããã®æšæºåå·®ã®kãè¶ ããå€ã«ãã£ãŠæåŸ å€ããéžè±ããªãä¿¡é Œã¬ãã«ã®èšç®ã§æšæºçµ±èšçã¢ãããŒãã䜿çšã§ããŸãã ãã®ã¢ãããŒãã¯ã確çãžã®åšæ³¢æ°åæã®æŠå¿µã«åºã¥ããŠããŸãïŒ ãã«ããŒã€ã®å®ç ïŒã ãã¡ãããããŒã¿ããŒã¹ã«èšé²ãããæ°åäžã®ããã»ã¹å®è£ ã«åºã¥ããŠå¹³åå€ãèšç®ããã®ã¯éåžžã«é åçã§ããããµããµã³ãã«Nã®é·ãïŒæ°åã®ãªãŒããŒïŒã«å¶éããããããå¶éããããµã³ãã«ã§ã®ããã»ã¹ã®ã©ã³ãã ãªæ§è³ªã¯ãå¹³åã ã ãããäžããããNã«å¯ŸããŠãäºæ³ãããå¹³ååšæ³¢æ°ããã®å¯èœãªæ倧ã®åå·®ããå®ãããããããšããäžå®ã®ç¢ºå®æ§ã§ç¥ãå¿ èŠãããã®ã§ãã
çµ±èšçãªããŒãã¹ãã©ãã ïŒããŒãã¹ãã©ããïŒã®æ¹æ³ã§å¿ èŠãªæšå®å€ãååŸããããšã«ããŸãããããã¯ãäž»ãªäŸã®ã»ããããã¢ã³ãã«ã«ãæ³ã䜿çšããŠãNåã®å®çŸãããµã³ãã«ãè€æ°çæããŸãã ãã®æ¹æ³ã®æ¬è³ªã¯ãå ã®èŠçŽ ã»ããã®ã©ã³ãã ãªçµã¿åããã§æ§æãããå©çšå¯èœãªãµã³ãã«ããååã«å€æ°ã®æ¬äŒŒãµã³ãã«ã圢æããããšã§ãïŒãã®çµæãäžéšã®åæèŠçŽ ã¯1ã€ã®æ¬äŒŒãµã³ãã«ã§æ°åçºçããå ŽåããããŸãããä»ã®å®å šã«ååšããªãå ŽåããããŸãïŒã°ãã€ãã調ã¹ãããã«ãåæãããçµ±èšç¹æ§ã®å€ã決å®ããŸãã
äºåçãªæšå®ã«ãããšãæ°åã®ãã©ã¡ãŒã¿ãŒãµãã°ã«ãŒãã®ããããã«å¯ŸããŠãæ倧1,000äžåã®æ¬äŒŒãµã³ãã«ãçæããå¿ èŠããããŸãã ããŒã¿éããã®ä»ã®èŠå ãèãããšãæ°åæéã®ãµãŒããŒã³ã³ãã¥ãŒãã£ã³ã°æéã«ã€ããŠè©±ããŠããŸãã Visual Basic 6ã§ã¯ããããã¿ã€ãã¢ããªã±ãŒã·ã§ã³ã·ãã¥ã¬ãŒã¿ãäœæããããã¹ããããŸããã ãã ãããã«ãã¹ã¬ããã®æŠéããŒãžã§ã³ãã³ã³ãã€ã«ããåŸãè€æ°ã®ã¹ã¬ããã§ã·ãã¥ã¬ãŒã·ã§ã³ãèµ·åãããšãã«ãCPUã³ã¢ãããã®è² è·ãäºæ³ããã100ïŒ ã§ã¯ãªã5ïŒ ã§ããããšãçªç¶æããã«ãªããŸããã
Intel Vtune Amplifierãããã¡ã€ã©ãŒã®åºæ¬çãªãããã¹ãããåæã§ã¯ãç°åžžãªããšã¯äœã瀺ãããŸããã§ããã ã³ãŒãã«ã¯ç®è¡æŒç®ãšã©ã³ãã ã€ã³ããã¯ã¹ã«ããã¡ã¢ãªã¢ã¯ã»ã¹ä»¥å€ã®ãã®ãå«ãŸããŠããªããããã·ãã¥ã¬ãŒã¿ã¯ãã¹ãŠã®ã¹ã¬ããã«äœæ¥ãå®å šã«ããŒãããå¿ èŠããããšç¢ºä¿¡ããŸããã
For k = 1 To NumIters Randomize For i = 1 To NumPockets NumFired = 0 For j = 1 To chainLength ind = d + Int(B * Rnd) NumFired = NumFired + FiredOrNot(ind) Next j Tmp = NumFired / chainLength If Tmp < MinProb Then MinProb = Tmp If Tmp > MaxProb Then MaxProb = Tmp Values(i) = Tmp TotalFired = TotalFired + NumFired Next i AvgProb = TotalFired / (k * NumPockets) / chainLength Next k
ãã®ã³ãŒãã¯ã¡ã¢ãªåž¯åå¹ ã«éåžžã«çµã³ã€ããŠããŸããïŒïŒ ãããŠããªãæ°ã¡ã¬ãã€ãã®ããã»ããµãã£ãã·ã¥ãå¿ èŠãªã®ãããªã察å¿ã§ããªãã®ãïŒ åé¡ã¯æ°æ¥éç§ãå°æãããŸããã é ããŠéå§ãããåæå®è¡æ§åæã¯ãVBã·ã¹ãã ã©ã€ãã©ãªã®è žå ã®ã©ããã«å€§ããªãããŒããŠã³ãæããã«ããŸãããããããã®é«äŸ¡ãªã·ã¹ãã é¢æ°ãã©ãããåŒã³åºããããã瀺ãããšãã§ããŸããã§ããã

æåŸã«ãå®éšçã«ãåé¡ã¯RndæŒç®åã«ããããšãããããŸããïŒ ã©ããããRndã®äžŠå䜿çšã¯éçºè ã«ãã£ãŠæäŸãããŠããŸããã ãããããMicrosoftã®å®è£ ã§ã¯ãäœããã®çš®é¡ã®å éšä¿çããã¯ã䜿çšããŠããŸãã å®éãã¢ããªã±ãŒã·ã§ã³ãé«éåãã代ããã«Rndã䞊ååãããšãäœåãã®é床ãäœäžããŸããã åæ§ã®åäœã¯ãVBAã䜿çšããMS Office補åã§ã¯äžè¬çã ãšæããŸãã ã©ã³ãã ãªæŽæ°ã€ã³ããã¯ã¹ãè¿ éã«çæãããšããåé¡ããããŸã§ã«ãªãã»ã©éèŠã«ãªããŸããïŒ ä¹±æ°ã®é åãçæããããã®æ¢è£œã®ã©ã€ãã©ãªãæ¢ãããšã«ããŸããã
çµ±èšé¢æ°ããã±ãŒãžãåããã€ã³ãã«Â®ãã¹ã«ãŒãã«ã©ã€ãã©ãªãéžæãããŸããã

MKLã¯ãã¹ãã¢ãŒãã§äœ¿çšã§ããŸãã çŸåšïŒããŒãžã§ã³11.02ïŒã11ã®åºæ¬çãªã©ã³ãã å€æ°ãžã§ãã¬ãŒã¿ãŒã12ã®é£ç¶ã11ã®é¢æ£åºåååžãå©çšå¯èœã§ãã ç§ã«ãšã£ãŠéåžžã«éèŠã§ããããšãå€æããã®ã¯ãéçºè ãã©ã€ãã©ãªã®ã¹ã¬ããã»ãŒããä¿èšŒããããã«ãã«ãã¹ã¬ããã¢ãŒãã§äœ¿çšããå Žåã®è£œåã®å©ç¹ãææããŠããããšã§ã... MKLã®ããã¥ã¡ã³ãã§ã¯ã次ã®ã»ã¯ã·ã§ã³ã«æ³šæãåããããŸããã
é決å®çä¹±æ°ãžã§ãã¬ãŒã¿ãŒïŒRDRANDããŒã¹ã®ãžã§ãã¬ãŒã¿ãŒã®ã¿ïŒ[AVX]ã[IntelSWMan]ã åºã«ãªãããŒããŠã§ã¢ã§ãµããŒããããŠããå Žåã«ã®ã¿ãé決å®çä¹±æ°ãžã§ãã¬ãŒã¿ãŒã䜿çšã§ããŸãã Intel CPUãé決å®çä¹±æ°ãžã§ãã¬ãŒã¿ãŒããµããŒãããŠãããã©ãããæ€åºããæ¹æ³ã«ã€ããŠã¯ãããšãã°ã[AVX]ã®ç¬¬8ç« ïŒ32nmåŸã®ããã»ããµåœä»€ãŸãã¯[BMT]ã®ç¬¬4ç« ïŒRdRandåœä»€ã®äœ¿çšãåç §ããŠãã ããããã®ãéãæ©èœãè©ŠããŠã¿ããã£ãã®ã§ãããæ®å¿µãªãããç§ã®ããã»ããµã«ã¯ããŒããŠã§ã¢ä¹±æ°ãžã§ãã¬ãŒã¿ãè£ åãããŠããªãããšãããããŸããã äžèšã«å ããŠãMKLããã±ãŒãžã®éèŠãªæ©èœã¯ãã»ãšãã©ã®ããã°ã©ãã³ã°èšèªã§æŒç®ååŒã³åºãããšã«1ã€ã®ä¹±æ°å€ãååŸããéåžžã®æ £è¡ãšã¯å¯Ÿç §çã«ãä¹±æ°ã¹ããªãŒã ã®ãããã¯çæã®ãã©ãã€ã ã§ãã
Xeon Phiã³ããã»ããµã¢ãŒããã¯ãã£ã䜿çšããã·ãã¥ã¬ãŒã·ã§ã³ã«MKL VSLã®ä¹±æ°ã䜿çšããå®çšäŸãããšãã°Shuo Liã®ã±ãŒã¹ã¹ã¿ãã£ïŒStepwise Optimization Frameworkã䜿çšããMonte Carlo European Optionã§ã®é«æ§èœã®å®çŸã¯ããããã¯ãŒã¯äžã§ãã§ã«å©çšå¯èœã§ãã ãã¶ã誰ãããã®èšäºã翻蚳ãããã§ããïŒ ã¡ãªã¿ã«ãä¹±æ°ã®é£ç¶çæãããã¹ããªãŒãã³ã°ããžã®ç§»è¡äžã«ãé©åãªé床ã®å¢å ãèšé²ãããŸãã
R NGãC ++ TR1ããã€ã³ãã«MKLã«å€æŽãããšãå ã®ã³ãŒãã5.53åæ¹åãããã ãã§ãªããã³ã³ãã€ã©ãŒãã€ã³ã©ã€ã³é¢æ°åŒã³åºããå®è¡ããå éšã«ãŒãã§ã³ãŒãããã¯ãã«åããããšãå¯èœã«ãªããŸãã...
MICã¢ãŒããã¯ãã£çšã«åã³ã³ãã€ã«ãããšã2ã€ã®8ã³ã¢Sandy Bridge @ 2.6 Hz Xeonsãšæ¯èŒããŠããã«å€§ããæé·ããŸãã
ãã¹ãã·ã¹ãã ã§å®äºããã®ã«44ç§ããã£ãåãããã°ã©ã ããããã5ç§æªæºã§å®äºããããã«ãªããŸãããããã¯8.82åã®æ¹åã§ãã
ããããèšäºããç§ã¯ãŸã èè ãã©ã®ã¢ãã«Phiã䜿çšããã®ãç解ããŠããŸããã§ãããæããã«ã4120ãã«ã§7120XïŒ16GBã1.238 GHzã61ã³ã¢ïŒã ãã€ãã©ã³ãã£ã³ã°ãåŸ ããã«ãä»ãŸã§ã«æéããªãã£ããã¡ã€ãé£ããŠè¡ãæéã§ãããã;-)æŠéã§è©ŠããŠããã¡ã€ãèšããã®ã¯é¢çœãã§ãããã
ãããã«ãããä¹±æ°ãããã¯ãçæããMKLã®ã¢ãããŒãã«èå³ããããŸãã ãŸããvslNewStreamãåŒã³åºããšãæå®ãããç¹æ§ãæã€ä¹±æ°ã¹ããªãŒã ãžã§ãã¬ãŒã¿ãŒãäœæãããŸããããšãã°ãããŒã¹ãžã§ãã¬ãŒã¿ãŒã®ååVSL_BRNG_SFMT19937ïŒSIMDæåã®Fast Mersenne Twisteræ¬äŒŒä¹±æ°ãžã§ãã¬ãŒã¿ãŒïŒã¯é åçã§ãã 次ã«ããã®ãžã§ãã¬ãŒã¿ãŒãïŒããã³ç°ãªãã¹ããªãŒã ããïŒäœ¿çšããŠãå²ãåœãŠãããã¡ã¢ãªãããã¯ã«ãåžæããååžãšããŒã¿åã®ä¹±æ°åãçŽæ¥å ¥åããŸãã ããšãã°ãvirnguniformïŒã¡ãœãããã¹ããªãŒã ãnãrãaãbïŒãªã©ã®åŒã³åºãã¯ãã¹ããªãŒã nãžã§ãã¬ãŒã¿ãŒã«åºã¥ããŠãåäžã«åæ£ãããaããbãŸã§ã®ã©ã³ãã ãªå€ã§é årãæºãããŸãã äœæ¥åŸãvslDeleteStreamãåŒã³åºããŠã¹ããªãŒã ãåé€ããå¿ èŠããããŸãã
æ¬äŒŒä¹±æ°ãžã§ãã¬ãŒã¿ãŒã®æéæéã«ãããä¹±æ°ã®äžŠå䜿çš/çæã«ã¯éèŠãªåŽé¢ããããŸããããã¯ãã ã¢ã³ãã«ã«ãã¢ãããŒããããã«ç°¡åãã€é«éã«ãã ããšããèšäºã§ãåèã®ã»ã«ã²ã€ã¡ã€ããããšã¢ã³ãã¬ã€ãã©ã€ãã³ãçŸããæãããã®ã§ãã 奜å¥å¿ã®ããã«ãæç²ãåŒçšããŸãïŒç¿»èš³ãªãïŒïŒ
é衚瀺ã®ããã¹ã
ãã®åŸåãšã¢ã³ãã«ã«ãæ³ã®èšç®ã³ã¹ãã®ããã«ã䞊åç°å¢ã§ã®äœ¿çšã®åé¡ã¯éèŠã§ãã å€ãã®ã¢ã³ãã«ã«ãæ³ã¯ãéåžžã«èªç¶ãªäžŠååãå¯èœã«ããŸãã ãã®å Žåãä¹±æ°ãžã§ãã¬ãŒã¿ãŒã®éžæã¯ã䞊è¡ããŠåäœããèœåã«å¿ããŠè¡ãå¿ èŠããããŸãã èæ ®ãã¹ãéèŠãªåŽé¢ã¯
䞊è¡ããŠçæãããã·ãŒã±ã³ã¹éã®ç¬ç«æ§ã ç¬ç«ããã·ãŒã±ã³ã¹ãçæããæ¹æ³ã¯ããã€ããããŸãã 以äžã®3ã€ãæ€èšããŸãã
1ã€ã¯ãããã€ãã®ä¹±æ°ãžã§ãã¬ãŒã¿ãŒã®åæ䜿çšã§ãããã®ãã©ã¡ãŒã¿ãŒã¯ãããŸããŸãªãžã§ãã¬ãŒã¿ãŒã«ãã£ãŠçæãããã·ãŒã±ã³ã¹ãäœããã®æå³ã§ç¬ç«ããŠããããã«éžæãããŸãïŒããšãã°ãã¹ãã¯ãã«ãã¹ãã®èŠ³ç¹ããïŒã ä»ã®2ã€ã¯ãå ã®æ¬äŒŒã©ã³ãã ã·ãŒã±ã³ã¹ãkåã®éè€ããªããµãã·ãŒã±ã³ã¹ã«åå²ããŸããkã¯ã¹ã¬ãã/ããã»ã¹ã®æ°ã§ãç°ãªãã¹ã¬ãã/ããã»ã¹ã¯å¯Ÿå¿ãããµãã·ãŒã±ã³ã¹ã®ä¹±æ°ã®ã¿ã䜿çšããŸãã
ãããã®1ã€ã¯ããããã¯åå²ãŸãã¯å èªã¿æ¹æ³ãšããŠç¥ãããŠããŸãã ãã®å Žåãå ã®ã·ãŒã±ã³ã¹ã¯åŸç¶ã®èŠçŽ ã®éè€ããªãkåã®ãããã¯ã«åå²ãããåãããã¯ã¯å¯Ÿå¿ãããµãã·ãŒã±ã³ã¹ã«ãããã³ã°ãããŸãã ãã1ã€ã®æ¹æ³ã¯ããªãŒããããã°æ³ãšããŠç¥ãããŠããŸãã ããã¯ãæåã®ãµãã·ãŒã±ã³ã¹ãä¹±æ°x1ãxk + 1ãx2k + 1ãx3k + 1ã...ãçæããããã«ãleapfrogã¡ãœãããå ã®ã·ãŒã±ã³ã¹x1ãx2ãx3ã...ãkåã®ãµãã·ãŒã±ã³ã¹ã«åå²ãããšããç¹ã§ãå èªã¿æ¹æ³ãšã¯ç°ãªããŸãã2çªç®ã¯ä¹±æ°x2ãxk + 2ãx2k + 2ãx3k + 2ã...ãçæããæåŸã«kçªç®ã¯ä¹±æ°xkãx2kãx3kã...ãçæããŸã
ããŸããŸãªäžŠåã¢ã³ãã«ã«ãæ³ã«ã¯ããããã®ã¢ãããŒãã«ã¯é·æãšçæããããŸãã æåã®æ¹æ³ã䜿çšãããšãç¬ç«ããã¹ããªãŒã ã®æ倧æ°ã¯ãéžæãããé©åãªãã©ã¡ãŒã¿ãŒã®æ°ã«ãã£ãŠå¶éãããŸãã ã¹ãããã¢ãããæ¹åŒã§ã¯ããããã¯éã®é«ãçžé¢ãå¯èœã§ããããµãã·ãŒã±ã³ã¹èªäœã®ã©ã³ãã æ§ã¯å ã®ã·ãŒã±ã³ã¹ãšåãã§ãã
ãªãŒããããã°æ³ã䜿çšãããšããµãã·ãŒã±ã³ã¹ã®æ°ãå¢ãããšããµãã·ãŒã±ã³ã¹ã®ã©ã³ãã æ§ãåçã«äœäžããŸãã æåŸã«ãäžéšã®ãžã§ãã¬ãŒã¿ãŒã§ã¯ãåŸè ã®2ã€ã®ã¡ãœããã®å®è£ ã¯ãå¿ èŠãªãµãã·ãŒã±ã³ã¹ãéžæããããã«å ã®ã·ãŒã±ã³ã¹å šäœãçæããã®ãšåããããå¹çãæªãå ŽåããããŸãã ãããã£ãŠãããããã¹ãŠã®èæ ®äºé ãèæ ®ããªãããæãé©åãªãžã§ãã¬ãŒã¿ãŒãéžæããå¿ èŠããããŸãã
MKLã©ã€ãã©ãªãŒã§ã¯ãIntelã®åªç§ãªã¹ã¿ãããããµãã·ãŒã±ã³ã¹ã«åå²ããããã®å èªã¿ã¢ãããŒããšè·³èºã¢ãããŒãã®äž¡æ¹ãå®è£ ããŠããããšãèšããªããã°ãªããŸããã ãã ããç§ã®ã¿ã¹ã¯ã®äžéšãšããŠã1ã€ã®åºæ¬çãªãžã§ãã¬ãŒã¿ãŒããã®è€æ°ã®ã¹ããªãŒã ã䜿çšãããŸããããããã¯ç¬ç«ããŠããŒã¿ã®ç°ãªããµãã°ã«ãŒãã§äœ¿çšããããããäºãããã®ã¹ããªãŒã ã®çµ¶å¯Ÿçãªçµ±èšçç¬ç«æ§ã®èŠä»¶ã¯ãããŸããã ãããã£ãŠãç§ã«ãšã£ãŠã®äž»ãªæè¡çå°é£ã¯ãCããã³Fortranã«ãã£ãŠåŒ·åãããMKLã€ã³ã¿ãŒãã§ã€ã¹ãVisual Basicãããžã§ã¯ãã«æ¥ç¶ããããšã§ãã Microsoft * Office Excelã®ã€ã³ãã«Â®MKLã䜿çšããèšäºã§ã¯ãMKLèªäœã䜿çšããŠã©ãããŒdllãçæããæ¹æ³ã説æãã ExcelããMLKé¢æ°ïŒãã¡ããstdcallèŠåïŒã®åŒã³åºãã®äŸã瀺ããŸãã
æŠå¿µã¯æ¬¡ã®ãšããã§ããMKLBuilderã«ãæå®ãããåŒã³åºãèŠçŽã«åŸã£ãŠãå¿ èŠãªMKLé¢æ°ã®ä»»æã®ãªã¹ãããšã¯ã¹ããŒãããdllãèªåçã«çæããããã«äŸé Œã§ããŸãã ãã¡ãããVC ++ã§ç¬èªã®dllãããžã§ã¯ããäœæã§ããŸãããèªåçæã¯ããæ®éçãªæ¹æ³ã§ãããå¿ èŠãªãã¡ã€ã«ãããé«éã«ååŸããã®ã«åœ¹ç«ã€ããã«æããŸããã èšäºãå€ããªã£ãŠããããšãããã«æããã«ãªãããã¹ãã³ãã³ãnmake libia32 threading =ã·ãŒã±ã³ã·ã£ã«ã€ã³ã¿ãŒãã§ã€ã¹= stdcall export = user_example_list name = mkl_customãå€ãã®çç±ã§ããã«ã¯ã©ãã·ã¥ããŸããã msvcrt.libãã¡ã€ã«ãmkl \ tools \ builder \ãã©ã«ããŒã«è¿œå ããŠãåé¡ã®1ã€ã解決ããŸããã è€æ°ã®ã¡ãã»ãŒãžã æªè§£æ±ºã®å€éšã·ã³ãã«___security_cookieãå¥ã ã«æ¥œãã¿ãŸããã
ãã€ã¯ããœããã®æšå¥šäºé ãšåæ¥ããããŠã®æ®ºå®³ã䜿çšããŠãbufferoverflowU.libãã©ã¡ãŒã¿ãŒãåŸã«ãªã³ã«ãŒã³ãã³ãã©ã€ã³ã«å²ãåœãŠãããšã«ããããã«ããŒãã©ã«ããŒã®ã¡ã€ã¯ãã¡ã€ã«ãå€æŽããå¿ èŠããããšããçµè«ã«éããŸããïŒ$ïŒCB_NAMEïŒ.dllã ããŠãã¹ã¯ã©ããã®ããã¡ã«ããºã ãæ©èœãã nmake libia32 threading = parallel interface = stdcall export = vml_vsl_stdcall_example_list name = mkl_customãçºè¡ããããšã§ããã¯ã¿ãŒçµ±èšã©ã€ãã©ãªã®ãã¹ãŠã®æ©èœãå«ã38ã¡ã¬ãã€ãã®ãã€ãããã¯ã©ã€ãã©ãªã®å¹žéãªææè ã«ãªããŸããã ç§èªèº«ã®å¥å šãªè³æ¬äž»çŸ©æ¬²ãå æããã©ã€ãã©ãªã«å¿ èŠãªé¢æ°ã3ã€ã ãæ®ããŸããããã®åŸããµã€ãºã¯æ°ã¡ã¬ãã€ãã«æžå°ããŸããã
次ã«ãåŒã³åºãã³ãŒãã«ã€ããŠã VB6ããã³VBAã§ã¯ãå¿ èŠãªé¢æ°ã¯æ¬¡ã®ããã«å®£èšããå¿ èŠããããŸãã
Public Declare Function vslNewStream Lib "mkl_custom.dll" (ByRef StreamPtr As Long, ByVal brng As Long, ByVal seed As Long) As Long Public Declare Function vslDeleteStream Lib "mkl_custom.dll" (ByRef StreamPtr As Long) As Long Public Declare Function viRngUniform Lib "mkl_custom.dll" (ByVal method As Long, ByVal StreamPtr As Long, ByVal n As Long, ByRef Data As Long, ByVal A As Long, ByVal B As Long) As Long
ãã¹ããšããŠãããŒã¹ãžã§ãã¬ãŒã¿ãŒVSL_BRNG_MCG31ïŒ31ãããã®ä¹ç®ååãžã§ãã¬ãŒã¿ãŒïŒã䜿çšããŠã1ã10,000ïŒ10,000ãå«ãŸãªãïŒã®500äžåã®ã©ã³ãã ãªæŽæ°ã€ã³ããã¯ã¹ã®é åã100åçæããŠã¿ãŸãããã
Dim i&, theStream&, v&(), res&, t! Dim theStream As Long ReDim v(1 To 5000000): res = vslNewStream(theStream, VSL_BRNG_MCG31, 777) t = Timer For i = 1 To 100 res = viRngUniform(VSL_RNG_METHOD_UNIFORM_STD, theStream, 5000000, v(1), 1, 10000) Next i Debug.Print Timer - t res = vslDeleteStream(theStream)
ã©ã³ã¿ã€ã -1.19ç§ã ãšããã§ãSSEã®äœ¿çšæ¹æ³ãç¥ã£ãŠããVSL_BRNG_SFMT19937ãžã§ãã¬ãŒã¿ãŒã¯ã0.99ç§ã§åãã¿ã¹ã¯ãå®è¡ã§ããŸãã ããŠãå¿ èŠãªæäœã®åŒã³åºããã¡ã€ã³ã³ãŒãã«è¿œå ããããã»ããµã®è² è·ãç£èŠããŸãã

ãã³ãŽããã«ããŠã³ããŒãïŒ cuRANDããã±ãŒãžã䜿çšããŠGPGPUãå®è£ ãããšããã¢ã€ãã¢ããããŸãããããã®å©ç¹ã¯Nvidiaã«ãã£ãŠæ確ã«ç€ºãããŠããŸãã
ã€ã³ãã«MKLãšæ¯èŒããéåžžã«é«éãªCURANDããã©ãŒãã³ã¹

ãã ããæåã®ç®æšã¯MKLã§éæãããCudaããŒãžã§ã³ããã¹ãããèªç±æéã¯ãŸã ãããŸããã :-)
èŠçŽãããšãä¹±æ°ã®äžŠåçæã«ãããããã€ãã®åé¡ã«ã€ããŠåŠã³ãã€ã³ãã«MKLã䜿çšããŠãããã解決ããæ¹æ³ã«é¢ããå®çšçãªæšå¥šäºé ãåãåããŸããã ãã®åŒ·åãªã©ã€ãã©ãªã¯ãææ°ã®Visual Studioã®ä»»æã®èšèªïŒC ++ãCïŒãVBãããã³Visual FortranïŒãã䜿çšã§ããŸãããŸããé³å£°æè¡ã䜿çšããŠãå€éšDLLïŒVB6ãVBAãLabViewãMatlabãªã©ïŒãåŒã³åºãããšãã§ããç°å¢ããã䜿çšã§ããŸããã®ä»ã
ãæž èŽããããšãããããŸããïŒ