  Linux Parallel Processing HOWTO

  Hank Dietz, pplinux@ecn.purdue.edu
  v980105, 5 January 1998
  1-2 ȣ, (i@flyduck.com), 3  , (simje@maninet.com)
  1999 12 3,  Ʈ: 2000 4 18

  ó(Parallel Processing) α׷ ÿ   ִ 
     ڽ μ ν α׷ 
  ӵ  Ѵٴ ̴. α׷ N μ ϸ
  ϳ μ ϴ ͺ N   ִ.  
   ڵ   ִ װ  ó  ٹ
  ٷ. SMP  ý, Ʈ   ý Ŭ,
  Ƽ̵ ɾ(MMX) ̿  , ϳ  ý
  ȣƮϴ μ () μ(attached processor) ̵̴.
  ______________________________________________________________________

  

  1. Ұ
     1.1 ó  ٶ ΰ?
     1.2 
     1.3  ˰ AID CDATA sec_ExampleAlgorithm(LABEL)LABEL
     1.4   

  2. SMP 
     2.1 SMP ϵ(Hardware)
        2.1.1  μ  L2 ĳø °?(Does each processor have its own L2 cache?)
        2.1.2  (Bus configuration)?
        2.1.3 ޸ ø DRAM (Memory interleaving and DRAM technologies)?
     2.2  ޸ α׷ֿ  ҰAID CDATA sec_IntroductionToSharedMemoryProgramming(LABEL)LABEL
        2.2.1  ϱ  Ϻθ ϱ(Shared Everything Vs. Shared Something)
           2.2.1.1  ϱ(Shared Everything)
           2.2.1.2 Ϻθ ϱ(Shared Something)
        2.2.2 ڼ (Atomicity And Ordering)
        2.2.3 ֹ߼(Volatility)
        2.2.4 (Locks)
        2.2.5 ĳö ũ(Cache Line Size)
        2.2.6  ٷ (Linux Scheduler Issues)
     2.3 bb_threads
     2.4 LinuxThreads
     2.5 System V  ޸
     2.6 ޸  ȣAID CDATA sec_MemoryMapCall(LABEL)LABEL

  3.  ý Ŭ(Clusters Of Linux Systems)
     3.1  Ŭΰ(Why A Cluster)?
     3.2 Ʈ ϵ(Network Hardware)AID CDATA sec_NetworkHardware(LABEL)LABEL
        3.2.1 ũ(ArcNet)
        3.2.2 ATM
        3.2.3 CAPERS
        3.2.4 ̴(Ethernet)
        3.2.5 ̴(нƮ ̴, Fast Ethernet)
        3.2.6 ̴(ⰡƮ ̴,Gigabit Ethernet)
        3.2.7 FC ( ä, Fibre Channel)
        3.2.8 ̾̾(FireWire, IEEE 1394)
        3.2.9 HiPPI ÷ HiPPI
        3.2.10 IrDA (ܼ  ; Infrared Data Association)
        3.2.11 Myrinet
        3.2.12 Ķ̼(Parastation)
        3.2.13 PLIP
        3.2.14 SCI
        3.2.15 SCSI
        3.2.16 (ServerNet)
        3.2.17 SHRIMP
        3.2.18 SLIP
        3.2.19 TTL_PAPERS
        3.2.20 USB (Universal Serial Bus)
        3.2.21 WAPERS
     3.3 Ʈ Ʈ ̽(Network Software Interface)
        3.3.1 
           3.3.1.1 UDP  (SOCK_DGRAM)
           3.3.1.2 TCP (SOCK_STREAM)
        3.3.2 ġ (Device Drivers)
        3.3.3 - ̺귯(User-Level Libraries)
     3.4 PVM (  , Parallel Virtual Machine)
     3.5 MPI (޽  ̽, Message Passing Interface)AID CDATA sec_MPI(LABEL)LABEL
     3.6 AFAPI ( Լ API, Aggregate Function API)
     3.7 ٸ Ŭ  ̺귯
        3.7.1 Condor (μ  , process migration support)
        3.7.2 DFN-RPC (German Research Network - Remote Procedure Call)
        3.7.3 DQS (л ť ý, Distributed Queueing System)
     3.8 Ϲ Ŭ ڷ
        3.8.1 Beowulf
        3.8.2 Linux/AP+
        3.8.3 Locust
        3.8.4 Midway DSM (Distributed Shared Memory)
        3.8.5 Mosix
        3.8.6 NOW (Network Of Workstations)
        3.8.7  ϴ  ó(Parallel Processing Using Linux)
        3.8.8 Ƽ  Ŭ ũ(Pentium Pro Cluster Workshop)
        3.8.9 TreadMarks DSM (Distributed Shared Memory)
        3.8.10 U-Net (User-level NETwork interface architecture)
        3.8.11 WWT (Wisconsin Wind Tunnel)

  4. ϳ  SIMD(: MMX )
     4.1 SWAR:   ̰(What Is It Good For)?
     4.2 SWAR α׷ֿ  Ұ(Introduction To SWAR Programming)
        4.2.1  (Polymorphic Operations)
        4.2.2 ҵ (Partitioned Operations)
           4.2.2.1 ҵ ɾ(Partitioned Instructions)
           4.2.2.2  ڵ带  ҵ  (Unpartitioned Operations                 With Correction Code)
           4.2.2.3 ʵ ġ (Controlling Field Values)
        4.2.3 Ű Ÿ ȯ (Communication & Type Conversion               Operations)
        4.2.4 ȯ (Recurrence Operations) (, ĵ )
     4.3  MMX SWAR

  5.  ȣƮϴ μ μ(Linux-Hosted Attached              Processors)
     5.1  PC  ȣƮ̴(A Linux PC Is A Good Host)
     5.2 װͿ DSP ߴ°(Did You DSP That)?
     5.3 FPGAs 缳   

  6. Ϲ ɰŸ ߿
     6.1 α׷  Ϸ
        6.1.1 Fortran 66/77/PCF/90/HPF/95
        6.1.2 GLU (Granular Lucid)
        6.1.3 Jade SAM
        6.1.4 Mentat Legion
        6.1.5 MPL (MasPar α׷ )
        6.1.6 PAMS ( ø̼  ý(Parallel Application Management System))
        6.1.7 Parallaxis-III
        6.1.8 pC++/Sage++
        6.1.9 SR (ҽ (Synchronizing Resources))
        6.1.10 ZPL IronMan
     6.2  (Performance Issues) AID CDATA sec_PerformanceIssues(LABEL)LABEL
     6.3  - ű⿡ ִ.

  ______________________________________________________________________

  1.  Ұ

  ó(Parallel Processing) α׷ ÿ   ִ 
     ڽ μ ν α׷ 
  ӵ  Ѵٴ ̴.  α׷ N μ ϸ
  ϳ μ ϴ ͺ N   ִ.

   Ư  " ǻ(parellel computer)" 
  μ   ־. ̷ ⿡    ϳ
  ǻ   μ  ޸𸮿  ̽
  ϴ SMP ý( "" ȸ) Ѵ.  ܿ
   ǻ͸ ׷  (    ϰ ִ
  PC ׷) Ʈ  Ͽ ó Ŭ(parellel-
  processing cluster)   ִ.  ̿  ǻ
  °  Ƽ̵ Ȯ ɾ(multimedia instruction
  extensions, MMX) Ͽ   ͸ ķ óϴ ̴.
    ý  μ ó (attached
  parellel processing compute engine) "ȣƮ" ϴ ͵
  ϴ.     ٹ ڼ ٷ絵 ϰڴ.

  1.1.  ó  ٶ ΰ?

   μ ϴ    óϴ ӵ 
    , κ α׷ ó ؼ 
  ° . ⺻ ó  쿡 ش  ϴ
  :

  o    α׷  μ ȿ   ֵ
     ༺  ־ Ѵ.  ̴ α׷ ߿ 
     ٸ μ  ÿ   ִ κе
     ľϴ ̴. Ư ý Ͽ ķ ϴ ,
      ͵ ķ ϴ°    찡   ִ.
       ϳ ǻͿ 4ʰ ɸ α׷  
     ǻͿ  1ʸ   ϴ, ̵ ǻͰ
       ϴµ 3ʳ  ̻ ð ɸٸ ƹ
     ӵ ̷ ʴ´.

  o     ִ Ư α׷ ̹ ȭ(ó
      ȰϿ ٽ ۼ) Ǿų, ó  Ȱϴ
     ּ ο ڵ Ϸ ؾ Ѵ.

  o   о߿ ְų  ͼ  ó ϵ
      Ѵ.  ý ̿ ó ݵ  
     , κ ǻ ڿ ģ ʰ, "ƹ͵ 𸣴
       ó" å   Ȳ̴.  HOWTO
      ˾ƾ     ʴ   
     ̴.

   ҽ    شѴٸ,   ϰų
   ͸ óϴ α׷ ,  ̿ ó
  ǻͱ    ִٴ ̴. ٳ װ͵ 
  ̹    ϵ Ͽ   ִ. ʽ 
   ý ٻڰ  ۾ ϰ    ٸ 뵵
     ִ.

  ó  ٶ  ƴϴ  Ҽ 
  ٶٸ,    ִ   ִ.  , ó
  ϴ α׷  μ ϰ, ޸𸮸 ߰ϰ, IDE
  ũ  ̵ SCSI ũ ٲٴ     ִ.
      ̰Ŷ ٷ `` '' Ѿ,
  ׷   оֱ ٶ.

   ó  ϴ  ƴϴ   
  °   ϰ Ѵٸ    ִ ͵  
  ִ.        μ, ޸ ߰, IDE
  ũ  ̵ SCSI ٲٴ   ν 
  α׷    ִ. ̰   ִ 
  ̶  ``ɿ  '' ϶; ׷ ʴٸ  б
  ٶ.

  1.2.  

      ýۿ ó ؿ, κ ǻ
  ڵ    ̴.  ó  
  캸 ,  Ϲ ϴ 鿡 ͼ 
  ʿϴ.

     SIMD (SMingle Instruction stream, Multiple Data stream, 
        ɾ,   Ʈ) :" SIMD  μ Ȱ
         ÿ ,  μ ڽŸ Ϳ 
           ִ    Ų.   
        迭  ҿ ؼ Ȱ  ϴ 信 ڿ
        ,   ͳ 迭 ó õȴ.  
         ȭǾǷ, SIMD μ ȣۿ ü
         ȿ   ִ.

     MIMD (Multiple Instruction stream, Multiple Data stream,
         ɾ,   Ʈ) :" MIMD  μ
        ٺ  ϴ    Ų. 
         α׷  뿡 Ͽ    ִ
         ɰ 信 κ ڿ ´´.  , 
        μ ο Ʈ ׷ ȭ   , ٸ
        μ ͺ̽  ϴ ̴. ̴ SIMD ٴ
          ,  μ  ٸ μ
          ٲ ð ȭ Ͽ α׷  
        ִ  Ȳ(race conditions) Ǹ  ؾ
        Ѵ.

     SPMD (Single Program, Multiple Data,  α׷, 
        ) :" SPMD MIMD ѵ   μ 
        α׷ ϴ ̴. SIMDʹ ޸, SPMD ڵ带 ϴ
         μ α׷   ٸ  帧 
          ִ.

      뿪 (Communication Bandwidth) :
         ý 뿪      
        ð   ִ  ִũ̴.   ῡ
        뿪 밳 baud Ǵ Ʈ/ (b/s) ǥϴµ, Ϲ
        ̰ 1/10 1/8 Ʈ/ (B/s) شѴ.  ,
        1200 baud   120 B/s ӵ  ϰ, ݸ鿡 155
        Mb/s ATM Ʈ  ̺ 130000  ,  17 MB/s
        ӵ  Ѵ. ū 뿪 μ ̿ ū  
        ȿ   ְ Ѵ.

      ü (Communication Latency) :
         ý ü(latency)  ޴ Ʈ
        带 Ͽ,  ü ϴµ ɸ ּ ð
        Ѵ. ü ó ſ ߿ѵ,   ӵ
        ų  ִ ڵ  ּ  ð, ּ  ˰
        ũ(minimum useful grain size) ϱ ̴. ⺻
        ڵ  ϴ ð  ϴ ð(, ü)
        ª ,  ڵ   ʿ ϴ μ ķ
        ϴ  ķ ϴ ͺ  . ķ ϴ
          尡  ̴.

     ޽  (Message Passing) :
        ޽   ý ο μ ȣۿ 
        ̴. Ϲ, ޽  μ ִ Ʈ
        , ȣ Ʈ Ͽ ٸ μ ޵Ǿ,
        ⼭ ̸ ޾ ޽ 뿡  ϰ ȴ.  ޽
        óϴ (ü) Ŭ  , 밳  ޽ 
         ũ    ִ    ʴ´.
        ׷ ޽  ū 뿪 ʷϱ⵵ ϸ, 
        μ ٸ μ ū   ϴ  ſ
        ȿ  ó Ǿ ִ.  ׷,  ޽
          ʿ並 ּȭ  ֵ,  α׷ ִ
        ڷᱸ μ  θ  ־  μ ϴ
        κ ʹ ڽ  ޸  ֵ ؾ Ѵ.
        ̷ ۾  ġ(data layout) Ѵ.

      ޸ (Shared Memory) :
         ޸𸮴  ý ο μ ȣۿ 
        ̴.  ϰ ִ Ƽμ Ƽ ǻͰ
        ý  μ ϳ  ޸𸮸 Ѵ.
          μ  ޸𸮿  ϸ, ٸ 
        μ      ִ. ̿ ޸  
        ޸𸮴  μ ڽŸ ޸𸮸 ,  ޸𸮿
         ޸𸮸 ϸ ̸ شϴ μ 
        ȯν Ѵ. ̵   ޸ 
        Ϲ ޽ ޺ ϱ  Ǿ ִ.  
        ޸  ū 뿪  ü , ̴  
        μ ÿ  Ϸ  ̴. 
         ġ(data layout)  ɿ ū  ĥ 
        , ĳ ȿ   ġϴ    
        ϱ  .

      Լ (Aggregate Functions) :
        ޽ ް  ޸ 𵨿   ϳ 
        μ Ѵ. ̿ ݴ  Լ   
        μ ׷  ۿ  ִ   ̴. ̷
        ۿ    庮 ȭ(barrier synchronization),
         μ ׷쿡 ִ  μ 庮 ϱ
        ٸ ̴.  μ 庮 ϸ鼭 μȿ(side
        effect) ͸ ϸ,  ϵ  μ
         鿡  Լ    μ
          ִ.  ,   " μ ظ
        ãҴ"   ,  μ   
         ִ. ü(latency) ſ , ϳ μ
        ϴ 뿪    ִ.   
          лϱ⺸ٴ   ϴµ ַ ȴ.

     Ѱ  (Collective Communication) :
        ̴  Լ(aggregate function) ٸ ̸, κ 
        ޽   ̿Ͽ   Լ Űµ
        ȴ.

     SMP (Symmetric Multi-Processor, Ī Ƽμ)
        SMP Ϸ μ  ϰ Բ Ͽ,  ۾
        ̵  μ Ȱ   ִ ü
         Ѵ. ü SMP MIMD ޸𸮸  ̴.
        IA32 迭 SMP Ϲ MPS(Intel Multi-Processor
        Specification,  Ƽμ Ծ) ȣȯȴٴ 
        ǹѴ. δ ̰ "Slot 2" ǹϰ  ̴...

     SWAR (SIMD Within A Register, Ϳ SIMD) :
        SWAR ϳ ͸   ׸ ɰ 
        ʺ  Ͽ ̵ ׸鿡 SIMD   Ѵٴ
         Ű Ϲ ̴.  k-bit Ϳ 
        , Լ   谡  ,  
          Ͽ n k/n Ʈ ׸  SIMD 
           ִٰ ˷Դ.  ̷  ļ 
         ͸ Ͽ   ,  
        ũμ Ƽ̵  ۾   
        ̱  ֱ Ư ɾ ߰ߴ. /AMD/Cyrix
        MMX(MultiMedia eXtension) Ͽ, (Digital) Alpha
        MAX(MultimediA eXtensions), ޷- Ŀ(Hewlett-Packard) PA-
        RISC MAX(Multimedia Acceleration eXtensions), MIPS
        MDMX(Digital Media eXtension, "Mad Max" Ѵ), (Sun)
        SPARC V9 VIS(Visual Instruction Set)  ִ. MMX 
         ȸ縦 ϰ, ̵ Ȯ ɾ  , 
        ȣȯ ʴ´.

     μ μ (Attached Processors) :
        μ μ  Ư   ӵ ϱ
         ȣƮ ýۿ  Ư   ǻ̴. 
        , PC ִ    ī  Ϲ ׷
          DSP(Digital Signal Processing,  ȣ ó)
        ӵ ̵ ε μ μ  ִ. 
        迭    ӵ  ϱ ,   μ
        迭 μ(attached array processor) ִ.  
        ǻ͵  彺̼ ȣƮ μ μ Ǿ
        ִ.

     RAID (Redundant Array of Inexpensive Disk,   ũ 迭)
        :" RAID ũ I/O ŷڼ 뿪 ø  ̴.
        ⿡   ٸ  ,  ΰ ٽ
         ϰ ִ.  ,    n+k ũ
        ̺ ׷  ,  ̺   1/n
        ŭ а ⸸ ,  ̺ 뿪 n 뿪
         ȴ. ι°,  ͸ Ͽ,  ũ
        ̺갡 ϴ ͸   ֵ Ѵ. ̰
        ſ ߿ѵ, ׷   n+k ̺  ϳ 
         ü  ý   ֱ ̴.
        http://www.dpt.com/uraiddoc.html  RAID ݿ  
        䰡 ִ.  ýۿ RAID ɼǿ  
        http://linas.org/linux/raid.html ã  ִ.   RAID
        ϵ  ,  ϳ  ý
         ũ ȣƮϴ Ʈ RAID 0, 1, 4, 5
        Ѵ. ڼ  Ʈ RAID mini-HOWTO  ũ
        Ʃ(Multi-Disk Tuning) mini-HOWTO ϱ ٶ. ŬͿ
        ִ  迡 ִ ũ ̺ RAID 
         ʴ´.

     IA32 (Intel Architecture, 32-bit,  32Ʈ Ű) :
        IA32  óϰ  ,  Ϲ 
        386 μ ȣȯȴ ɾ   μ η
        Ų.  ⺻, 286     x86 μ
        IA32 Ư¡ 32Ʈ ÷ ޸ (flat memory model)
        ȣȯȴ.  AMD Cyrix   IA32 ȣȯ μ .
         ַ IA32 μ ؿ, IA32 ǰ
        ߽ɿ ֱ , PowerPC Alpha, PA-RISC, MIPS, SPARC 
        ٸ μ Ͽ IA32  ϴ  ϴ.
         õ IA64(EPIC, Explicitly Parallel Instruction Computing,
        õ    ϴ 64Ʈ μ) Ƹ
          ǰ, ó   IA64 μ
        Ӽ(Merced) 1999 ǰ   ̴.

     COTS (Commercial Off-The-Shelf,  ⼺ǰ)
          ǻ ȸ 鼭, COTS  
        ý ʿ Ϲ ٷ Ǿ.  
        ̷ ϸ, PC ϴ  COTS ó  SMP
        Windows NT   MMX Windows α׷ ɷ
         ̴. COTS   ǻ  ð 
        ּȭ̴.   ϰ,  Ϲ, COTS ǹ̴
         κ ý ⼺ ǰ 忡 ̵ 
        , ٸ  ȿ   ִ  ؾ
        Ѵٴ ̴. κ , COTS ó  ⼺
        PC Ʈ ̽ Ʈ   
        Ŭ͸ Ų.  밳   α׷ ڵ
        Ӱ    (copyleft̰ų public domain), 
        ״ COTS ƴϴ.

  1.3.   ˰

   HOWTO ϰ ִ   α׷  
        ֵ,   ϳ ٷ
  .    ˰,  ٸ  α׷
  ý ÿϴµ ؿԴ ˰ ν,  ٹ
  ϰ ϴ     ̴. M.J.Quinn å (Parallel
  Computing Theory And Prictice (  ̷а ǽ)); 2, McGraw
  Hill, New York, 1994, پ  ٸ  ǻ
  α׷ ȯ( , nCUBE ޽ ,   ޸(sequent
  shared memory)) ÿϱ , Pi  ϴ  ˰
  ϰ ִ.   HOWTO, 츮 Ȱ ⺻ ˰ ϵ
  .

   ˰ x 簢 Ʒ ִ  Ͽ Pi ٻ簪
  Ѵ.   C α׷ ٸ ˰  
  ̴.

  ______________________________________________________________________
    #include <stdlib.h>;
    #include <stdio.h>;

    main(int argc, char **argv)
    {
      register double width, sum;
      register int intervals, i;

      /* get the number of intervals */
      intervals = atoi(argv[1]);
      width = 1.0 / intervals;

      /* do the computation */
      sum = 0;
      for (i=0; i<intervals; ++i) {
        register double x = (i + 0.5) * width;
        sum += 4.0 / (1.0 + x * x);
      }
      sum *= width;

      printf("Estimation of pi is %f\n", sum);

      return(0);
    }
  ______________________________________________________________________

  ׷   ˰  " (embarrassingly
  parallel)"  ȴ.   (intarval) ɰ,
  μ  μ ȣۿ ʿ , ڱ⿡ Ҵ
      ִ. ϴ   Ǿٸ,
  ü    ؾ Ѵ.   μ 
     ʿ Ѵ.   ü  Pi
  ٻġ Ǿ  μ ̸ ϰ ȴ.

   HOWTO,  ˰    ,  ٸ
  α׷  Ѵ.

  1.4.    

     ټ κ  ִ. 2, 3, 4, 5
   ̿ ó ϴ  ٸ  ϵ 
  ٷ ִ.

  o   2 SMP  ý ٷ. ̴  ޸𸮸 ̿ MIMD
       ϸ, ޽    ȴ.
      16 μ  SMP  , κ
     SMP PC ý ΰ װ Ȱ μ  .

  o   3   ϰ ִ  Ʈ 
     Ŭ͸ ٷ. Ŭʹ MIMD  ޽ , ׸ 밳
       ޸𸮸  ϴ ó ý  
     ִ.  Ʈ   SMP  䳻, 
     Լ(aggregate function) ŵ   ִ. Ŭͷ 
     μ ڴ ΰ õ   ִµ,  ڴ ַ
     Ʈ ϴ  輱   ޴´.   ,
     ŬͿ  ٸ   ȥ  ִ.  ,
     DEC Alpha Ƽ  ý   ִµ, ̷ 
       Ŭ(heterogeneous cluster) Ѵ.

  o   4忡 SWAR,  Ϳ SIMD(SIMD Within A Register)
     ٷ.  ̰ ſ     , ݸ鿡
     Ϲ μ ̹ Ǿ ִ ̱⵵ ϴ. ֱٿ
     ٷ ũμ MMX (׸ ٸ ͵鵵) Ȯ ɾ
     ߰Ǹ鼭 ̷ ٹ  ȿ Ǿ.

  o   5忡  PC  ó ý ȣƮ ϴ
      ٷ. Ŵ ī峪 ܺ ڽ ·, μ μ 
     ýۿ Ư  α׷  û ó ɷ  
     ִ.  ,  DSP μ ϴ  ISAī带
     ̿Ͽ,  (compute-bound problem)   MFLOPS
     ó ɷ   ִ. ׷ ̵ ߰Ǵ  
     μ ̴. ̵ Ϲ OS ϰų ũ ܼ
     I/O ɷ    ʴ. ̷ ý ϰ ϱ
       "ȣƮ" ̵ ɵ ؾ Ѵ.

       ٷ  鿡  ʴ, 
  ̿ ó Ϲ  ִ ɵ ٷ.

       츮  ͵  ׽Ʈغ ߴٴ
  Ͱ ⼭ ٷ   κ "  Ư"("ߴ
  ó   ʴ´"    ǥ ̴ :-)̶ 
  ϱ ٶ. ׷  ̿ ó  ϸ,
     ׷ ̸   ϱ  ۾ ̴.

   HOWTO  ۼ  Hank Dietz ڻ  West Lafayette
  47907-1285 ִ Purdue    ǻ (Electrical and
  Computer Engineering) α(Associate Professor)̴. Dietz
   ȭ Ʈ(Linux Documentation Project, LDP) ħ 
      ´.   Ȯϰ ϰ 
  ؼ   , Dietz Purdue    
    å , Purdue  ⼭ ٷ  ۾̳
    ʴ´.

  2.  SMP 

    ó  SMP 
  <http://www.uk.linux.org/SMP/title.html> ý   
  ִ  ϰ 並 Ѵ.  SMP    ֱ
   Ƹ SMP  Ʈ ϸ Ʈ   
  ̴.  Ʈ Ϸ   subscribe linux-smp 
   majordomo@vger.rutgers.edu   ȴ.

  SMP    ϴ°?  1996 6,  ο ǥ
  ( ѹ  ǰ̾  ǥ ;-) ΰ 100MHz Ƽ
  μ  ý ߴ.   ģ ý ΰ
  μ Asus (motherboard), 256K ĳ, 32M RAM, 1.66G
  ϵũ, 6 CDROM, Stealth 64 ׷ ī 15ġ ͷ,
  ̸ ϴµ  1800$ .    ̿  
  μ ϳ ýۺ   ޷  ſ.  
  ϴ SMP  ҷ,    μ 
  ġϰ, makefile SMP=1  ִ ּ Ͽ ( SMP
  1 ϴ   ݾ̶  ) Ŀ ٽ
  ϰ, lilo ο Ŀ ˷ֱ⸸ ϸ ȴ.   ý
  ſ  Ͽ, ̱⵵ Ͽ, ݱ ؿ  
  ũ̼  ϱ⿡ ߴ.  ϸ, SMP 
    Ѵ.

    SMP   ޸𸮸 ϴ  α׷
  ۼϰ ϴ  ־ ŭ̳   ̴ִ.
  1996 ʿ ̷    ʾҴ.  ׷   
  ߴ.   ,  ſ Ϻ POSIX (thread)
  ̺귯 ִ.

   ޸  ϴ ͺٴ    , SMP
   ýۿ    ϴ ũ̼
  Ŭ(cluster) ϵ ߵ κ  ó
  Ʈ   ִ.  (3.3  )  SMP 
  ý Ӹ ƴ϶,  SMP ý Ʈ 
  ŬͿ   ִ.  ׷  SMP  
  ʿ (overhead)  ȴ.  ̷  κ
  Ŀ  ͷƮ ڵ鷯 Ͼ.  SMP   ÿ
  ϳ μ Ŀ 忡   ְ, Ʈ μ
  ͷƮ ó  ֵ ͷƮ Ʈѷ Ǿ ֱ 
    ɰ.  ׷ ұϰ,  SMP  ϵ
  Ŭ Ʈٴ ξ  ,  ŬͿ Ϸ
   ŬͿ Ʈ SMP    δ.

     SMP ϵ ؼ ̾߱ϰ,  α׷
  μ ̿ ޸𸮸 ϴ ⺻  Ŀ
  캸, ڼ(atomicity), ֹ߼(volatility), (lock), ĳ
  (cache line) ؼ  ϰ ˾ƺ,  
   ޸  ó ̺귯鿡  ణ  ϵ Ѵ.

  2.1.  SMP ϵ(Hardware)

  SMP ý۵   Ǿ , ص
  踶 ⺻ ɵ  ٸ ϴ  ־,
  ü SMP ϴ  ȣȯ .  ̷ 
  ĽŲ  ڿ ǥ μ Ծ(Multiprocessor
  Specification,  ٿ MPS Ѵ)̴.  MPS 1.4 Ծ
  <http://www.intel.com/design/pro/datashts/242016.htm> PDF 
       ,
  <http://support.intel.com/oem_developer/ial/support/9300.HTM> MPS
  1.1 Ծ࿡  並   ,  ڽ WWW Ʈ 
   ϱ   ּҴ ٲ  ִ.   ۵
  <http://www.uruk.org/~erich/mps-hw.html> 4 μ ϴ
  MPS ȣȯ ý۵  , ̷ MPS  
  μ   ִ.

  MPS ƴϸ鼭 IA32( 32Ʈ CPU) ƴ ý ߿ SMP 
  ϴ ýδ Sun4m μ SPARC ý ϴ.  SMP
    MPS 1.1 1.4 ȣȯ ý κ ϸ, 16
  486DX, Pentium, Pentium MMX, Pentium Pro, Pentium II μ
  Ѵ.   ʴ IA32 μδ  386, 486SX/SLC
  μ (ε Ҽ  ϵ  SMP 迡 
  ʴ´), AMD Cyrix μ̴ (̵ μ ٸ SMP 
  Ĩ ʿ ϴµ,       ̵ Ĩ 
  ʾҴ).

  MPS ȣȯ ý۵  õ ޶  ִٴ  
  ϰ Ѿ Ѵ.  Ϲ   ̸ Ÿ 
   ϳ μ ӵ̴.  ü    Ŭ μ
  ϸ   ý Ǹ, Pentium Pro μ  ý
  Pentium μ ̿ϴ ýۺ   ִ.  ׷
  MPS  ޸(shared memory) ϵ  ؾ
  ϴ  ʰ ִ.   Ʈ  
  ޸𸮰  ؾ ϴ ϰ  ̴.  ׷
  ϰ ִ  ޸  SMP  Ư¡ Ư α׷
  Ư¡  ¾ƵĿ   ޶  ִ.

  MPS ȣȯ ý۵ ̴ 켱   ޸𸮿 ϴ 
   ϴĿ Ÿ.

  2.1.1.   μ  L2 ĳø °?(Does each processor
  have its own L2 cache?)

  Ϻ MPS Pentium ý۰,  MPS Pentium Pro Pentium II ý
   L2 ĳø  ִ. (L2 ĳô Pentium Pro Pentium II
  ⿡ ִ) Ϲ  L2 ĳø ϸ ó ӵ
  ִȭ  ִٰ ˷ ,  ϰ ׷ 
  ƴϴ.  ̸ ȥϰ ϴ ֵ ,   ٷ 
  μ Ȱ μ ǰ ϴ μ ģȭ(processor
  infinity)   ʱ ̴.  μ Ǵ
  μ ݹ ٲ ִ.    ֱٿ "μ
  (processor binding)"̶  SMP   ü
  е  ִ.  μ ģȭ   L2 ĳø ԵǸ,
   μ  Ǵ μ ƴ ٸ μ
  ð Ҵ޾ Ǵ   带 ʷ  ִ.

      ý۵ ΰ Pentium μ
  ϳ L2 ĳø ϵ  ִ.     
  ΰ μ  ĳø ̿ ΰ  ؾѴٴ ,
  Ư    α׷ ϴ   ϰ
  ٴ ̴.      α׷鿡 ־  
  μ  ޸ Ȱ ο ϴ  ϳ ̸
  ĳÿ  Ǿ,  ѷ    ־ ĳø
  ϴ°   ȴٴ ̴.   μ ģȭ
   ʴ  L2 ĳø ϴ  ذ  .  
   α׷  L2 ĳø ϴ  Ϲ ϴ
  ͸ŭ  ʴ.

  ΰ Pentium μ 256K ĳø ϴ ý غ
  迡 , ʿ Ŀ ۾   ý  
  ũ ޶.  ־  ӵ 1.2 ۿ  ʾ,
  "͸   ϴ(shared fetch)" ȿ  ̿ϴ
   ߽ SPMD Ÿ ڵ带 Ͽ  2.1  
   ⵵ Ͽ.

  2.1.2.   (Bus configuration)?

   ̾߱    κ ý۵, μ ϳ
  ̻ PCI  Ǿ ְ, ̴ Ǵٽ 긴(bridge) Ͽ
  ϳ ̻ ISA/EISA  Ǿ ִٴ ̴.  긴 ϴ
   ð(latency) þ ǰ, EISA ISA Ϲ PCI
  ؼ  뿪 ϱ  (ISA  ), ũ
  ̺곪,  ī, ٸ  ġ PCI  ̽
  Ͽ Ǿ Ѵ.

  PCI  ϳۿ   ߽  α׷  MPS
  ý  ɰ ȿ ش.   I/O óӵ
  ϳ μ     , μ
   ̿ ΰ  ϱ  Ƹ    
  ̴.   I/O ӵ ̰ ʹٸ   PCI 
  I/O Ʈѷ(   SCSI üε)  MPS ý
  ϴ  .    SMP  ̵ ý ϴ
  ɽ 캸ƾ Ѵ.    SMP  
  ̵ ϳ μ Ŀθ忡   ֱ , I/O
  ó   Ŀο ҿϴ ð  I/O Ʈѷ ؾ
  Ѵٴ  ؾ Ѵ.    Ѵٸ ý (system
  call)  ʰ,  μ  ġ I/O ϴ ͵
    ʿ䰡 ִ.  ̴ ŭ  ʰ,  ġ
  ʴ´ (3.3 忡 ⺻  ؼ ϰ ִ).

   ӵ μ Ŭ ӵ 踦 캸 ͵ ſ ߿ϴ.
   ص ̵   ҸȮϰ صǾ Դ.  κ
  ý  Ȱ PCI Ŭ ӵ ϰ ,   Ŭ
  ӵ μ    Ŭ  ̷  幮 
  ƴϴ.    , Ϲ Pentium 133 Pentium 150
     Ͽ, پ ġũ Ư  Ÿ´.
  ̷ ȿ SMP ýۿ  ȴ.  ̴  Ŭ ӵ
   ϴ ͺٵ  ߿ ̴.

  2.1.3.  ޸ ø DRAM (Memory interleaving and DRAM technolo
  gies)?

  ޸ ø  MPSʹ ƹ ϵ   ʴ´.  ׷ MPS
  ýۿ ̰  ޵Ǵ    ִµ, ̴ ̵ ý
  ü ޸ 뿪   ʿ ϱ ̴.  ⺻
  2-way 4-way ø RAM    , ̰ ϳ ƴ϶
   RAM ũ(bank) Ͽ ̷ RAM ȭѴ.
  ̴   ޸  뿪 ϰ Ǵµ, Ư ĳ
  (cache line) б⳪ ⿡ ־  ׷ϴ.

  ̰ ȿ ؼ ״  , EDO DRAM̳ 
  ٸ ޸  ̿    ӵ Ű
  ̴.  <http://www.pcguide.com/ref/ram/tech.htm> DRAM 
   ô  Ǿִ 並   ִ.

  ׷ٸ,   2-way øǴ EDO DRAM   ø
   ʴ SDRAM  ͺ  ?  ̰ ſ Ǹ
  ̸,    ʴ.  ֳϸ ø̳ ٸ
  ִ  ü α ̴.  ⿡  Ȱ 
   ޸𸮿 Ѵٸ ξ    ޸𸮸   
  ̴.    DRAM Ѵ ϴ ũ ̿ 
  ޸𸮺ٴ ξ .

  2.2.   ޸ α׷ֿ  Ұ

  SMP ó ϴ   Ҹ ̶ 
  ȴٸ,  𼭺 ϴ° ?  ׷,  ޸ 
   ϴ Ŀ ؼ      ù
   .

   ϸ  ޸ ̶ ϳ μ ޸𸮿 
  ϸ, ٸ μ ̸ о̴ ̶   ִ.
    ׷  ʴ.   , μ
  μ  谡 ô ϰ  Ǿִٰ .  μ
    ϴ μ  ٰ ϴ ׷, 
  ݴ 쵵 .     κп Ư Ű澲
   ɰ  ߱  ִ ߿  -  
   Ǵϴµ ϴ ΰ  ٸ 𵨰, ڼ(atomicity)
  , ֹ߼(volatility)  ϵ (lock) , ĳ
  (cache line) ȿ, ׸  ٷ  -  
  ϵ ϰڴ.

  2.2.1.   ϱ  Ϻθ ϱ(Shared Everything Vs. Shared
  Something)

   ޸ α׷ֿ Ϲ  ϱ Ϻθ
  ϱ ΰ ٺ  ٸ  Ѵ .  
  ΰ   μ ޸𸮷 ͸ ,
  ޸𸮿 ͸ оν    ְ Ѵ.  
   ٸ,  ϴ 𵨿  ڷᱸ ޸𸮿
  δ ݸ鿡, Ϻθ ϴ 𵨿 ڰ  ڷᱸ
  ϳ μ ѵǴ ڷᱸ  Ѵٴ ̴.

   ޸   ΰ?  ̴   
  ϴ.    ڷᱸ   ̰  
    ʿ䰡  ,  ϴ  Ѵ.  
   ÿ ϳ μ(μ) ڷῡ   ֵ,
  浹 ų  ִ ϴ ڷῡ ϴ ڵ  (lock)
  ɱ⸸ ϸ ȴ.  ׷ ̰  ó  ʴ.  ׷
    Ϻθ ϴ  ִ   
  ȣϱ⵵ Ѵ.

  2.2.1.1.   ϱ(Shared Everything)

   ϴ   ̹  ִ  α׷
  Ͽ   ϴ  α׷ ȯ  ִٴ ̴.
  ⼭  ڷᰡ ٸ μ   ִ  
  Ǵؾ  ʿ䰡 .

  ϰ 캸,  ϴ   ū  ϳ
  μ  ൿ ٸ μ鿡  ĥ  ִٴ
  ̴.    ΰ  Ÿ :

  o   ̺귯    ڷᱸ Ѵ.  
     , UNIX κ Լ errno ٰ ڵ带
      ش.    ϴ   μ 
     Լ θٸ, ̵ Ȱ errno  ϱ  
      Ű  ̴.    errno  ذ
     ̺귯 ֱ , ̿   κ ̺귯
       ִ.   , ̸ Ư Ǹ  ʰ,
      ϴ  μ X ̺귯 Լ
     ȣѴٸ, X ̺귯    ̴.

  o  Ϲ ͸ ߸ ϰų, 迭 ε ߸ 
     , ־   ڵ带 ϴ μ ױ⵵ Ѵ.
     ̶ core     Ͼ ܼ ֱ⵵
     Ѵ.   ϴ ó ̷ ߸  ߻ϸ
     ٸ μ װ  ɼ Ŀ, ȭ(localize)
     ϰų  ġ   Ұϰ .

  ̷   Ϻθ ϴ Ŀ  Ͼ ʴ´.
  ֳϸ ϰ  ڷᱸ Ǳ ̴.  ׸, 
  ϴ   μ  Ȱ ޸ ̹ ϴ
  쿡 Ѵٴ  翬 ̴.  ,   ٸ ڵ
  ̹ ̿  ϴ     (ٸ
  ϸ, SPMD   , Ϲ MIMD   ).

   ϴ  ϴ  Ϲ  
  ̺귯(threads library)̴.  
  <http://liinwww.ira.uka.de/bibliography/Os/threads.html> ,
  ü Ϲ UNIX μʹ ٸ  ̷, 
  ߿   ޸ ʿ   ִ "" μ̴.
  POSIX Pthreads
  <http://www.mit.edu:8001/people/proven/pthreads.html>Ű 
   Ʈ  ޾ Ծ.  ⼭ ߿ , ̵
    ͵  α׷ ִ  SMP 
  ķ   ̴ִ (̻,  帶 ϳ
  μ).  POSIX API ̸ 䱸 ,
  <http://www.aa.net/~mtp/PCthreads.html>  иϰ 
     ʰ ִ - α׷   ϳ
   μ ȿ ִ.

  SMP  ó  ù°  ̺귯 
  ѹ bb_threads ̺귯,
  <ftp://caliban.physics.utoronto.ca/pub/linux/>   ִ.  ̴
   clone()Լ Ͽ,  ٵǸ, ϳ
  ּҰ ϴ, ο  μ (fork)ϴ ſ 
  ̺귯̴.  SMP    ""  
  μ̱   ̵ "" ķ   ִ.
    񰡷 ٸ ü Ϻ  ̺귯 ϴ
  Ͱ  "" ٸ    .   ̺귯 ο
  ޸     Ҵϰ, (lock) 迭(mutex
  ü)    ִ Լ, C  
  ڵ带  Ͽ ϰ ִ.   README  
  α׷ Ǿ ִ.

   ֱٿ clone() ϴ POSIX   ߵǾ.  
  ̺귯 LinuxThreads
  <http://pauillac.inria.fr/~xleroy/linuxthreads/>, SMP 
    ȣϴ  ϴ ̺귯̴.  POSIX 鵵
  ȭ ߵǾְ, LinuxThreads README
  <http://pauillac.inria.fr/~xleroy/linuxthreads/README> LinuxThreads
  FAQ <http://pauillac.inria.fr/~xleroy/linuxthreads/faq.html>  ſ
  ߵǾ ִ.   ֿ  POSIX 带  Ϸ ̸
  ڼϰ ˾ƾѴٴ ̰, LinuxThreads  ؼ
  ۾̶ ̴.   POSIX  ǥ ǥȭ  
  ǰ ־, ̹ ٲ   ǥؿ  α׷ ۼ
  ʵ Ǹ ￩ Ѵٴ   ̴.

  2.2.1.2.  Ϻθ ϱ(Shared Something)

  Ϻθ ϴ   " ʿ䰡 ִ ͸ ϴ"
  ̴.   ٹ  μ ޸  Ȱ ġ
  Ͱ Ҵǰ ϴ Ϳ Ѵٸ Ϲ MIMD(SPMD
  ƴ϶)  ϰ ȴ.   ߿ Ư¡, Ϻθ ϴ
    ϰ ϸ, ڵ带 ϴ   
  شٴ ̴.   δ :
  o      ʿ䰡 ִ ƴ° .

  o   ޸𸮿 ü  Ҵϴ  ġ ۾̴.  Ư
     ÿ ҴǴ ü   ׷.   ,  ͸
      ޸  Ҵ ؾ ʿ䰡 ִ 찡 ִµ, 
       ޸ Ҵ Լ ϰ,  μ ̸ 
      Ǵٸ ͸ ؾ Ѵ.

    μ ׷  ޸  鼭,
    ޸  Բ ϰ ϴµ ΰ 
   Ѵ.   ý   ٺ "System V IPC"
   ʾҴٸ,  "System V  ޸" ٸ ý
  ̿ ȣȯ ִ  Ѵ.  ٸ  mmap() ý
   Ͽ ޸ (memory mapping)  ϴ ̴. ̴
   UNIX ý۸ ũ ̰ .  ̵ ȣ⿡ ؼ
  Ŵ 鿡   ִ.  ׸ 2.5 2.6忡 
   ̸ ó     ̴.

  2.2.2.  ڼ (Atomicity And Ordering)

   ΰ     ϴ  ſ ϴ.
   ڽ   α׷  ִ  μ
  Ͽ а  ִ ޸   ͸  ȴ.  
      α׷  ޸ ü ġ  
  ޸𸮿 ִ ó   ִٴ  ǹ ʴ´.

  ڼ̶  ü  ۾ ɰ ʰ, ߴܵ   Ϸ
   ̷  Ű ̴.  ,  ޸𸮿
     ޸𸮿 ִ ڷῡ   ۾ 
  ̷ٴ   ʴ´.  ̸ Ư Ǹ 
  ʴ´ٸ, (bus)  ѹ ó ̷  б/
  길 (,   8, 16, 32 Ʈ ,  ȵǾ ְų
  64 Ʈ  ƴϴ) ڼ .    , GCC
  "ȶ" Ϸ ȭ  ޸ ۾ Ͽ, 
  μ   ٸ μ    ⵵ Ѵ.
  , ̵   ĥ  ִ...  ȿ(access
  efficiency) ĳö ũ(cache line size)  踸 Ÿ
  ܵΰ ̴.

  ׷ ̵  ؼ ϱ , ̵  
  μ ޸  ڵ  ̷ ִٰ
  ϰ ִٴ   ʿ䰡 ִ.  Pentium ׷ ϰ
  ,    μ ׷   ִٴ ͵
  ϱ ٶ.  ,   μ Ͽ, 
  ޸𸮿 ϴ ڵ ,  ̰ ޸  ϷϿ
  ޸  ʴ ̷ ϴ ɾ ѷξ  ʿ䰡
  ִٴ    ٶ.  CPUID ɾ ̷ μȿ(side-
  effect)  Ǿ ִ ̴.

  2.2.3.  ֹ߼(Volatility)

  GCC Ƽ(optimizer)  ޸ ü  Ϳ
  ۸ϴ  ,  ޸𸮿 ִ  ü volatile
  Ӽ  ؾ Ѵ.  ̷ ϸ, ѹ ٸ
  ̷   ü б/  Ͼ ȴ.
   , p   ̰, ̰ Ű ִ 
   ޸𸮿 ִٰ .  ANSI C ̸    
  ִ.

  ______________________________________________________________________
  volatile int * volatile p;
  ______________________________________________________________________

   ڵ忡, ù° volatile p Ű int  ϸ, ι°
  volatile   ü Ѵ.   ̴  ۾,
  GCC ſ  ȭ   ֵ ϱ ؼ ġ ϴ
  ̴.   ̷δ, GCC -traditional ɼ ִ ε,
   ȭ ϴ  ùٸ ڵ带 µ ϴ.
  ֳϸ ANSI K&R C     register 
   ̻  volatile̾ ̴.   GCC cc -O6 
   ϰ, ʿ Ϳ volatile̶   ִ.

   μ ͸ ϴ  ǥõǾ ִ 
  (lock) ϸ, GCC    (flush),
  volatile̶ ν ߻ϴ "ȿ" ڵ  
  ְ ϴ ȿ ִٴ ҹ ־Դ.  ̷  GCC 2.7.0
  ϴ ,  ҴǴ  ؼ  ϴ
  ó δ...  ׷, ̷ ൿ ANSI C ǥؿ ʿ
  ʴ.     б ٸ ϴ ٸ μ  
   Ϳ ۸   ־,  ޸  
  ϴ   ˾   ִ.  ϸ, ϰ 
  ص , volatile    Ѵٴ 
    ִ.

  Ϲ  volatile Ӽ Ͻϴ ȯ(type cast) Ͽ
  volatile    ִ.   ,  int i; *((volatile
  int *) &i); Ͽ volatile   ִ.  ̷ ϸ
  ֹ߼(volatility) ʿ 쿡, ̷ 带 ϵ  
  ִ.

  2.2.4.  (Locks)

  ++i; ׻  ޸𸮿 ִ  i 1 Ѵٰ ؿԴٸ,
   ̾߱   Ȳ 𸣰ڴ.  ϳ 
  ڵ ߴٰ ϴ,  а     ޸
  ó(transaction) ؼ ̷,   ó ̿ ٸ
  μ i   ִ.   , ΰ μ 
  ++i;  Ͽµ, 2 ϴ° ƴ϶ 1   ִٴ
  ̴.   Pentium "(Architecture) α׷ Ŵ"
  , LOCK ξ   ɾ װ ϴ ޸
  ġ   ̷  ϱ  ȴ.

  ______________________________________________________________________
  BTS, BTR, BTC                     mem, reg/imm
  XCHG                              reg, mem
  XCHG                              mem, reg
  ADD, OR, ADC, SBB, AND, SUB, XOR  mem, reg/imm
  NOT, NEG, INC, DEC                mem
  CMPXCHG, XADD
  ______________________________________________________________________

  ׷, ̵   ϴ  ״   ƴ 
  .   , XADD 386  ʰ,  ̸
  ϴ  ȣȯ  ߻ų  ִ.

  XCHG ɾ LOCK ξ  ׻  Ѵ.   
  ɾ (semaphore)  ť(shared queue) 
   ü  쿡   ̴.  翬 C
  ڵ GCC  ɾ    .   ζ(in-
  line)  ڵ带  ؾ Ѵ.  (word) ũ volatile
  ü obj  ũ   reg ִٸ, GCC ζ
   ڵ   :

  ______________________________________________________________________
  __asm__ __volatile__ ("xchgl %1,%0"
                        :"=r" (reg), "=m" (obj)
                        :"r" (reg), "m" (obj));
  ______________________________________________________________________

  (lock) ϴµ Ʈ(bit)  ϴ GCC ζ  ڵ
   bb_threads library
  <ftp://caliban.physics.utoronto.ca/pub/linux/>̺귯 ҽ ڵ忡
  ִ.

  ޸ ó(transaction)   Ϳ ̿  
  ִٴ   ʿ䰡 ִ.     ĳø  
  ִٴ ǿ ߾, (lock) ϴ  ణ 带
  ϰ, ٸ μ ޸ Ȱ ų  ִ.  (lock)
   ϴ      ʹٸ  ̸ 
  ϴ  .   ư ̵ IA32  ɾ ٸ
  ý۰ ȣȯ .

   ̵ Ƶ ϳ μ ־  ü ϴ
   ϴ  ȭ(synchronization) - ȣ (mutual
  exclusion) Ͽ -  ϴµ  ɾ   ֵ
  ϴ  ٸ ٹ ִ.  κ OS 翡 ̵
    ϳ ̻ ٷ ִ.  Abraham Silberschatz Peter
  B Galvin  ü (Operating System Concepts) 4(ISBN
  0-201-50480-4) ̸   ٷ ִ.

  2.2.5.  ĳö ũ(Cache Line Size)

  ڼ õ ⺻ μ SMP ɿ ū  ĥ  ִ
   ĳö ũⰡ ִ.  MPS ǥؿ  ĳð ǵ 
   ϰ̾ Ѵٰ ϰ ,  ϳ μ
  ޸ Ư ο   ,   ĳõ 纻 
  ȿȭ(invalidate)ǰų (update)Ǿ Ѵ.      
  ̻ μ ÿ   ٸ κп ͸ Ϸ
  ϸ, 緮 ĳÿ  (traffic) ߻  ,
   ĳÿ ĳ÷  ϰ ȴ.    ߸
  (false sharing) Ѵ.   ذå ķ ٵǴ Ͱ
  ǵ̸  μ ٸ ĳ ο   ֵ ͸
  ȭϵ ϴ ̴.

  ߸  L2 ĳø ϴ ýۿ  ȵɰŶ 
   ְ,   L1 ĳð ִٴ  .  ĳ
          , Pentium L1
  ĳö ũ 32 Ʈ̰,   ĳö ũ 256
  Ʈ ̴.   ׸ ּҰ ( ̵ּ,  ̵ּ)
  a b̰,  ū μ ĳö ũⰡ c̰, ̵  2
   ̶ .  ſ ϰ ϸ, ((int) a) & ~(c - 1)
  ((int) b) & ~(c - 1)  , ΰ  Ȱ ĳöο
  ϰ ȴ.   Ģ ȭϸ ķ Ǵ  ü
   c Ʈ  ִٸ, ̵ ٸ ĳ  
  ȴٴ ̴.

  2.2.6.   ٷ (Linux Scheduler Issues)

  ó  ޸𸮸 ϴ   OS 带
  ڴ , OS    ü  Ϳ ߻ϱ⵵
  Ѵ.  츮 ̹   μ  迡 ִ
  μ  ų ۾ƾѴٰ ߾.  ׷ Ȯ
  󸶳  μ       ?

  ְ  ,  ۼ  α׷ ִ μ
  , ٸ μ ؼ   ִ μ ϰ
  ƾ Ѵ.   , װ μ ִ SMP ýۿ ϳ
  μ ٸ  (  WWW ) ϰ ִٸ,
     α׷  μ ؾ Ѵ.
  ýۿ   ٸ μ ִ uptime ɿ ִ
  " (load average)" Ͽ 밭   ִ.

  ٸ  renice ̳ nice() ý    ̿Ͽ 
  α׷ ִ μ 켱(priority)   ִ.
  켱 ̷  ־ Ѵ.    ٸ μ
  μ iƳ ڽ  α׷  μ
  ؼ   ְ ϴ ̴.   
  <http://luz.cs.nmt.edu/~rtlinux/>  ִ ǽð(real-time) ٷ
  ϴ SMP  Ÿ(prototype)  ϸ 
  Ȯϰ ޼  ִ

   SMP ý   ϴ  ڰ ƴ϶,
   Ϸ ϴ   ̻  α׷ ̿ 浹 
   ִ.   ǥ ذ (gang) ٸ -  ÿ
  ϳ  α׷ ϴ μ鸸   ֵ ٸ
  켱 ٷ ̴.  ׷ ϳ ̻ óϸ 
  ʰ ƿ, ٷ Ȱ 带 ϰ ȴٴ 
  ϱ ٶ.  ,     μ  ýۿ
    α׷ Ѵٸ,   μ  ϴ ,
    α׷ װ μ  ϸ鼭  ٸ
  ϴ ͺ  .

  ̷   ̰ ϴ  ϳ  ִ.    
  ϰ ǰ , 㿡  óθ 밡
  迡 α׷ ϰ ִٰ .    ׽Ʈ
  ϴ° ٴ  ˴ α׷ ۼϰ ۼ ڵ带
  ׽Ʈϰ ϱ    μ   ̴.
  ׷, μ  ǰ  ʴ (ٸ μ) ٸ
  μ  ޸𸮷  ϱ⸸ ƹ͵  ʰ ٸ
  ִٸ, ̵ ۾ ſ  ̴.  ̿ Ȱ  ڵ带
  ϳ μۿ  ýۿ ϰ ׽Ʈϴ 쿡
  ߻Ѵ.

  ذå ڵ忡 ٸ μ Ͼ  Ͽ ٷ
  ϴ κп,  ٸ μ   ִ ȸ ֵ
  Լ ȣ ִ ̴.   C ũθ ϴµ ̸ ϴ
  ũθ IDLE_ME θ ִ.  α׷ ׽Ʈϱ ؼ
   Ҷ cc -DIDLE_ME=usleep(1)  ϰ, "ǰ" 
   cc -DIDLE_ME={}  Ѵ.  usleep(1) 1/1000 ʵ
  μ  Ͽ,  ٷ  μ ٸ
  μ ϵ   ְ Ѵ.  μ 
  밡 μ  ι̻ ٸ, usleep(1) ϴ
  ڵ尡 ̸  ʴ ڵ庸 ̻  Ǵ  ׸
  ̻  ƴϴ.

  2.3.  bb_threads

  bb_threads("Bare Bones()" threads) ̺귯(
  <ftp://caliban.physics.utoronto.ca/pub/linux/>)  clone()
  ȣ  ִ   ̺귯̴.  tar 
  gzip ϸ ܿ 7K Ʈۿ  ʴ´!   ̺귯
  2.4忡 ϴ LinuxThreads ̺귯   ѹ 
  Ǿ,  ϰ, ۰ Ͽ  ϴ 
   Ұϴµ ˸´.  и LinuxThreads ҽڵ带 
  ͺ  ڵ带   ξ   ̴.  ϸ bb_threads
  ̺귯 ϱ  , ū Ʈ 鶧
   ʴ.

  bb_threads ̺귯 ϴ α׷ ⺻  
   :

  1. ϳ μ α׷ Ѵ.

  2.   尡 ʿ ϴ ִ  ũ⸦ ؾ Ѵ.
     ̸ ũ  ״ ذ  ʴ´ (̰  ޸𸮰
     ϴ  ϳ̴).  ׷   ϳ  ּ
       , ʹ ũ  ͵  ƴϴ.
      64K ϰ ִ.   ũ⸦ b Ʈ Ϸ
     bb_threads_stacksize(b) ȣѴ.

  3.  ܰ ʿ (lock)  ʱȭϴ ̴.  
     ̺귯   Ŀ  0 MAX_MUTEXES
     ڸ ̴ ̴.   i ʱȭϷ
     bb_threads_mutexcreate(i) ȣѴ.

  4. ̺귯 ƾ ȣϿ ο 带 .  ⿡ ڷ
     ο 尡  Լ, ⿡  ڵ Ѱش.
     ڷ arg ϳ ް, ƹ͵  ʴ Լ f ϴ
     带  ٸ, Լ f> void f(void *arg, size_t dummy)
     ó  ϰ bb_threads_newthread(f, &arg)Լ θ ȴ.
     ϳ ̻ ڸ ؾϴ     ִ
     ü ͸ Ѱָ ȴ.

  5.  ڵ带 Ѵ.   ϴ bb_threads_lock(n)
     bb_threads_unlock(n) Լ   Ǹ δ (⼭ n
       Ѵ).   ̺귯 ִ  ɰ 
     ϴ   -(bus-lock) ɾ ϴ ſ
     ⺻ ɶ(spin lock)̴.  ׷  ޸  浹
     ų  ,  ٵ ϴٴ    .

     bb_threads Բ   α׷  Լ fnn
     main ÿ printf() ϴ  µ  ǹٸ
      ʰ ִ.  ̰   ׻  ʴ´.
       ϴ   α׷ Ʈ  ؼ ƴ϶,
     ̰ ſ ٷ ƴٴ Ͱ LinuxThreads ϴ  
     ٴ  ϱ ؼ̴.

  6. 尡 return  ϸ, ̴  μ ̰
     ȴ.  ׷   ޸𸮴 ڵ Ҵ  ʴ´.
     ϰ ϸ  Ҵ   , ޸ 
     ڵ malloc()  ʴ ޸ (free list)
     ǵư ߰ ʴ´.   θ μ  ڽ
     μ bb_threads_cleanup(wait(NULL)) ҷ  
     ݳؾ Ѵ.

   C α׷ 1.3忡  ˰ Ͽ, ΰ
  bb_threads 带 ̿ؼ (pi) ٻġ Ѵ.

  ______________________________________________________________________
  #include <stdio.h>
  #include <stdlib.h>
  #include <unistd.h>
  #include <sys/types.h>
  #include <sys/wait.h>
  #include "bb_threads.h"

  volatile double pi = 0.0;
  volatile int intervals;
  volatile int pids[2];      /* Unix PIDs of threads */

  void
  do_pi(void *data, size_t len)
  {
    register double width, localsum;
    register int i;
    register int iproc = (getpid() != pids[0]);

    /* set width */
    width = 1.0 / intervals;

    /* do the local computations */
    localsum = 0;
    for (i=iproc; i<intervals; i+=2) {
      register double x = (i + 0.5) * width;
      localsum += 4.0 / (1.0 + x * x);
    }
    localsum *= width;

    /* get permission, update pi, and unlock */
    bb_threads_lock(0);
    pi += localsum;
    bb_threads_unlock(0);
  }

  int
  main(int argc, char **argv)
  {
    /* get the number of intervals */
    intervals = atoi(argv[1]);

    /* set stack size and create lock... */
    bb_threads_stacksize(65536);
    bb_threads_mutexcreate(0);

    /* make two threads... */
    pids[0] = bb_threads_newthread(do_pi, NULL);
    pids[1] = bb_threads_newthread(do_pi, NULL);

    /* cleanup after two threads (really a barrier sync) */
    bb_threads_cleanup(wait(NULL));
    bb_threads_cleanup(wait(NULL));

    /* print the result */
    printf("Estimation of pi is %f\n", pi);

    /* check-out */
    exit(0);
  }
  ______________________________________________________________________

  2.4.  LinuxThreads

  LinuxThreads  <http://pauillac.inria.fr/~xleroy/linuxthreads/> 
  POSIX 1003.1c  ǥؿ  " ϴ"  ϰ
  ưưϰ  ̴.  ٸ POSIX 带  Ͱ ޸,
  LinuxThreads bb_threads  Ͱ Ȱ  Ŀ
  (clone()) Ѵ.  POSIX ȣȯȴٴ  ٸ ýۿ
     α׷     ,
    ִ پ  ִٴ  ǹѴ.   ,
  LinuxThreads   Ը  α׷  
    ִ Ȯ  Ű̴.

  LinuxThreads ̺귯 ϴ ⺻ α׷    :

  1. ϳ μ α׷ Ѵ.

  2.  ܰ ʿ (lock)  ʱȭϴ ̴.  ڷ
     Ǵ bb_threads  ޸ POSIX 
     pthread_mutex_tŸ(type)  ȴ.
     pthread_mutex_init(&lock,val)Լ ̿Ͽ ʿ  
     ʱȭѴ.

  3. bb_threadsó ο 带  ̺귯 ƾ
     ȣؾ Ѵ.  ⼭ ڴ ο 尡  Լ, ⿡
      ڵ̴.  ׷ POSIX ڰ  带
       ֵ pthread_t Ÿ  ϴ  ʿϴ.
     f() Լ ϴ pthread_t 带 Ϸ
     pthread_create(&thread,NULL,f,&arg) ȣѴ.

  4.  ڵ带 Ѵ. ʿ 쿡 pthread_mutex_lock(&lock)
     pthread_mutex_unlock(&lock) ȣϵ Ѵ.

  5. pthread_join(thread,&retval) Լ ̿Ͽ  尡 Ŀ
      Ѵ.

  6. C ڵ带   -D_REENTRANT ɼ ߰Ѵ.

   LinuxThreadsϿ (pi) ϴ α׷
  ̴.  1.3忡  ˰ Ͽ, bb_threads
  ó ΰ 尡 ķ ȴ.

  ______________________________________________________________________
  #include <stdio.h>
  #include <stdlib.h>
  #include "pthread.h"

  volatile double pi = 0.0;  /* Approximation to pi (shared) */
  pthread_mutex_t pi_lock;   /* Lock for above */
  volatile double intervals; /* How many intervals? */

  void *
  process(void *arg)
  {
    register double width, localsum;
    register int i;
    register int iproc = (*((char *) arg) - '0');

    /* Set width */
    width = 1.0 / intervals;

    /* Do the local computations */
    localsum = 0;
    for (i=iproc; i<intervals; i+=2) {
      register double x = (i + 0.5) * width;
      localsum += 4.0 / (1.0 + x * x);
    }
    localsum *= width;

    /* Lock pi for update, update it, and unlock */
    pthread_mutex_lock(&pi_lock);
    pi += localsum;
    pthread_mutex_unlock(&pi_lock);

    return(NULL);
  }

  int
  main(int argc, char **argv)
  {
    pthread_t thread0, thread1;
    void * retval;

    /* Get the number of intervals */
    intervals = atoi(argv[1]);

    /* Initialize the lock on pi */
    pthread_mutex_init(&pi_lock, NULL);

    /* Make the two threads */
    if (pthread_create(&thread0, NULL, process, "0") ||
        pthread_create(&thread1, NULL, process, "1")) {
      fprintf(stderr, "%s: cannot make thread\n", argv[0]);
      exit(1);
    }

    /* Join (collapse) the two threads */
    if (pthread_join(thread0, &retval) ||
        pthread_join(thread1, &retval)) {
      fprintf(stderr, "%s: thread join failed\n", argv[0]);
      exit(1);
    }

    /* Print the result */
    printf("Estimation of pi is %f\n", pi);

    /* Check-out */
    exit(0);
  }
  ______________________________________________________________________

  2.5.  System V  ޸

  ý V IPC(Inter-Process Communication, μ ) ޽
  ť(message queue) (semaphore),  ޸(shared memory)
  Ŀ ϴ  ý  Ѵ.   ̵
  Ŀ  ϳ μ ϴ ýۿ 
  μ  ϴµ ϱ ؼ .  ׷, 
   SMP  μ  μ ǰ ֵ 
  μ ſ  ؾ Ѵٴ ǹ̸ ϰ ִ.

  ̵ ý   Ǵ 캸 , ý V IPC ȣ
   ޽ ް   ϱ , ̸ ؼ
  ȵȴٴ  ϴ  ߿ϴ.   ȵǴ?  ̵ Լ
  Ϲ  SMP  ȭ(serialize)Ǿ ִ.
   ϰڴ.

   ޸   ϴ μ ׷  ⺻
     :

  1. ϳ μ α׷ Ѵ.

  2. ü  Ǵ   α׷ ڽŸ 
     ޸  ⸦ ٶ ̴.   shmget() Լ ҷ
     ϴ ũ⸸ŭ ο   Ѵ.   ȣ ̹
     ϴ  ޸  ID µ   ִ.  
     ̵, ƿ   ޸  ID̰ų  ߻
      -1̴.   , b Ʈ ũ  ޸ 
     ٸ, shmid = shmget(IPC_PRIVATE, b, (IPC_CREAT | 0666)) 
       ִ.

  3.  ܰ   ޸   μ ϴ(attach)
     ̴.   ״  ޸𸮸  μ  ޸ ʿ
     ߰ϴ ̴.  α׷Ӵ shamt() Լ ȣ⿡ ޸ 
     Ÿ  ּҸ   ,  ּҴ 
     (boundary)  (align) Ǿ ־ ϸ (,
     getpagesize() ִ  ũ -  4096 Ʈ̴ -
       Ѵ), ̴  ּҿ ̹ ϴ 
     ޸̵  .  , ̺ٴ ý
     ּҸ   ֵ ϴ   ȣȴ.   ̵,
     ƿ    ׸Ʈ ϴ ּҿ 
     ̴.  ڵ shmptr = shmat(shmid, 0, 0)  ̴.

        ü  ϰ shmptr  ü
      ͷ ν ϰ     ޸
      Ҵ  ִ.    ̿Ͽ,   x
     shmptr->x   ִ.

  4.  ޸  ϴ  μ ϰų 
      (detach)   ޸  ־Ѵ.  
     ⺻ ൿ Ϸ shmctl() Լ θ ʿ䰡 ִ.  ڵ
     shmctl(shmid, IPC_RMID, 0)  · ۼѴ.

  5. ϴ  μ  ǥ  fork() Լ
     Ѵ.   μ  ޸  ӹްԵȴ.

  6. μ  ޸  ϴ ۾ ġ,  
     ޸ κ и(detach)ؾ Ѵ.  ̴ shmdt(shmptr)
     ҷ Ѵ.
      ȵǴ ý ȣ⸸ , ϴ
   ޸  , ϳ μ ޸𸮻  ٲ
   ڵ  μ ̰ ȴ.   ߿   
  ۾ ý  ϴ  ̷ٴ ̴.

   ý V  ޸  ϴ C α׷ ̴.  
  α׷ (pi) ϴ  1.3忡  Ͱ Ȱ
  ˰ Ѵ.

  ______________________________________________________________________
  #include <stdio.h>
  #include <stdlib.h>
  #include <unistd.h>
  #include <sys/types.h>
  #include <sys/stat.h>
  #include <fcntl.h>
  #include <sys/ipc.h>
  #include <sys/shm.h>

  volatile struct shared { double pi; int lock; } *shared;

  inline extern int xchg(register int reg,
  volatile int * volatile obj)
  {
    /* Atomic exchange instruction */
  __asm__ __volatile__ ("xchgl %1,%0"
                        :"=r" (reg), "=m" (*obj)
                        :"r" (reg), "m" (*obj));
    return(reg);
  }

  main(int argc, char **argv)
  {
    register double width, localsum;
    register int intervals, i;
    register int shmid;
    register int iproc = 0;;

    /* Allocate System V shared memory */
    shmid = shmget(IPC_PRIVATE,
                   sizeof(struct shared),
                   (IPC_CREAT | 0600));
    shared = ((volatile struct shared *) shmat(shmid, 0, 0));
    shmctl(shmid, IPC_RMID, 0);

    /* Initialize... */
    shared->pi = 0.0;
    shared->lock = 0;

    /* Fork a child */
    if (!fork()) ++iproc;

    /* get the number of intervals */
    intervals = atoi(argv[1]);
    width = 1.0 / intervals;

    /* do the local computations */
    localsum = 0;
    for (i=iproc; i<intervals; i+=2) {
      register double x = (i + 0.5) * width;
      localsum += 4.0 / (1.0 + x * x);
    }
    localsum *= width;

    /* Atomic spin lock, add, unlock... */
    while (xchg((iproc + 1), &(shared->lock))) ;
    shared->pi += localsum;
    shared->lock = 0;

    /* Terminate child (barrier sync) */
    if (iproc == 0) {
      wait(NULL);
      printf("Estimation of pi is %f\n", shared->pi);
    }

    /* Check out */
    return(0);
  }
  ______________________________________________________________________

     (lock) ϱ  IA32 (atomic)
  ȯ(exchange) ɾ Ͽ.    ɰ ȣȯ ٶٸ,
   -(bus-lock) ɾ  ʴ ȭ 
  üϱ ٶ.

   ϰ ִ ý V IPC ɵ ¸ ִ ipcs
  ϰ ִٸ,   ڵ带     ̴.

  2.6.  ޸  ȣ

   I/O ý  ϴ  ſ Ŭ  ִ.  , ̰
   ۸ ϴ  I/O ̺귯 ִ ̴ (getchar(),
  fwrite() ).  ׷  ۴  μ Ȱ 
   Ͽ ϰ ִٸ   ,  ۸ ϴ
  嵵  ũ.  BSD UNIX  Ϻθ  ޸𸮷
  Ͽ   ޸ ¡ Ŀ   ϵ
    ִ ý  ߰Ͽ ̸ ذѴ.  ̿ Ȱ Ŀ
   Sequent  ýۿ  ޸ ó 
   Ǿ.  ( ) man   ſ 
  ǰ  ұϰ,  ⺻ Լ   
   ϴµ ̸,  ý   μ 
   ִ (anonymous) ޸  ο ϴ 
  Ѵ.

    mmap()  2.5忡  2, 3, 4°
  ܰ踦 ϳ ü ̴.    ޸   :

  ______________________________________________________________________
  shmptr =
      mmap(0,                        /* system assigns address */
           b,                        /* size of shared memory segment */
           (PROT_READ | PROT_WRITE), /* access rights, can be rwx */
           (MAP_ANON | MAP_SHARED),  /* anonymous, shared */
           0,                        /* file descriptor (not used) */
           0);                       /* file offset (not used) */
  ______________________________________________________________________

  ý V ޸ shmdt() Լ Ȱ  ϴ Լ
  munmap()̴ :

  ______________________________________________________________________
  munmap(shmptr, b);
  ______________________________________________________________________

    ý V  ޸   mmap() ϴ 
     ʴ.

  3.   ý Ŭ(Clusters Of Linux Systems)

      Ŭ  ó  Ϸ
  õ ̴. Ŭʹ   αִ   پϴ.
  ̰  ũ̼ǵ   Ʈ(NOW; network of
  workstations)   μ ν  Ǿ ϱ
   Ŀ   ִ.    Ŭ͸
  ϴ  ó   Ʈ  ִ.

  3.1.   Ŭΰ(Why A Cluster)?

  Ŭ  ó   ߿  Ѵ:

  o  ŬͿ ִ     ٸ ǻ  
      ִ  ý   ִ. ׷   Ŭ
      ǻ  å   Ͼ  ִ
     ũ̼ǵ " ð(wasted cycles)" θ 
     ٰ ϰ Ǿ. ̷ ð ϴ   ׷ 
      ƴϴ. ׸ ̰  ũ ̹   ̴.
     ׷ ̰ ׷   ִ.

  o  Ʈ ý۵ ֱ ϴ  Ŭ͸  
     ϵ κ 뷮, ̿ ؼ   "ǰ"
     , ȸ ִٴ  ǹѴ. Ŭ ϳ Ѱ
      ī, , Ű尡 ʿϴ     Ƴ 
     ֵ Ѵ( ʱ  ġ   Ŭ 
     鿡 ̵ Ű   , ϴ Ǹ 
      Ǿ "ܼ" ʿ  ʴ´). ̿ ؼ SMP
     μ μ ξ   忡   ɿ   
      ذ ִ.

  o  Ŭ ǻ  Ŀٶ ý۱ Ŀ  ִ.  4
     ̻ μ  -ȣȯ SMP ã  
     ݸ鿡 Ϲ   Ʈ ϵ 16 
     Ŭͷ    ִ. ݸ ۾ϸ 鰳 Ǵ 
     õ  Ʈ   ִ.  ü ͳ ϳ
     Ŀٶ Ŭͷ   ִ.

  o  Ŭ ȿ "峭 " üϴ  зƼ ߸ SMP
     ġ Ϳ ؼ  ܼϴٴ  ɽ ε
     Ŭ     뼺 Ѵ. ̰( 뼺)
     ߿  ߴ ߵ   Ư ø̼ǵ鿡 ؼ
     ߿ Ӹ ƴϰ, -   Ͼ 
     μ  ý۵ Ϲ 뿡 ߿ϴ.  (
      PC   ð 2 32 踦 
     ŬͿ   谡 6 ̳ 峯 Ȯ  .)

  . Ŭʹ ̰ų ΰ  Ŀ   뼺 ...
  ׷ٸ    Ŭ͸  ʴ°? ۽ ű⿡
     Ѵ:

  o     ܵ ϰ Ʈ ϵ  ó ؼ
     ȵ  ƴϴ.  SMP μ μ ؼ ü
       뿪  .   SMP ü
     Ϲ  ũ(: 100 1)  
     Ŭ  Ϲ   õ ũ ʰ ɸ. SMP
      뿪 밳 100MBytes/sec Ѵ´;    Ʈ
     ϵ(, "ⰡƮ ̴") ̿  ӵ ϱ
       Ϲ Ǵ Ʈ ̺ 10 1000 
      .

     Ʈ ϵ   Ŭ Ʈ  ŭ
     (The performance of network hardware is poor enough as an
     isolated cluster network). Ʈ ٸ Ʈκ Ǿ
      ʴٸ, Ŭͷ ε ýۺ "Ʈ 
     "  찡      ȭ  ִ.

  o  Ŭ͸  ý ϴ Ʈ   .
       ps    ýۿ   μ鿡
     ؼ    ý۵  Ŭ ü
        μ鿡 ؼ  ʴ´.

  ׷, Ŭʹ      κ
  ø̼ǵ鿡 ؼ ȹǱ⿡    ִ. ̷ ȯ濡
   α׷鿡 ؼ   ȹϵ ϴ  Ʈ
   ִٴ Ͱ   ȹ  ִ α׷  
   ֵ Ư  Ʈ鵵 ִٴ   ҽ̴.

  3.2.  Ʈ ϵ(Network Hardware)

  ǻ Ʈŷ ϰ ִ... ̹ ̰ ˰  ̴.
  Ʈŷ  ǰ -ϴ    ߿ ְ
  κ (,    Ǿ) ׷쿡 -ó
  Ŭ͸     ִ ·  ϴ.

  ϰԵ  Ʈ    Ǹϰ Ǯ Ѵ; 
  , ,     ϱ .   ǥ
  - ϵ ؼ Ʈ    
     Դ 5޷ Դ 4000޷ ̸. ڰ
  ϴ 뿪(delivered bandwidth) ü ð  ũ װ
  (four orders of magnitude)  Ѵ.

  Ư Ʈ ؼ  ϱ  ̷ ͵ ٶó 
  Ѵٴ  νϴ  ߿ϴ( Ʈŷ 鿡 ؼ
  <http://www.uk.linux.org/NetNews.html> ).  ׸ 
  Ʈ鿡  Ȯ ͸    ƴ.  Ư
  Ȯ ʴ  ڴ ǥ(?) Ҵ.   ϴ 
   ð    ( ) ߸ ̰  ߿
  ͵ Ծٴ  ȮѴ. ̳ ߰ؾ ϴ  
  ִٸ pplinux@ecn.purdue.edu ̸ ֱ ٶ.

  <http://web.syr.edu/~jmwobus/comfaqs/lan-technology.html> ִ LAN
  Technology Scorecard     ٸ ŸԵ Ʈ
  LAN ǥص鿡  Ư ش. ׷  Ͽ ִ 
  κ  Ŭ͸    ִ Ʈ Ư鿡 ؼ
   .  Ʈ ϴ  ª Ư Ʈ
  Ѵ.  ̷ Ʈ ǹϴ ٸ Ѵ.

      (Linux support):
        (̰Ϳ ) 亯 no,  ǹ̴ иϴ. ٸ 
        Ʈ ＼ϴ  Ǵ ⺻ α׷ ̽
        Ϸ  ̴. κ Ʈ ϵ, 
        TCP/UDP  ϴ, Ŀ ̹ ؼ ̽ȴ.
         ٸ Ʈ Ŀ ġ ʰ ü ð  
        ̱ ؼ    ̽(, ̺귯)
        ϱ⵵ Ѵ.

         OS ȣ ؼ ε Ҽ Ʈ ＼ ϴ 
         Ǹ  Ǿ. ׷  װ и
        콺 ̴;  ǰδ  α׷ ϴ μ
           OS ȣ 䱸Ѵٴ   ̴. 
        ǻ͵  ̷  ī  ߴٴ
        ̴. ׷ -Ŀ  ̽ļ   
        ִ.   ̷ ̷ Ϳ ؼ    
          ̴. 밳 ο Virtual Interface (VI) Architecture
        <http://www.viarch.org/> ·     ̰
        Ϲ OS ȣ  ϴ κ Ʈ ̽
        ۾鿡  ǥȭ ̴. VI ǥ Compaq, Intel, ׸
        Microsoft ؼ ް     ȿ SAN(ý
         Ʈ) ο     ӿ Ʋ.

     ִ 뿪(Maximum bandwidth):
        ̰   Ű澲 ̴.  Ϲ ̷
        ּ  ġ ߴ;  ϸ  ̴.

     ּ ü(Minimum latency):
         ǰδ, ̰   뿪  Ű 
        ġ̴.  ٽ   ּ (base-case) ġ
           ġ ϵ Ʈ θ
        ϴ  ü ҽ Ѵ. κ  Ʈ
        ü  ũ̴; ġ ũ Ŭ ϵ
        Ʈ ̽  ȿ̴ٴ  ݿѴ.

      (Available as):
        ܼϰ ؼ, ̰  Ÿ Ʈ ϵ   ִ
         Ѵ.  ǰ ֿ  ڷ  鼭,
         鿡 ؼ   ִ. ټ-  ͵ ϳ
              ̵ ߿ ̿
         ȣȯ(interoperability)  ִ. -
        Ʈ  տ  ӵȴ(׷ ׵ ģö 
        ִ).  ۺ  ̶ װ п  
        ã ϴ ǰ 缭 װ   ִٴ  Ѵ.
         ŸԵ  ״̴; ׵ Ϲ Ϲ
        ܺ ڵ鿡 غ  ƴϰų ׵   ִ 
        ƴϴ.

      ̽ Ʈ/(Interface port/bus used):
         Ʈ  (hook-up) ΰ?    ɰ
         Ϲ  PCI  ̽ ī̴. EISA, VESA 
        (VL ), ׸ ISA  ī鵵 ִ. ISA ó
         ̰  - ī鿡 ؼ  Ǵ
        ̴.  EISA  PCI 鿡 ι°  ǰ
        ־  ī ִ. ó VL ǵ    
        ̴(  <http://www.vesa.org/> ǰ ޸ ̴).

          Ǿ ̽ ѹ  ʰ  
        ִ  ̽  ŷ ̻ . IrDA USB
        ̽  ϰ Ÿ ִ. ǥ з
        Ʈ(SPP) ͸ ̴   ISA  ܺ
        Ȯν  Ǿ Դ;  ο   EPP ECP
          IEEE 1284 ǥؿ ؼ Ǿ.  ǰ
        ŷڼ   RS232 ø Ʈ ִ.  VGA 
        Ŀ, Ű, 콺, Ǵ  Ʈ ؼ 
        ϴ   Ѵ... ׷ ⿡ .

     Ʈ (Network structure):
          ̰ų   ̰ų ̴. 
        ⿡  ִ  ٸ / ϴ 
        ˰ ִ  ڽ̴; Ī (switched hub) ټ
        Ŀؼǵ ÿ ͸ ϵ ϴ ̴.

      (Cost per machine connected):
        ⼭ ̷ ġ ϴ  Ѵ. Ʈ Ŀؼ
         ʰ Ŭ  忡  Ǿ  
        2000޷ ٰ غ. нƮ ̴(Fast Ethernet)
        ϴ    2400޷ ; Myrinet  ϴ
          3800޷ .  2޷ ִٸ Fast Ethernet
         8 質 Myrinet ᵷ 5 踦   ִٴ
         ǹѴ.  Ƽ Ʈ  ͵  ǹ  ִ;
        , $20,000 нƮ ̴ݰ TTL_PAPERS    8
           ִ.  ø̼   
        Ŭ͸  ɼ   Ʈ̳ Ʈ 
        .

        ̰ д  ̷ ġ Ʋ  ִ... ⷲ ׵
        Ƹ ̹ Ʋ ̴.   پų Ư
        Ǹ(special deal)   ִ. ׷ ⼭ ޵
        ݵ鶧      ϰԲ ϱ⿡ 
        ߸  ɼ .   ø̼ Ʈ
        Ư Ӽ 䱸ϰų Ŭ͸ Ǿ  
           Ʈ ǹ̰ ִٴ  ƴ  ڻ
        (  ϳ   ;-) ʿ .

   ǰ Ƿ  Բ ....(Now that you have the
  disclaimers, on with the show....)

  3.2.1.  ũ(ArcNet)

  o   : Ŀ ̹

  o  ִ 뿪: 2.5 Mb/s

  o  ּ ü: 1,000 microseconds?

  o   : Ƽ- ϵ

  o   ̽ Ʈ/: ISA

  o  Ʈ : ġ ʴ(unswitched) 곪 ( )

  o   : $200

  ARCNET ַ  ǽð  ý۵鿡 Ǳ ؼ ȵ
   Ʈ(LAN)̴. ̴ݰ ϰ Ʈ  
   ̳ ϳ ̻  ȴ. ׷ ̴ݰ ٸ
  ̰ Ʈ   ϴ ū- 
  Ѵ. Ŷ  ۴(3 Ǵ 4Ʈ). ׸ ޽ 
  Ʈ ͸ŭ ۰ ޵  ִ. ׷, ARCNET ѵ 
   鼭, ̴ݺ   ϰ  . ϰԵ
  ̰ ̴ݺ    ϴ. ׷鼭  δ.
  <http://www.arcnet.com/> ִ ARCNET Trade Associationκ 
  ڼ    ִ.

  3.2.2.  ATM

  o   : Ŀ ̹, AAL* ̺귯.

  o  ִ 뿪: 155 Mb/s (, 1,200 Mb/s)

  o  ּ ü: 120 microseconds

  o   : Ƽ- ϵ

  o   ̽ Ʈ/: PCI

  o  Ʈ : ġ 

  o    : $3,000

     ȥ ¿  ʾҴٸ Ƹ ATM(񵿱  )
   ̷.. ۽,  ̷   ִ ؼ  
  ̴. ATM HiPPI  ΰ нƮ ̴ݺ   ȭ
  ȸ ϴ Ÿŭ  Ÿ   ִ. ATM Ʈ
     - Ʈ ̽ ϵ,
  ׸  ޽ ǽð (,   )  
  ȿ ϵ ȵǾ. ̰    ϴ
  - 뿪 Ʈ  ϳ̴.  ҽ ATM  ʰ
    ȣȯ   ִٴ ̴.  ATM ߿ 
    <http://lrcwww.epfl.ch/linux-atm/> ã  ִ.

  3.2.3.  CAPERS

  o   : AFAPI ̺귯

  o  ִ 뿪: 1.2 Mb/s

  o  ּ ü: 3 microseconds

  o   : ǰ ϵ

  o   ̽ Ʈ/: SPP

  o  Ʈ : 2   ̺

  o   : $2

  CAPERS(   ⸦  ̺ ; Cable Adapter for
  Parallel Execution and Rapid Synchronization),  ǻ
  Ͼ ۵  б(Purdue University School of Electrical and
  Computer Engineering) PAPERS Ʈ
  <http://garage.ecn.purdue.edu/~papers/> λ깰̴.  ⺻
  ̰   Ǿ鿡  PAPERS ̺귯 ϱ ؼ,
  Ϲ "LapLink" SPP-to-SPP ̺ ϱ ؼ Ʈ
   Ѵ. ̵      
  (: ׸ŭ δ?).  ý  ϱ ؼ
  TTL_PAPERS  ǰǴ ̳ Ŀ ġ ִ. ׷
  ݵ ʿ  ƴϴ:
  <http://garage.ecn.purdue.edu/~papers/giveioperm.html>.

  3.2.4.  ̴(Ethernet)

  o   : Ŀ ̹

  o  ִ 뿪: 10 Mb/s

  o  ּ ü: 100 ũ

  o   : ǰ ϵ

  o   ̽ Ʈ/: PCI

  o  Ʈ : ġ Ǵ ġ  , Ǵ   

  o   : $100(   $50)

  ⵿ 10 Mbits/s ̴ ǥ Ʈ  Ǿ.  ̴
  ̽ ī $50 Ϸ   ִ.   Ǿ 
  忡 ̴ Ʈѷ  ִ. -Ǵ Ʈ
  ؼ ̴    Ƽ-    ִ; ׷
   ּ  200    ִ. ׷ 
  ó  ʴ.  (unswitched hub) ϴ  
      ʴ´. ׷  鿡 ؼ ü
  뿪   ִ ġ (switched hub) Ʈ  
  $100 .     ̴ ̽
   ̽ ϵ  ɰ  ̸ θ 
  ִٴ  ϴ  ߿ϴ.  ͵ Ǵ ׵ 
  ۵ϴ ؼ ϵ ȣȯ Ͽ(Hardware Compatibility
  HOWTO) ; ׸  
  <http://cesdis1.gsfc.nasa.gov/linux/drivers/>.

   ϴ ̷ο  NASA CESDIS 
  (Beowulf) Ʈ
  <http://cesdis.gsfc.nasa.gov/linux/beowulf/beowulf.html> 
  16-  ŬͿ ؼ ȵǾ.  ̴ ī
  ̹  Donald Becker  ٸ  shadowϴ(, 
  Ʈ ּҵ ϴ) ټ ̴ Ʈ ؼ ε (load
  sharing)ϴ  Ͽ.  ε  ǥ  ǿ
  ǰ Ǿ  ۾  Ʒ  ʰ ǰ Ǿ.
    ߿ϱ   谡   Ǵ  긦 
    ̻ ̴ Ʈ (: ī) ϴ  
  ϱ  -ȿ    ִ.   谡 Ʈ
    ɸ Ȳ shadow Ʈ ϴ ε  
  ġ  Ʈ ϴ ͺ ξ  .

  3.2.5.  ̴(нƮ ̴, Fast Ethernet)

  o   : Ŀ ̹.

  o  ִ 뿪: 100 Mb/s

  o  ּ ü: 80 ũ 

  o   : ǰ ϵ

  o   ̽ Ʈ/: PCI

  o  Ʈ : ġ Ǵ  

  o   : $400?

   ׵ "нƮ ̴" θ  ٸ  
     밳  "10 BaseT" 100 Mbits/s 
  ̺ ټ ȣȯǴ -  100Mbits/s ̴ Ų.
  ϴ ó ̴ Ҹ ͵  ̳ Ϲ
  뷮  Ű ̷ ̽ Ϲ 155 Mbits/s
  ATM ī ݿ ڱ׸   ʴ´. ϴ 
   100 Mbits/s "" ( 긦 ؼ) 뿪  
  ϴ    ῡ Ǯ 10 Mbits/s   ִ ġ
  긦  10 Mbits/s ̴ ϴ ͺ    ִٴ
  () ִ.

   迡 ÿ 100 Mbits/s   ִ ġ  
     ְ ̷ ġ  꺸 ξ  
  ü Ʈ 뿪 . ATM ġ ΰ  
  ׵  ATM ( )鿡 ؼ ݵ ġؾ Ѵٴ
  ̴;  нƮ ̴ ġ ġ    ü
    ִ  ν Ǵ   Ī ֱ
   ̿Ѵ.  ׷ ġ н ϴ   и(:
  ũ ʰ ƴϴ) ɸ... ׷    Ѵٸ
  ̷ ġ ϴ  .  ī ̹鿡 ؼ
  <http://cesdis1.gsfc.nasa.gov/linux/drivers/> .

   ̴ݿ  ó NASA ̷ Beowulf Ʈ
  <http://cesdis.gsfc.nasa.gov/linux/beowulf/beowulf.html> Ƽ нƮ
  ̴ ؼ ε ν    ؿ
  ִٴ  ٶ.

  3.2.6.  ̴(ⰡƮ ̴,Gigabit Ethernet)

  o   : Ŀ ̹

  o  ִ 뿪: 1,000 Mb/s

  o  ּ ü: 300 ũ ?

  o   : Ƽ- ϵ

  o   ̽ Ʈ/: PCI

  o  Ʈ : ġ  Ǵ FDR

  o   : $2,500?

  ⰡƮ ̴(Gigabit Ethernet)  <http://www.gigabitethernet.org/>
  ̴ Ҹ    ٰ Ȯ Ѵ. ׷
  ̰ ΰ ū  ְ IP ϴ ǻ Ʈ  
  ִٴ  ̸ Ȯϰ ǹϴ  ƴϴ. ׷  
  Gb/s ϵ  ⿡ ٷο ̶  ݿѴ.

  ٸ ̴  ٸ ⰡƮ ̴     ִ
  Ʈ  帧   Ѵ. FDR,  Ǯ-÷
  (Full-Duplex Repeater)  Ű ؼ ۸
  ȭ 帧  ϸ鼭, ܼϰ ε Ƽ÷Ѵ.
  κ ġ  ϴ ⰡƮ-  ġ(gigabit-
  capable switch fabrics)  ο ̽ ν ǰ
  ִ. ġ/FDR ǰ    Ʈ鿡 ŵ 
  ְų ǥǰ ִ.  <http://www.acacianet.com/>,
  <http://www.baynetworks.com/>,  <http://www.cabletron.com/>,
  <http://www.networks.digital.com/>,
  <http://www.extremenetworks.com/>,  <http://www.foundrynet.com/>,
  <http://www.gigalabs.com/>, <http://www.packetengines.com/>.
  <http://www.plaintree.com/>,  <http://www.prominet.com/>,
  <http://www.sun.com/>, and  <http://www.xlnt.com/>.

   ̹
  <http://cesdis.gsfc.nasa.gov/linux/drivers/yellowfin.html> ϸ
  Packet Engines "Yellowfin" G-NIC ؼ
  <http://www.packetengines.com/>.   ʱ ׽Ʈ  
  100 Mb/s нƮ ̴ ȹ  ִ ͺ  2.5 
  뿪 ; ⰡƮ Ʈ PCI   ɽ
  Ʃϴ  ߿ ̴. ǽ   ̹  ٸ
  NIC鿡   ̹   ̾ ̴.

  3.2.7.  FC ( ä, Fibre Channel)

  o   : no

  o  ִ 뿪: 1,062 Mb/s

  o  ּ ü: ?

  o   : Ƽ- ϵ

  o  ̽ Ʈ/: PCI?

  o  Ʈ : ?

  o    : ?

  FC( ä)  -  I/O(2,048 Ʈ  
  Ǿ FC ) ϴ ̴. Ư ǻ͸ ؼ
  ƴ϶ FC    ִ ٸ  ġ ũ ϱ
  ؼ ̴. 뿪- FC 133 1,062 Mbits/s  𿡼
  Ǹ鼭  ٰ Ѵ. FC high-end SCSI ü ŭ
  ٸ ̰    ̴;    ƴϸ
   ؼ  ʴ´. FC ۷鿡   ݷ
  <http://www.amdahl.com/ext/CARP/FCA/FCA.html> Fibre Channel
  Association ؼ ǰ ִ.

  3.2.8.  ̾̾(FireWire, IEEE 1394)

  o   : no

  o  ִ 뿪: 196.608 Mb/s (, 393.216 Mb/s)

  o  ּ ü: ?

  o   : Ƽ ϵ

  o  ̽ Ʈ/: PCI

  o  Ʈ : Ŭ  (ڰ-)

  o   : $600

  FireWire,  <http://www.firewire.org/>, IEEE 1394-1995 ǥ ̰
   (electronics)    Ż Ʈ ؼ
  ȵ ̴.  ø̼ DV   ķڴ
  ǻͿ ϴ  FireWire SCSI üϴ ͺ 
  (home theater)  Ʈ ȣϴ ͱ
  ø̼ǵ Ͽ ǵ ǵǾ. ̰ (cycle)
   ʴ  긮 ϴ   
  64K  ϰ Ʈ ų ŵ  ڵ
   Ѵ. ª(4 Ʈ "quadlet")  ü ð 
  ޽ ATM-like (isochronous) (Ƽ̴ ޽
  ⸦ ߴ  ȴ) Բ ȴ. ƴ(Adaptec)  PCI
  ̽ ī忡 63 ġ ϴ FireWire ǰ 
  ְ <http://www.adaptec.com/serialio/> FireWire  
  Ϲ   ִ.

   FireWire     뿪 Ʈ   
  - (   )  ü ð  ̰
   ̳  Ǿ Ŭ ޽- Ʈ   ϳ
   ̴.

  3.2.9.  HiPPI ÷ HiPPI

  o   : no

  o  ִ 뿪: 1,600 Mb/s (ø 1,200 Mb/s)

  o  ּ ü: ?

  o   : Ƽ- ϵ

  o   ̽ Ʈ/: EISA, PCI

  o  Ʈ : ġ 

  o   : $3,500 (ø $4,500)

  HiPPI (High Performance Parallel Interface)   ǻͿ ٸ
  (,  , ũ  )  뷮  µ
   ؼ   뿪 ϵ ǵǾ Ŀ 
    Ǿ.  ̰  (oxymoron)̱ 
  ø HiPPI  32-Ʈ  ǥ(з) HiPPI ̺ ſ 
  ̺  ν,  ̴.   ⵿
  HiPPI ũν ġ Ϲ  Ǿ ݵ ްϰ
  ; ϰԵ ø HiPPI  ΰ ̰ ٷ PCI 
  ̽ ī Ϲ ϴ ̴.    
   HiPPI  Ѵٴ ̴. HiPPI   CERN
  ؼ <http://www.cern.ch/HSI/hippi/> ǰ ִ; ׵ 
  <http://www.cern.ch/HSI/hippi/procintf/manufact.htm> HiPPI 
  ټ ٶ Ʈ Ѵ.

  3.2.10.  IrDA (ܼ  ; Infrared Data Association)

  o   : no?

  o  ִ 뿪: 1.15 Mb/s 4 Mb/s

  o  ּ ü: ?

  o   : Ƽ- ϵ

  o  ̽/: IrDA

  o  Ʈ : ª Ÿ (thin air) ;-)

  o   : $0

  IrDA(ܼ  , http://www.irda.org/)   ǽõ
  鿡 ִ  ܼ ġ̴.  ̽ ؼ  
  ̻  ĿƮϴ  Ÿ   ƴ. ׷
  Ŭ͸  ɼ . Don Becker IrDA  
  ۾ ߾.

  3.2.11.  Myrinet

  o   : ̺귯

  o  ִ 뿪: 1,280 Mb/s

  o  ּ ü: 9 ũ 

  o   : - ϵ

  o  ̽ Ʈ/: PCI

  o  Ʈ : ġ 

  o   : $1,800

  Myrinet  <http://www.myri.com/> "ý  Ʈ" (System Area
  Network, SAN)   ֵ ȵ ٰŸ  Ʈ(LAN)̴.
    ý    Ʈ ɺ. LAN SAN
    ٸ  ü ϰ ټ ٸ Ư ;
  Ϲ SAN  Ŭ ȿ  ̴.

  Myrient     Ư - ̶
    ִ.   ̹  ٴ  ´.
   ȣƮ ǻͿ   ٸ PCI  鿡 ؼ 
  Ŀٶ  ȭ Ʈ ٰ ־ ̴.

   Myrinet ʹ ɰϰ " ϴ"  ƴ Ŭ
  ׷ ȣǴ Ʈӿ Ʋ.  Ǿ   ּ
  256 MB RAM SCSI RAID  Pentium Pro Pentium II Myrinet
    ո  ȴ. ׷   Ϲ Ǿ 
  Ѵٸ   Myrinet  N ̳ Ƽ нƮ
  ̳ʳ  2N TTL_PAPERS ̿ ִٴ  ˰  ̴.
    󸶳 Ǵ°  Ű澲 ǻ  
  ΰ    ȴ.

  3.2.12.  Ķ̼(Parastation)

  o   : HAL Ǵ  ̺귯

  o  ִ 뿪: 125 Mb/s

  o  ּ ü: 2 microseconds

  o   : - ϵ

  o   ̽/: PCI

  o  Ʈ :  (mesh)

  o   : > $1,000

  Karlsruhe б а(Department of Informatics)
  Ķ̼(Parastation) Ʈ
  <http://wwwipd.ira.uka.de/parastation> PVM-ȣȯ Ŀ -ü
  Ʈ  ̴. ׵ ó Ŀ EISA ̽ BSD
  UNIX ϴ Ǿ  ó  ΰ μ ParaPC
  Ÿ    DEC Alpha    ū
  Ŭ͵ . PCI ī Hitex̶ Ҹ ȸ ؼ
  ( <http://www.hitex.com:80/parastation/> ).
  Ķ̼ ϵ  ŷڼ ִ ޽ ۰ ܼ
  (barrier) ȭ  ̴.

  3.2.13.  PLIP

  o   : Ŀ ̹

  o  ִ 뿪: 1.2 Mb/s

  o  ּ ü: 1,000 microseconds?

  o   : ǰ ϵ

  o   ̽/: SPP

  o  Ʈ : 2   ̺

  o   : $2

  "LapLink" ̺  PLIP(Parallel Line Interface Protocol)
  ǥ - Ʈ Ͽ ǥ з Ʈ ؼ 
      ֵ Ѵ. 뿪, ü, ׸
  ɼ(scalability) 鿡  ̰  ߿ Ʈ
   ƴϴ. ׷    ݰ Ʈ ȣȯ
  ϴ.  ̹ ǥ  Ŀ  Ϻ̴.

  3.2.14.  SCI

  o   : no

  o  ִ 뿪: 4,000 Mb/s

  o  ּ ü: 2.7 microseconds

  o   : Ƽ- ϵ

  o   ̽/: Ưȸ(proprietary) PCI

  o  Ʈ : ?

  o   : > $1,000

  SCI (Scalable Coherent Interconnect, ANSI/IEEE 1596-1992) 
  ⺻   鿡  (coherent)  ޸ 
    ִ  ī پ Ÿ ޽  ϴ
  ̴. SCI ȵ 뿪 ü κ ٸ Ʈ 
  ؼ   " "̶ ص .  SCI  ǰ
  Ʈν θ 밡 ʴٴ Ͱ    ٴ
  ̴.

  SCI ַ HP/Convex Exemplar SPP Sequent NUMA-Q 2000(
  <http://www.sequent.com/>)  - -
  ޸ (logically-shared physically-distributed memory
  machines)  پ   ȿ Ǿ. ׷ Dolphin(
  <http://www.sequent.com/> )κ SCI PCI ̽ ī
  4-way ġ(16  װ 4-way ġ ٿ  
  ִ) ׵ CluStar ǰ ν 밡ϴ. SCI  
   ũ CERN ؼ  <http://www.cern.ch/HSI/sci/sci.html>
  ȴ.

  3.2.15.  SCSI

  o   : Ŀ ̹

  o  ִ 뿪: 5 Mb/s 20 Mb/s ̻

  o  ּ ü: ?

  o   : Ƽ- ϵ

  o   ̽/: PCI, EISA, ISA ī

  o  Ʈ : SCSI  ϴ 谣 

  o   : ?

  SCSI (Small Computer Systems Interconnect) ⺻ ũ
  ̺, CDROM, ̹ ĳ    Ǵ I/O ̴.
  ⿡ и  ǥص SCSI-1, SCSI-2, ׸ SCSI-3; Fast and
  Ultra speeds; ׸  н ʺ 8, 16, Ǵ 32Ʈ(SCSI-3
  ޵ FireWire ȣȯ Բ)  ִ. ̰  ȥ.
  ׷ 츮   SCSI EIDE     
  ȿ   ִٴ  ȴ.

     ϴ   ǻ͵  SCSI 
  ϴ   ܼϴٴ ̴. ̷  Ÿ 谣 ũ
  ̺ ϰ  (fail-over) - 谡 ٸ
  谡   ͺ̽ 䱸 õ ϰ ν- 
  ϴ.  ̰ ũμƮ PC Ŭ ǰ WolfPack
  ؼ Ǵ  ī̴. ׷   ū ý۵ Ȯ
   ٴ   SCSI Ϲ  ó ־  ̷Ӱ
  .

  3.2.16.  (ServerNet)

  o   : no

  o  ִ 뿪: 400 Mb/s

  o  ּ ü: 3 microseconds

  o   : - ϵ

  o   ̽/: PCI

  o  Ʈ :   Ʈ/4ü (hexagonal tree/tetrahedral
     lattice of hubs)

  o   : ?

  (ServerNet) Tandem,  <http://www.tandem.com> - Ʈ
  ϵ̴. Ư ¶ Ʈ ó(OLTP) 迡 Ĵ
  -ŷڵ ý۵ η ˷ ־ ׵ Ʈ -
  Ӹ ƴϰ "  (integrity) ŷڵ" ص
    ƴϴ. ServerNet ٸ ̷ο   ġ
  ٸ  ġ  ͸   ִٰ Ѵٴ ̴;
  ``MPI'' ǿ  MPI Ʈ ޸ ＼ ī鿡 ؼ
  ȵ Ͱ  -̵ ŸϷ, μ̻Ӹ ƴϰ
  ũ ̺  ̿ ׷. ݿ   Ѱ
  ڸƮ:  ̱      ֿ ǥ,
      ŭ  ϴ. Tandem Compaq
  ̴.

  3.2.17.  SHRIMP

  o   : - ޸ ʵ(memory-mapped) ̽

  o  ִ 뿪: 180 Mb/s

  o  ּ ü: 5 microseconds

  o   :  Ÿ

  o   ̽/: EISA

  o  Ʈ : mesh backplane ( Paragon )

  o   : ?

   б ǻ  а ϰ ִ SHRIMP Ʈ,
  <http://www.CS.Princeton.EDU/shrimp/> ó ν 
  ϴ Ǿ   ǻ͸ ϰ ִ. ù°
  SHRIMP(Scalable, High-Performance, Really Inexpensive Multi-
  Processor ) Ŀ EISA ī ̽   Ʈ
   RAM  ܼ -μ  Ÿ̾.  
  Paragon( <http://www.ssd.intel.com/paragon.html> ) 
  ׹(mesh)  Ʈ ⺻  "hub" ϱ ؼ
  Ŀ ̽ ϴ   ū 鿡 Ȯ尡 Ÿ
  Ѵ. 尡  " ޸ ʵ " ϵ 
  Ʈ ϱ     ̷.

  3.2.18.  SLIP

  o   : Ŀ ̹

  o  ִ 뿪: 0.1 Mb/s

  o  ּ ü: 1,000 microseconds?

  o   : ǰ ϵ

  o   ̽/: RS232C

  o  Ʈ :   ̿ ̺ 

  o   : $2

   SLIP(ø  ̽ ;Serial Line Interface
  Protocol)  Ʈ  ʿ  ġϰ 
  SLIP(Ǵ CSLIPǴ PPP)   Ϲ RS232 ø Ʈ
  ؼ     ֵ Ѵ. Ǵ ׵  
  ̾- ؼ   ִ.  쿡 ü ð 
  뿪 . ׷ SLIP ٸ ȵ  Ұ 
  Ǿ  ̴. ׷ κ Ǿ   RS232 Ʈ
   ִٴ  ָҸ ġ ִ. ׷   迭̳
   ܼϰ ؼ  ׷ Ʈŷϴ  ϴ.
  EQL̶ Ҹ ε  Ʈ Ѵ.

  3.2.19.  TTL_PAPERS

  o   : AFAPI ̺귯

  o  ִ 뿪: 1.6 Mb/s

  o  ּ ü: 3 microseconds

  o   : ۺ- , ̱- ϵ

  o   ̽/: SPP

  o  Ʈ :  Ʈ

  o   : $100

  ۵ б   ǻ Ͼ б   PAPERS
  (Purdue's Adapter for Parallel Execution and Rapid Synchronization)
  Ʈ,  <http://garage.ecn.purdue.edu/~papers/>  ǻͰ
    Ǿ/ũ̼ǵ  Ͽ   ֵ
  ϴ, ũ  ϰ -ü ð   Լ 
  ϵ Ʈ  ߿ ִ.

  ΰ  ε 뷫  SPP(ǥ з Ʈ; Standard
  Parallel Port) ؼ Ǿ/ũ̼ǵ  PAPERS
  ϵ   12 Ѵ´. "PAPERS" Ҹ 
   ̸ ̵ ؼ    ǥ Ѵ; 
  ۾ FPGA   ߿ ִ  뿪 PCI  ̽
   Ѵ.  ݸ鿡 "TTL_PAPERS"̶ Ҹ  ۵
   ٱ    ֵ ε ̰ Ϲ TTL
   ؼ   ִ  ܼ   (public
  domain designs)̴. ̷   ϳ  .
  <http://chelsea.ios.com:80/~hgdietz/sbm4.html>

  ٸ е Ŀ ϵ ΰ ٸ TTL_PAPERS Ŭ͵
  USA ѹα  е鿡 Ǿ Դ.  뿪 SPP
  Ŀؼǵ鿡 ؼ ɰϰ ѵǾ    ޽-
  ý۵ ׷  Լ(aggregate functions) ؼ Ҹ
     . ׷ PAPERS Ư  (video wall;
  :     ִ  ÷  ǻ, 
  ý ) ÷̸ ȭϴ (  ؼ 
   Video Wall HOWTO ڼ ٷ ̴), -뿪 Ʈ 
  ٸ ＼,  ˻(genetic search)  (global
  fitness) ϴ   Źϴ.  PAPERS Ŭ͵ IBM
  PowerPC AIX, DEC Alpha OSF/1, ׸ HP PA-RISC HP-UX 
  ؼ  - PC   Ǵ ÷̴.

  TTL_PAPERS AFAPI ϴ  α׷ , 
  ＼ ؼ OS ȣ SPP ϵ Ʈ ͵ ＼Ѵ.
  ̷ ϱ ؼ AFAPI Ǹ iopl() ioperm() ؼ Ʈ
  ۹̼ ȹѴ. ̷ ȣ     α׷
   (: ƹ Ʈ   ) 䱸ؼ 
    ٴ ̴. ַ  Ŀ ġ,
  <http://garage.ecn.purdue.edu/~papers/giveioperm.html>̴. ̰
  ִ μ  μ  Ʈ ۹̼ ϵ
  Ѵ.

  3.2.20.  USB (Universal Serial Bus)

  o   : kernel driver

  o  ִ 뿪: 12 Mb/s

  o  ּ ü: ?

  o   : commodity hardware

  o   ̽/: USB

  o  Ʈ : bus

  o   : $5?

  USB (Universal Serial Bus,  <http://www.usb.org/>) Ű, ȭ ȸ
  ī޶  127 ֺ   ְ -÷(hot-pluggable)
   Ϲ ̴  ӵ  ̴.  󸶳 
  ǻ͵  USB ؼ   ִ  Ȯ ʴ.
  · USB Ʈ   RS232 SPP  PC 
  ǥ Ǿ ִ. ׷Ƿ    PC  USB
  Ʈ  ִ   ٶ.  ̹ 
  <http://peloncho.fis.ucm.es/~inaky/USB.html> ǵǰ ִ.

    USB      ִ, -,
  -(zero-cost) FireWire ̴.

  3.2.21.  WAPERS

  o   : AFAPI library

  o  ִ 뿪: 0.4 Mb/s

  o  ּ ü: 3 microseconds

  o   : public-domain design

  o   ̽/: SPP

  o  Ʈ : wiring pattern between 2-64 machines

  o   : $5

  WAPERS (   ȭ  Wired-AND ƴ; Wired-AND
  Adapter for Parallel Execution and Rapid Synchronization) ۵
  б  ǻ  б   PAPERS Ʈ,
  <http://garage.ecn.purdue.edu/~papers/> λ깰̴. ϰ
  ȴٸ SPP 4-Ʈ  wired AND ϱ ؼ   
    ִ 4Ʈ -ݷ  .  wired-AND
  ڰ ٷ  ̰ ̷    ִ
   ִ  Ʈ Ƴα Ư ̴(ִ 
  (sink current) ޽ (pull-up register) ); 
  7  8  WAPERS Ʈŷ  ִ.  
  üð  , ׷ 뿪 ; WAPERS ŬͿ
   Ʈνᰡ ƴ϶  ۾鿡  ι° Ʈν ξ
   . TTL_PAPERS Բ, ý  ̱ ؼ, ݵ
  ʿ  ǰǴ ̳ Ŀ ġ ִ:
  <http://garage.ecn.purdue.edu/~papers/giveioperm.html>.

  3.3.  Ʈ Ʈ ̽(Network Software Interface)

   ø̼ǵ ϴ Ʈ ϱ  Ʈ
  ϵ  ο- Ʈ ̽ ⺻  
  ϴ  ϴ.  3 ⺻ ø Ѵ: , ġ
  (device drivers), ׸ - ̺귯.

  3.3.1.  

  ݱ  Ϲ ο- Ʈ ̽ 
  ̴̽.   10Ⱓ н Ϻο κ ǥ
  Ʈ ϵ  ΰ Ÿ  ݵ: UPD TCP
  ϵ  ̴.   ŸԵ  迡 ٸ 
   ũ     ֵ   ߿ ̰
  ִ.   Ʈ Ʈȿ  ξ ȭ  
    ΰ  1,000 ũ   ּ ü .

  ̷  ŸԵ κ ̽ , -,  ó
  Ʈ  ⺻ Ʈ Ʈ ̴̽;  
  PVM UDP TCP ȥϿ ϱ     ƴ 
   Ʃϴ    ̴.     ؼ α׷
  ȿ  ̷ ī   ִ.  UDP TCP
  ܼ ̴; ڼ  Ŵ   Ʈ
  α׷ å  ٶ.

  3.3.1.1.  UDP  (SOCK_DGRAM)

  UDP  ͱ׷ (User Datagram Protocol) UDP
  Ӽ ŷ   ͱ׷ ó(Unreliable Datagram
  Processing)       ̴. ٸ  ؼ UDP
     ޽ ۵ǵ  ޽   ǵ
   ִ.  Ʈ Ʈȿ  UDP ޽ ǵ  ְ
     ְų ׵   ٸ   
  ִ.  UDP ޽ ڴ ڵ ޾Ҵٴ (acknowledgement)
   ʴ´. ׷ ̷  ϰ ϴ  ڰ
  ۼ ڵ忡 Ѵ.  ེԵ UDP ޽ ߴٸ 
  ޽ ջ  ƴϰ  ̶(, UDP ޽ 
  ޾Ҵٰ) Ѵ.

  UDP       Ƿ Ѵٴ ̴. 
  ư UDP " (connectionless)" ̴. ̰  ޽
  ⺻  ٸ ͵ ̴ٴ  ǹѴ. ̰Ϳ  
   ̴;   ּҷ     
   ٸ ͵ ̸     ִ  
    .

  3.3.1.2.  TCP (SOCK_STREAM)

  UDP ٸ TCP ŷ  ְ, - ̴.  
    ޽  ʰ Ѻ⿡ ڿ   
  ؼ ۵  Ʈȿ   δ.  ̰
  UDP ޽¡  ٸ. ֳĸ   ܼϰ Ʈ Ʈ
  Ϻ̰   Ʈ Ʈ ϴ  ˾  
   ڵ忡 ̱ ̴; ޽ иϴ ŷ .
   ư Ʈ 鿡 ؼ      ̰
   ѵ 鸸  μ鿡 ؼ ÿ   ִ.
  ̰ ŷ  ֱ  TCP Ϲ UDP   ſ
  带 .

  ׷ TCP   ſ  ͵ Ѵ. ټ
  ޽  ؼ ޵Ǿٸ, ª Ǵ ¦   ũ
  ޽ ׷쿡 ؼ UDP     鼭,
  TCP װ͵  ȿ Ʈ ϵ Ŷ ũ⿡   µ
    ִٴ  ù°̴. ٸ ʽ   ŷ 
  ִ   ũ ؼ  Ʈ TCP  
  ȿ 䳻  ִٴ ̴.   ParaStation "Socket
  Library" ̽ Ʈ  ̷ Ǿ.  Ʈ
  ǥ TCP OS ȣ  Լ ̸ λ PSS ̴ ͸ ٸ
  - ȣ  TCP (semantics) Ѵ.

  3.3.2.  ġ (Device Drivers)

  Ʈ ͸   , Ǵ Ʈκ ͸
      ǥ н Ʈ ̽ ġ
   Ҹ н Ŀ Ϻΰ ȴ. UDP TCP  ͸
   ʰ ׵      带 
  ִ.    ͵ ټ TCP Ŀؼǵ ϳ 
  Ʈ ̽   ִٴ  ؾ Ѵ. ̿ ؼ
   Ʈ ̽  ġ    ܼ 
   Լ鸸 ϸ ȴ. ̷ ġ ̹ Լ 
  α׷ ؼ,  ġ Ȯϱ ؼ open() ϰ
  µ "" ؼ read() write()  ý ȣ
  ν, ȣ  ִ.  ׷  ׷ ۾  
  ý ȣ 庸      ִ. ̷
  ý ȣ  ũ ʰ ɸ.

    ġ ⸦ ۼϴ   ʴ... ġ
  ϵ ۵ϴ  Ȯϰ ˰ ִٸ ̴. ̰
  ۵ϴ  𸥴ٸ  . ġ ̹ ϴ
     ̰ Ǽ ϵ ¿  ִ. ׷
  ̰  ׷ ִ  ƴ϶,    ̴
  ī带 ̷ ׷ Ϲ ̴   
  --    ϱ ؼ, ġ ⸦ ۼϴ
       ִ.  ʱ  ǻ͵ ߴ Ͱ
   ϴ....   ڼ   ʹٸ Device Driver
  HOWTO .

  3.3.3.  - ̺귯(User-Level Libraries)

   OS ڽ ߴٸ ϵ ġ Ϳ  -
  ＼ Ȯ  ѹ    ̴. ֳĸ OS
  ֿ   ϳ ġ ＼ ϴ ̱ ̴. ׷ OS
  ȣ   ũ  尡 ɸ.  3 ũ 
  ȿ ⺻ Ʈ ۾   ִ TTL_PAPERS  Ŀ
  Ʈ ϵ  ׷ OS ȣ     ̴.
  ׷ 带 ϴ   ϵ ġ ͵ 
  ＼ϴ - ڵ - - ̺귯 -  
  ̴.  ׷ - ̺귯 ϵ  ＼ 
  ִ  ΰ,  ġ ＼ ѿ  OS 
  Ÿ ʴ  ΰ     ̴.

   ýۿ - ̺귯 ϵ ġ ͸
   ＼ϴ    :

  1.  α׷ ۿ ġ ͸ ϴ ޸ ּ
       μ  ޸  ϴ OS ȣ
     Ѵ.   ý۵鿡 mmap() ȣ( ``޸  ȣ''
      ó ޵) I/O ġ  ޸  ּҵ
     ǥϴ Ư  ϴ    ִ.  Ǵ ̷ 
     ϴ ġ ⸦ ۼϴ   .   ư 
     ġ  ʿ Ư ġ ͵  ִ ()
     ϴ ͸ ＼   ִ. ׷ OS ＼ 
       ִ.

  2. ε ּҵ鿡 ܼϰ εϰų ν OS ȣ  ġ
     ͵ ＼.   *((char *) 0x1234) = 5; ޸
     ġ 1234(16) Ʈ  5  ̴.

  ེԵ  386(׸ ȣȯ μ)    
   ַ ϴ  :

  1.  ִ μκ ioperm() OS ȣ ν ġ
     Ϳ ϴ Ȯ I/O Ʈ ּҵ鿡 ＼ϴ ۹̼
     ´.  Ǵ   ġ
     <http://garage.ecn.purdue.edu/~papers/giveioperm.html> Ͽ
      ִ  μ(, "Ÿ OS") ؼ ۹̼
       ִ.
  2. 386 Ʈ I/O ɾ ؼ OS ȣ  ġ ͵
     ＼.

  ټ I/O ġ   ȿ ׵ ͸  
  Ϲ̱    ι° ַ  ȣȴ. ̷  ù°
   ǵ Ͱ   ġϰ  ٸ ġ ͵
  ＼ ϵ ϴ ȣ   ̴.  386 Ʈ
  I/O ɵ C ڵ  ٴ  ̴ -   ణ
   ڵ带  ʿ䰡  ̴. Ʈ  Ʈ Է
   GCC-ε(C α׷  ) ζ  ڵ
  Լ  :

  ______________________________________________________________________
    extern inline unsigned char
    inb(unsigned short port)
    {
        unsigned char _v;
    __asm__ __volatile__ ("inb %w1,%b0"
                          :"=a" (_v)
                          :"d" (port), "0" (0));
        return _v;
    }
  ______________________________________________________________________

  ϰ Ʈ Ʈ   GCC-ε ڵ  :

  ______________________________________________________________________
  extern inline void
  outb(unsigned char value,
  unsigned short port)
  {
  __asm__ __volatile__ ("outb %b0,%w1"
                        :/* no outputs */
                        :"a" (value), "d" (port));
  }
  ______________________________________________________________________

  3.4.  PVM (  , Parallel Virtual Machine)

  PVM(  ) Ϲ   , Ӱ  
  ְ ̽ĵ  ִ ޽  ̺귯̴. ̰ и ޽
   Ŭ  ǻ  ǻ ǥ ڸ Ҵ.

  PVM -μ SMP  , ׸ - Ʈ(,
  SLIP, PLIP, ̴, ATM) ؼ ũ   Ŭ͸
  Ѵ.  PVM پ  ٸ ŸԵ μ, ,
  ׸  Ʈ   ׷ - ̱ Ŭ -
   Ŭͷν ͳ ؼ ũ  óϴ 
  ۵Ѵ. PVM  Ŭ͸ ؼ  ۾   ɵ
  Ѵ. ̵    , PVM  Ӱ 
  Ͽ(  <http://www.epm.ornl.gov/pvm/pvm_home.html> )
   α׷ , ø̼ ̺귯,    
  Ϳ, װ ׵ "̽  ޽- Ÿ ̺귯"
  Ͽ, ̸ Ǿ.  Ʈ  ׷ comp.parallel.pvm ִ.

  ׷ PVM ޽  ȣ Ϲ ̹  ü 
  ǥ  ۾鿡 ɰ 带 ߰Ѵ.  ư ޽
  ڵ鸵 ȣ ڽ Ư "鸮" α׷  ̷
  ʾҴ.

   `` ˰'' ó  Ͱ  (pi) 
   ؼ , C PVM ̺귯 ȣ   
  :

  ______________________________________________________________________
  #include <stdlib.h>
  #include <stdio.h>
  #include <pvm3.h>

  #define NPROC   4

  main(int argc, char **argv)
  {
    register double lsum, width;
    double sum;
    register int intervals, i;
    int mytid, iproc, msgtag = 4;
    int tids[NPROC];  /* array of task ids */

    /* enroll in pvm */
    mytid = pvm_mytid();

    /* Join a group and, if I am the first instance,
       iproc=0, spawn more copies of myself
    */
    iproc = pvm_joingroup("pi");

    if (iproc == 0) {
      tids[0] = pvm_mytid();
      pvm_spawn("pvm_pi", &argv[1], 0, NULL, NPROC-1, &tids[1]);
    }
    /* make sure all processes are here */
    pvm_barrier("pi", NPROC);

    /* get the number of intervals */
    intervals = atoi(argv[1]);
    width = 1.0 / intervals;

    lsum = 0.0;
    for (i = iproc; i<intervals; i+=NPROC) {
      register double x = (i + 0.5) * width;
      lsum += 4.0 / (1.0 + x * x);
    }

    /* sum across the local results & scale by width */
    sum = lsum * width;
    pvm_reduce(PvmSum, &sum, 1, PVM_DOUBLE, msgtag, "pi", 0);

    /* have only the console PE print the result */
    if (iproc == 0) {
      printf("Estimation of pi is %f\n", sum);
    }

    /* Check program finished, leave group, exit pvm */
    pvm_barrier("pi", NPROC);
    pvm_lvgroup("pi");
    pvm_exit();
    return(0);
  }
  ______________________________________________________________________

  3.5.  MPI (޽  ̽, Message Passing Interface)

  PVM ǻ ǥ ޽- ̺귯 ݸ鿡 MPI(޽ 
  ̽)  ο  ǥ̴. MPI ǥؿ  Ȩ
    <http://www.mcs.anl.gov:80/mpi/≯ ׷
  comp.paralle.mpi̴.

  ׷ MPI ϱ  ڴ    Ͼ PVM  MPI
   ￡ ؼ  ϰ  浿 .  鿡
  ؼ  ߾ Ϸ õ ̴:

       ȯ(Execution control environment).
        ܼϰ ؼ MPI   ȯ  Ǵ°
          ִ    ݸ PVM  
        ȯ ϳ ´.  ׷ PVM α׷  ϴ Ͱ
         ϵ   ϰ ̷ ݸ MPI 
        ̰   Ǵ°  ٸ  ִ.

     ̱ Ŭ (Support for heterogeneous clusters).
        PVM ũ̼ Ŭ-Ȱ 迡 ڶ󳵰 ׷ 
          ü ̱ ȥ Ѵ. ݸ鿡 MPI Ÿ
        MPP(Ŵ  μ)̰ų   ũ̼ǵ
         Ŭ ̶ Ѵ.

     ξ ũ ı(Kitchen sink syndrome).
        PVM MPI 2.0  ϴ   Ѵ. ο MPI
        2.0 ǥ ⺻ ޽     ɵ 
        ִ - RMA(Ʈ ޸ ＼, Remote Memory Access) 
         I/O  ͵. ̷ ͵ Ѱ?  ׵
        ׷... ׷ MPI 2.0    ο α׷
          Ͱ  Ȱ.

      ̽ (User interface design).
        MPI PVM  Ǿ и װκ . MPI 
        ܼϰ  ȿ  ڵ鸵 ޽ - 
         ޵ǵ ϴ  ߻ȭ Ѵ.

      ȿ(The force of law).
         꿡 ϸ MPI ϴ ͺ PVM ϵ 
        ͵    ִ; ׷ װ͵ MPI ϴ 
        . ׸ MPI θ Ǵ  ǥؿ ؼ
        ȴٴ  MPI ϴ    ,
        å ̴ٴ  ǹѴ.

   °? ۽  ý۵  ŬͿ  
  ִ, Ӱ   ְ  ߵ MPI  
   Ѵ(׸  װ͵  ϳ ⿡ Ѵ):

  o  LAM(ٰŸ  Ƽ ǻ, Local Area Multicomputer) MPI 1.1
     ǥ   ̴. ̰ MPI α׷  
     ý۾̳ UDP/TCP   ϴ  ý Ŭ͸
     ؼ Ǵ  Ѵ.  ý ܼ  
     ɵ    پ α׷ ߰  (aids)
      ִ.  ̰   <http://www.osc.edu/lam.html> 
     Ӱ   ִ.

  o  MPICH(MPI ī᷹, CHameleon) MPI 1.1 ǥ ̽ļ 
      ν ȵǾ. LAN  ̰  
     ý̳ UDP/TCP   ϴ  ý۵鿡 ļ
     MPI α׷ ǵ Ѵ. ׷ ȿ̰  Ÿ
     ٲ  ִ  ν ϰ MPI   
     ̴.  MPI  ϱ ؼ "ä ̽(channel
     interface)" ټ Լ ϰų     ؼ
      MPICH ADI(߻ ġ ̽, Abstract Device Interface)
     Ѵ. MPICH, ׸ ̰Ϳ  Ͱ ÿ   
     <http://www.mcs.anl.gov/mpi/mpich/> ִ.

  o  AFMPI( Լ MPI, Aggregate Function MPI) MPI 2.0 ǥ 
     κ ̴. ̰  ۼ ̴. AFAPI  
     -üð (collective)  Լ RMA ֵ
     ȵǾ ׷ MPI  ŸԵ, ڵ(communicators)
     Ѵ. ̰   ý̳ AFAPI- Ʈ
     ϵ ؼ  ŬͿ ļ MPI  C
     α׷ Ѵ.  ̰
     <http://garage.ecn.purdue.edu/~papers/> Ӱ   ִ.

  ̵ MPI      κ   ŸԵ
  ϴ   ܼϴ.

  ׷ MPI 2.0, ̵ ߿ ϳ ϴ α׷Ӱ MPI 
  ٸ ڵ Ÿϵ ν     ٸ 
   зӵ  Ų. ׷  ϳ  α׷
  ϴ ͺ MPI ϴ ⺻  ٸ  зӵ
      ϴ. Ʒ   
  α׷  HOWTO ؼ Ǵ Pi  ϴ,  ⺻
  ˰ Ѵ.

   μ װ κ  ϰ   ϴ
  μ 0 ϱ ؼ ⺻ MPI ޽- ȣ
  ϴ ù° MPI α׷:

  ______________________________________________________________________
  #include <stdlib.h>
  #include <stdio.h>
  #include <mpi.h>

  main(int argc, char **argv)
  {
    register double width;
    double sum, lsum;
    register int intervals, i;
    int nproc, iproc;
    MPI_Status status;

    if (MPI_Init(&argc, &argv) != MPI_SUCCESS) exit(1);
    MPI_Comm_size(MPI_COMM_WORLD, &nproc);
    MPI_Comm_rank(MPI_COMM_WORLD, &iproc);
    intervals = atoi(argv[1]);
    width = 1.0 / intervals;
    lsum = 0;
    for (i=iproc; i<intervals; i+=nproc) {
      register double x = (i + 0.5) * width;
      lsum += 4.0 / (1.0 + x * x);
    }
    lsum *= width;
    if (iproc != 0) {
      MPI_Send(&lbuf, 1, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD);
    } else {
      sum = lsum;
      for (i=1; i<nproc; ++i) {
        MPI_Recv(&lbuf, 1, MPI_DOUBLE, MPI_ANY_SOURCE,
                 MPI_ANY_TAG, MPI_COMM_WORLD, &status);
        sum += lsum;
      }
      printf("Estimation of pi is %f\n", sum);
    }
    MPI_Finalize();
    return(0);
  }
  ______________________________________________________________________

  ι° MPI  (collective) ( Ư ø̼
   ̰  ϴ):

  ______________________________________________________________________
  #include <stdlib.h>
  #include <stdio.h>
  #include <mpi.h>

  main(int argc, char **argv)
  {
    register double width;
    double sum, lsum;
    register int intervals, i;
    int nproc, iproc;

    if (MPI_Init(&argc, &argv) != MPI_SUCCESS) exit(1);
    MPI_Comm_size(MPI_COMM_WORLD, &nproc);
    MPI_Comm_rank(MPI_COMM_WORLD, &iproc);
    intervals = atoi(argv[1]);
    width = 1.0 / intervals;
    lsum = 0;
    for (i=iproc; i<intervals; i+=nproc) {
      register double x = (i + 0.5) * width;
      lsum += 4.0 / (1.0 + x * x);
    }
    lsum *= width;
    MPI_Reduce(&lsum, &sum, 1, MPI_DOUBLE,
               MPI_SUM, 0, MPI_COMM_WORLD);
    if (iproc == 0) {
      printf("Estimation of pi is %f\n", sum);
    }
    MPI_Finalize();
    return(0);
  }
  ______________________________________________________________________

  ° MPI   μ ڽ  lsum μ 0
  sum ϱ ؼ MPI 2.0 RMA ī Ѵ.

  ______________________________________________________________________
  #include <stdlib.h>
  #include <stdio.h>
  #include <mpi.h>

  main(int argc, char **argv)
  {
    register double width;
    double sum = 0, lsum;
    register int intervals, i;
    int nproc, iproc;
    MPI_Win sum_win;

    if (MPI_Init(&argc, &argv) != MPI_SUCCESS) exit(1);
    MPI_Comm_size(MPI_COMM_WORLD, &nproc);
    MPI_Comm_rank(MPI_COMM_WORLD, &iproc);
    MPI_Win_create(&sum, sizeof(sum), sizeof(sum),
                   0, MPI_COMM_WORLD, &sum_win);
    MPI_Win_fence(0, sum_win);
    intervals = atoi(argv[1]);
    width = 1.0 / intervals;
    lsum = 0;
    for (i=iproc; i<intervals; i+=nproc) {
      register double x = (i + 0.5) * width;
      lsum += 4.0 / (1.0 + x * x);
    }
    lsum *= width;
    MPI_Accumulate(&lsum, 1, MPI_DOUBLE, 0, 0,
                   1, MPI_DOUBLE, MPI_SUM, sum_win);
    MPI_Win_fence(0, sum_win);
    if (iproc == 0) {
      printf("Estimation of pi is %f\n", sum);
    }
    MPI_Finalize();
    return(0);
  }
  ______________________________________________________________________

  MPI 2.0 RMA ī,  ٸ ޸ ġ鿡 ϴ پ
  μ ϴ       
  غѴٴ  ָϴ   ̴. ̰, ̽ ּҸ
  ǹϴ "â(window)" ϴ Ͱ  ʿ ＼(out-of-bound
  access)  ȣ ׸  ּ ũ (even address
  scaling) ؼ ϴ. RMA ó  MPI_Win_fence 
    ִٴ ǿ ؼ  ޴´.  ؼ RMA
  ī л  ޸𸮿 ޽   ̻ (strange
  cross)̶   ְ   ȿ 
  ϴ   ̴̽.

  3.6.  AFAPI ( Լ API, Aggregate Function API)

  PVM, MPI  ٸ AFAPI( Լ ø̼ α׷ ̽;
  Aggregate Function Application Program Interface) ϴ Ʈ
  ϵ Ʈ   ð ߻ ̽ ϴ
  õν ϻ  ʾҴ. ׷ ٴ AFAPI PAPERS (
    ȭ  ۵ ƴ; Purdue's Adapter for Parallel
  Execution and Rapid Synchronization;
  <http://garage.ecn.purdue.edu/~papers/> )  ϵ-
  ο-  ̺귯ν Ͽ.

  PAPERS ``Ʈ ϵ'' ణ ǵǾ; ̰ üð 
   ũ ʵ    Ŀ  Լ Ʈ̴.
  ׷ ϴ ǻ͵麸 Ϸ    Ÿ 
   ִ ǻ͸  õν ̰ ߵǾٴ 
  PAPERS ؼ ߿ ̴. ̰  κ 
  Ŭ µ,    ʴ  
  ø̼ǵ鿡  ǥ Ʈ Ϸ ϴ   
  PVM/MPI  ٸ.   Ǿ PAPERS ý Ʈ
  ȴٴ  ܼϰ   -ȿ 
  ŸԵ غ ̴ٴ   ̴.

   Ÿ δٸ Ÿ 鿡   ο-
  Ʈ ̽ ʿ䰡 AFAPI PAPERS ̺귯 ǥȭǵ
   ̴. ׷ AFAPI ؼ Ǵ  Ÿ  
  ܼϰ,  ó Ϸ ؼ ϵ ڵ峪 SIMD
  Űĵ ؼ ۼ ڵ   ȣۿ뿡  
  ϴ.   ܼ PAPERS ϵ    Ӹ
  ƴϰ SMP  ٸ ϵ ý۵鿡   ȿ
  AFAPI  ϰ Ѵ.

  AFAPI  TTL_PAPERS, CAPERS, Ǵ WAPERS Ͽ ĿƮ
   Ŭ͵鿡  ۵Ѵ. ̰  (OS ȣ̳ 
  -ŷ ɾ ̵,  `` ޸ α׷ֿ  Ұ''
  ) SHMAPERS Ҹ ý V  ޸ ̺귯(System V
  Shared Memory library)  SMP ý۵  ۵Ѵ.
   Ʈ(, ̴)  UDP εĳƮ  
  Ŭ  ϴ   ߿ ִ.  õ 
  <http://garage.ecn.purdue.edu/~papers/>    ̴.
  AFAPI   C C++κ ȣǵ Ǿ.

     `` ˰''   ִ Pi
  AFAPI̴.

  ______________________________________________________________________
  #include <stdlib.h>
  #include <stdio.h>
  #include "afapi.h"

  main(int argc, char **argv)
  {
    register double width, sum;
    register int intervals, i;

    if (p_init()) exit(1);

    intervals = atoi(argv[1]);
    width = 1.0 / intervals;

    sum = 0;
    for (i=IPROC; i<intervals; i+=NPROC) {
      register double x = (i + 0.5) * width;
      sum += 4.0 / (1.0 + x * x);
    }

    sum = p_reduceAdd64f(sum) * width;

    if (IPROC == CPROC) {
      printf("Estimation of pi is %f\n", sum);
    }

    p_exit();
    return(0);
  }
  ______________________________________________________________________

  3.7.  ٸ Ŭ  ̺귯

  PVM, MPI, ׸ AFAPI ٿ  ̺귯  Ŭ͸
  ؼ  ǻϴ   ɵ Ѵ. ̷ ý۵
        ޾Ҵ. ֳĸ PVM, MPI, ׸
  AFAPI ٸ   ŬͿ ̷ ý۵  
  ȸ  Ǵ   ̴.̷ ͵̳ ٸ ̺귯
    ̶ Ư ϴٰ Ǹ  ã  
  ̸ pplinux@ecn.purdue.edu ֱ ٶ. ׷  
  ̺귯 Ȯ ǿ ϴ  ϰڴ.

  3.7.1.  Condor (μ  , process migration support)

  Condor ũ̼ǵ Ŀٶ ̱ Ŭ͸   ִ л
  ڿ  ý̴. ̰   Ŭ Ȱ ʴ
   -ǰ   ϵ鿡 ؼ ϰ ϴ
   䱸 ؼ̴. Condor ð     
  ý  ʰ/ų н ī  ,
   迡 Ŀٶ   ȯ Ѵ.  μ
  ϴ Condor ۾ ̺Ʈ ϷḦ Ȯϴ  ʿϱ 
  ڵ checkpointǰ ũ̼ǵ ̿ ֵȴ.

  Condor  <http://www.cs.wisc.edu/condor/>  ã  ִ.  
  õ  Ѵ;  ڼ 
  <http://www.cs.wisc.edu/condor/linux/linux.html> ã   ִ.
  ڼ  condoradmin@cs.wisc.edu .

  3.7.2.  DFN-RPC (German Research Network - Remote Procedure Call)

  DFN-RPC(  Ʈ RPC)  ũ̼ǰ   Ŭ
   - ø̼ α׷ лϰ
  ȭ(parallelize)ϱ ؼ ߵǾ.  ̽ Ʈ
  ۼ ø̼ǿ ȭǾ  DFN-RPC  C ȯ濡
    ִ. ̰  õǾ. ڼ 
  <ftp://ftp.uni-stuttgart.de/pub/rus/dfn_rpc/README_dfnrpc.html>
  ִ.

  3.7.3.  DQS (л ť ý, Distributed Queueing System)

  Ȯϰ ؼ ̺귯 ƴ DQS 3.0 (л ť ý)
   ߵǰ ׽Ʈ ۾ ť ý̴. ̰ ̱
  Ŭ͸ ϳ Ƽν ϰ   ֵ Ǿ.
  ̰  <http://www.scri.fsu.edu/~pasko/dqs.html>   ִ.

  CODINE 4.1.1(л Ʈ ȯ濡 , COmputing in DIstributed
  Network Environments) Ҹ    Ѵ. ̰
    <http://www.genias.de/genias_welcome.html> ã  ִ.

  3.8.  Ϲ Ŭ ڷ

  Ŭ͵    ǰ   ֱ 
  ̷ο   ׷  ִ.  Ϲ ɰŸ  
  ִ پ Ŭ- Ʈ鿡  ۷̴. ̰
    Ͱ ׷  Ϲ Ŭ ۷ 
  ִ.  Ʈ ĺ   ִ.

  3.8.1.  Beowulf

  Beowulf Ʈ,  <http://cesdis1.gsfc.nasa.gov/beowulf/>, ǰ
  Ǿ-Ŭ ϵ, -뿪 Ŭ-ͳ Ʈ, ׸ 
   ü   ԰ǰ ũ̼ Ŭ͸ ϱ 
  Ʈ ۿ ϰ ִ.

  Thomas Sterling Beowulf  ̾ ؼ Ϲ 
  ǻ   Ŭ͸ ̰  ̾.
  ,  ׷  ׵ Ŭ͸ "Beowulf class"
  ý۵̶ θ -   ŬͰ   Beowulf
  迡   ʴ ̴.

  Beowulf Ʈ ϴ  ϴ Don Becker  ؼ
  Ϲ Ǵ  Ʈ ̹ . ̵  
  ͵ BSD ǵ Ǿ Դ. Don   ġ
     뿪 ȹϵ ټ  Ŀؼǵ ؼ
  ε-й踦 ϴ   Ʈ ̹鿡 ؼ å
   ִ. ̷ ε-й(load-sharing) Ÿ Beowulf ŬͰ
   ٸ Ͱ ȴ ̾.

  3.8.2.  Linux/AP+

  Linux/AP+ Ʈ,  <http://cap.anu.edu.au/cap/projects/linux/>
  Ȯϰ  Ŭ͸   ƴϰ  Fujitsu
  AP1000+ ϴ Ͱ   ó  ϴ Ϳ 
   ̴. AP1000+ ȯ , 25 MB/s 뿪, ׸ 10
  ũ  ü ð ...   Ŀ Ʈ ϴ 
  SPARC-  ̴. ܼϰ ؼ ̰ SPARC 
  Ŭ  ϴ.

  3.8.3.  Locust

  ĿƮ(Locust) Ʈ,
  <http://www.ecsl.cs.sunysb.edu/~manish/locust/> ޽-üð
   ؼ ׸ ǽð Ʈ Ʈ ̱ ؼ
  -ð  ϴ л   ޸ ý ϰ
  ִ. Pupa ĿƮ   ý̰ FreeBSD 486
  Ǿ ϱ ؼ ̴ Ͽ Ǿ. ΰ?

  3.8.4.  Midway DSM (Distributed Shared Memory)

  Midway,
  <http://www.cs.cmu.edu/afs/cs.cmu.edu/project/midway/WWW/HomePage.html>
  TreadMarks ٸ ʴ, Ʈ- DSM(л  ޸)
  ý̴. ̰   -Ʈ ī麸ٴ
  -ð (aids) ϰ ¥  ҽ̴. 
  ҽ ̰  Ŭ͵  ۵ ʴ´ٴ ̴.

  3.8.5.  Mosix

  MOSIZ BSDI BSD/OS ؼ Ǿ Ʈ  ׷ 
   ε 뷱̰ (preemptive) μ ָ ϵ 
  ̴.  ̰  ó ؼӸ ƴϰ  (scalable)
  SMP   Ŭ͸ Ϲ ϴ   ̴.
    ?   ڼ 
  <http://www.cs.huji.ac.il/mosix/> .
  3.8.6.  NOW (Network Of Workstations)

  Ŭ NOW (Ʈ  ũ̼ǵ, Network Of Workstations)
  Ʈ,  <http://now.cs.berkeley.edu/> Ʈ 
  ũ̼ǵ ؼ  ǻ ϵ  з ؿԴ.
    ۾,  "  ȿ  100 μ
  ý ϴ " ؼ, ̷ ִ. ƻԻ, ̵
    ʴ´.

  3.8.7.   ϴ  ó(Parallel Processing Using Linux)

     ó WWW Ʈ,
  <http://yara.ecn.purdue.edu/~pplinux/>,   HOWTO Ȩ ̸
  Ϸ¥ Ʃ͸ 븰 ¶ ̵   õ 
  ִ ̴. PAPERS Ʈ  ۾ ϰ ۵ б 
   ǻ  б Ϲ  ó  ؿԴ; 
  Ʈ ٸ   Ǿ  ó ϴ  
  ؼ Ǿ.

  ۵ ù°  Ǿ ŬͰ 1994 2  ̷ 
  (video wall) ,   Ǿ Ŭ͵ ۵࿡
  ǾԴ.  ̷ Ŭ͵ 386, 486, ׸ Pentium
  ý۵(Pentium Pro ý )  ٷ  Pentium
  II ý۵  ټ Ŀٶ Ŭ͵   ֵ ۵
  б θ ߴ. ̷ Ŭ͵  PAPERS Ʈ 
    κ ͵   Ʈ .

  3.8.8.  Ƽ  Ŭ ũ(Pentium Pro Cluster Workshop)

  ̿(Iowa)  (Des Moines) 1997 4 10-11 AMES 
  Ƽ  Ŭ ũ .  ũ WWW Ʈ,
  <http://www.scl.ameslab.gov/workshops/PPCworkshop.html>,  
  ڵκ  ǳ Ǿ Ŭ   ִ.

  3.8.9.  TreadMarks DSM (Distributed Shared Memory)

  DSM (л  ޸, Distributed Shared Memory) ̰Ϳ ؼ
  ޽- ý SMPó ൿϴ Ͱ   ִ, ̴.
   ׷ ý۵ ϰ ̵  κ ޽ 
  Ʈ(˹)ϱ ؼ OS - ī Ѵ.
  TreadMarks, <http://www.cs.rice.edu/~willy/TreadMarks/overview.html>
  ̷ ý۵    ȿ ̸  Ŭ 
  ȴ.   ҽ "TreadMarks б̳ 񿵸 鿡
   ǰ ִٴ ̴".  Ʈ    
   Ѵٸ treadmarks@ece.rice.edu غ ٶ.

  3.8.10.  U-Net (User-level NETwork interface architecture)

  ڳ б U-Net (User-level NETwork interface architecture)
  Ʈ,  <http://www2.cs.cornell.edu/U-Net/Default.html> Ʈ
  ̽ ȭؼ(virtualize) ø̼ǵ ޽
  ü  ϰų   ֵ ϴ, ǰ Ʈ
  ϵ   ü ð  뿪 ϴ õ ϰ
  ִ.  U-Net Fast ̴ݿ  DECchip DC21140  ϰų Fore
  Systems PCA-200(PCA-200E ƴ) ATM ī ϴ  Ǿ
   ۵Ѵ.

  3.8.11.  WWT (Wisconsin Wind Tunnel)

  ܽſ   Ŭ- ۾ ̷ ִ. WWT
  (Wisconsin Wind Tunnel) Ʈ,  <http://www.cs.wisc.edu/~wwt/>
  Ϸ  з ϵ  "ǥ" ̽ ϴ
     ϵ ϰ ִ. Wisconsin COW (Cluster Of
  Workstations), Cooperative Shared Memory and Tempest, Paradyn Parallel
  Performance Tools  ִ. ϰԵ   ϵ 
  .

  4.  ϳ  SIMD(: MMX )

     SIMD(SWAR) ο ̵ ƴϴ.  k-Ʈ
  ,  н, ׸ Լ    谡   Ϲ
    n k/n-Ʈ,  ʵ   SIMD 
     ִٴ   ˷ Դ. ׷ SWAR
  鿡 ؼ Ǵ 2迡 8 ӵ  νƮ
  ǻÿ  ɻ簡    Ƽ̵  
  ߼̴. ũμ 1997  κ SWAR 
  ϵ   ִ:

  o  AMD K6 MMX (MultiMedia eXtensions)

  o  Cyrix M2 MMX (MultiMedia eXtensions)

  o  Digital Alpha MAX (MultimediA eXtensions)

  o  Hewlett-Packard PA-RISC MAX (Multimedia Acceleration eXtensions)

  o  Intel Pentium II & Pentium with MMX (MultiMedia eXtensions)

  o  Microunity Mediaprocessor SIGD (Single Instruction on Groups of
     Data)

  o  MIPS Digital Media eXtension (MDMX, pronounced Mad Max)

  o  Sun SPARC V9 VIS (Visual Instruction Set)

  ο ũμ鿡 ؼ Ǵ ϵ  
  Ե ְ  ʵ ũ鿡 ؼ  鸸 ϴ Ͱ
    ִ. ׷  SWAR  ȿ̾ ϴ ϵ
   ʿٴ  ϴ  ߿ϴ.   Ʈ
   ϳ ͸  ϴ Ϳ ؼ  
  ʴ´.

  4.1.  SWAR:   ̰(What Is It Good For)?

     μ   SWAR  (parallelism)
  Բ ϴ  ϴٰ ϴ   SWAR-  µ鵵
   Ϲ-  (parallelism)  ʴ´ٴ 
   ̴. ,   Pentium "Pentium with MMX
  technology"   ɷ ̰ 쿬 MMX ÿ Ÿ  ū
  L1 ĳ  ͵ ̶ Ѵ. ׷ٸ SWAR( MMX)
     ΰ?

  o  鸸 ִ ,     . 32-Ʈ  64-Ʈ
     MMX Ϳ ¾  8 1-Ʈ ڵ̳
     1-Ʈ ü ũ(ü   8 ĭ ִ.
     ׷ 64; )  ü̴ ¾ .
     Note:    ִ      MMX
     ε-Ҽ   ̴. Cyrix MMFP   
      ̵  <ftp://ftp.cyrix.com/developr/mpf97rm.pdf>
     سҴ.   MMFP  32-Ʈ ε-Ҽ ڵ
     64-Ʈ MMX  ϳ ŷǴ   ̴; ̰
     ΰ MMFP ε  Ŭ ϳ װ -е
     FLOP  ̴.

  o  SIMD, Ǵ -Ÿ  ó(parallelism).   
     ʵ鿡 ÿ ȴ. õ ʵ鿡 ȿ ִ (,
     SIMD enable ŷ)  ׵ ϰ  ϽŲ.

  o  ȭ(localized)ǰ ( ŷ), ޸  ϵ.
     Ϲ SWAR, ׸ Ư MMX,  - ٿ ̴;
      x[y](⼭ y ε 迭̴)   û δ.

  ̵ ɰ  ̷ Ÿ  ó  
  ˰鿡 Ÿ ̴ - Ƽ̵ ø̼ǵӸ
  ƴϰ.  ˰  ŸԿ ؼ SWAR SMP Ŭ 
  ó ξ ȿ̴... ׸ ̰ װ ϴ   ߰
  뵵  ʴ´.

  4.2.  SWAR α׷ֿ  Ұ(Introduction To SWAR Programming)

  SWAR ⺻ (),   ȿ SIMD,  -
  ͵   n k/n-Ʈ ʵ ġ鿡  SIMD
    ν  ӵ ̴    ִٴ
  ̴. ׷ SWAR  ϴ  ټ    
   SWAR   Ǵ Ϸ  麸, ׵
  ʵ  ϴ ߰ ɾ 䱸ϱ ,  
  ̴.

    ϱ ؼ  ܼȭ,  32-Ʈ  ȿ
  4 8-Ʈ ʵ ϴ, SWAR ī غ . 
  ͵ ġ   ǥ  ְڴ:

  ______________________________________________________________________
           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 |
        +-------+-------+-------+-------+
  ______________________________________________________________________

  ̰ ܼϰ  Ͱ ⺻ 4  8-Ʈ 
  ġ ͷ   ִٴ  ǹѴ. Ǵ ׸ 0 (PE0)
  óϴ Reg0 Reg1 ִ ġν A E, ׸ PE1
  ͵鿡 ִ ġν B F, ׸  ̷  
   ִ.

     κ ̷  ͵鿡  SIMD   
  ⺻ Ŭ ̵ Լ    ִ  ؼ
  뷫  ̴.

  4.2.1.   (Polymorphic Operations)

   SWAR ,    ̷ 8-Ʈ ʵ鿡 ķ 
   ǵ ǵǾٴ ǿ Ű澲 ʰ Ϲ 32-Ʈ
    ؼ    ִ. 츮  ̷ SWAR
   (polymorphic)̶ θ. ֳĸ   ʵ
  ŸԵ(ũ) ؼ   ʱ ̴.

   ʵ尡  ƴѰ ׽Ʈϴ  ̴. ׸ 
  Ʈ  鵵 ׷.   Ϲ Ʈ and 
  (C & ) Ʈ ϰ  ʵ ũⰡ 󸶳
  Ǵ Ű澲 ʴ´.  ͵ ܼ Ʈ and 
       :

  ______________________________________________________________________
            PE3       PE2       PE1       PE0
        +---------+---------+---------+---------+
  Reg2  | D&H 7:0 | C&G 7:0 | B&F 7:0 | A&E 7:0 |
        +---------+---------+---------+---------+
  ______________________________________________________________________

  Ʈ and  ׻  Ʈ k ġ鿡 ؼ  ޴
   Ʈ k ġ    ʵ ũ  
  ɿ ؼ ޴´.

  4.2.2.  ҵ (Partitioned Operations)

  ϰԵ  ߿ SWAR   ƴϴ. ϱ, ,
  ϱ,    Ģ  ʵ鰣
  ڸø(carry)/(borrow) ȣۿ  ۿ . 츮 ̷
  SWAR  ҵ(partitioned) ̶ θ. ֳĸ  
  ݵ  ȿ ؾ ϰ ʵ  ȣۿ
  ƾ ϱ ̴. ׷ ̷ ȿ     ִ 
   ٸ  Ѵ.

  4.2.2.1.  ҵ ɾ(Partitioned Instructions)

  ҵ  ϴ   ٹ ʵ  carry/borrow
   ڸ "ҵ  ɾ"  ϵ  ϴ
  ̴. ̷  ְ   μ  
  ؾ ϰ Ϲ ʵ ũ⿡  ѵ ִ(, 8-Ʈ
  ʵ    12-Ʈ ʵ ׷  ).

  AMD/Cyrix/Intel MMX, Digital MAX, HP MAX, ׸ Sun VIS  
  ɵ ѵ   ͵̴. ϰԵ ̷  ٸ
    Ȯ ߿ ٸ    ׵鰣
  ˰  õ   .    
  ҵ  ø غ:

  ______________________________________________________________________
    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 |
  +---------------------+---------------------+---------+--------+---------+
  ______________________________________________________________________

   ̺ ڵ   Ǵ ʵ ũ Ʈ 
  Ÿ ̴.   ̺   Ǹ ͵  
  ɵ  ̱   ̰ ִٴ  и
  ̴.     - (High-Level Languages;
  HLLs)  α׷ 𵨷ν    ƴϴٶ Ͱ
   Ϲ  ڴٴ ̴.

  4.2.2.2.   ڵ带  ҵ  (Unpartitioned Opera
  tions            With Correction Code)

   ɾ ؼ   ϴ  и ȿ
    ʿ   ϵ ؼ   
   ΰ? ش ʵ尣 carry/borrow   Ϲ ɾ
  ؼ ϰ  ʴ ʵ ȣۿ ϴ ̴.

  ̰  Ʈ ϴ ̰ ۾ 带
  Ű  Ϲ ʵ ҷ  ۵Ѵ. ̷ ٹ 
  ɿ  ϵ   ä    ְų ƴϸ
  ϵ    ʴ Ÿ 鿡 ؼ  
  ϴ    ִٴ    Ϲ̴.  C
    ڵ  ǥν ̷ ٹ SWAR
  α׷     .

  ׷ٸ    ٷ :    ڵ
  SWAR   ù̼ϴ  Ȯ 󸶳 ȿΰ?
  ۽ ̰ Ȯ $64k ̴...    ϴ
  ͸ŭ   ƴϴ.

  Ϲ 32-Ʈ  ؼ װ   8-Ʈ 
  ͵ ΰ ϴ , x+y غ.

  Ϲ 32-Ʈ   Ȯ   8-Ʈ ʵ 
  ϳ  ʵ ĳ(ڸ ø) ٸ Ȯ 
   Ѵ. ׷ 츮  ܼϰ ׷ ĳ Ͼ
  ʵ ϴ ̴. ΰ k-Ʈ ʵ ϴ  ƾ k+1
  Ʈ     츮  ʵ msb(most significant
  bit) ܼ "ŷ (masking out)"ν  ĳ ߻
  ʵ   ִ. ̰ 0x7f7f7f7f  ǿڸ Ʈ
  and(bitwise anding)ϰ  Ϲ 32-Ʈ ϱ⸦ ν
  ̷.

  ______________________________________________________________________
  t = ((x & 0x7f7f7f7f) + (y & 0x7f7f7f7f));
  ______________________________________________________________________

    Ȯϴ...  ʵ msb ϰ ̴.  ʵ忡
  ؼ  غ. ̰, x y msb t ؼ 
  7-Ʈ ĳ     1-Ʈ ҵ  ϴ  
  ʴ´.  ེԵ 1-Ʈ   Ϲ exclusive or 
  Ǿ ִ. ׷    :

  ______________________________________________________________________
  (t ^ ((x ^ y) & 0x80808080))
  ______________________________________________________________________

  , ۽, ̰ ׷ ܼ  ƴ  ִ. ᱹ 4 
  ؼ 6  Ѵ. ׷  Ƚ ʵ尡 ΰ
   ٸ ʴٴ  ָ. ׷    ʵ 
  츮 ӵ    ִ.  ʵ  (
  ) εǰ Ǿ , 츮  ε ܼϰ
  ӵ   ,  뼺   ְ,  ڵ
  ٸ Ӽ  (κ     ֱ ).

  4.2.2.3.  ʵ ġ (Controlling Field Values)

  κ    ٸ ΰ ٹ   ͵鿡  
  Ȱ ִȭϷ ϴ ݸ鿡,  ʵ  ؼ -ʵ
  ĳ/ ̺Ʈ  Ͼ ʵ ϴ    
  鿡 ȿ̴.   츮   ʵ  
  ʵ ÷ο쵵 Ͼ ʴ´ٴ  ȴٸ κ ϱ 
  Ϲ ϱ  ؼ   ִ;  ̷ 
  ־ Ϲ ϱ  (: ʵ ũ⿡ ̴)
  ó ̰  ڵ   ʵ ũ鿡  ϴ.
  ׷  ʵ  ĳ/ ̺Ʈ ߻Ű ʵ 
   ִ°  ȴ.

  ̷ Ư ϴ    ʵ     ִ
  κȭ ɵ ϴ ̴. Digital MAX  minimum maximum
  ɵ -ʵ ĳ/ ϱ ؼ ʵ 
  Ŭ(: ڸ)ϴ ϵ ̴.

  ׷ 츮 ʵ   ȿ    κȭ
  ɵ  Ѵٰ ... ΰ ĳ/ ̺Ʈ 
  ʵ ̿  ʴ´ٰ ϵ   ִ  
  ִ°?  ش Ģ Ư м ִ.  k-Ʈ ڵ
  ϴ  ƾ k+1 Ʈ  ڸ Ѵ; ׷ k+1 Ʈ
  Ϲ ɵ Կ ұϰ ׷  ϰ   ִ.

  ׷ 츮  ȿ 8-Ʈ ʵ  1-Ʈ
  "ĳ/ (spacers)"  7-Ʈ ʵ̶ :

  ______________________________________________________________________
                PE3          PE2          PE1          PE0
        +----+-------+----+-------+----+-------+----+-------+
  Reg0  | D' | D 6:0 | C' | C 6:0 | B' | B 6:0 | A' | A 6:0 |
        +----+-------+----+-------+----+-------+----+-------+
  ______________________________________________________________________

  7-Ʈ  ʹ   ȴ.  κ  ϱ
    ĳ  Ʈ(A', B', C', ׸ D') 0̶ 
  ´ٰ . ܼϰ Ϲ   ν 
  ʵ Ȯ 7-Ʈ  ´; ׷   Ʈ 
   1   ִ. 츮 ̰    Ʈ鿡 
  ũ-Ÿ ѹ  ν   ִ. 츮 7-Ʈ 
   , x+y ׷  :

  ______________________________________________________________________
  ((x + y) & 0x7f7f7f7f)
  ______________________________________________________________________

  ̰ װ   ɾ  ̴. ׷ ̰  ӵ
   и  ̴.

    (sharp reader)  Ʈ 0 ϴ  
  꿡 ۵ ʴ´ٴ  ġë ̴. ׷   
   ܼϴ. x-y ϱ ؼ 츮 x ִ  Ʈ
   1̰  y ִ  Ʈ  0̶ ʱ  Ȯϰ
  Ѵ.   쿡 츮     ̴:

  ______________________________________________________________________
  (((x | 0x80808080) - y) & 0x7f7f7f7f)
  ______________________________________________________________________

  ׷ ߰ Ʈ or  , x  ϴ  &
  0x7f7f7f7f ſ | 0x80808080  ν Ѵٴ 
  Ȯϰ ν, ȭ  ִ.

    SWAR κȭ 鿡 ؼ Ǿ  ΰ? 
   ܼϰԵ "  ӵ()  ̸ ̵ ȴ"
  ̴.  ̷ӰԵ ϱ  ̻   
  ϴ  α׷ ()  ٸ ʵ ũ鿡 ؼ
   ٸ  ִ.

  4.2.3.  Ű Ÿ ȯ (Communication & Type Conversion
  Operations)

  , ̹ ȼ鿡    ؼ,    
   i°  ǿ ͵ i° ġ Ÿ 鸸
  Լ̶ Ӽ  , ̰ Ϲ ׷ 찡 ƴϴ.
    ε巴 ϱ(smoothing)  ȼ  
  ȼ ǿڵ 䱸ϰ FFT  ȯ鵵   (
  ȭ)  ϵ 䱸Ѵ.

  SWAR , κȭ  Ʈ  , 1- 
   ̿  ȿ ϴ    ƴϴ. 
  , PEiκ PE(i+1)  ̵ϱ ؼ ܼ Ʈ
  ε ϴ. ʵ 8-Ʈ ̸ ٸ  
   ̴:

  ______________________________________________________________________
  (x << 8)
  ______________________________________________________________________

  ׷ ̰ ׻ ׷ ܼ ʴ.   PEiκ
  PE(i-1)  ̵Ϸ, ܼ Ʈ ε ϴ. ׷ C
    Ʈ ȣ Ʈ ϴ ϴ  ʰ
    ȣ   Ʈ Ѵ. ׷ Ϲ
   츮 ݵ ,  (replicated) ȣ
  Ʈ 0  Ѵ:

  ______________________________________________________________________
  ((x >> 8) & 0x00ffffff)
  ______________________________________________________________________

  "wrap-around Ŀؼǵ" ϴ ͵  κȭ  Ʈ
  ؼ  ȿ̴.   PEiκ  PE(i+1)
  wraparound ̿ؼ ű:

  ______________________________________________________________________
  ((x << 8) | ((x >> 24) & 0x000000ff))
  ______________________________________________________________________

      Ϲ   ݵ Ǿ Ѵ
  쿡 ߻Ѵ.  HP MAX ɾ ո   ʵ
   ġ Ѵ. ̰ Permute Ҹ.  Permute 
   ̸ ߸ ; ̰ ʵ  permutation (--
  : ̶  п   ü ڸ
  ̵ Ѵ--)  ϴ  ƴ϶ ݺ(repetition) Ѵ.
   ؼ ̰  x[y]  Ѵ.

  ϰԵ x[y] ׷ ɾ ϱⰡ  ƴ. ڵ 
  Ϲ 鼭 ȿ̴;  ̰  ڵ̴.
  ̰  Ǹ ̴. MasPar MP1/MP2 Thinking Machines
  CM1/CM2/CM200 SIMD ǻͿ x[y]    ӵ
  ̷   Ҵ ֿ   ϳ̾. ׷ x[y]
  ׻   ̿ źٵ,  ׷ ǻ͵鿡, 
     ˰ x[y] 鿡  並 ּȭϱ
  ؼ ȵǾ Ծ. ϰ ؼ ϵ  ̰
  x[y] չ  ó Ǵ    ƴѰó SWAR
  ˰ ϴ    ̴.

  4.2.4.  ȯ (Recurrence Operations) (, ĵ )

  ȯ̶ Ǵ 鰣 ܸ  谡 ִ  Ѵ.
  ׷ ̷ ȯ   Ѵٸ  ȭ 
  ˰ Ͽ   ڵϴ    ִ.

  ȭ  ȯ(recurrence) κ Ϲ Ÿ Ƹ
   (associative reduction) ˷ Ŭ ̴. 
       ϱ ؼ   
   C ڵ带 ۼϴ  Ϲ̴:

  ______________________________________________________________________
  t = 0;
  for (i=0; i<MAX; ++i) t += x[i];
  ______________________________________________________________________

  ׷, ̷   ټ  ߿ ʴ. ε Ҽ
  (saturation)    ٲ ٸ    
  Ϲ wrap-around      
    ̴. ׷ 츮 ̷ , ù°   ֵ
  ϰ, ״ ̷ κյ ϰ ̷   
    ϴ, -ȭ   ۼ  ִ.
  װ 8-Ʈ  Ϳ ؼ   ܰ ʿϴ; ù°
  ܰ ΰ 8-Ʈ  ϰ, ״ ΰ 16-Ʈ 
  ʵ Ѵ( 9-Ʈ   ִ):

  ______________________________________________________________________
  t = ((x & 0x00ff00ff) + ((x >> 8) & 0x00ff00ff));
  ______________________________________________________________________

  ι°  ̷ ΰ 9-Ʈ  16-Ʈ ʵȿ, 
  10-Ʈ   , Ѵ:

  ______________________________________________________________________
  ((t + (t >> 16)) & 0x000003ff)
  ______________________________________________________________________

  , ι°  ΰ 16-Ʈ ʵ  Ѵ... ׷
  Ӹ 16-Ʈ  ǹ̰ . ̰ ٷ    10-Ʈ
    ؼ ŷǴ°  ̴.

  " ξ(parallel prefix)"  ˷ ĵ ټ ȿ
  ϱⰡ  ƴ. ̰ ֳĸ, (reduction) ٸ, ĵ
  κ(partitioned)   ̴. ̷  ĵ 
  , κ   ؼ   ִ.

  4.3.   MMX SWAR

    IA32 μ 츮 ֿ ɻ̴. AMD, Cyrix,
  ׸ Intel   MMX ɾ Ѵٰ ϴ 
  ´̴.  ׷ MMX   ٸ;   K6 MMX
    ϳ  - (̿ ؼ)Pentium with MMX
  ΰ . Intel  ̷ û MMX  ϰ ִٴ
    崺̴.  ;-)

  SWAR Ͽ MMX ϴ      ٹ
  ִ:

  1. MMX ̺귯 ƾ ϴ . Ư Intel  "
     ̺귯(performance libraries)",
     <http://developer.intel.com/drg/tools/ad.htm> ߴ. ̰ Ϲ
     Ƽ̵ ۾鿡 ؼ -ȭ پ ƾ
     Ѵ.     -Ƽ̵ ˰ κ
     ǻ- ǵ Ϻΰ ̷ ̺귯 ƾ ϳ Ǵ
     ̻ ؼ ɼ ֵ ۾  ִ. ̷
     ̺귯   ؼ Ұ   
     ִ.

  2. MMX ɾ  ϴ . ̰ ټ ΰ 鿡 ؼ
     ϴ. ù°  MMX μ 밡  
     ־ ü  ݵ Ǿ Ҽ ִٴ ̴. ι°
       Ϲ Ǵ IA32   MMX
     ɾ  Ѵٴ ̴.

  3.  MMX ɾ    ִ -  
     Ϸ(module compiler) ϴ . ׷    ߿
       ͵       . 
      ۵ б (
     <http://dynamo.ecn.purdue.edu/~hankd/SWAR/>) 츮 
       C  ۼ Լ ؼ C Լ 
     SWAR   Ϸ ϰ ,  MMX
     ؼ SWAR   ̸ ̵ Ѵ. ù°
     Ÿ  Ϸ 1996  . ׷ 
      밡 ±   ó  ͺ  
     ɸ ִ.

  ϸ MMX SWAR  ϱ⿡ ƴ. ׷  
   ϸ  ־ ι° ٹ ݵ   ִ.
    ⺻̴:

  1. μ MMX   MMX   .  GCC ڵ
     MMX  μ Ǵ ȵǴ ׽Ʈϴ 
       ִ. ȵǸ 0 ϵǰ Ǹ 0 ƴ 
     ϵȴ.

     ___________________________________________________________________
     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;
     }
     ___________________________________________________________________

  2. MMX ʹ ⺻ GCC unsigned long long θ  
     ϳ  ִ. ׷ ̷ Ÿ ޸-  
     MMX  ׵ ȣϴ C α׷鰣  ī ȴ.
     Ǵ MMX ͸  64-Ʈ ĵ  Ʈķ
     Ҽ ִ (  Ÿ unsigned long long ʵ带
      union Ÿ ν 64-Ʈ  ǵ ϴ
      ϴ).

  3. MMX 밡̶ ,   ڵϴ .byte 
     þ   MMX ڵ带 ۼ  ִ.   MMX
     ɾ PADDB MM0,MM1   GCC -  ڵ
     ڵ  ִ:

     ___________________________________________________________________
     __asm__ __volatile__ (".byte 0x0f, 0xfc, 0xc1\n\t");
     ___________________________________________________________________

  MMX ε Ҽ 鿡 ؼ Ǵ ϵ  ͵
  Ѵٴ  . ׷ MMX ڵ   ڵ ε
  Ҽ  ȣؼ ȵȴ. ε Ҽ õ  MMX ڵ带
  ϱ   Ѵ; ε Ҽ  Ϲ ε
  Ҽ  ʴ C Լ  .

  4.   ڵ  ִ ó, EMMS  ν, MMX
     ڵ带 :

     ___________________________________________________________________
     __asm__ __volatile__ (".byte 0x0f, 0x77\n\t");
     ___________________________________________________________________

     ̻ϰ ϰ δٸ ׷. ׷ MMX 
   ...     MMX SWAR α׷ϴ   
    ̴.

  5.   ȣƮϴ μ μ(Linux-Hosted Attached
  Processors)

  ̷    αⰡ  ٸ  ó  
  ý ȣƮ μ  ǻ ý ν  뿡
      Ұϴ.  Ʈ  
  ۴ٴ ̴;   ȥ̴.

  5.1.   PC  ȣƮ̴(A Linux PC Is A Good Host)

  Ϲ μ  μ Ư Ÿ ɵ ϴ 
  ȭǴ  ִ.

   ¼ ȥϷ 𸥴ٴ ǿ ױ   
   ϴ  ϴ. ,  PC ϰ Ư ý
  ȣƮϵ ϴ      PC ̷ Ÿ
  Ǵ    ȵǴ ÷  ϳ̴.

  PC ΰ ֿ    ȣƮ̴. ù° ΰ 
  Ȯ ɷ̴;   ޸, ũ, Ʈ   ҽ
   PC ߰ȴ. ι° ̽ ̴̼. ISA PCI 
  Ÿ ī θ 밡һӸ ƴ϶  Ʈ 
  -ħ ̽   Ѵ. IA32 и I/O
  ̽   I/O Ʈ ּҵ  ϵ I/O ּ
  ؼ ν ̽ ϰ Ѵ.

     ȣƮ OS̴. ü ҽ ڵ ο 
  ɼ,  "ŷ" ī̵, ̵   ̴. ׷
     --ð ٸ ϰ
  <http://luz.cs.nmt.edu/~rtlinux/>   -ð 
  ִ. Ƹ  UNIX ȯ ϴ ݸ  Microsoft DOS
  Ǵ Windows   ֵ ۼ   ϴ 
    ߿ ̴. MSDOS α׷,  ״ MSDOS
    ִ Ƽ  ӽ ϴ, dosemu  
  μ ȿ   ִ.     Windows 3.xx
  α׷鿡 ؼ Ѵ: wine,  <http://www.linpro.no/wine/>, 
    Ʈ UNIX/X ȯȿ Ȯϰ ȿ κ
  α׷ Ҹŭ   Windows 3.11 ùķƮѴ.

    ǵ   Ǿ ϰ ٶ μ 
  ý۵鿡   Ѵ....

  5.2.  װͿ DSP ߴ°(Did You DSP That)?

  - DSP( ñ׳ ó(Digital Signal Processing)) μ
   ̴.  ̷ Ĩ Ϲ ø̼-
  ý۵鿡 Ӻǵ ȵ , ׵  Ŵ μ 
  ǻ͵   ִ.  ׷?

  o  Texas Instruments ( <http://www.ti.com/>) TMS320 Analog Devices (
     <http://www.analog.com/>) SHARC DSP йи   ͵
     "(glue)"    Ǵ     鵵
      ̴.

  o  ̵ , Ư MIP MFLOP  , δ. ⺻  
      ؼ DSP μ 񱳰   PC
     μ  10 1̶ Ѵ.

  o  ׵   ų   ߻ϰų  ʴ´. ̰
      Ǿ Ŀ ö̿   ̷ Ϸ Ĩ鿡
     ϴ  ϴٴ  ǹѴ - ׸ װ͵ 
     Ǿ ̽ ־ ̰   ̶  ǹѴ.

  o  - (, C) Ϸ   Ͱ  κ DSP
     ɾ  -   "Ʈ  巹(

  o  - (, C) Ϸ   Ͱ  κ DSP
     ɾ տ ̻ϰ ̴ ͵ ִ -   "Ʈ
      巹(Bit Reverse Addressing)". μ  ý
     ϸ ׷ ȣƮ κ ڵ带
     (straightforwardly) ϰ ϴ  ϴ.
     ̿ ؼ DSP  ð κ ƸԴ  ȵǴ
     ˰ ɽ -Ʃ׵ ڵ ȴ.

  o  ̷ DSP μ  UNIX-like OS ǵ ȵ 
     ƴϰ Ϲ -  ǻ μ 
      ʴ.    ͵ ޸  ϵ 
      ʴ.  ٸ  ϸ ׵    鿡 ؼ
     ȣƮǾ   ۵ȴ...  .

    ī 𵩵  ̹ ＼  ִ DSP
  μ ϰ  װ Ǵ  ̻ DSP μ
   μ  ý ϸ  񰡰 ũ.

  Texas Instruments TMS320 ø,
  <http://www.ti.com/sc/docs/dsps/dsphome.htm>,    
  αⰡ ־ TMS320-  μ Ⱑ  
  밡 ׷ ý۵  ־. TMS320 - 
  ε-Ҽ   ִ;   ε ټ ϻ
  -е ε-Ҽ   ο 𵨵 IEEE
   Ѵ.  TMS320C4x ('C4x  ˷) TI-
  -е ε-Ҽ  ؼ 80 MFLOPS ȹߴ; ̿
  ؼ  1 GFLOPS -е Ǵ IEEE ε Ҽ 꿡 ؼ
  420 MFLOPS -е  ̴. Ƽμ ̷ Ĩ
  ׷ ϴ   ƴ϶  Ĩȿ 'C8x Ƽμ
  ΰ Ǵ װ  μ DSP Բ 100 MFLOPS IEEE ε-Ҽ
  RISC  μ  ̴.

   μ  ý۵麸   ȹ ִ ٸ DSP μ
  йи Analog Devices  <http://www.analog.com/> 
  SHARC(ADSP-2106x ˷)̴. ̷ Ĩ ܺ (glue)  
  6 μ  ޸ Ƽμ   ִ. ׸  
  ū ý۵鵵  4-Ʈ links/chip(Ĩ ũ) ؼ 
   ִ. κ  ū ý۵  ø̼ ǥ ϴ
    ణ δ. ׷ Integrated Computing Engines, Inc.,
  <http://www.iced.com/>, ȸ GreenICE Ҹ ̷ο ׸
  - PCI ī  .   16 SHARC μ
  迭  ְ -е IEEE  ؼ  1.9 GFLOPS
  ְ ӵ   ִ. GreenICE $5,000 ̸ ̴.

   ǰδ μ  DSP    ó Ŀ³Ƽ 
   Ű   ̶ Ѵ....

  5.3.  FPGAs 缳   

   ó       ̶  Ŀ
  ϵ  ʴ°? ۽, 츮   ˰ ִ; ̰
  ʹ θ ϱ⿡ ð ʹ  ɸ ̶ ˰
      ǹ. Ÿ . ׷ 
  α׷  FPGA(ʵ α׷Ӻ Ʈ (Field
  Programmable Gate Arrays))   ̷  κ
  ȭ ȴ.  Ʈ   Ƽ ܼ ü
  μ ϳ FPGA    ְ FPGA
  缳(α׷)ϴ ͵ ,  ˰  鿡 
  Űܰ  缳ϴ  ŸҸŭ ر .

         ƴϴ:  FPGA 
  ؼ,  ȣƮ ý  α׷鿡 ؼ ̽ϴ
  ο- ڵ带 ۼϴ ϰ Բ, VHDL  ϵ
  (description)  ۾ؾ Ѵ. ׷ FPGA  
  Ư -е  (, ̷  ׸ տ
  ؼ SWAR  ) ؼ ۾ϴ ˰鿡 ؼ 
  , FPGA  ͸ ϴ ӵŭ  
     ִ.   ܼ FPGA- ý۵
   ͺ̽ ˻ ǻͺ   ӵ .

   FPGA- ϵ  ٸ ȸ    
  ȸ簡   Ѵ.

  Virtual Computer Company  缳  SRAM- Xilinx
  FPGA  پ ǰ Ѵ. ׵ 8/16Ʈ " ISA
   (Virtual ISA Proto Board)"
  <http://www.vcc.com/products/isa.html> $2,000 ̸̴.

  ׶(Altera) ARC-PCI(Altera Reconfigurable Computer, PCI bus),
  <http://www.altera.com/html/new/pressrel/pr_arc-pci.html>,  
  Ÿ ī ׶ FPGA ISA ƴ PCI  ̽
  Ѵ.

    , ϵ (description), Ϸ, , 
    DOS Ǵ Ʈ ڵ ȴ. ȣƮ
  Ǿ DOS/Windows  ũ Ƽ  װ͵ ʿ
   Ѵ. ׷ ̵ Ʈ Ű 
  dosemu ؼ Ǵ, wine   ķ͸ ؼ
    ִ.

  6.  Ϲ ɰŸ ߿

   ǿ ٷ    װ  ó 𵨵鿡
  Ǵ ̴.

  6.1.  α׷  Ϸ

   ַ Ϸ ڷ ˷ ִ. ׷   ý۵鿡
   ȿ  ڵ带 ڵ ϴ  Ϸ 
  ִٰ   ־ Ѵ. ϰԵ پ  Ű ٸ
       α׷ GCC ϵ C ڵ
  ǥν    ִٴ  ƴٴ  ̴.

   /Ϸ Ʈ - κ ȿ ڵ带
    ϰ ִ. Ϲ ̵  װ ϴ
  α׷ ۾  ؼ ȿ  ͵  
   ʰ, GCC  C α׷ ۼϴ   ߰
     . (׷) ̰ . ̷  Ϸ
  ׵ ǵ ٴ ϰ   ª  ð, 
        ̴.

  ⿡ Ʈ(ĺ ) ͵ ܿ   Ϸ
  ִ. Ӱ 밡 Ϸ(̵ κ  
  ó ؼ ƹ͵  Ѵ)  <http://www.idiom.com/free-
  compilers/> ִ.

  6.1.1.  Fortran 66/77/PCF/90/HPF/95

    ǻ ȸ  Ʈ(Fortran) ִ.  
  Ʈ 1966 ANSI ǥؿ ׷ Ͱ Ȱ  ǹ ʴ´.
  ⺻ Ʈ 66  ܼ ̴. Ʈ 77  ͵
  ߰߰ ̵   ָ    Ϳ  
   DO   ̴. PCF (Parallel Computing Forum)
  Ʈ 77 پ  ó  Ϸ õϿ. Ʈ
  90 -  ̴. ̰ ⺻ C++-
  ü- α׷ ɵ  迭  77  ߰
  ̴.  (HPF-1 HPF-2)  HPF (High-Performance
  Fortran,  <http://www.crpc.rice.edu/HPFF/home.html>) ⺻
  , ǥȭ, 츮  CM Ʈ, MasPar Ʈ, Ǵ Ʈ
  D ˰ ִ  ̴; ̰ پ  ó  ־
  Ʈ 90 Ȯ ̴. ַ  ̾ƿ ϴ  
   ̴.  Ʈ 95 90   Ű
   ̴.

  C ۾  Ϲ f2c, g77 (- Ǹ 
  <http://linux.uni-regensburg.de/psi_linux/gcc/html_g77/g77_91.html>
  ִ), Ǵ  <http://extweb.nag.co.uk/nagware/NCNJNKNM.html> 
   Ʈ 90/95  ۵Ѵ. ̰ ̵  Ϸ
   GCC -忡  Ͱ ڵ- ϱ
  ̴.

  SMP  ڵ带   ִ  Ʈ
  ı(parallelizer) <http://www.kai.com/>
  <http://www.psrv.com/vast/vast_parallel.html> ã  ִ. ̷
  Ϸ SMP  ۵ҷ ҷ  ǥ POSIX
  (, LinuxThreads) SMP Ͽ ۵Ѵٸ װ 
  ̴.

  Ʈ ׷(Portland Group),  <http://www.pgroup.com/>, SMP
    ڵ带 ϴ  ȭ HPF Ʈ(׸ C,
  C++)  ִ; ׵  MPI PVM  Ŭ͵
  Ÿ    ִ.   < http://www.apri.com/>
  FORGE/spf/xHPF 鵵 SMP̳ Ŭ͵鿡 ؼ  ̴.

    ý۵ ۾ ϵ   ִ, Ӱ
  밡 ȭ Ʈ   ͵ Ѵ:

  o  ADAPTOR (ڵ  ȭ ȯ(Automatic DAta Parallelism
     TranslaTOR),
     <http://www.gmd.de/SCAI/lab/adaptor/adaptor_home.html>),  HPF
     MPI Ǵ PVM ȣ ̷ Ʈ 77/90 ڵ ȯ  ִ.
     ׷   ʴ´.

  o  īױ  Fx  <http://www.cs.cmu.edu/~fx/Fx>  
     ũ̼ Ŭ͵ ǥ ´. ׷ ?

  o  HPFC (Ÿ HPF Ϸ,
     <http://www.cri.ensmp.fr/~coelho/hpfc.html>) PVM ȣ ̷
     Ʈ 77 Ѵ. ̰  ŬͿ 밡ΰ?

  o  PARADIGM (л-޸  ƼǻͿ  ȭ
     Ϸ(PARAllelizing compiler for DIstributed-memory General-
     purpose Multicomputers),  <http://www.crhc.uiuc.edu/Paradigm/>) 
        ִ°?

  o  Polaris Ϸ,
     <http://ece.www.ecn.purdue.edu/~eigenman/polaris/>,   ޸
     Ƽμ鿡  Ʈ ڵ带 ϰ  ־ PAPERS
      Ŭ͸ ٽ ǥ  ̴.

  o  PREPARE,
     <http://www.irisa.fr/EXTERNE/projet/pampa/PREPARE/prepare.html>, 
     MPI Ŭ͵ ǥ ´... IA32 μ鿡 Ǵ
     ڵ带   ִ  и ʴ.

  o  ADAPT ADLIB ؼ, shpf( Ʈ  ý
     κ(Subset High Performance Fortran compilation system),
     <http://www.ccg.ecs.soton.ac.uk/Projects/shpf/shpf.html>) MPI
     ȣ  Ʈ 90 ϴ ۺ ο ִ ̴...
     ׷   Ʈ 90 Ϸ  ִٸ...

  o  SUIF ( б ߰ (Stanford University Intermediate
     Form),  <http://suif.stanford.edu/> )  C Ʈ ο 
     ȭ Ϸ  ִ. ̰  Ϸ 
     Ʈ(National Compiler Infrastructure Project) ؼ
       ִ. ׷   ý۵ ǥ ϴ
      ִ°?

  Ʈ پ 鿡     Ϸ
  Ծٰ Ȯ ϱ⿡   . ߿ 
   ۵Ѵٰ ˷ ׷ Ϸ鸸   Ѵ.
  pplinux@ecn.purdue.edu ̳  ̸Ϸ ֱ ٶ.

  6.1.2.  GLU (Granular Lucid)

  GLU (Granular Lucid)  ̰(intensional) (Lucid) 
  𵨵  ̺긮 α׷ 𵨿  - α׷
  ý̴.  ̰ PVM TCP ϵ Ѵ. ̰ 
  Ǵ°?      <http://www.csl.sri.com/GLU.html>
  ִ.

  6.1.3.  Jade SAM

  Jade  C Ȯؼ ̰ (imperative) α׷ ȿ
    ϵ   α׷ ̴. ̰ л 
  ޸  Ѵ. ̰ PVM ϴ ũ̼
  Ŭ͵鿡 ؼ SAM  ȴ.    
  <http://suif.stanford.edu/~scales/sam.html> ã  ִ.

  6.1.4.  Mentat Legion

  Mentat ũ̼ Ŭ͵鿡 ۵ϰ  õȹ ִ
  ü-  ó ý̴. Mentat α׷ (MPL) C++
  ϰ ִ ü- α׷ ̴. Mentat ǽð ý
  -ŷ RPC ణ    ͵ Ѵ.    
  <http://www.cs.virginia.edu/~mentat/> ã  ִ.
  Legion  <http://www.cs.virginia.edu/~legion/>  Mentat  
   ̰ WAN  鿡 ؼ   踦
  Ѵ.

  6.1.5.  MPL (MasPar α׷ )

  Mentat  MPL ȥ .    MasPar SIMD ǻ͸
     C ν ߵǾ. ۽, MasPar  ̻
  縦  (׵  NeoVista Solutions,
  <http://www.neovista.com>,  ̴ ȸ̴), ׵ MPL
  Ϸ GCC ؼ ߵǾ. ׷ ̰  Ӱ
  밡ϴ. Huntsville ˶ٸ б ۵ б ̵
  Ʈؼ MasPar  MPL AFAP ȣ  C ڵ带 ϴ 
  ǥ ٲ( 3.6 ), ׷  SMP  Ŭ͵
  ؼ ۵Ѵ. ׷  Ϸ ټ װ .
  <http://www.math.luc.edu/~laufer/mspls/papers/cohen.ps> .

  6.1.6.  PAMS ( ø̼  ý(Parallel Application Man
  agement System))

  Myrias  PAMS ( ø̼  ý) ̶ Ҹ
  Ʈ ǰ Ĵ ȸ̴. PAMS   ޸  ó
    ܼ þ Ѵ.   Ʈ 
   ʴ´.   ڼ  ؼ
  <http://www.myrias.com/> .

  6.1.7.  Parallaxis-III

  Parallaxis-III   ȭ (SIMD )  " μ
  Ŀؼ(virtual processors and connections)" Modula-2 Ȯ
   α׷ ̴. Parallaxis Ʈ   
  ǻ ý۵  Ϸ, (gdb xgdb ſ 
  Ȯ), ׸  ٸ , Ư ̹ ó ,  
   ˰ ̷ ִ. ̰   ý۵ 켭
  ȴ...   پ  Ÿٵ ߾. ׸ ο
   (, PVM Ŭ͸ Ÿ )  ׷̴.  
  ڼ   <http://www.informatik.uni-
  stuttgart.de/ipvr/bv/p3/p3.html> ã  ִ.

  6.1.8.  pC++/Sage++

  pC++/Sage++   ⺻ "(element)" Ŭκ "ü
  ü(collections of objects)" Ͽ - Ÿ ۾
  ϴ C++   Ȯ̴. ̰ PVM   մ C++
  ڵ带 ϴ  μ̴. ̰  ۵ϴ°?  
     <http://www.extreme.indiana.edu/sage/> ã  ִ.

  6.1.9.  SR (ҽ (Synchronizing Resources))

  SR (ҽ (Synchronizing Resources)) ҽ ׵ ϴ
  μ  ĸȭϴ (concurrent) α׷ ̴;
  (operation) μ ȣۿ뿡  ֿ ī Ѵ.
  SR  ȣ  ۾鿡  ī ο  Ѵ.
     ׸ Ʈ ν ȣ, , ޽ ,
   μ , ƼĳƮ, ׸  ȴ. SR 
   (shared)   (operation) Ѵ.
  ̰  õǾ װ   ִ ȭ
   и ʴ.    
  <http://www.cs.arizona.edu/sr/www/index.html> ϴ.

  6.1.10.  ZPL IronMan

  ZPL  а  ø̼ǵ ϵ ȵ 迭-
  α׷ ̴. ̰ IronMan ̶ Ҹ ܼ ޽-
  ̽  ȣ ϸ ̷ ̽ ϴ 
  Լ   ޽- ý ؼ    ִ.
  ׷ ũ̼ Ŭ͵  PVM  MPI, ׸ 
  Ǵ  ֿ Ÿ̴.   ڼ 
  <http://www.cs.washington.edu/research/projects/orca3/zpl/www/>
  ã  ִ.

  6.2.   (Performance Issues)

  Ư , Ʈ ī    ְΰ ˾ƺ
  ġŷϴ ,  ð Һϴ   ִ.  ̷ 
      ġŷ    ̹ װ 
   ִ  ߿ ְ ̻ ƴ϶ ̴; ̰  忡
    ٸ Ӽ   𵨷 üǾ ִ.

  PC ϵ    꽺  Ͱ .  ̰
  󺧿  ȸ ̸      η
  .  е(Ǵ  꽺 ) 
   Ű澲ų ƴ   . ,  Ű澵
  ϵ ̵  ȵȴ.     ϵ ؼ
    ִ  ΰ Ȯ ˰  ,  ,
  ׸ ǰ   å ؼ Ű ϶  
  ̴.

   ٸ PC μ鿡  Ǹ 
  <http://www.pcguide.com/ref/cpu/fam/> ִ;   WWW Ʈ
  <http://www.pcguide.com/> PC ϵ   
   ִ. Ư ϵ  ɿ ؼ  ƴ ͵
  ϴ. ׸  ġŷ HOWTO(Linux Benchmarking HOWTO)
  <http://sunsite.unc.edu/LDP/HOWTO/Benchmarking-HOWTO.html>
  ϱ⿡  ̴.

   IA32 μ  ý   λױ
  ϴ  Ǵ  Ư ͵ .  VTune,
  <http://developer.intel.com/design/perftool/vtune/>,   
  ڵ-Ʃ ýۿ  ͵ а Ѵ... ̰
  ϰԵ   ʴ´. Ƽ  ͵
  ＼ϱ  ε   ġ ̹, ׸ ̺귯
  ƾ  <http://www.cs.umd.edu/users/akinlar/driver.html> ã
   ִ. ̷  ͵ ٸ IA32 μ ٸٴ 
  ; ̷ ڵ 486, Pentium Pro, Pentium II, K6  ۵
  ʰ Pentium ؼ ۵Ѵ.

  ɿ  ٸ , Ŀٶ Ŭ͵  װ ׸
   ְ ϴ 鿡 Ư, ϴ.   
  μ µ  ϰ ְ  µ ʹ   
  Ŭ ߴ  Ǵ ȸε(  ̰ ŷڵ ̴
  õ)  ִ.     Ƽ (-- : Ƽ
  ȿ - () ݼ ˸鿡   귶   ߻ Ǵ
  Ǵ --)

  ġ( ) 缭  CPU  ʿ ٰ   
   е ð ϻӸ ƴ϶ - ý   
   ִٴ  ˾ƾ Ѵ.  ǻ͵ 帧 ϴ
   ġӿ   ѵ ȿ  ƶ. Ÿ .

   ̶ ܼ ӵӸ ƴϰ ŷڵ 뼺
  Եȴ.  ŷڵ  ý,   ҵ
  ϴ,    (crash) ʴ´ٴ  ǹѴ...
  ̰ Ϲ  Ŀ ޱ -   Ư
  ɵ 䱸Ѵ. ̰   ʴ.  뼺̶  
  ð  ϴٴ  Ѵ... ý  Ұ 
      ý 绡  õȴ.  ⺻
  ̽  High-Availability HOWTO ִ. ׷ ŬͿ
  ؼ Ư,  뼺      ȹ
   ִ.   Ѱ  ϴ ̰ Ŀٶ ŬͿ
  16 踶 ϳ     ȣѴ. ߸
  ϵ  װ   üϴ  
  ຸٵ   뼺     ֵ Ѵ.

  6.3.   - ű⿡ ִ.

  ׷  ؼ  ó ϴ  ִ°? ׷!

     -ó ǻ ȸ ״´ٴ  
  ó õõ Ѵٴ  ǹϴ  ƴѰϰ
  ߴ      ƴϴ.  ״ ׷ ̶
   ʾҰ(  Ͼ ̶  Ϳ  
  ̰Ÿ 
  <http://dynamo.ecn.purdue.edu/~hankd/Opinions/pardead.html> ϱ
  ٶ),  ó  Ǵٽ Ͼ ִ   ̴.
     ǻ͸    Intel MMX
    IA64 EPIC (Explicitly Parallel Instruction Computer)
   ͵鿡  ó  Ѵٰ ڶϰ ִ.

   ȣϴ ˻  "Linux" "paralle' ˻Ѵٸ
    Ʈ    ó Եȴٴ 
  ˰  ̴. Ư Linux PC Ŭ͵   
  ó  ̴. PC ϵ  ɰ ļ 
  (appropriateness)    ó ۰, 
   ׷ ũ    ҵ  αִ
  ǻ  .

    ó ִ پ Ʈ    
   ""  Ʈ Ʈ Ѵ. ׷
  <http://yara.ecn.purdue.edu/~pplinux/Sites/>,  ó 
  ý۵ ϴ پ Ʈ , , ׸  
  ϱ ؼ ȵ  ִ.

  o   ݵ ""   Ʈ  Ѵ: SMP,
      Ŭ, SWAR ý, Ǵ μ μ  PC
      ڵ鿡   α׷   ֵ
     ȴ.  ó  ϴ - Ʈ ȯ
     (, PVM, MPI, AFAPI)  ýۿ ݵ ġǾ Ѵ. ׷,
     ϵ   ó  ʿ䰡   α׷
      ƴ   ٸ  ؼ   ִ.

  o   Ʈ Ʈǵ 䱸.  Ʈ 
     pplinux@ecn.purdue.edu .  Ʈ  ؼ
     ٸ Ʈ鿡    ٶ.  Ʈ 
       κ õ 䱸   Ʈ
     Ʈ ߰  ̴.

   Ʈ 14 Ŭ͵  츮  ʰ
  ŬƮ 迡 ִٴ  ȴ.  Ʈ Ͻó ,
  Ÿ  ǹ ʴ´; 츮     ó
   ν, , ׸  ϱ⸦ ٶ̴.

