ãGentooãèªåçšã«ã€ã³ã¹ããŒã«ããäºå®ã§ããç§ã®ããã»ããµã®æ©èœã䜿çšããæ¹ãè¯ãã§ããããããããæ倧éã«æŽ»çšããã§ããããã ããŠããããææ¡ããŸããã...

ããã»ããµã®äžè¬çãªæé©åã¯äœã§ããïŒ
åºæ¬çã«ãããã¯ãã¢ããªã±ãŒã·ã§ã³ã®ã³ã³ãã€ã«æã«MMXãSSEãAESãAVXãªã©ã®è¿œå ã®åœä»€ã»ããã䜿çšããããšãæå³ããŸãã ãã ããæ·±ãæãäžãããšãã¢ããªã±ãŒã·ã§ã³ã ãã§ãªãä»ã®æé©åãè¡ãããŸãã
次ã®æé©åã°ã«ãŒããç¹å®ããŸããã
- ã³ãŒãã®æé©å
- x86åœä»€ã®è¿œå ã»ããïŒ MMXãSSEãAESãATAãAVXãªã©ïŒã®ã³ã³ãã€ã«æã®ã³ãŒãæé©å
- ã³ã³ãã€ã«äžã®éçåæäžã®ã³ãŒãã®æé©åïŒæ«å°Ÿååž°ã®å±éãã³ãŒãã®æªäœ¿çšã»ã¯ã·ã§ã³ã®åé€ãç¡æå³ãªæ¡ä»¶ã®ç¡èŠãªã©ã
- ããã»ããµãã£ãã·ã¥ã®ããããæ¹åããããã®æé©åã
- ã«ãŒãã«ã¬ãã«ã®ã³ãŒãã®æé©åïŒ Cryptographic APIã®æå·åã¡ãœããã
è¿œå ã®åœä»€ã»ããã®æé©åã«ã€ããŠã¯ã
Intel 386ããã³AMD x86-64 GCCãªãã·ã§ã³ããŒãžã§
詳ãã 説æãããŠããŸãã Pentium MMXããå§ããŠãMMXãå©çšå¯èœã«ãªããAMDã3DNowïŒãäœæããSSEãPentium IIIã«ç»å ŽããŸããã ä»å¹Žç§ãã¡ãåã°ããIntel Haswellã¯ãMOVBEãMMXãSSEãSSE2ãSSE3ãSSSE3ãSSE4.1ãSSE4.2ãAVXãAVX2ãAESãPCLMULãFSGSBASEãRDRNDãFMAãBMIãBMI2ãããã³F16Cã
ã³ã³ãã€ã©ã¯ããã«SSEã䜿çšã§ãããããå®æ°ïŒ
FPU ïŒã®æäœã¯ãè¿œå ã®åœä»€ã»ããã«ãéæ¥çã«é¢é£ããŠããŸãã x87åœä»€ãããé«éã§ãMMXããããã¯ããŸããã ããã«ã€ããŠããå°ã詳ãã説æããŸãã
å¥ã®éèŠãªæ©èœã«æ³šæããå¿
èŠããããŸãã SSEãMMXãããã³AESã®ç¥èªã声ã«åºããŠèšåãããšããããã®æŠå¿µã«ç²ŸéããŠãã人ã
ã¯ãã¢ã»ã³ãã©ãŒããœãããŠã§ã¢å
ã®ãããã®åœä»€ã®ãã¡ã€ã«ããµããŒãããCããã°ã©ããŒã®å°é£ãªç掻ãäŒããåçãé ã«æµ®ãã³ãŸãã å®éããããã®åœä»€ã»ããã䜿çšããæ¹æ³ã¯ãã§ã«3ã€ãããŸãïŒéçã³ãŒãåæçšã®ã³ã³ãã€ã©ãŒã«ããèªåã
ç¹å¥ãªã³ã³ãã€ã©ãŒé¢æ°ã®æåã«ãã䜿çš
ãããã³ã¢ã»ã³ãã©ãŒæ¿å
¥ã®æåã«ãã䜿çšïŒäŸïŒ
MMXããã»ããµãŒåãã«ã³ãŒããæé©åããæ¹æ³ ïŒã ã©ã®ç¹å®ã®ã±ãŒã¹ã§GCCãèªåçã«äžé£ã®æ瀺ã䜿çšãããïŒèš±å¯ãããŠããå ŽåïŒã¯æ確ã§ã¯ãããŸããããããã¥ã¢ã«ã«ã¯ãã®ãããªã±ãŒã¹ãããããšãæ確ã«èšèŒãããŠããŸãïŒé¡ããã°ã³ã¡ã³ãã«æžãããŸãïŒã
éç解æã³ãŒãã®æé©åã«ã€ããŠã¯ ã
æé©åãå¶åŸ¡ãã
ãªãã·ã§ã³ããŒãžã§
詳ãã説æãããŠããŸãã å€ãã®å¯èœæ§ããããŸãããæ··ä¹±ããªãããã«ããããã¯ã¡ã¿ãã©ã°ã«ã°ã«ãŒãåãããŸãïŒO0ãO1ãO2ãO3ãOfastã ãããã®ãã©ã°ã®è©³çŽ°ã«ã€ããŠã¯ããªã³ã¯å
ã®èšäºãã芧ãã ããã
ããã»ããµãã£ãã·ã¥ã®ããããæ¹åããããã®æé©å ã ããã«èª¬æããããšã¯ã§ããªãã®ã§ãèªè
ã«å¥ã®èšäºã
ããã«ããã£ãã·ã¥ãåå²äºæž¬åããéä¿¡ããŸãã ããã°ã©ããŒã¯ãæé©åã§ããå Žæãåæããããã«ã
Intel VTune Performance Analyzerãš
AMD CodeAnalystã䜿çšã§ãããšããèšããŸããã ãŸãã
ICC Intel C ++ã³ã³ãã€ã©ãŒã¯ãã®ãããªæé©åãèªåçã«å®è¡ã§ããå Žåãããããã§ãããç¥èã®ãã人ãã³ã¡ã³ãã«ä»æ¥ã®GCCã®å¯ŸåŠæ¹æ³ãè¿œå ããŠãããããšãé¡ã£ãŠããŸãã
ã«ãŒãã«ã¬ãã«ã®ã³ãŒãæé©å ã SSEãAVXãAESãªã©ã®è¿œå ã®åœä»€ã»ããã䜿çšããŠãAESãTwofishãªââã©ã®æå·åAPIãã¬ãŒã ã¯ãŒã¯ã®æ©èœãé«éåã§ããŸãã ãããã®é¢æ°ã¯ãä»ã®ã«ãŒãã«ã¢ãžã¥ãŒã«ã§äœ¿çšããããã¢ããªã±ãŒã·ã§ã³ããå€éšããåŒã³åºãããã§ããŸãã
çè«ãç解ããã®ã§ããã®äœ¿çšæ¹æ³ã«ç§»ããŸãããã
Ubuntuããæã¡ã®å Žå
Ubuntuã«åº§ã£ãŠãããšããŸãã ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®ãµã€ãºã«å¿ããŠãæ¥å°ŸèŸi386ãŸãã¯amd64ã®ããã±ãŒãžããéžæã§ããŸãïŒ
äŸ ïŒã i386ã¯ã386以éã®ããã±ãŒãžãã©ã®ããã»ããµã§ãåäœããããšãæå³ãããã®ã§ã¯ãªããåã«ããã±ãŒãžãx86 32ããããã©ãããã©ãŒã åãã§ããããšãæå³ããŸãã åæ§ã«ãamd64ã¯ãx86-64 64ããããã©ãããã©ãŒã ã®ãµããŒããæå³ããŸãã ã³ã³ãœãŒã«ã«å
¥åãããšããããç°¡åã«ç¢ºèªã§ããŸãã
gcc -dumpmachine
32ãããUbuntu 12.04 LTSãµãŒããŒã§ã¯
i686-linux-gnuã衚瀺ããã64ãããã§ã¯
x86_64-linux-gnuã衚瀺ãããŸãã
32ãããã®Pentium 4ããããMMXãSSEãããã³SSE2ã䜿çšã§ãããšä»®å®ããŸããããããã¯MMXã®ã¿ã®Intel Celeronã§åäœããã¯ãã§ãããããããPentium Proã§ãåäœããªããããããã±ãŒãžã®çæã«ã¯äœ¿çšãããŸããã§ããMMXã§ããã
è¿œå ã®åœä»€ã»ããã¯ãããèªäœã§ããã»ããµã決å®ããããã»ããµçšã®ããé«éãªã¢ã«ãŽãªãºã ãå«ãããã±ãŒãžã§ã®ã¿äœ¿çšãããŸãã 幞ããªããšã«ãããã¯ã»ãšãã©ãã¹ãŠã®ãã«ãã¡ãã£ã¢ããã±ãŒãžã§çºçããŸãã
ãŸãã32ãããUbuntuãã©ã®ã³ãŒãæé©åã«äœ¿çšãããã®ããæ確ã§ã¯ãããŸããã GCCã®åºåãèŠããšã-O1ããã-O2ãš-O3ããå°ãã ãã§ãã ç¹å®ã®ããŒãžã§ã³ã®Ubuntuã®ããã±ãŒãžãããã©ã«ãã®ã³ã³ãã€ã«ãªãã·ã§ã³ã䜿çšããŠã·ã¹ãã èªäœã«ç¿æ
£çã«ãã«ããããŠããå Žåãæããã«æé©ãªïŒåççãªïŒæ¹æ³ã§åéãããŠããŸããã
æåŸã«ãã«ãŒãã«æå·åAPIã®é¢æ°ã¯æé©åãããŠããŸããã è¿œå ã®åœä»€ã»ããçšã«æé©åãããé¢æ°ã¯ãã¢ãžã¥ãŒã«åœ¢åŒã§ã®ã¿ãi586ããã³AESïŒVIA NanoïŒã«ã®ã¿ååšããŸãããããã©ã«ãã§ã¯ããŒããããŸããã ãŸãã586ã®ã©ããæé©åã«äœ¿çšã§ãããã¯æ確ã§ã¯ãããŸããã
Ubuntu 12.04 64ãããã§ã¯ãç¶æ³ã¯ãã£ãšæ¹åãããŠããŸãã ãŸããgccã¯ããã©ã«ãã§64ãããã·ã¹ãã ã®æ¡åŒµæ©èœã§ããMMXãSSEãSSE2ã䜿çšãããããã³ãŒãããããã«æé©åã§ããŸãã 次ã«ãx86-64ã®å Žåãããã©ã«ãã¯
-mfpmath = sseã§ãããããã¯å®æ°ã®æŒç®ãé«éåããŸãã
è¿œå ã®åœä»€ã»ããçšã«æé©åãããã«ãŒãã«æå·åAPIé¢æ°ã¯ãã·ã¹ãã å
ã®ã¢ãžã¥ãŒã«ã«ååšããŸãããããã©ã«ãã§ã¯ããŒããããŸããã å°ãªããšããããã¯ãªã³ã«ããããšãã§ããŸãã
ãããŠæåŸã«ãgccã¯Ubuntu 32ãããã®å Žåãšåãå¥åŠãªæé©åã»ããã§ããã±ãŒãžãåéããŸãã
gentooãæã£ãŠããå Žå
ã»ãšãã©ã®å Žå
ãããã¥ã¢ã«ãããã®
ããŒãžãèªã¿
ãŸã ã ãããã£ãŠã
-O2ããã³
-march = native ïŒãŸãã¯æ£ããããã»ããµïŒãèšå®ããŸãã ããããããããããªãã¯ããããããã§ãïŒã«ãŒãã«ãã»ããã¢ãããããšãã«æå·åAPIã«ã¢ã¯ã»ã¹ãããèªåèªèº«ã®ããã«ããã€ãã®åœä»€ãã¹ããŒãã¢ããããŸããã§ããããå°ãªããšãAESãã¹ããŒãã¢ãããã䟡å€ããããŸãã 第äºã«ïŒãããããå©çšå¯èœãªè¿œå ã®ããã»ããµåœä»€ïŒ3dnowãmmxãsseãsse2ãsse3ïŒã«
USEãã©ã°ãèšå®ããŠããŸããã ãŸãã¯ããã¹ãŠãå
¬éãããããã§ã¯ãããŸããã ããã¯ãUSEãã©ã°ã§æé©åãæå³çã«ã¢ã¯ãã£ãã«ããã¢ããªã±ãŒã·ã§ã³ã®å Žåãè¿œå ã®å éãªãã§æŸçœ®ãããããšãæå³ããŸãã

ã°ããŒãã«ãã©ã°ã«å ããŠãäžéšã®ã¢ããªã±ãŒã·ã§ã³ã®è¿œå åœä»€ãããªã¬ãŒããããŒã«ã«ãã©ã°ããããŸãã 3dnowextãssse3ãsse4ãsse4_1ãavxãavx128fmaãavx256ãaes-niãªã©ã ããªãã«ãã£ãŠãµããŒããããŠãããã¹ãŠã®ãã®ãå
¬éããæ¹ãè¯ãã§ãã

amd64ã®ææ°ã®stage3ã®ããã©ã«ãã¯ãbindistãmmxãsseãsse2ã§ãã æ®å¿µãªãããbindistã¯ã移æ€æ§ã®ããã«äžéšã®ããã±ãŒãžã§è¿œå ã®æ瀺ãç¡å¹ã«ããŸãã ãã€ã³ãã£ã¹ããå¿
èŠãªå Žåã¯ãäžéšã®ã¢ããªã±ãŒã·ã§ã³ã§cpudetectionã䜿çšããŠããã€ã³ãã£ã¹ããã©ã°ã®æ¬ é¥ã軜æžããŠãã ããã
ã©ã®Gentooããã±ãŒãžã§ããŒã¹ããååŸã§ããŸããïŒ
app-arch / libzpaq
ã¢ããªãšãã¥ã¬ãŒã·ã§ã³/ããã·ã¥
media-libs / freeverb3ïŒãªãŒãã£ãªïŒ
media-libs / libpostprocïŒãããªïŒ
media-libs / libvpxïŒãããªVP8ïŒ
media-plugins / vdr-softdeviceïŒãããªïŒ
ã¡ãã£ã¢ãµãŠã³ã/ mpg123
ã¡ãã£ã¢ãããª/ ffmpeg
ã¡ãã£ã¢ãããª/ libav
ã¡ãã£ã¢ãããª/ mplayer
ã¡ãã£ã¢ãããª/ mplayer2
ã¡ãã£ã¢ãããª/ vlc
net-libs / cyassl
net-misc / bfgminerïŒãããã³ã€ã³ïŒ
ç§åŠçç©åŠ/ raxml
sci-libs / fftw
ç§åŠ/ gromacs
sys-fs / loop-aes
x11-libs / pixman
ãŸããããã©ã«ãã§ãã§ã«èšå®ãããŠããorcãã©ã°ã¯ã次ã®å Žæã§è¿œå ã®ããã»ããµåœä»€ã䜿çšããã®ã«åœ¹ç«ã¡ãŸãã
media-libs / gstreamerïŒãªãŒãã£ãª+ãããªïŒ
ããã«ãããã©ã«ãã§ã¯èšå®ãããªãcpudetectionãã©ã°ã¯ãè¿œå ã®ããã»ããµåœä»€ããªã³ã¶ãã©ã€ã§æå¹ã«ããã®ã«åœ¹ç«ã¡ãŸãã
ã¡ãã£ã¢ãµãŠã³ã/ãžã£ãã¯ãªãŒãã£ãªæ¥ç¶ããã
ã¡ãã£ã¢ãããª/ ffmpeg
ã¡ãã£ã¢ãããª/ libav
ã¡ãã£ã¢ãããª/ mplayer
ã¡ãã£ã¢ãããª/ mplayer2
sci-libs / mpir
çµè«
- 32ãããã·ã¹ãã ã§ã¯ãææ°ã®ããã»ããµãŒã§Gentooããæ倧ã®ã²ã€ã³ãåŸãããšãã§ããŸãã
- 64ãããã·ã¹ãã ã§ã¯ãGentooããã®ã²ã€ã³ã¯ãã³ã³ãã€ã©ã®æ°ããããŒãžã§ã³ãšæé©å-O2ã䜿çšããããšã«ãã£ãŠã®ã¿ååŸã§ããŸãã
- Gentooã§ãããå
¬åŒããã¥ã¡ã³ããèªãã åŸã§ãã調æŽã«å¹²æžããŸããã
- Gentooãã¹ããŒãã¢ããã§ããŸããã
è¿œå è³æ
ICCçŽ æ
ã¢ããªã³ ïŒãŠãŒã¶ãŒ
kekekeksã¯ãæé©åã䜿çšããŠUbuntuã®äžéšã®ããã±ãŒãžãåæ§ç¯
ããæ¹æ³
ã«é¢ããã¬ã·ããå
±æããŸããã