Sophie

Sophie

distrib > Mandriva > 9.2 > i586 > by-pkgid > a804ef007a99f7d26cf24253c2994680 > files > 1130

howto-html-ja-9.1-0.5mdk.noarch.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
 <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
 <TITLE>Linux Parallel Processing HOWTO: SIMD Within A Register($BNc$($P(B MMX $B$rMxMQ(B)</TITLE>
 <LINK HREF="Parallel-Processing-HOWTO-5.html" REL=next>
 <LINK HREF="Parallel-Processing-HOWTO-3.html" REL=previous>
 <LINK HREF="Parallel-Processing-HOWTO.html#toc4" REL=contents>
</HEAD>
<BODY>
<A HREF="Parallel-Processing-HOWTO-5.html">$B<!$N%Z!<%8(B</A>
<A HREF="Parallel-Processing-HOWTO-3.html">$BA0$N%Z!<%8(B</A>
<A HREF="Parallel-Processing-HOWTO.html#toc4">$BL\<!$X(B</A>
<HR>
<H2><A NAME="s4">4. SIMD Within A Register($BNc$($P(B MMX $B$rMxMQ(B)</A></H2>

<P>
<P>SIMD(Single Instruction stream, Multiple Data stream) Within A
Register(SWAR)$B$O!"?7$7$$%"%$%G%#%"$G$O$"$j$^$;$s!#(B<EM>k</EM> $B%S%C%H$N(B
$B%l%8%9%?$H%G!<%?%Q%9!"1i;;AuCV$r;}$D%^%7%s$G$O!"0lHLE*$J%l%8%9%?=hM}$O!"(B
SIMD $B$NJBNs=hM}$GF0$/$3$H$,CN$i$l$F$$$^$9!#(B
$B$D$^$j(B <EM>k</EM>/<EM>n</EM> $B%S%C%H$N@0?tNN0h$NCM$H$7$F(B <EM>n</EM> $B8D(B
$B<B9T$G$-$^$9!#(B
$B$7$+$7:G6a$K$J$C$F(B SWAR $B5;=Q$K$h$C$F%^%k%A%a%G%#%"=hM}$,(B 2 $BG\$+$i(B 8 $BG\(B
$BAa$/$J$C$?$3$H$G!"$3$N5;=Q$,%3%s%T%e!<%F%#%s%0$N%a%$%s%9%H%j!<%`$G4X?4(B
$B$,;}$?$l$k$h$&$K$J$C$?$N$K2a$.$^$;$s!#(B1997 $BG/;~E@$G$N%^%$%/%m%W%m%;%C%5(B
$B$N$[$H$s$I$O!"AH$_9~$_$N%O!<%I%&%'%"$G(B SWAR $B$r%5%]!<%H$7$F$$$^$9!#(B
<P>
<UL>
<LI>
<A HREF="http://www.amd.com/support/techdocdir.html">AMD K6 MMX (MultiMedia eXtensions)</A>
</LI>
<LI>
<A HREF="http://www.cyrix.com:80/process/SUPPORT/isv.htm">Cyrix M2 MMX (MultiMedia eXtensions)</A>
<P>$B!ZLuCp!'(BVIA $B$N(B Web $B%5%$%H$O%*%s%i%$%s%I%-%e%a%s%H$NDs6!$rDd;_$7$F$$$^$9![(B
<P>
</LI>
<LI>
<A HREF="http://opensource.compaq.com/the_source/technical_papers/pauls-tips.htm">Digital Alpha MAX (MultimediA eXtensions)</A>
<P>$B!ZLuCp!'(BMAX $B$O(B MVI$B$H$$$&L>>N$KJQ99$5$l$F$$$^$9![(B
<P>
</LI>
<LI>
<A HREF="http://hpcc997.external.hp.com:80/wsg/strategies/pa2go3/pa2go3.html">Hewlett-Packard PA-RISC MAX (Multimedia Acceleration eXtensions)</A>$B!ZLuCp!'%j%s%/@Z$l![(B
</LI>
<LI>
<A HREF="http://www.intel.co.jp/jp/developer/vtune/v4/cbts/strmsimd/appnotes.htm">Intel Pentium II &amp; Pentium with MMX (MultiMedia eXtensions)</A>
</LI>
<LI>
<A HREF="http://www.microunity.com/www/broadband/faqs/faqs.html">Microunity Mediaprocessor SIGD (Single Instruction on Groups of Data)</A>
</LI>
<LI>
<A HREF="http://www.mips.com/arch/ISA5/">MIPS Digital Media eXtension (MDMX, pronounced Mad Max)</A>$B!ZLuCp!'%j%s%/@Z$l![(B
</LI>
<LI>
<A HREF="http://www.sun.com/sparc/vis/index.html">Sun SPARC V9 VIS (Visual Instruction Set)</A></LI>
</UL>
<P>$B?7$7$$%^%$%/%m%W%m%;%C%5$,Ds6!$7$F$$$k%O!<%I%&%'%"5!G=$K$O!"6KHk$K(B
$B$J$C$F$$$?$j!"$"$k%U%#!<%k%I$NBg$-$5$N$?$a$@$1$KI,MW$JA`:n$N$h$&$J(B
$B$*$+$7$J$b$N$O$[$H$s$I$"$j$^$;$s!#=EMW$JE@$O!"(BSWAR $B$NA`:n$r8zN(E*9T$&(B
$B$N$K$$$+$J$k%O!<%I%&%'%"$N%5%]!<%H$bI,MW$,$J$$$H$$$&$3$H$G$9!#(B
$BNc$($P!"O@M}E*$K(B 1 $B$D$N%l%8%9%?$rJ,3d$7$F$b!"%S%C%H$4$H$N1i;;$K$O1F6A$,(B
$B$G$^$;$s!#(B
<P>
<H2><A NAME="ss4.1">4.1 SWAR $B$N2?$,M%$l$F$$$k$N$+!)(B</A>
</H2>

<P>
<P>$B:G6a$N%W%m%;%C%5$G$"$l$P(B<EM>$B$I$l$G$b(B</EM>$BB?$+$l>/$J$+$l(B SWAR $B$NJBNs=hM}(B
$B5!G=$r@8$+$;$^$9!#$?$@;DG0$J$3$H$K!"(BSWAR $B$GBgI}$K5!G=6/2=$5$l$?L?Na%;%C%H(B
$B$,!"HFMQE*$KJBNs=hM}$KE,MQ$G$-$k$o$1$G$O$"$j$^$;$s!#<B:]$K$O!"3'$5$s$b(B 
Pentium $B$H!V(BMMX Pentium$B!W$N@-G=$N0c$$$O!"(BMMX $B$,H/Gd$5$l$?$HF1;~$KEk:\(B
$B$5$l$?$h$jBg$-$J(B L1 $B%-%c%C%7%eEy$N$*$+$2$G$"$k$3$H$K5$$E$+$l$F$$$k$H(B
$B;W$$$^$9!#K\Ev$N$H$3$m!"(BSWAR($B$b$7$/$O(B MMX)$B$O2?$,NI$$$N$G$7$g$&$+!)(B
<P>
<UL>
<LI>$B%G!<%?$O@0?t$N$_!#>.$5$1$l$P>.$5$$DxNI$$!#(B32 $B%S%C%H$NCM(B 2 $B$D$,!"(B
64 $B%S%C%H$N(B MMX $B%l%8%9%?$K$O$A$g$&$I$$$$$,!"(B8 $B8D$N(B 1 $B%P%$%H$N(B
$B%-%c%i%/%?$b$7$/$O(B 1 $B%S%C%H$NCM$r%A%'%9HW$KCM$r;6$i$9$h$&$K%;%C%H(B
$B$9$k(B

$BCm0U!'(B<EM>$BIbF0>.?tE@HG$N(B MMX</EM>$B$b$"$k$h$&$@$,!"$3$l$r5-=R$7$F$$$k(B
$B;~E@$G$O!"$[$s$N>/$7$7$+=P$^$o$C$F$$$J$$$H8@$o$l$F$$$k!#(BCyrix $B$O0JA0(B
$BH/I=$7$?%9%i%$%I(B(
<A HREF="ftp://ftp.cyrix.com/developr/mpf97rm.pdf">ftp://ftp.cyrix.com/developr/mpf97rm.pdf</A>)
$B!ZLuCp!'%j%s%/@Z$l![$NCf$G!"(B<B>MMFP</B> $B$K$D$$$F%3%a%s%H$7$F$$$k!#(B
MMFP $B$O(B 2 $B$D$N(B 32 $B%S%C%HIbF0>.?tCM$r%Q%C%/$7$F(B 64 $B%S%C%H$N(B MMX $B%l%8%9%?(B
$B$KG<$a!"$3$l$r$^$H$a$F(B 2 $B$D$N(B MMFP $B%Q%$%W%i%$%s$KN.$7!"%/%m%C%/Ev$?$j(B 
4 $B$D$NC1@:EYIbF0>.?tE@1i;;$r%5%]!<%H$9$k$H$7$F$$$k!#(B
<P>$B!ZLuCp!'(B2001.3 $B8=:_!"(BCyrix($B8=(B VIA $B;12<(B)$B$N%W%m%;%C%5$G$3$N5!G=$r(B
$B<BAu$7$F$$$k$b$N$O$"$j$^$;$s$7!"M=Dj$bH/I=$5$l$F$$$^$;$s![(B
<P>
</LI>
<LI>SIMD $B$b$7$/$O%Y%/%H%k7?$NJBNs@-!#F1$8A`:n$,$9$Y$F$N%U%#!<%k%I(B
$B$KBP$7$FF1;~$KH/@8$9$k!#FCDj%U%#!<%k%I$N7k2L$rL58z$K$9$k(B($B$D$^$j!"(BSIMD $B$,(B
$B%^%9%-%s%0$r$9$k$3$H$HF1$8(B)$B<jCJ$,$"$k$,!"%3!<%G%#%s%0$,J#;($K$J$C$?$j(B
$B%Q%U%)!<%^%s%9$,Dc2<$7$?$j$9$k(B
</LI>
<LI>$B%m!<%+%k$G5,B'E*$J(B($B%Q%C%/$7$F$"$l$P$J$*NI$$(B)$B%a%b%j;2>H%Q%?!<%s!#(B
SWAR $BA4HL!"FC$K(B MMX $B$O%i%s%@%`$J=g=x$G%"%/%;%9$9$k$H$H$s$G$b$J$$$3$H(B
$B$K$J$k!#(B<CODE>x[y]</CODE>(<CODE>y</CODE> $B%$%s%G%C%/%9$NG[Ns(B)$B$N$h$&$J%Y%/%H%k(B
$B$r=8$a$F$/$k=hM}$O$H$F$b=E$/$J$k(B</LI>
</UL>
<P>$B$3$l$i$N@)Ls$O?<9o$G$9$,!"$3$N%?%$%W$NJBNs@-$O%^%k%A%a%G%#%"$N(B
$B%"%W%j%1!<%7%g%s$@$1$G$J$/!"JBNs%"%k%4%j%:%`$G$O$h$/@8$8$k$3$H$G$9!#(B
$B%"%k%4%j%:%`$N%?%$%W$,E,@Z$G$"$l$P!"(BSWAR $B$O!"(BSMP $B$d(B $B%/%i%9%?$NJBNs@-(B
$B$h$jM-8z$G$9$7!";HMQ$9$k$KEv$C$F$^$C$?$/HqMQ$,$+$+$j$^$;$s!#(B
<P>
<H2><A NAME="ss4.2">4.2 SWAR $B%W%m%0%i%_%s%0F~Lg(B</A>
</H2>

<P>
<P>SWAR(SIMD Within A Register)$B$N4pK\E*$J%3%s%;%W%H$O!"%o!<%ID9%l%8%9%?(B
$B$NA`:n$r(B <EM>n</EM><EM>k</EM>/<EM>n</EM> $B%S%C%H$N%U%#!<%k%ICM$r(B SIMD 
$B$NJBNs1i;;$r$9$k$3$H$G!"7W;;B.EY$r8~>e$5$;$kE@$K$"$j$^$9!#$7$+$7!"(B
SWAR $B5;=Q$O07$$$E$i$/!"<B:](B SWAR $B$N1i;;$OF1MM$J1i;;$r9T$&=g<!1i;;$rO"B3(B
$B$7$F9T$C$?$N$HHf$Y$F=E$/$J$j$^$9!#$=$l$O(B SWAR $B$N1i;;$K$O!"%U%#!<%k%I$r(B
$BJ,3d$9$kL?Na$,$5$i$K2C$o$k$?$a$G$9!#(B
<P>$B$3$NE@$r@bL@$9$k$N$K!"(BSWAR $B$N$7$/$_$r$+$J$jC1=c2=$7$F9M$($F$_$k$3$H(B
$B$K$7$^$7$g$&!#(B4 $B$D$N(B 8 $B%S%C%H%U%#!<%k%ID9$r;}$D(B 32 $B%S%C%H$N%l%8%9%?(B 
$B$,$"$k$H$7$^$9!#(B
2 $B$D$N%l%8%9%?$NCM$O!"2<5-$N$h$&$K$J$j$^$9!#(B
<P>
<HR>
<PRE>
         PE3     PE2     PE1     PE0
      +-------+-------+-------+-------+
Reg0  | D 7:0 | C 7:0 | B 7:0 | A 7:0 |
      +-------+-------+-------+-------+
Reg1  | H 7:0 | G 7:0 | F 7:0 | E 7:0 |
      +-------+-------+-------+-------+
</PRE>
<HR>
<P>$B$3$N4JC1$J?^$O$=$l$>$l$N%l%8%9%?$K(B 4 $B$D$NFHN)$7$?(B 8 $B%S%C%H$NCM$N%Y%/%H%k(B
$B$,$"$k$3$H$rI=$7$F$$$^$9!#(B<CODE>A</CODE> $B$H(B <CODE>E</CODE> $B$,(B Reg0 $B$H(B Reg1 $B$N(B
$B%W%m%;%C%7%s%0%(%l%a%s%H(B 0(PE0)$B!"(B<CODE>B</CODE> $B$H(B <CODE>F</CODE> $B$r(B PE1 $B$N(B
$B%l%8%9%?CM$H$b8+$J$;$^$9!#$=$NB>$N9`L\$bF1MM$G$9!#(B
<P>$B$3$N8e%I%-%e%a%s%H$G$O(B SIMD $BJBNs=hM}$rJ,N`$7!"%Y%/%H%k$r07$&4X?t$,(B
$B$I$N$h$&$K<BAu$5$l$F$$$k$+$r$3$N@0?t%Y%/%H%k$r85$K$7$F354Q$7$F$$$-(B
$B$^$9!#(B
<P>
<H3>$B%]%j%b%U%#%C%/$JA`:n(B</H3>

<P>
<P>SWAR $B$NA`:n$N$$$/$D$+$O!"DL>o$N(B 32 $B%S%C%H@0?t$NA`:n$=$N$^$^$K=hM}(B
$B$7$^$9!#$7$+$7<B:]$K$O!"$3$NA`:n$,JBNs$7$FFHN)$K(B 8 $B%S%C%H$N%U%#!<%k%I(B
$B$rA`:n$9$k$3$H$H$OL54X78$G$9!#$3$N$h$&$J(B SWAR $B$NA`:n$N$3$H$r(B<EM>$B%]%j%b%U%#%C%/(B</EM>$B$H8F$s$G$$$^$9!#$=$NA`:n$,%U%#!<%k%I$N%?%$%W(B($B%5%$%:(B)
$B$K1F6A$5$l$J$$$?$a$G$9!#(B
<P>$B$I$N%U%#!<%k%I$,%<%m$G$J$$$+$r%F%9%H$9$k$N$O!"$9$Y$F$KBP$7$F%S%C%HO@M}(B
$B1i;;$r$9$kE@$G%]%j%b%U%#%C%/$JA`:n$H8@$($^$9!#Nc$($P!"DL>o$N%S%C%HO@M}(B
$B@Q1i;;(B(C $B$N(B <CODE>&amp;</CODE> $B1i;;;R(B)$B$O%U%#!<%k%I$NBg$-$5$,$$$/$D$G$"$C$F$b!"(B
$B%S%C%H1i;;$H$J$j$^$9!#C1=c$J%S%C%HO@M}@Q1i;;$r>e5-$N%l%8%9%?$G9T$&$H2<5-(B
$B$N$h$&$K$J$j$^$9!#(B
<P>
<HR>
<PRE>
          PE3       PE2       PE1       PE0
      +---------+---------+---------+---------+
Reg2  | D&amp;H 7:0 | C&amp;G 7:0 | B&amp;F 7:0 | A&amp;E 7:0 |
      +---------+---------+---------+---------+
</PRE>
<HR>
<P>$B%S%C%HO@M}@Q1i;;$O>o$K%*%Z%i%s%I!&%S%C%H$N(B <EM>k</EM> $B$H$$$&CM$K(B
$B$@$1:81&$5$l$F(B <EM>k</EM> $B$H$$$&%S%C%HCM$K$J$k$N$G!"%U%#!<%k%I$NBg(B
$B$-$5$O$9$Y$FF1$8(B 1 $B$D$NL?Na$r;H$C$F%+%P!<$G$-$^$9!#(B
<P>
<H3>$BJ,3dA`:n(B</H3>

<P>
<P>$B$"$$$K$/(B SWAR $BA`:n$G=EMW$J$b$N$NCf$K$b!"%]%j%b%U%#%C%/$G$J$$A`:n$,(B
$B$?$/$5$s$"$j$^$9!#(B
$B;MB'1i;;$N$h$&$J;;=Q1i;;$G$O!"%U%#!<%k%I4V$G7e$N>e$22<$2$r$9$kI,MW$,(B
$B$"$j$^$9!#(B
$B$=$N$h$&$JA`:n$r(B SWAR $B$G9T$&$3$H$r!VJ,3d$9$k!W$H8F$s$G$$$^$9!#(B
$BM}M3$O!"$=$N$h$&$JA`:n$,;v<B>e%*%Z%i%s%I$d7k2L$rJ,3d$7$F!"%U%#!<%k%I(B
$B4V$N$d$j$/$j$rKI$,$J$1$l$P$J$i$J$$$+$i$G$9!#<B:]$3$N8z2L$r@8$`$N$K$O(B
3 $B$D$N0[$J$k<jK!$,<h$i$l$^$9!#(B
<P>
<H3>$BJ,3dL?Na(B</H3>

<P>
<P>$B$*$=$i$/!"J,3dA`:n$NCf$G:G$bM}2r$7$d$9$$<BAuJ}K!$O!"!VJ,3dJBNsL?Na(B
(partitioned parallel instruction)$B!W$r%O!<%I%&%'%"$G%5%]!<%H$9$k$3$H$G(B
$B$7$g$&!#$3$l$G%U%#!<%k%I4V$N7e$N>e$22<$2$rGS=|$7$^$9!#$3$NJ}K!$r;H$($P(B
$B%Q%U%)!<%^%s%9$OJ86g$J$/>e$,$j$^$9$,!"%W%m%;%C%5$NL?Na%;%C%H$,JQ99(B
$B$5$l$?$j!"%U%#!<%k%I$NBg$-$5$KBP$7$F$N@)8B$,A}$($F$7$^$$$^$9(B
($BNc$($P!"(B8 $B%S%C%H$N%U%#!<%k%I$O%5%]!<%H$7$F$b!"(B12 $B%S%C%H$OBLL\$G$"$k$H$+(B)$B!#(B
<P>AMD $B$d(B Cyrix$B!"(BIntel $B$N(B MMX $B$d(B Digital $B$N(B MAX$B!"(BHP $B$N(B MAX$B!"(B Sun $B$N(B VIS 
$B$9$Y$F$O!"J,3dL?Na$N<BAu$K@)8B$,$"$j$^$9!#;DG0$J$3$H$K!"$=$l$>$l$N(B
$BL?Na%;%C%H3HD%$O@)8B;v9`$K$D$$$F$bCx$7$/0[$J$C$F$$$k$N$G!"$=$l$i$N4V(B
$B$G$O<c43$G$9$,%"%k%4%j%:%`$K0\?"@-$,$J$/$J$C$F$$$^$9!#Nc$($P!"2<5-$G(B
$BJ,3dL?Na$N0lIt$r8+$F$_$^$7$g$&!#(B
<P>
<HR>
<PRE>
  Instruction           AMD/Cyrix/Intel MMX   DEC MAX   HP MAX   Sun VIS
+---------------------+---------------------+---------+--------+---------+
| Absolute Difference |                     |       8 |        |       8 |
+---------------------+---------------------+---------+--------+---------+
| Merge Maximum       |                     |   8, 16 |        |         |
+---------------------+---------------------+---------+--------+---------+
| Compare             |           8, 16, 32 |         |        |  16, 32 |
+---------------------+---------------------+---------+--------+---------+
| Multiply            |                  16 |         |        |    8x16 |
+---------------------+---------------------+---------+--------+---------+
| Add                 |           8, 16, 32 |         |     16 |  16, 32 |
+---------------------+---------------------+---------+--------+---------+
</PRE>
<HR>
<P>$B$3$NI=$G$O?t;z$,%U%#!<%k%I$NBg$-$5$r%S%C%H$GI=$7$F$$$F!"$3$NCM$G$=$l$>$l(B
$B$NA`:n$,2DG=$K$J$C$F$$$^$9!#$b$C$H6=L#?<$$L?Na$J$IB?$/$NL?Na$,I=$K$O(B
$B:\$C$F$$$^$;$s$,!"$3$NI=$@$1$G$b0c$$$NBg$-$5$OL@$i$+$G$9!#7kO@$H$7$F$O!"(B
$BL@$i$+$K9b5i8@8l(B(HLL)$B$O%W%m%0%i%_%s%0!&%b%G%k$H$7$F$^$C$?$/Lr$KN)$?$:!"(B
$B0\?"@-$b$[$H$s$I$J$$$3$H$G$9!#(B
<P>
<H3>$B%3!<%I$r=$@5$7$F!"J,3dL?Na$r;H$o$J$$(B</H3>

<P>
<P>$BJ,3dL?Na$r;H$C$?J,3dA`:n$r<BAu$9$l$P3N$+$K8z2L$,>e$,$j$^$9$,!"$b$7I,MW(B
$B$H$7$F$$$kJ,3dA`:n$r%O!<%I%&%'%"$,%5%]!<%H$7$F$$$J$+$C$?$i$I$&$J$k(B
$B$G$7$g$&!)(B $BEz$O!"DL>o$NL?Na72$r;H$C$F%U%#!<%k%I4V$G7e$N>e$22<$2$r9T$&(B
$BA`:n$r9T$$!"%U%#!<%k%I4V$G$NM>7W$J$d$j$H$j$r@5$7$^$9!#(B
<P>$B$3$N<jCJ$O$^$5$K%=%U%H%&%'%"$K$h$k$b$N$G!"=$@5$K$h$k%*!<%P!<%X%C%I(B
$B$,2C$o$j$^$9!#$7$+$7!"$3$l$GHFMQE*$K%U%#!<%k%I$NJ,3d$,2DG=$K$J$j$^$9!#(B
$B$3$NJ}K!$OHs>o$KHFMQE*$G!"%O!<%I%&%'%"Kh$NJ,3dL?Na$N0c$$$rKd$a$k$@$1(B
$B$G$J$/!"$^$C$?$/%O!<%I%&%'%"$N%5%]!<%H$N$J$$%^%7%s$KBP$7$F$b5!G=$r%U%k(B
$B$KDs6!$G$-$^$9!#<B:]$K$O!"(BC $B$N$h$&$J%W%m%0%i%_%s%08@8l$G%3!<%I$r=q$/(B
$B$3$H$G!"(BSWAR $B%W%m%0%i%`$O$H$F$b0\?"$7$d$9$/$J$j$^$9!#(B
<P>$B$3$3$G5?Ld$,J($$$F$-$^$9!#(BSWAR $B$NJ,3dA`:n$r;H$o$:$K%3!<%I$r=$@5$7$F(B
$B%7%_%e%l!<%H$7$?>l9g!"@53N$K$I$N$/$i$$8zN($,Mn$A$k$N$G$7$g$&$+!)(B 
$B$$$$$H$3$m$rFM$$$?<ALd$G$9!D$7$+$7!"3'$5$s$,;W$C$F$$$k$[$IFq$7$$A`:n$,(B
$BB?$$$o$1$G$O$"$j$^$;$s!#(B
<P>4 $B$D$NMWAG$r;}$D(B 8 $B%S%C%H$N@0?t%Y%/%H%k(B 2 $B$D$r(B 32 $B%S%C%HA`:n$r;H$C$F(B
$B2C;;(B(<CODE>x</CODE>+<CODE>y</CODE>)$B$r<B8=$9$k$3$H$r9M$($F$_$^$7$g$&!#(B
<P>$BDL>o$N(B 32 $B%S%C%H2C;;$O@53N$JCM$K$J$k$H;W$$$^$9$,!"$=$l$O$I$N(B 8 $B%S%C%H(B
$B%U%#!<%k%I$b<!$N%U%#!<%k%I$K1F6A$rM?$($J$$>l9g$G$9!#$7$?$,$C$F!":G=*E*(B
$B$K$O$=$N$h$&$J7e>e$,$j$,$^$C$?$/5/$3$i$J$$$3$H$rJ]>Z$7$J$1$l$P$$$1$^$;$s!#(B
<EM>k</EM> $B%S%C%H$N%U%#!<%k%I$r2C;;$9$k$H!"B?$/$F$b(B <EM>k</EM>+1 $B%S%C%H(B
$BCM$K$J$k$N$G!"7e>e$,$j$OC1$K$=$l$>$l$N%U%#!<%k%I$N:G>e0L$N%S%C%H$r!V%^%9%/(B
$B$r$+$1$k$3$H!W$GKI$2$^$9!#$3$l$O$=$l$>$l$N%*%Z%i%s%I$KBP$7$F(B <CODE>0x7f7f7f7f</CODE> $B$r%S%C%HC10L$GO@M}@Q$r<h$C$?8e!"DL>o$N(B 32 $B%S%C%H2C;;$r$9$l$P(B OK $B$G$9!#(B
<P>
<HR>
<PRE>
t = ((x &amp; 0x7f7f7f7f) + (y &amp; 0x7f7f7f7f));
</PRE>
<HR>
<P>$B$3$l$G!"$=$l$>$l$N%U%#!<%k%I$N:G>e0L%S%C%H$r=|$$$F@53N$JCM$,$G$^$7$?!#(B
$B$=$l$>$l$N%U%#!<%k%I$NCM$r@53N$K7W;;$9$k$K$O!"(B<CODE>x</CODE> $B$H(B <CODE>y</CODE> 
2 $B$D$KJ,3d$5$l$?:G>e0L$N(B 1 $B%S%C%H$NCM$r(B 7 $B%S%C%H$G7W;;$7$?(B <CODE>t</CODE> 
$B$K2C;;$9$k$@$1$G$9!#ET9g$N$$$$$3$H$K!"J,3d$7$?(B 1 $B%S%C%H$N2C;;$ODL>o$N(B
$BGSB>O@M}OB1i;;$H$7$F<BAu$5$l$F$$$^$9!#(B
$B$D$^$j!"7k2L$OC1=c$K2<5-$N$h$&$K5a$a$i$l$^$9!#(B
<P>
<HR>
<PRE>
(t ^ ((x ^ y) &amp; 0x80808080))
</PRE>
<HR>
<P>$B$=$s$J$K$d$5$7$/$O$J$$$G$9$M!#7k6I$A$g$&$I(B 4 $B$D$N2C;;$K(B 6 $B2s$NA`:n$,(B
$BI,MW$G$7$?!#$7$+$7!"A`:n$N2s?t$O%U%#!<%k%I$N?t$,$I$N$/$i$$$"$k$+!D$H(B
$B$$$&$3$H$H$O4X78$J$$$3$H$KCm0U$7$F$/$@$5$$!#%U%#!<%k%I$,A}$($kDxB.EY(B
$B$,>e$,$j$^$9!#$H$K$+$/<B:]$KB.EY$,8~>e$7$^$9!#$=$l$O%U%#!<%k%I$r(B 1 $B2s(B
$B$NA`:n(B($B@0?t%Y%/%H%k(B)$B$G%m!<%I$d%9%H%"$9$k$3$H$G!"%l%8%9%?$rMxMQ$9$k3d9g(B
$B$,A}$(!"F0E*$K%3!<%I$r<B9T$9$k$N$KI,MW$J%9%1%8%e!<%j%s%0$N0MB84X78$,(B
$B$[$H$s$I$J$/$J$k$+$i$G$9(B($BItJ,E*$J%o!<%I$X$N;2>H$rHr$1$i$l$k$?$a(B)$B!#(B
<P>
<H3>$B%U%#!<%k%ICM$N@)8f(B</H3>

<P>
<P>$B>e5-(B 2 $B$D$NJ}K!$H$b!"J,3dA`:n$G%l%8%9%?$r:GBg8BMxMQ$9$k$h$&$K<B9T$9$k(B
$B$N$KBP$7$F!"$3$NJ}K!$G$O%U%#!<%k%I$NCM$r@)8f$9$k$3$H$G!"$h$j8zN(E*$K(B
$B7W;;$r9T$$!"%U%#!<%k%I4V$N7e$N>e$22<$2$,7h$7$F5/$3$i$J$$$h$&$K$7$^$9!#(B
$BNc$($P!"2C;;$7$?%U%#!<%k%I$9$Y$F$K$*$$$F%*!<%P!<%U%m!<$,@8$8$J$$$3$H$,(B
$B$o$+$C$F$$$k>l9g!"J,3dA`:n$N2C;;$ODL>o$N2C;;L?Na$r;H$C$F<B9T$G$-$^$9!#(B
$B<B:]$3$N@)Ls2<$GDL>o$N2C;;L?Na$O%]%j%b%U%#%C%/$H$J$j!"%3!<%I$r=$@5$9$k(B
$B$3$H$J$7$K$I$s$J%U%#!<%k%I$NBg$-$5$G$bMxMQ$G$-$k$3$H$K$J$j$^$9!#$3$3$G(B
$BLdBj$J$N$O!"$I$&$7$?$i%U%#!<%k%I$NCM4V$G7e$N>e2<$2$r5/$3$5$J$$$+$r3NG'(B
$B$9$kJ}K!$G$9!#(B
<P>$B$3$NFC@-$r3NG'$9$kJ}K!$N(B 1 $B$D$O!"%U%#!<%k%I$NCM$NHO0O$r@)Ls$9$kJ,3dL?Na(B
$B$r<BAu$9$k$3$H$G$9!#(BDigital $B$N(B MAX $B$K$"$k%Y%/%H%k:G>.:GBgL?Na$O!"(B
$B%O!<%I%&%'%"$G$3$l$r%5%]!<%H$7$F$$$k$h$&$G!"%U%#!<%k%I$NCM$r$"$kHO0O$G(B
$B%+%C%H$7$F!"%U%#!<%k%I4V$G7e$N>e$22<$2$r5/$3$5$J$$$h$&$K$7$F$$$^$9!#(B
<P>$B$7$+$7!"%U%#!<%k%I$NCM$NHO0O$r8zN(E*$K@)8B$9$kJ,3dL?Na$,$J$$>l9g$O(B
$B$I$&$J$k$G$7$g$&$+!D7e$N>e$22<$2$GNY$N%U%#!<%k%I$K1F6A$rM?$($F$$$J$$(B
$B$3$H$r<j7Z$KJ]>Z$9$k==J,>r7o$O$"$k$N$G$7$g$&$+!)(B $B$=$NEz$O1i;;$NFC@-(B
$B$rJ,@O$9$k$3$H$K$"$j$^$9!#(B<EM>k</EM> $B%S%C%H$N(B 2 $B$D$N?t$r2C;;$9$k$H!"(B
$B7k2L$OB?$/$F$b(B <EM>k</EM>+1 $B%S%C%H$G$9!#$7$?$,$C$F!"(B<EM>k</EM>+1 
$B%S%C%H$N%U%#!<%k%I$J$i!"DL>o$NL?Na$r;H$C$F$$$F$bLdBj$J$/<}$^$j$^$9!#(B
<P>$B$D$^$j@h$K$"$2$?Nc$r(B 8 $B%S%C%H$N%U%#!<%k%I$r(B 7 $B%S%C%H$K(B 1 $B%S%C%H$N(B
$B!V7e$N>e$22<$2MQ$NNN0h!W$r2C$($?$b$N$H$7$F$_$^$7$g$&!#(B
<P>
<HR>
<PRE>
              PE3          PE2          PE1          PE0
      +----+-------+----+-------+----+-------+----+-------+
Reg0  | D' | D 6:0 | C' | C 6:0 | B' | B 6:0 | A' | A 6:0 |
      +----+-------+----+-------+----+-------+----+-------+
</PRE>
<HR>
<P>7 $B%S%C%H$N%Y%/%H%k$N2C;;$O<!$N$h$&$K$J$j$^$9!#$^$:J,3dA`:n$r$9$kA0$K!"(B
$B7+$j>e$2MQNN0h$KEv$k%S%C%H(B(<CODE>A'</CODE> $B$d(B <CODE>B'</CODE>$B!"(B<CODE>C'</CODE>$B!"(B
<CODE>D'</CODE>)$B$9$Y$F$,(B 0 $B$G$"$k$HA[Dj$7$^$9!#C1=c$KDL>o$N2C;;1i;;$r9T$&(B
$B$H$9$Y$F$N%U%#!<%k%I$O@5$7$$(B 7 $B%S%C%HJ,$NCM$K$J$j$^$9!#$7$+$7!"7+$j>e$2(B
$BMQNN0h$N%S%C%H$K$O!"(B1 $B$H$$$&CM$,F~$C$F$$$k$b$N$,=P$F$/$k$+$b$7$l$^$;$s!#(B
$B$3$l$r=$@5$9$k$K$O!"$b$&(B 1 $B2s$@$1DL>o$NA`:n$r9T$$$^$9!#$=$l$O7+$j>e$2(B
$BMQNN0h$N%S%C%H$K%^%9%/$r$+$1$k$3$H$G$9!#(B7 $B%S%C%HJ,$N@0?t$N%Y%/%H%k2C;;(B 
<CODE>x</CODE>+<CODE>y</CODE> $B$O$3$N$h$&$K$J$j$^$9!#(B
<P>
<HR>
<PRE>
((x + y) &amp; 0x7f7f7f7f)
</PRE>
<HR>
<P>$B$3$l$G!"(B4 $B$D$N2C;;$,$A$g$&$I(B 2 $B$D$NL?Na$G:Q$_!"$O$C$-$j$HB.EY$,8~>e(B
$B$7$^$9!#(B
<P>$B1T$$FI<T$NJ}$J$i!"7+$j>e$2MQNN0h$N%S%C%H$r(B 0 $B$K$9$k$H8:;;1i;;$,$&$^$/(B
$B$J$$$3$H$K5$$E$+$l$?$H;W$$$^$9!#$7$+$7$3$l$O$H$F$b4JC1$K=$@5$G$-$^$9!#(B
<CODE>x</CODE>-<CODE>y</CODE> $B$r7W;;$9$k$K$O!"=i4|>uBV$G(B <CODE>x</CODE> $B$N7+$j>e$2(B
$BMQNN0h$N%S%C%H$,$9$Y$F(B 1 $B$G(B <CODE>y</CODE> $B$,$9$Y$F(B 0 $B$G$"$k$3$H$rJ]>Z$9$l$P(B
$B$$$$$N$G$9!#:G0-$N>l9g$G$b$3$N$h$&$K$9$l$PNI$$$O$:$G$9!#(B
<P>
<HR>
<PRE>
(((x | 0x80808080) - y) &amp; 0x7f7f7f7f)
</PRE>
<HR>
<P>$B$7$+$7!"DI2C$7$?%S%C%HO@M}OB1i;;$O!":G8e$NA`:n$G$"$k(B 
<CODE>&amp; 0x7f7f7f7f</CODE> $B$NItJ,$h$j$b(B <CODE>x</CODE> $B$K(B 
<CODE>| 0x80808080</CODE> $B$GCM$r=P$9A`:n$N$H$3$m$G:GE,2=$G$-$^$9!#(B
<P>$B$I$NJ}K!$r(B SWAR $B$NJ,3d=hM}$H$7$F;H$&$Y$-$J$N$G$7$g$&$+!)(B $BEz$O4JC1$G!"(B
$B!V0lHVB.EY$,B.$$$b$N$J$i$I$l$G$b!W$G$9!#6=L#?<$$$3$H$K!"F1$8%W%m%0%i%`(B
$B$rF1$8%^%7%s$G<B9T$7$F$b!"%U%#!<%k%I$N%5%$%:$,0[$J$l$P:GE,$JJ}K!$bJQ$o$k(B
$B$+$b$7$l$^$;$s!#(B
<P>
<H3>$BCM4V$N$d$j$H$j$H7?JQ49A`:n(B</H3>

<P>
<P>$BJBNs7W;;$NCf$K$O2hAG$KBP$9$k1i;;$J$I$N$h$&$K!"$"$k%Y%/%H%kCf$N(B <EM>i</EM> 
$BHVL\$NCM$,%*%Z%i%s%IB&$N%Y%/%H%k$N(B <EM>i</EM> $BHVL\$N0LCV$K$"$kCM$H$@$1(B
$BAj4X4X78$K$"$k>l9g$,$"$j$^$9$,!"I,$:$7$b$3$N%1!<%9$H$O$+$.$j$^$;$s!#(B
$BNc$($P!"%9%`!<%8%s%0$N$h$&$J2hAG$NA`:n$O!"NY$N2hAG$NCM$r%*%Z%i%s%I$H$7$F(B
$BI,MW$H$7$^$9$7!"(BFFT(fast Fourier transform $B9bB.%U!<%j%(JQ49(B)$B$N$h$&$JJQ7A(B
$B$O!"$5$i$KJ#;($J(B($B6I=jE*$G$O$J$$(B)$B$d$j$H$j$r$9$k798~$K$"$j$^$9!#(B
<P>$B0l<!85$NNY@\$9$kCM$N$d$j$H$j$rJ,3dA`:n$G$O$J$$%7%U%HA`:n$G<B8=$9$k$N$O(B
$BFq$7$$$3$H$G$O$"$j$^$;$s!#(B
$BNc$($P!"(B<CODE>PE</CODE><EM>i</EM> $B$NCM$r(B <CODE>PE</CODE>(<EM>i</EM>+1) $B$K0\F0(B
$B$9$k$K$O!"C1=c$J%7%U%HA`:n$G==J,$G$9!#(B
$B%U%#!<%k%I$,(B 8 $B%S%C%H$NBg$-$5$G$"$l$P!"2<5-$N$h$&$K$J$j$^$9!#(B
<P>
<HR>
<PRE>
(x &lt;&lt; 8)
</PRE>
<HR>
<P>$B$7$+$7$$$D$b$=$l$[$IC1=c$H$O8B$j$^$;$s!#Nc$($P!"(B<CODE>PE</CODE><EM>i</EM> 
$B$r(B <CODE>PE</CODE>(<EM>i</EM>-1) $B$K0\F0$9$k$K$OC1=c$J%7%U%HA`:n$G==J,$G(B
$B$"$k$+$b$7$l$^$;$s!D$,!"(BC $B$G$O%7%U%HA`:n$,Id9f%S%C%H$r@5$7$/0];}$G$-$F(B
$B$$$k$+$I$&$+$r3NG'$G$-$^$;$s$7!"%^%7%s$NCf$K$OId9f2=%7%U%H$7$+@5$7$/(B
$B9T$($J$$$b$N$b$"$j$^$9!#$D$^$j0lHLE*$K$O!"Id9f%S%C%H$N%3%T!<$r9T$C$F!"(B
$B$=$l$r(B 0 $B$K@_Dj$7$F$*$/I,MW$,$"$j$^$9!#(B
<P>
<HR>
<PRE>
((x >> 8) &amp; 0x00ffffff)
</PRE>
<HR>
<P>$B!V@^$jJV$7$F$D$J$2$k!WJ}K!$r$H$k$H!"%7%U%HA`:n$rJ,3d$;$:$K$=$3$=$3(B
$B8zN(E*$K9T$($^$9!#Nc$($P$3$NJ}K!$r;H$C$F(B <CODE>PE</CODE><EM>i</EM> $B$r(B 
<CODE>PE</CODE>(<EM>i</EM>+1)$B$K0\F0$9$k$K$O!"2<5-$N$h$&$K$7$^$9!#(B
<P>
<HR>
<PRE>
((x &lt;&lt; 8) | ((x >> 24) &amp; 0x000000ff))
</PRE>
<HR>
<P>$B$5$i$K0lHLE*$J%Q%?!<%s$N$d$j<h$j$r<BAu$7$J$1$l$P$J$i$J$$$H$J$k$H!"LdBj(B
$B$,Bg$-$/$J$j$^$9!#(BHP $B$N(B MAX $B$G$NL?Na%;%C%H$K8B$C$F8@$&$H!"G$0U$K(B
$B%U%#!<%k%I$r:FG[CV$9$kL?Na$,C1FH$GB8:_$7$^$9!#$3$NL?Na$r(B <CODE>Permute</CODE> 
$B$H8F$s$G$$$^$9!#(B<CODE>Permute</CODE> $BL?Na$H$$$&L>IU$1J}$OITE,@Z$G!"G$0U$K(B
$BJB$YBX$($r9T$&$@$1$G$J$/!"7+$jJV$7$b$G$-$F$7$^$$$^$9!#$D$^$j!"<+M3$K(B 
<CODE>x[y]</CODE> $B1i;;$,2DG=$K$J$C$F$$$^$9!#(B
<P><CODE>x[y]</CODE> $B$H$$$&A`:n$O!"$=$N$h$&$JC1FHL?Na$J$7$G$O<B8=$9$k$3$H$,(B
$BHs>o$K:$Fq$G$9!#=hM}$9$k%3!<%I$,D9$/$J$k$@$1$G$J$/!"8zN($b2<$,$j$^$9!#(B
$B<B:]$K$O=g<!=hM}$K$J$C$F$7$^$$$^$9!#$3$l$G$O$I$&$7$h$&$b$"$j$^$;$s!#(B
<CODE>x[y]</CODE> $B1i;;$rHf3SE*9bB.$K9T$($k%7%9%F%`$,!"(BMasPar $B$N(B MP1/MP2 
$B$d(B Thinking Machines $B$N(B CM1/CM2/CM200 $B$H$$$&(B SIMD $B%9!<%Q!<%3%s%T%e!<%?(B
$B$G$"$k$3$H$,$3$l$rN"IU$1$F$$$^$9!#$7$+$7!"$=$N$h$&$J%9!<%Q!<%3%s%T%e!<%?(B
$B$G$"$C$F$b!"(B<CODE>x[y]</CODE> $B$ONY$j9g$C$?%U%#!<%k%I$H$N$d$j$H$j$HHf$Y$F>o$K(B
$BCY$/!"$G$-$k$@$1(B <CODE>x[y]</CODE> $B1i;;$rI,MW$H$7$J$$$h$&$K%"%k%4%j%:%`$r@_7W(B
$B$9$k>l9g$,$[$H$s$I$G$9!#$D$^$j%O!<%I%&%'%"$N%5%]!<%H$,$J$1$l$P!"(B
<CODE>x[y]</CODE> $B$O1i;;$H$7$FITE,@Z$H8@$C$F$b!D$^$">/$J$/$H$b0B2A$K<B8=$G$-$k(B
$B$o$1$G$O$"$j$^$;$s!#(B
<P>
<P>$B7+$jJV$7A`:n(B($B4T85!"Av::$J$I(B)
$B7+$jJV$7=hM}$O!"7W;;$7$F$$$kCM4V$KC`<!E*$J4X78$,$O$C$-$j$HG'$a$i$l$k(B
$B7W;;$N$3$H$r;X$7$^$9!#$7$+$7!"7+$jJV$7=hM}$K7k9gA`:n$,$"$k>l9g$O!"(B
$BLZ9=B$$NJBNs%"%k%4%j%:%`$r;H$C$F!"7W;;$r5-O?$G$-$k>l9g$,$"$j$^$9!#(B
<P>$B:G$b0lHLE*$J%?%$%W$NJBNs2=$7$?7+$jJV$7=hM}$K$O!"7k9g4T85(B(associative 
reduction)$B$H8@$o$l$k$b$N$,$"$j$^$9!#Nc$($P%Y%/%H%k$N9g7W$r7W;;$9$k$N$K!"(B
C $B$N%3!<%I$GC1$KC`<!=hM}$9$k$H2<5-$N$h$&$K$J$j$^$9!#(B
<P>
<HR>
<PRE>
t = 0;
for (i=0; i&lt;MAX; ++i) t += x[i];
</PRE>
<HR>
<P>$B$7$+$7!"2C;;$N=g=x$,0UL#$r;}$D$3$H$O$^$l$G$9!#IbF0>.?tE@$dK0OB1i;;$G$O!"(B
$B2C;;$N=g=x$,0c$&$H7k2L$,JQ$o$C$F$7$^$$$^$9$,!"DL>o$N%i%C%W%i%&%s%I$J@0?t(B
$B$N2C;;$O=g=x$K$h$C$F7k2L$K1F6A$,$G$^$;$s!#$7$?$,$C$F!"=g<!$K<B9T$9$k7A(B
$B$+$iLZ9=B$$GJBNs$K9g7W$r=P$9%3!<%I$K=q$-49$($i$l$^$9!#$3$&$9$k$H!"$^$:(B
$B:G=i$KBP$H$J$kCM$r2C;;$7!"$=$l$,9g7WCM$N0lIt$H$J$j!D$H$$$&$3$H$r7+$jJV$7(B
$B$F!":G=*E*$K(B 1 $B$D$N9g7WCM$K$J$k$^$G7W;;$7$^$9!#(B8 $B%S%C%H$NCM$r(B 4 $B$D$G9=@.(B
$B$7$?%Y%/%H%k$J$i$P!"$A$g$&$I(B 2 $B2s$N2C;;$,I,MW$H$J$j$^$9!#:G=i$K(B 2 $B$D$N(B
8 $B%S%C%H$NCM$r2C;;$7$F!"(B16 $B%S%C%H$N%U%#!<%k%I(B 2 $B$D$K7k2L$,F~$j$^$9(B
($B%U%#!<%k%I$=$l$>$l$K(B 9 $B%S%C%H$N7k2L$,F~$C$F$$$^$9(B)$B!#(B
<P>$B!ZLuCp!'K0OB1i;;$H$O!"$"$i$+$8$a1i;;7k2L$NHO0O$r7h$a$F$*$-!"(B
$B$=$NHO0O$r1[$($?1i;;7k2L$K$J$C$?>l9g$K$"$i$+$8$aMQ0U$7$?7k2L$KCV$-49$($k(B
$B=hM}$G$9![(B
<P>
<HR>
<PRE>
t = ((x &amp; 0x00ff00ff) + ((x >> 8) &amp; 0x00ff00ff));
</PRE>
<HR>
<P>$B$=$N<!$K!"(B16 $B%S%C%H$N%U%#!<%k%I$KF~$C$F$$$k(B 9 $B%S%C%H$NCM$r(B 2 $B$D2C;;$7$F!"(B
10 $B%S%C%H$N7k2L$r(B 1 $B$DF@$k$3$H$K$J$j$^$9!#(B
<P>
<HR>
<PRE>
((t + (t >> 16)) &amp; 0x000003ff)
</PRE>
<HR>
<P>$B<B:]$3$3$G$O!"(B16 $B%S%C%H$N%U%#!<%k%I$r(B 2 $B$D2C;;$7$?$3$H$K$J$j$^$9!D$,!"(B
$B@hF,$N(B 16 $B%S%C%H$N2C;;$O0UL#$,$"$j$^$;$s!#$H$$$&$N$O!"7k2L$r(B 1 $B$D$N(B 10 
$B%S%C%H$NCM$H$7$F%^%9%/$7$F$7$^$&$+$i$G$9!#(B
<P>$BAv::$O!VJBNs2=$7$?C19`1i;;!W$H$b8F$P$l$F$$$F!"8zN(E*$K<BAu$9$k$N$O$$$/$V$s(B
$B:$Fq$G$9!#4T85$H$O0[$J$j!"Av::$N7k2L$,J,3d$5$l$k$+$i$G$9!#$3$N$h$&$JLu$G!"(B
$BAv::$O$-$C$HO"B3$7$?J,3dA`:n$H$7$F<BAu$G$-$^$9!#(B
<P>
<H2><A NAME="ss4.3">4.3 Linux $B$K$*$1$k(B MMX $B$r;H$C$?(B SWAR</A>
</H2>

<P>
<P>Linux $B$K$H$C$F(B IA32 $B%W%m%;%C%5$O0lHV$N4X?4;v$G$9!#(BAMD $B$d(B Cyrix$B!"(B
intel $B$9$Y$F$,F1$8(B MMX $BL?Na$r<BAu$7$F$$$k$N$OAG@2$i$7$$$3$H$G$9!#(B
$B$7$+$7!"(BMMX $B$N%Q%U%)!<%^%s%9$K$O$P$i$D$-$,$"$j$^$9!#Nc$($P!"(BK6 $B$O(B MMX 
$B$N%Q%$%W%i%$%s$r(B 1 $B$D$7$+;}$C$F$$$J$$$N$KBP$7$F!"(BMMX Pentium $B$O(B 2 $B$D(B
$B;}$C$F$$$^$9!#$?$@(B intel $B$,$$$^$@$K$X$s$F$3$j$s$J%3%^!<%7%c%k$r$d$C$F$$$k(B
$B$N$K$O$&$s$6$j$7$F$$$^$9$,!D(B ;-)
<P>$B!ZLuCp!'(B2001.3 $B8=:_(B Intel $B$*$h$S(B AMD $B$N9b@-G=%G%9%/%H%C%W(B PC $BMQ(B
$B%W%m%;%C%5$G$"$k(B PentiumIII $B$H(B Athlon $B$O@0?t1i;;$N9bB.2=$G$"$k(B MMX $B$r(B
$B3HD%$7!"$=$l$>$l(B SSE(internet streaming SIMD extensions)$B!"(BEnhanced 3DNow! 
$B$r<BAu$7!"IbF0>.?tE@1i;;$N9bB.2=$r$O$+$j$^$7$?!#(B
$BIbF0>.?tE@1i;;$K4X$7$F$O(B Pentium III $B$NJ}$,(B Athlon $B$h$j9bB.$H8@$o$l$F$$$^$9(B
$B$,!"IbF0>.?tE@$N(B SIMD $BL?Na$K$D$$$F$O(B Athlon $B$NJ}$,9bB.$H8@$o$l$F$$$^$9!#(B
$BBg$-$JM}M3$O!"(BSSE $B$,(B 64 $B%S%C%H$N1i;;AuCV$G(B 128 $B%S%C%H$N%*%Z%i%s%I$r=hM}(B
$B$9$k$N$G(B 2 $B%5%$%/%k$+$+$k$N$KBP$7!"(BEnhanced 3DNow! $B$O(B 64 $B%S%C%H$N1i;;AuCV(B
$B$G(B 64 $B%S%C%H$N%*%Z%i%s%I$r=hM}$9$k$N$G(B 1 $B%5%$%/%k$G:Q$`$?$a$G$9![(B
<P>SWAR $B$K(B MMX $B$r3hMQ$9$kJ}K!$O(B 3 $B$D$"$j$^$9!#(B
<P>
<OL>
<LI>MMX $B%i%$%V%i%j$N%k!<%A%s$r;H$&!#FC$K(B intel $B$O!V%Q%U%)!<%^%s%9!&(B
$B%i%$%V%i%j!W(B
<A HREF="http://developer.intel.com/software/products/perflib/">http://developer.intel.com/software/products/perflib/</A> 
$B$H$$$&$b$N$r$$$/$D$+3+H/$7$F$$$F!"%^%k%A%a%G%#%"=hM}A4HL$rBP>]$K(B
$B<j:n6H$G:GE,2=$7$?MM!9$J%k!<%A%s$rDs6!$7$F$$$k!#B?>/$NEXNO$r$9$l$P!"(B
$B$3$l$i$N%i%$%V%i%j$N%k!<%A%s$N$$$/$D$+$r;H$C$F!"Hs%^%k%A%a%G%#%"MQ(B
$B$N%"%k%4%j%:%`$r7W;;Cf?4$NItJ,$rCf?4$K=q$-D>$;$k!#$3$l$i$N%i%$%V%i%j(B
$B$O8=>u(B Linux $B$G$OMxMQ$G$-$J$$$,!"0\?"2DG=$G$"$k(B
</LI>
<LI>MMX $BL?Na$rD>@\;H$&!#$3$l$O(B 2 $B$D$NM}M3$+$iB?>/J#;($K$J$k!#(B
$B$^$:!"(BMMX $B$,%W%m%;%C%5>e$GMxMQ$G$-$J$$$+$b$7$l$J$$$3$H!#$=$&$J$k$H(B
$BB>$N<jCJ$r<BAu$7$J$1$l$P$J$i$J$$!#<!$NLdBj$O!"(BLinux $B$G;H$C$F$$$k(B 
IA32 $B$N%"%;%s%V%i$,8=>u$G$O(B MMX $BL?Na$rG'<1$7$J$$$3$H$G$"$k(B
</LI>
<LI>$B9b?e=`8@8l$b$7$/$OE,@Z$J(B MMX $BL?Na$rD>@\@8@.$G$-$k%3%s%Q%$%i$N(B
$B%b%8%e!<%k$r;HMQ$9$k!#8=>u$=$N$h$&$J%D!<%k$O3+H/Cf$G$"$k$,!"$^$@(B 
Linux $B>e$G$O$9$Y$F$N5!G=$,F0$$$F$$$J$$!#Nc$($P2f!9$O%Q!<%G%eBg3X(B
(
<A HREF="http://dynamo.ecn.purdue.edu/~hankd/SWAR/">http://dynamo.ecn.purdue.edu/~hankd/SWAR/</A>)$B$K$*$$$F(B
$B8=:_%3%s%Q%$%i$r3+H/Cf$G$"$k!#$=$l$i$OJBNs2=$r;\$7$F$"$k>/!9JJ$N(B
$B$"$k(B C $B$G=q$+$l$F$*$j!"(BC $B$N4X?t$H$7$F8F$S=P$;$k(B SWAR $B%b%8%e!<%k(B
$B$r@8@.$G$-$kM=Dj$G$"$j!"(BMMX $B$r$O$8$a$H$7$F(B SWAR $B$N5!G=$r%5%]!<%H(B
$B$9$k$b$N$J$i2?$G$bMxMQ$G$-$k!#:G=i$N%W%m%H%?%$%W$G$"$k%b%8%e!<%k!&(B
$B%3%s%Q%$%i$O(B 1996 $BG/=)$K:n@.$5$l$?$,!"Ev=iL\;X$7$F$$$?CJ3,$KE~C#(B
$B$9$k$K$O$^$@$^$@;~4V$,$+$+$k(B
<P>$B!ZLuCp!'(B2001.3 $B8=:_!"(BLinux $BMQ$N(B MMX $B$d(B 3DNow!$B!"(BSSE $B$N%i%$%V%i%j(B
$B5Z$S%3%s%Q%$%i4XO"$O!"(B
<A HREF="http://shay.ecn.purdue.edu/~swar/">The SWAR Homepage at Purdue University</A> $B$K$"$j$^$9![(B
</LI>
</OL>
<P>$BMWLs$9$k$H!"(BMMX $B$r;H$C$?(B SWAR $B$O$^$@;H$$J*$K$J$j$^$;$s!#$7$+$7>/$7EXNO(B
$B$9$l$P>e5-(B 2 $BHVL\$NJ}K!$O8=:_$G$bMxMQ$G$-$^$9!#<gMW$J%]%$%s%H$r$"$2$^$9!#(B
<P>
<OL>
<LI>$B%W%m%;%C%5$,(B MMX $B$r%5%]!<%H$7$F$$$J$1$l$P(B MMX $B$O;H$($J$$!#2<5-(B
$B$N(B GCC $B$N%3!<%I$O(B MMX $B$r%W%m%;%C%5$,%5%]!<%H$7$F$$$k$+$rH=Dj$9$k!#(B
0 $B$rJV$;$PL$%5%]!<%H!"(B0 $B0J30$J$i%5%]!<%H$7$F$$$k(B

<HR>
<PRE>
inline extern
int mmx_init(void)
{
        int mmx_available;

        __asm__ __volatile__ (
                /* Get CPU version information */
                "movl $1, %%eax\n\t"
                "cpuid\n\t"
                "andl $0x800000, %%edx\n\t"
                "movl %%edx, %0"
                : "=q" (mmx_available)
                : /* no input */
        );
        return mmx_available;
}
</PRE>
<HR>

</LI>
<LI>MMX $B%l%8%9%?$O4pK\E*$K$O(B GCC $B$,(B <CODE>unsigned long long</CODE> $B$r(B
$B8F$S=P$7$?>l9g$K$=$l$rJ];}$9$k!#$D$^$j%a%b%j%Y!<%9$N$3$N7?$NJQ?t$O!"(B
MMX $B%b%8%e!<%k$H$=$l$r8F$S=P$7$?(B C $B%W%m%0%i%`4V$N$d$j$H$j$N<jCJ$H$J$k!#(B
$B$=$N0lJ}$G!"(BMMX $B%G!<%?$r(B 64 $B%S%C%H$K%"%i%$%s$7$?%G!<%?9=B$$H$7$F@k8@(B
$B$G$-$k(B(<CODE>unsigned long long</CODE> $B$NBg$-$5$r;}$D(B <CODE>union</CODE> 
$B$H$7$F7?@k8@$9$k$3$H$G!"4JC1$K(B 64 $B%S%C%H$K%"%i%$%s$5$l$F$$$k$3$H$rJ]>Z(B
$B$G$-$k(B)
</LI>
<LI>MMX $B$,MxMQ2DG=$J$i!"%"%;%s%V%iL?Na$N(B <CODE>.byte</CODE> $B$r;H$C$F(B MMX 
$B%3!<%I$,=q$1!"L?Na$r%(%s%3!<%I$G$-$k!#(B
$B$3$l$O<j:n6H$G$O9|$,@^$l$k$,!"%3%s%Q%$%i$G%3!<%I$r@8@.$9$k$N$OFq$7$/(B
$B$J$$!#Nc$($P!"(BMMX $BL?Na$N(B <CODE>PADDB MM0,MM1</CODE> $B$O(B GCC $B$N%$%s%i%$%s!&(B
$B%"%;%s%V%i$N%3!<%I$G2<5-$N$h$&$K%(%s%3!<%I$G$-$k(B

<HR>
<PRE>
__asm__ __volatile__ (".byte 0x0f, 0xfc, 0xc1\n\t");
</PRE>
<HR>


MMX $B$,IbF0>.?tE@1i;;$r$9$k$N$HF1$8%O!<%I%&%'%"$N$"$kItJ,$r;HMQ$7$F(B
$B$$$k$3$H$rK:$l$J$$$h$&$K!#(BMMX $B$,:.$8$C$F$$$k%3!<%I$O!"IbF0>.?tE@(B
$B1i;;$r8F$S=P$7$F$O$$$1$J$$!#$^$?!"IbF0>.?tE@$N%9%?%C%/$O!"(BMMX $B%3!<%I(B
$B$r<B9T$9$kA0$K$O6u$K$7$F$*$/I,MW$,$"$k!#DL>o!"IbF0>.?tE@$N%9%?%C%/$O(B 
C $B$N4X?t$N@hF,$GIbF0>.?tE@$r;H$C$F$$$J$$$J$i6u$K$J$C$F$$$k(B
</LI>
<LI>MMX $B%3!<%I$+$iH4$1=P$9$K$O!"(B<CODE>EMMS</CODE> $BL?Na$r<B9T$9$k!#(B
$B%(%s%3!<%I$9$k$H2<5-$N$h$&$K$J$k(B

<HR>
<PRE>
__asm__ __volatile__ (".byte 0x0f, 0x77\n\t");
</PRE>
<HR>
</LI>
</OL>
<P>$B>e5-$,$"$^$j$K07$$$E$i$/!"@vN}$5$l$F$$$J$$$H46$8$k$J$i!"$=$l$O$=$N(B
$BDL$j$G$7$g$&!#$7$+$7(B MMX $B$O$^$@$G$-$?$P$+$j$G!D$3$N%I%-%e%a%s%H$N(B
$B>-Mh$NHG$G$O!"$b$C$HM%$l$?(B MMX $B$K$h$k(B SWAR $B$r%W%m%0%i%`$rDs<($G$-$k(B
$B$H;W$$$^$9!#(B
<P>
<HR>
<A HREF="Parallel-Processing-HOWTO-5.html">$B<!$N%Z!<%8(B</A>
<A HREF="Parallel-Processing-HOWTO-3.html">$BA0$N%Z!<%8(B</A>
<A HREF="Parallel-Processing-HOWTO.html#toc4">$BL\<!$X(B</A>
</BODY>
</HTML>