Supercomputing Contest 2009 - Kasetsart University · –...

Preview:

Citation preview

การอบรมเบองตน

Supercomputing Contest 2009

1

จดทาโดย ศนยไทยกรดแหง ชาต

สานกงานสงเสรมอตสาหกรรมซอฟตแวรแหงชาต

2

• วนท 1– ลนกซเบองตน– การเขยนโปรแกรมภาษา C บนลนกซ– แนะนาเทคโนโลยระบบคลสเตอร

• วนท 2– หลกการของโปรแกรมแบบขนาน และ MPI

– ตวอยางของโปรแกรม MPI

3

ลนกสเบองตน

4

• ลนกสทางานแบบไคลเอนต/เซรฟเวอร– ผใชตองทาการลอคอนเพอเขาใชงาน

– ผใชจาเปนตองม Username และ Password

• ลนกสจาแนกผใชเปน 2 กลมหลกคอ– ผใชทวไป (User)

– ผดแลระบบ (Root)

5

• ปจจบนนยมใชงานโปรแกรมในกลม SSH Client เพอเขาใชงานระบบ  Linux ผานทางไกล

• การทางานอยในรปแบบของ text‐base และใชงานคอมมานดไลนเปนหลก

• ตวอยางโปรแกรม SSH Client ทใชงานไดฟรบนวนโดวส

• โปรแกรม Putty • สาหรบการใชเชลลผาน SSL (Secure Socket Layer) หรอ

เรยกวา SSH (Secure SHell)

• โปรแกรม WinSCP

• สาหรบรบสงไฟลระหวางลนกสและวนโดวสผาน SFTP โปรโตคอล

6

• โปรแกรม PuTTy อยบนวนโดวส

7

การเรยกใชงานลนกซดวยโปรแกรม Putty 

(ตอ )

• กรอกชอเครอง หรอหมายเลข IP  ของเครอง 

• สามารถ Save

Profile ดวยการ กาหนดชอ และ Save

8

• โปรแกรมจะ save SSH keys ใหทาการกด Yes– SSH Key เปนกระบวนการเพอยนยนตวตนของเครอง server เพอปองกนการใชงานเครองทไมถกตอง

• จะปรากฏหนาจอใหทาการ กรอก Username & Password

9

• สงผานไฟลดวยโปรแกรม WinSCP

– การสงผานไฟลในสมยกอนนยมการสงผานดวยโปรแกรม FTP แตเนองจาก โปรแกรม FTP มจดออน เรองการรกษาความปลอดภย และสามารถโดน 

Hack ไดงาย (เปลยนไปใช sftp

secure ftp )

– โปรแกรม WinSCP เปนการสงไฟลผานมาตรฐานของระบบ Secure  shell ซงมการเขารหสขอมล และมระบบปองกนการโจมตทด

– สามารถโหลดไดท http://winscp.net/eng/index.php

10

การใชโปรแกรม WinSCP

1.

กรอก Host name

2.

กรอก User name

3.

กรอก Password

11

การใชโปรแกรม WinSCP

• โปรแกรมจะทาการเชอมตอไปยง เครองเซรฟเวอร

• ในการเชอมตอครงแรก โปรแกรมจะ ถามถงการยอมรบ Keys ของ

เซรฟเวอรวาเชอถอ และจดเกบ  keys หรอไม

12

13

• เทอรมนล(Terminal) ‐ คอชองทางทอนญาตใหผ ใชลอกอนเขาสเคอรเนลทงแบบโลคอลและ

แบบรโมท

• เชลล(Shell) ‐ คอสวนของลนกสจะใชสาหรบสงอนพทจากผใชไปยเคอรเนล

- ลนกสสวนใหญมกใช BASH Shell (Bourne Again  Shell) เปนเชลลปรยาย (Default shell)

• เคอรเนล(Kernel) ‐ คอหวใจหลกของระบบทาหนาทตดตอไปยงฮารดแวร

• ลนกสอนญาตใหมหลายเทอรมนลได โดยแตละเทอรมนลมเชลลเปน ของตนเอง

14

• ลนกสอนญาตใหมหลายเทอรมนลได  โดยแตละเทอรมนลมเชลลเปนของตนเอง

15

ลนกสเปนระบบปฏบตการทนยมใชการทางานแบบ text mode เปนหลก (ทางานไดเรว)

ในการเรยกใชคาสงจะเปนการเรยกชอคาสง (command) และ options ซงเรยกวา “flags”

ซง Commands จะปอนเขาสระบบผาน command prompt

ในระบบลนกส, จะตองคานงถงตวเลก-ตวใหญของตวอกษร

บนคอมมานดไลนเดยวกนสามารถเขยนคาสงไดมากกวาหนงคาสง โดยใช ; กนระหวางคาสง

16

Presenter�
Presentation Notes�
Explain the command notation for deep-understanding $ <command> <-option|-option> [<-option>]�

[prompt]$ <command> <flags> <args>

user01@local$ ls –l -a unix-tutorial

Command Prompt Command (Optional) flags (Optional) arguments

17

Presenter�
Presentation Notes�
Explain the command notation for deep-understanding $ <command> <-option|-option> [<-option>]�

ระบบไฟลบนลนกสและคาสงเบองตน  

18

• ระบบไฟลบนวนโดวส–Windows XP, Windows VISTA

• Support FAT32, NTFS• File system of BSD Family OS

– FFS (Fast File System)

19

20

คณลกษณะ ระบบปฏบตการวนโดวส ระบบปฏบตการลนกส

ระบบไฟล NTFS, FAT ext2, ext3การอางองรทของพารทชน C:, D:, F:

แตละพารทชนเปนรท

แตละพารทชน

อยภายใตรทโหนด (“/”)

• แบงออกเปน 2 ประเภทคอ

– Linux Swap• สาหรบทาหนาทเปน Virtual Memory

– Linux File System• ทาหนาทจดเกบไฟลขอมล• ระบบไฟลทนยมใชกนมากในปจจบนคอ ระบบไฟล ext3

21

22

ไดเรกทอร คาอธบาย

/ เกบไดเรกทอรทงหมด และไมเกบไฟลอนๆ

/boot เกบเคอรเนลและไฟลทใหสาหรบบตลนกส

/home เกบขอมลของผใชทงหมด

/usr เกบคาสงระบบและยทลตตาง

/usr/local สาหรบซอฟตแวรทอาจตดตงเพมเตม

/opt สาหรบซอฟตแวรทอาจตดตงเพมเตม

/var เกบขอมลของลอกไฟลตางๆ และ Spools

/tmp เกบไฟลชวคราวทสรางขนโดยโปรแกรมตางๆ

23

เปรยบเทยบระหวางลนกสและวนโดวส

โครงสรางไดเรกทอรของลนกส

• ไดเรกทอร : ใชสาหรบการเกบ และจดระเบยบไฟลขอมลหรอไดเรกทอ รยอย และอยในรปของตนไม

• เสนทางแบบสมบรณ (Absolute pathname) : ชอของ เสนทาง(Path) จากรทไดเรกทอร(/) ไปยงไฟลหรอไดเรกทอร

ปลายทาง

• รทไดเรกทอร(Root) : ชนสงสดของไดเรกทอร– จะใชสญลกษณในการอางองเปน “/”

24

• โครงสรางของไฟลในระบบยนกส

25

/root

• โฮมไดเรกทอร(/home) : ผใชหนงคนจะมไดเรกทอรนเพยงหนงไดเรกทอร  และไมซากน

• คาสงแสดงไดเรกทอรขณะใชงาน และแสดงแบบสมบรณ คอ “pwd”

(print  working directory)โดยเสนทางแบบสมบรณนจะอางอง ตาแหนงตนไม

ของโครงสรางไดเรกทอร

• คาสงเปลยนไดเรกทอร “cd”

(change directory) เปลยนไดเรกทอรไป ยงไดเรกทอรทตองการ ณ ตาแหนงตนไมของโครงสรางไดเรกทอร

• ~ (metacharacter) จะอางองถงโฮมไดเรกทอร เชน “cd

~”• Relative pathname คอการอางองตาแหนงของไฟลหรอไดเรกทอร ทอย

บนไดเรกทอรขณะใชงาน ใช “./”

26

• “ TAB‐completion ” เราสามารถใชแทบ (ป ม TAB) เพอ แสดง (หรอเพมเตม) ชอคาสง หรอไฟล หรอไดเรกทอรใหสมบรณ 

– แสดงคาสงของระบบทเกยวของและผใชสามารถใชงานได– สามารถแสดงชอไฟลทถกอางองในไดเรกทอรนนๆ– แสดงตวแปรสภาพแวดลอมการใชงานขณะนนได ($XXX)– เปนคณลกษณะพเศษของ Bash Shell

27

• Text File คอ ไฟลทสามารถอานได อยในรปแบบของตวอกษร• Binary Data File คอ ไฟลทอยในรปแบบทโปรแกรมสามารถ

อานไดเทานน

• Executable Program File คอ ไฟลทสามารถทางานได• Directory File คอ ไฟลทแสดงรายละเอยดของไดเรกทอร

28

• Linked File คอไฟลทเปนตวชไปยงไฟลอน• Special Device File คอไฟลทแสดงรายละเอยดของอปกรณ• Named Pipes คอไฟลทระบชองการสงขอมลระหวางโปรแกรม

(โปรเซส) ในเครองเดยวกน• Socket Files คอไฟลทอนญาตใหโปรแกรม(โปรเซส)บนเครอง

คอมพวเตอรอนสามารถเขยนไฟลลงในเครองได

29

30

• ไฟลทขนตนดวย “.”

(จด) เปนไฟลหรอไดเรกทอรทถกซอน• หากสทธของรายการใดขนตนดวย ‘d’ เชน ‘drwxrw‐r‐‐’ หมายถง

รายการดงกลาวคอไดเรกทอร

• หากสทธของรายการใดขนตนดวย ‘l’ เชน ‘lrwxrwxrwx’ หมายถง  รายการดงกลาวเปน Linked File 

หมายเหต :• ไฟลการปรบแตงโปรแกรม(Configuration File) มกเปนไฟลท

ซอนเอาไว

• คาสง ‘ls

‐a’ เปนคาสงทสามารถดไดทงไฟลปรกตและไฟลทถก ซอน

คาสง “pwd”

แสดงตาแหนงไดเรกทรอรปจจบน

คาสง “mkdir

directory”

คาสงสาหรบสราง ไดเรกทรอร

คาสง “rmdir

[-option] directory”

คาสงสาหรบลบไดเรกทรอร (เงอนไข ตองไมมไฟลขอมลอยในไดเรก ทรอรนน)

-f, ไมแสดงขอผดพลาดหรอคาเตอน

31

คาสง “cp [-option] source_file

destination_file”

คาสงสาหรบทาสาเนาไฟล โดยจะทาสาเนาจากไฟลตนทาง ไปยง ไฟลปลายทางทกาหนด

-f, ไมแสดงขอผดพลาดหรอคาเตอน

-R, ทาการสรางสาเนาทกไฟล และทกไดเรกทรอร

-p, ทาการคงสทธของผใชไวเหมอนเดม

-i, แสดงพรอมพเพอยนยนในกรณเขยนไฟลทบ

32

Presenter�
Presentation Notes�
Introduce to scp(secure copy) for third party copy $ scp [<option>] <source> <distination>�

คาสง “mv

[-option] source destination”

เปนคาสงสาหรบยาย ไฟลหรอไดเรกทรอรจากตนทางไปยง ปลายทาง

– -i, ใหแสดงการยนยนในกรณเขยนทบไฟลเดม

คาสง “rm

[-option] file

เปนคาสงในการลบไฟล หรอไดเรกทรอรทตองการออกจากระบบ

– -R, ทาการลบทกไฟล และทกไดเรกทรอรยอย

33

คาสง “cd

[directory]”

คาสงสาหรบการเปลยนตาแหนงของไดเรกทรอร

ตวอยางเชน

cd

/usr/local

cd

..

cd

../../etc/

cd, กลบไปยงดฟอลไดเรกทรอร (user directory)

cd

~linux

34

Presenter�
Presentation Notes�
Most processes/programs can be run on command-based. Programmer can write the program on top of commands. ADD: 1. Create shortcut :: $ ln –s <name> <distinatoin>�

• การใชสญลกษณ wildcard• ls• ls

*.doc

• ls

c???

• ls

file?.*

35

• คาสง “more [filename]”

– เปนการแสดงขอมลภายในไฟล แบบทละบรรทด

• คาสง “less [filename]”

– เปนคาสงแสดงขอมลภายในไฟล สามารถเลอนขน/ลงเพอแสดง ผลได

• คาสง “cat [filename]”

– เปนคาสงแสดงขอมลภายในไฟลทงหมด

36

Presenter�
Presentation Notes�
Can we search specified text in file both less and more?�

คาสง “head [-n] [filename]”

แสดงขอมลสวนตนของไฟลทกาหนด ดวยจานวนบรรทด n

คาสง “tail [-n] [filename]”

แสดงขอมลสวนทายของไฟลทกาหนด ดวยจานวนบรรทด n

มกใชดลอกไฟลขณะทโปรแกรมทางาน โดยใช ‘tail –f’

37

Presenter�
Presentation Notes�
Try… 1. head –help 2. tail –help 3. <command>; <command>; … <command>�

• คาสง “ls

‐option”• ls เปนคาสงสาหรบแสดงไฟล และไดเรกทรอร

–Option• ‐a, เปนการแสดงไฟลขอมลทกไฟล รวมทงไฟลทซอน• ‐l, แสดงรายละเอยดของไฟล• ‐R, แสดงขอมลภายในของแตละไดเรกทรอร• ‐c, เรยงลาดบการปรบแกขอมล• ‐h, แสดงขนาดของไฟลในรปแบบ KB, MB หรอ GB

38

Presenter�
Presentation Notes�
Try ‘ls –alRch’ ‘ls –help’ ‘man ls’ �

• คาสงในการ mount file–mount –t type

device

target‐dir

• type ex. ext3, …• device ex. /dev/hda1, /dev/hdb1, …• target‐dir  ex. /, /var, /home, 

/mnt/cdrom, …

39

/

/var /home

hda3

hda4hda1

40

• ใชคาสง “mount”

• ตวอยางแสดงดงภาพ

• ตวอยางการ mount อปกรณตอพวงตางๆ เชน

–CD‐ROM• #mount /dev/cdrom

/mnt

– Floppy Disk• #mount /dev/floppy /mnt

–USB drive, Thumb drive• #mount /dev/sdb1 /mnt• โดยปรกตลนกตจะมองเหน Thumb drive เปน 

sd(a,b,c) โดยขนกบดสกทตดตงอยในระบบ41

• ใชคาสง umount

– umount

directory

– umount

device• ตวอยางเชน

–umount

/var

–umount

/hda1

42

• ระบบจดเกบไวในไฟล /etc/fstab• ตวอยางขอมลภายในไฟล fstab

43

• ระบบยนกสมการกาหนดสทธไว 3 กลมคอ– เจาของ (ผใช)

– กลมเดยวกบผใช

– บคคลทวไป

• ซงทกๆไฟล และไดเรกทรอรจาเปนตองมการบนทกการเขาถงไวตงแต

เรมสรางไฟล และมการปรบเปลยนสทธในกรณทมการแกไข และคงไว

จนกวาไฟลนนจะถกลบ

44

rwx rwx rwx

User Group Other

– r = Read Permission

–w = Write Permission

– x = Execute Permission• ในการเปลยนสทธใชคาสง “chmod

number filename”

– ตวเลขสามารถหาไดจากการคานวณคา r, w, x ซงมคาดงน

– r  = 4 (22)

– w = 2 (21)

– x = 1 (20)

– ‐

= 0 45

ตวอยาง

rwx

= 7

rw-

= 6

r-x

= 5

rwxr-xr-x

= 755

rw-rw-rw-

= 666

rwxrwx---

= 770

46

• การเปลยน permission ทาโดย– $ mkdir public_html– $ chmod 755 publich_html– $ ls

• การเปลยน permission แบบสมพทธ ชนดกาหนด ผใช ‘u’, กลม  ‘g’, หรอบคคลอน ‘o’.

–u = owner, g = group, o = other

–+ = add permission, ‐

= remove permission• คาสง chmod

–R จะเปลยนสทธทงไฟลและไดเรกทอรยอย 

(Recursive)

47

Person Permission Add/remove u = owner r = read + add

g = group w = write - remove

o = other x = execute

a = u+g+o

48

rw-r--r--

change to rw-rw-r--– $ chmod g+w test

rw-r--r--

change to rwxrwxr-x– $ chmod ug+wx, o+x test

rwxrwxr-x

change to rwxr--r--– $ chmod go-wx test

49

• การเปลยนชอเจาของไฟลหรอไดเรกทรอร ทาโดย– $ chown [username].[groupname] [option] files

–option• ‐R, เปลยนเจาของในไดเรกทรอรยอยดวย• ‐f, ไมแสดงขอผดพลาด

– $ chown user test.txt– $ chown test.test homework.c– $ chown test:test test.txt– $ chown user1.group1 -R /home/

50

• Tar เปนคาสงในการรวมไฟล หรอไดเรกทรอร ใหรวมเปนไฟล

เพยงไฟลเดยว โดยมขนาดรวมคงเดม (ไมมการบบอด)

• คาสง

– tar [option] outputfile.tar

Directory(file1 file2…) – option

• c, สรางไฟล• v, แสดงการทางาน• x, การแยกไฟล• t,  แสดงไฟลภายใน• f, ระบวาใหสรางไฟลแทนการพมพผลรวมออกทางหนาจอ

51

• ตวอยางการใชงาน– $ tar cvf test.tar /home/test

– $ tar tvf test.tar

– $ tar xvf test.tar

52

• คาสงสาหรบการบบอดไฟล Zip– zip, unzip : สาหรบไฟล MS window’s format. 

–Gzip, gunzip

: สาหรบไฟล UNIX’s format

–bzip2, bunzip2 : วธการบบอดระดบสง

• ตวอยาง (การบบอดจาเปนตองทาการ tar กอน)– $ tar cvf test.tar test ; gzip test.tar– $ tar cvfz test.tar.gz test

– ผลลพธทง 2 คาสงไดผลเหมอนกน,

‘test.tar.gz’.

53

• คาสงสาหรบการสงไฟลหรอไดเรกทอร ‘ scp ’$ scp [-option] <source> <destination>

$ scp [-option] [user@host:/path/] [user@host:/path/]

54

Host AUser A

Host BUser B

Host CUser C

[userA@HostA]$ scp –r userB@hostB:/home/userB/send/ userC@hostC:/home/userC/userB@hostB’s password:userC@hostC’s password:

• การเปลยนรหสผานควรทาทกๆ 3 เดอน• รหสผานควรประกอบดวยตวเลขและตวอกษรอนๆ ผสมกน• คาสงสาหรบเปลยนรหสผาน

– ‘

passwd

55

• ลนกสมคาสงมากมาย• มคมอการใชงานแตละคาสง(Manual pages) มกถกตดตงมา

พรอมกบการตดตงลนกส

– จะใชคาสง “man” แลวตามดวยคาสงลนกสทตองการ– เชน “man ls”– คมอมหลายประเภท

•  คาสงบนลนกสมกเตรยมการชวยเหลอเบองตน เชน “ls

‐‐help”• ลนกสยงมคมอหรอ Information Page เปนคมออยางงาย

– ใชคาสง “info” แลวตามดวยคาสงลนกสทตองการ

56

• บนลนกซม text editor เปนจานวนมาก– VI – text editor พนฐานบนระบบ UNIX มความยดหยนสงมาก แต

ใชงานคอนขางยาก

– Emacs

text editor ทเปนทนยมในการเขยนโปรแกรมและการเขยน เอกสาร ใชงานคอนขางยาก

– Nano

text editor อยางงายบนลนกซ

57

58

• เรยกใชงาน nano ไดโดยการพมพคาสง “nano”• คาสงพนฐาน

– การพมพและแกไขขอความ• สามารถพมพและแกไขขอความไดทนท

– การเซฟไฟล• กด Ctrl+O เพอเซฟไฟล และระบชอไฟลทจะเซฟ

– การออกจากโปรแกรม• กด Ctrl+X เพอออกจากโปรแกรม

59

60

การเซฟและออก

การเซฟ การออก

• สามารถกด Ctrl+X เพออกจาก  NANO ไดทนท

• หากยงไมไดเซฟไฟล จะมคาเตอนเพอให

เซฟไฟลกอน

61

กด Ctrl+O และระบ

อไ ฟล

เปดไฟลทเคยสรางไวแลว

62

การเขยนโปรแกรมภาษา C บนลนกซ

63

ภาษา นามสกล ตวอยาง

C++

C

C#

Perl

PHP

Java

.c

.cpp

.cs

.pl

.php

.java

hello.c

hello.cpp

hello.cs

hello.pl

hello.php

hello.java

• โปรแกรมทเขยนขนมา ไมวาจะเขยนโดยใชอดเตอรอะไรกตาม จะได

ซอรสโคด (source code) ซงจะเกบในรปแฟมขอมล ซงจะมนามสกล แตกตางกนไปดงน

64

ขอตรวจสอบดกอนขอตรวจสอบดกอน

Main(){printf(“XX”);printf(“YY”);}

ซอรสโคด

กระบวนการแปลโปรแกรม

มขอผดพลาด ไปแกไขมาใหมมขอผดพลาด ไปแกไขมาใหม

ถกตอง

ผานได

ถกตอง

ผานได

ตวแปลภาษา (Compiler)

65

สงซอรสโคดใหกบตวแปลภาษาสงซอรสโคดใหกบตวแปลภาษา

ตวแปลภาษา

Executable File

Executable File

ไฟลทสามารถรนได

ผลทไดผลทได

เมอเขยนโปรแกรมเสรจ ผานการแปลภาษาแลวผลทไดกจะเปนไฟล

โปรแกรมทสามารถนาไปใชไดเลย โดยอาจกอปปลงดสกไปเปดทเครอง อนๆ ได ซงจะเปนไฟลโปรแกรมแยกจากตวซอรสโคดทเราเขยน

ไฟลโปรแกรมทไดนนเปนไฟลแบบเลขฐานสอง หรอไบนารไฟล (.exe)

เรยกวาเอกซควเทเบลไฟล(executable file) หรอ binary file

66

• โปรแกรมภาษา C ใชคาสง gcc– gcc

mainfile.c

• โปรแกรมภาษา fortran ใชคาสง ,

gfortran หรอ ifort

– ifort

file.f90• โปรแกรมไบนารจะถกบนทกในไฟลชอ “a.out”

(By default)

หรอสามารถกาหนดชอโปรแกรมเพอใชในการรน(Executable  File)

• การรนโปรแกรมใหนาหนาดวยเครองหมาย “./”• เชน

./a.out

67

Presenter�
Presentation Notes�
What is ‘gcc’ ? <c/c++ compiler –g++, g90, gxxx… > What is benefit when you write a program on unix-like system or linux ? <strict, many tools, flexibility, more library, etc… >�

ภาษา C เปนภาษาทไดรบความนยมมากในการพฒนาโปรแกรม

คาเตอน

ตองระมดระวงในการเขยนโคด เนองจากเขยนผดพลาดไดงาย

สราง bugs สาหรบโปรแกรมไดงาย

แตเปนภาษาททรงประสทธภาพมาก

ทางานไดรวดเรวมาก

สามารถทางานระดบลางไดด

มคาสงทตรงไปตรงมา ไมซบซอน

68

ตวอยางของโปรแกรมภาษาซ

69

1 #include <stdio.h>23 /* My First C program which prints "Hello world" */45 int main(int argc, char * argv[])6 {7 printf("Hello world !\n");8 return 0;9 }

1 #include <stdio.h>23 /* My First C program which prints "Hello world" */45 int main(int argc, char * argv[])6 {7 printf("Hello world !\n");8 return 0;9 }

1 ใช

ไ ลบราร

นพ

ท เอ

าต

ทมาตรฐาน

3 การทา คอมเมนต เพ

ออธ

บายโ

ปรแกรม

5 ฟ

งก

นหล

ก main เป

นฟ

งก

นแรกท

โ ปรแกรมเร

มทา งา

โดยส

งค

า 0 ให

บระบบ

6 เป

ดบล

อกของโปรแกรม ‘{’

7 ให

คอมพ

วเตอร

เข

ยน Hello world ออกทางจอภาพ

8 ส

งค

า 0 ให

บระบบ

9 ป

ดบล

อกของโปรแกรม ‘}’

1 ใช

ไ ลบราร

นพ

ท เอ

าต

ทมาตรฐาน

3 การทา คอมเมนต เพ

ออธ

บายโ

ปรแกรม

5 ฟ

งก

นหล

ก main เป

นฟ

งก

นแรกท

โ ปรแกรมเร

มทา งา

โดยส

งค

า 0 ให

บระบบ

6 เป

ดบล

อกของโปรแกรม ‘{’

7 ให

คอมพ

วเตอร

เข

ยน Hello world ออกทางจอภาพ

8 ส

งค

า 0 ให

บระบบ

9 ป

ดบล

อกของโปรแกรม ‘}’

ซอรสโคด

คาอธบาย

Presenter�
Presentation Notes�
1. Show the compilation process. 2. Inter-process communication.�

เปดคมอเพอเขยนโปรแกรม

70

1 #include <stdio.h>23 /* My First C program which prints "Hello world" */45 int main(int argc, char * argv[])6 {7 printf("Hello world !\n");8 return 0;9 }

1 #include <stdio.h>23 /* My First C program which prints "Hello world" */45 int main(int argc, char * argv[])6 {7 printf("Hello world !\n");8 return 0;9 }

ซอรสโคด

• ใช ‘ man stdio.h’• ใช ‘man 2 printf’• คมอทเกยวของกบการใชงานไลบรารตางๆมกอยทหมายเลข 2 และ 3

Presenter�
Presentation Notes�
1. Show the compilation process. 2. Inter-process communication.�

#include<stdio.h>void main(){

char name[15]; // String Arrayint age;printf(“What is your name ?\n”);scanf(“%s”, name);printf(“Enter year of your Age: ”);scanf(“%d”,&age);printf(“Hello %s, your Age is %d\n”, name ,age);

}

71

สรางขนเพอความสะดวกสะบายในการเขยนโปรแกรม และคอมไพลโปรแกรม

บรรจคาสงเชนเดยวกบเชลลสครปต

ตรวจสอบการแกไขซอรสไฟล (up-to-date)

เปนเครองมอทจาเปนในการพฒนาโปรแกรมบนลนกสและยนกส

ไมตองทางานแบบลาดบเชนเดยวกบเชลลสครปต

ใชเลเบลเพออางองการทางาน

ใชคาสง ‘

make ’ เพอรนเมคไฟล

72

การสรางและใชงานเมคไฟล (ตอ )

73

• COMPILER=/usr/bin/gcc เปนการประกาศตวแปร

• อางองตวแปรดวย $(<variable_name>) เชน $(COMPILER)

• คาสง ‘

make ’ จะเรมทางานทเลเบลแรก ในทนคอ ‘make’

• สามารถขามไปทางาน ณ ตาแหนงเลเบลทตองการเชน ‘

$ make clean ’

• เลเบลมกตามดวยอนพทของคาสงทใชภายใตเลเบลนน และใช ‘

$< ’ เพออางอง

• สรางโปรแกรม Hello world ดวยภาษาซ และบนทกชอเปน

test.c ดงน

74

เขยน Makefile โดยใชคอมไพเลอรเปน gcc

กาหนดออปเจกตไฟลเปน test.o และรนโปรแกรมในชอ launch

สรางเลเบลสาหรบลบไฟลทเคยคอมไพล ดงน

75

ทาการคอมไพลโปรแกรม Hello world โดยใช Makefile

Makefile ทสรางขนจะตองไมคอมไพล test.c ซา ดงรป

ทดลองใช ‘

make clean’ แลวคอมไพลใหม

76

• การจบเวลาอยางงาย สามารถทาไดโดยใชคาสง time ในการจบเวลาการ ประมวลผล

[somsak_sr@gcc

tmp]$ time ./hello_world

Hello world

real    0m0.001suser    0m0.000ssys     0m0.001s[somsak_sr@gcc

tmp]$ 

[somsak_sr@gcc

tmp]$ time ./hello_world

Hello world

real    0m0.001suser    0m0.000ssys     0m0.001s[somsak_sr@gcc

tmp]$ 

Real – เวลาโ ดยรวมท

งหมดท

ใช

ในการประมวลผลUser – เวลาท

ใช

ในการประมวลผล

System – เวลาท

ใช

ในการต

ดต

อก

บระบบ (เช

น การอ

านเข

ยนไ

ฟล

การ พ

มพ

อความ)

77

แนะนาเทคโนโลยระบบคลสเตอร

78

• “การคานวณแกปญหาทมขนาดใหญและมความซบซอนมาก โดยใช

คอมพวเตอรทมความสามารถสงทสดเทาทมในเวลานน”– “ปญหาทมขนาดใหญและซบซอน”– “คอมพวเตอรทมความสามารถสงทสด”– “เทาทมในเวลานน”

79

• ขนาด (Size): ปญหาทนกวทยาศาสตร หรอวศวกรไมสามารถแกไดดวย คอมพวเตอรพซ ตวอยางเชนปญหาทตองการหนวยความจาขนาดใหญ

หรอหนวยจดเกบขอมลขนาดหลายกกะไบต

• ความเรว (Speed): ปญหาทนกวทยาศาสตร หรอวศวกร ตองใช

ระยะเวลาทนานมากๆ ในการทจะไดมาซงคาตอบ ดวยการคานวณบน เครองคอมพวเตอรสวนบคคล (PC) ในขณะทใชระยะเวลาการคานวณ ไมกชวโมงบนเครอง ซเปอรคอมพวเตอร (Supercomputer)

80

ปญหาทมขนาดใหญและซบซอน

81

• ปญหาทมความซบซอนมากขนาดทคอมพวเตอรทดทสดในเวลานนไมสามารถแกปญหาไดใน เวลาอนเหมาะสม

• กลมปญหา Grand Challenge จะเปลยนไปเรอยๆ เมอคอมพวเตอรพฒนาขน

• ตวอยางปญหาทาทายคอมพวเตอร

– Weather Forecast

– Computer Animation

– Molecular simulation

– Bioinformatics

– etc

82

• ทาไดโดยการจาลองการเปลยนแปลงของบรรยากาศ ณ เวลาหนงโดยคานวณทละ  time step

• ตวอยางการคานวณ

– พนทขนาด 36 X 36 ตร.กม. แบงเปนตารางขนาด 136

x 112 จานวน 33 ชน รวม เปน 503,000 สวน พยากรณลวงหนา 24 ชม. โดยแบงเปน 1067 time step  

จะตองใชการคานวณทงหมด 2,558,666 Mflop หรอ 2.56 TeraFlop– ป 2000 ใชเครอง Pentium III 500 MHz (99 Mflop/s) ใชเวลา 7.11 ชม.

• ใชคลสเตอรจานวน 64 เครอง ไดในเวลา 20 นาท– ป 2004 ใชเครอง Xeon 2.8 GHz dual processor (991

Mflop/s) ใช

เวลา 42.68 นาท

• รวมเปนคลสเตอรขนาด 120 เครอง ใชเวลา 66 วนาท เทานน !!

83

Less fish …

More fish!

• การทางานเชงขนาน (Parallelism)  คอการทางานหลายๆอยางในเวลาเดยวกน  ทาใหทางานไดเสรจมากกวาในเวลาทเทากน

84

• 1960‐

1980s แนวคดทางทฤษฎเกดขนมากมาย

• 1962

CDC 1604 ซเปอรคอมพวเตอรเปนเครองแรก 

• 1975

Cray‐1 (80 MHz) ซเปอรคอมพวเตอรเครองแรกทผลต เพอจาหนาย

• 1975-1990 มนวตกรรมคอมพวเตอรแบบขนานจานวนมาก มงานวจย และผผลตจานวนมาก Cray X MP, Cray Y MP, Cray‐2

85

• 1990 บรษทผผลตหลายรายเลกกจการไป• 1994 เบวลฟคลสเตอร (Beowolf

cluster) เกดขน

• ปจจบน SMP (Symmetric Multiprocessor) และคลส เตอรคอสถาปตยกรรมหลก

• คอมพวเตอรในปจจบนเรมนาแนวคดแบบขนานมาใช 

86

• ถอกาเนดในป 1994

• โดยนาย Donald Becker จาก NASA ทาการประกอบคอมพวเตอร       คลสเตอรตวแรกของโลก ประกอบดวย 16 เครอง DX4 PCs ระบบเครอขาย

เปน 10 Mb/s Ethernet

• เรยกระบบนวา เบวลฟคลสเตอร (Beowulf cluster)

• สรางจากอปกรณทหาไดทวไป (commercial off‐the‐shelf  hardware) เชน คอมพวเตอรระดบพซ (PC) หรอสถานงาน 

(workstation) และอเทอรเนตสวตช (ethernet

switch)

• ตวอยางโปรแกรม เชน data mining, simulations, parallel  processing, weather modeling, computer graphical 

rendering, etc. 87

88

คลสเตอร แบงไดเปน• High Performance Cluster

– เนนสมรรถนะหรอความเรว– Parallel programming

• High Throughput Computing– เนนปรมาณงานโดยรวม ใชทรพยากรใหเกดประโยชนสงสด– อาจใชวธ cycle‐stealing

• High Availability Cluster– เนนความทนทานตอความผดพลาดของระบบ– มกใชอปกรณซาๆกนหลายๆตว ทาหนาทเดยวกน

89

Demise of Mainframes, Supercomputers, & MPPs

คลสเตอรคอมพวเตอร

90

Serial computing

Front‐endFront‐end

Compute 0Compute 0 Compute 1Compute 1 Compute nCompute n…RAMRAM

B CA

RAMRAM RAMRAM

D

91

Parallel computing

Front‐end

Compute 0 Compute 1 Compute n…

A

RAM RAM RAM

A AA

A AA

92

• ขนตอนใชงาน ระบบคลสเตอรมดงน

– Log‐in เขาใชงานระบบผานโปรแกรม  Putty

– เขยนโปรแกรม

– คอมไพลเปนไบนารไฟล

– สงใหโปรแกรมทางาน

– ตรวจสอบผล

– ตดตามการทางานของโปรแกรม

93

• ในระบบคลสเตอร ทมผ ใชหลายคน จาเปนตองมการจดลาดบการใชงาน ทรพยากร

• โปรแกรมททาหนาทจดการเรยกวา โปรแกรมจดลาดบงาน (Job  Scheduler)

– SUN Grid Engine– PBS/Torque, LSF, Condor, Moab

• ทาไมตองม?– เพอกาหนดสทธ และลาดบขนของการทางาน เพอใหเกดความเสมอภาค และสามารถใช

ทรพยากรไดคมคาสงสด

94

หลกการของโปรแกรมแบบขนาน

95

• จดประสงคคอการทาใหโปรแกรมทางานไดเรวขน• งานขนาดใหญสามารถทาใหทางานเรวขนไดโดย

– แบงงานใหญเปนงานยอยๆ หลายๆงาน– สงงานยอยไปทางานยงเครองประมวลผลหลายๆ เครองพรอมกน– รวบรวมผลทไดจากเครองประมวลผลตางๆ

96

• โดยทวไปจะใชวธการ massage passing– ลกษณะของ message passing คอ

• การใชหนวยประมวลผลพรอมๆกนกบงานชนเดยวกน• สามารถแลกเปลยนขอมลขณะประมวลผล

• มาตรฐานของการโปรแกรมแบบขนาน– MPI

• ปจจบนเปนเสมอนมาตรฐานสาหรบการเขยนโปรแกรมแบบขนาน

97

• วธการพฒนา– พฒนาโปรแกรมแบบขนานดวยไลบรารของ message passing เชน 

MPI, PVM เปนตน ซงปจจบนไลบรารเหลานไดสนบสนนภาษาการเขยน โปรแกรมหลายภาษา เชน C/C++, java เปนตน

– คอมไพลโปรแกรมดวย คอมไพเลอรของโปรแกรมแบบขนาน– พฒนาโปรแกรมดวยภาษาพเศษสาหรบโปรแกรมแบบขนาน เชน 

OpenMP, High performance fortan

(HPF) เปนตน

98

• อลกอรทมในการแบงโปรแกรมแบบขนาน– Functional Parallelism

• เปนอลกอรทมทใชแบงแตละสวนของฟงกชนออกจากกน โดยสวนทแบงออกมานน จะตองเปนอสระตอกนและไมเกยวของกน แลวนาแตละสวนมาประมวลผลพรอมกน

• ตวอยาง E = A*B + C*D• A*B และ C*D สามารถประมวลผลพรอมกนได เพราะทงสองสวนนนเมอแบง

ออกมาแลวจะไมมสวนทเกยวของกน

99

• อลกอรทมในการแบงโปรแกรมแบบขนาน (2)– Data Parallelism

• เปนอลกอรทมทจะกระจายฟงกชนเดยวกนแตมขอมลขาเขาแตกตางกนไป แลวประมวลผลพรอมกน• ตวอยาง

A[1] = B[1] + C[1]

A[2] = B[2] + C[2] A[N] = B[N] + C[N]

• โดยแตละโปรแกรมจะประมวลผลพรอมๆกน ทงหมดใชหนวยประมวลผล N หนวย

B C

B[1] C[1]

B[2] C[2]

B[n] C[n]

A= +

A[1]

A[2]

A[n]

= +

= +

= +…

100

• ความสมพนธของขอมล (Data Dependency)– เกดขนเมอการประมวลผลจาเปนตองใชขอมลรวมกน– ตวอยางท 1

โปรแกรมท 1 คอ A = B + C, โปรแกรมท 2 คอ D = E + F• ไมมความสมพนธขอมล

– ตวอยางท 2 โปรแกรมท 1 คอ A = B + C, โปรแกรมท 2 คอ D = E + A

• มความสมพนธขอมล โดยโปรแกรมท 1 จะตองประมวลผลเสรจกอนทจะเรม ประมวลผลโปรแกรมท 2 

101

• ความสมพนธของขอมล (Data Dependency)• ตวอยางท 1

– A[i,j] = A[i‐1, j] + 1– A[0,0]  A[1,0]

A[0, 3]

A[1, 3]

A[2, 3]

A[3, 3]

A[0, 2]

A[1, 2]

A[2, 2]

A[3, 2]

A[0, 1]

A[1, 1]

A[2, 1]

A[3, 1]

A[0, 0]

A[1, 0]

A[2, 0]

A[3, 0]

102

• ความสมพนธของขอมล (Data Dependency)• ตวอยางท 2

– A[i,j] = A[i, j‐1] + 2– A[0,0]  A[0,1]

A[0, 3]

A[1, 3]

A[2, 3]

A[3, 3]

A[0, 2]

A[1, 2]

A[2, 2]

A[3, 2]

A[0, 1]

A[1, 1]

A[2, 1]

A[3, 1]

A[0, 0]

A[1, 0]

A[2, 0]

A[3, 0]

103

เลอกวธการแบงขอมล

• ความสมพนธของขอมล (Data  Dependency)

• ตวอยางท 3– A[i,j] = A[i‐1, j] + A[i, j‐1]– A[0,1], A[1,0]  A[1,1]

104

• วธการพฒนาโปรแกรมแบบขนาน– เรมตนจากออกแบบโปรแกรมแบบ sequential ซงเปนการโปรแกรมแบบ

ปกตทใชกน

– ตรวจสอบการทางานของโปรแกรมวามสวนใดบางทตองใชเวลาประมวลผล มากกวา เพอทจะพฒนาเปนการประมวลผลแบบขนาน

– เลอกวธการแบงขอมลและแบงงานออก– เพมการเขยนโปรแกรมลงไปใหเปนโปรแกรมแบบขนาน

105

• MPI คอ Message Passing Interface• เปนไลบรารสาหรบการตดตอสอสารระหวางหนวยประมวลผลและการ

แลกเปลยนขอมล

• ใชสาหรบการเขยนโปรแกรมแบบขนาน• ปจจบนไลบรารนไดถกพฒนาขนหลายแบบดงน

– MPICH• เปนไลบรารทไดรบความนยมสงสด

– OpenMPI

106

• ขนตอนการใชงาน mpi– เขยนโปรแกรมดวยไลบราร mpi

– คอมไพลโปรแกรมดวย คอมไพเลอร mpi โดยจะตองเลอกใหเหมาะกบ ภาษาทเขยนโปรแกรม

mpif77 mpi_prog.f

mpicc mpi_prog.c

mpif90 mpi_prof.f90

mpiCC mpi_prof.C

107

• ขนตอนการใชงาน mpi

(2)– ระบเครองทสามารถประมวลผลไดใน machine file

– ประมวลผลโปรแกรมดวย mpirun

compute-0-0

compute-0-1

compute-0-2

mpirun –np <number of process> [option] <program>

108

• greetings.c#include <stdio.h>#include <mpi.h>

main(int argc, char** argv) {int my_rank; /* Rank of process */int p; /* Number of processes */int source; /* Rank of sender */int dest; /* Rank of receiver */int tag = 50; /* Tag for messages */char message[100]; /* Storage for the message */char name[32]; /* Processor name */int name_len;MPI_Status status; /* Return status for receive */

printf("start\n");MPI_Init(&argc, &argv);printf("MPI_Init OK\n");

109

• greetings.c

(ตอ)MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);MPI_Comm_size(MPI_COMM_WORLD, &p);MPI_Get_processor_name(name, &name_len);if (my_rank != 0) {

sprintf(message, "Greetings from process %d at %s!", my_rank, name);dest = 0;MPI_Send(message, strlen(message)+1, MPI_CHAR, dest,

tag, MPI_COMM_WORLD);} else {

printf("Process %d is waiting for greeting messages at %s\n", my_rank, name);

for (source = 1; source < p; source++) {MPI_Recv(message, 100, MPI_CHAR, source, tag,

MPI_COMM_WORLD, &status);printf("%s\n", message);

}}MPI_Finalize();

}

110

• คอมไพลโปรแกรม

• รนโปรแกรม

• ผลการรนโปรแกรมstartstartstartstartMPI_Init OKProcess 0 is waiting for greeting messages at pluto.cp.eng.chula.ac.thGreetings from process 1 at compute-0-0.local!Greetings from process 2 at compute-0-1.local!Greetings from process 3 at compute-0-2.local!MPI_Init OKMPI_Init OKMPI_Init OK

mpicc –o greetings greetings.c

mpirun –np 4 greetings

111

• เราสามารถกาหนดเครองทจะรนโปรแกรมได โดยสราง machine  file ขนมา ทจะระบชอเครองตางๆ

– machines

• รนโปรแกรมโดยระบ machine file น ดวย –machinefile <machine file>

compute-0-0compute-0-1compute-0-2

mpirun –np 6 -machinefile machines greetings

112

• ผลลพธทได[user1@pluto mpi]$ mpirun -np 6 -machinefile machines greetingsstartstartstartstartstartstartMPI_Init OKProcess 0 is waiting for greeting messages at pluto.cp.eng.chula.ac.thGreetings from process 1 at compute-0-0.local!Greetings from process 2 at compute-0-1.local!Greetings from process 3 at compute-0-2.local!Greetings from process 4 at compute-0-0.local!Greetings from process 5 at compute-0-1.local!MPI_Init OKMPI_Init OKMPI_Init OKMPI_Init OKMPI_Init OK

เปนเครองทระบใน machine file

ตามลาดบ

113

การเขยนโปรแกรม MPI

114

• Rank– ทกๆโปรเซสจะไดรบหมายเลขประจาตว (Rank) หมายเลขหนง ซงจะเรมตนทหมายเลข 

0 เสมอ Rank จะใชงานในการระบตนทางและปลายทาง ของการรบสง message  ระหวางโปรเซส

• Group และ Communicator

– กลมของโปรเซส โดยทกลมของโปรเซสจะเชอมโยงกบ Communicator ซงเปน ตวอางองสาหรบการทางานแบบเปนกลม โดยคาเรมตนของโปรแกรม MPI นน ทกๆ โปรเซสจะอยในกลมทชอวา MPI_COMM_WORLD กอนเสมอ

115

1 2

3 4MPI_COMM_WORLD0

• โปรแกรม MPI จะมการกาหนดชนดของตวแปร (Datatypes)  ชนดใหมขนมาทงหมด

– ตวแปรพนฐาน เชน MPI_INT (Integer)  MPI_DOUBLE_PRECISION (double)

– ตวแปรประเภท Array– ตวแปรอนๆทสรางขนภายหลง โดยผใช

• ในการเรยกใชงานฟงกชนของ MPI จะตองมการระบประเภทของตว แปร โดยจะตองใชประเภทของตวแปรทกาหนดโดยมาตรฐาน MPI  เสมอ

116

• ในการรบสง message จะสามารกาหนดสงทเรยกวา tag เพอใช

ในการแยกประเภทของ message แตละสวนได

• ฝงรบสามารถทจะระบ tag ของ message ทตองการรบได หรอจะ ระบเปน MPI_ANY_TAG เพอรบทกๆ tag กได

117

• การตดตอแบบจดตอจด (point‐to‐point)– เปนการสง message ระหวางโปรเซส 2 โปรเซส

• การตดตอแบบเปนกลม (collective)– เปนการสง message ระหวางกลมของโปรเซส เชน การสงจากจดเดยวไป

หลายจด การรบจากหลายจดมาจดเดยว การรบและกระจายขอมล เปนตน

• การตดตอแบบ asynchronous– เปนการรบสงขอมล โดยไมตองรอใหผ รบ/สง ไดรบขอความกอน– ชวยใหสามารถปรบปรงสมรรถนะของโปรแกรม ใหสามารถประมวลผลไป

พรอมๆกบการรบสงขอมลได

118

• MPI มฟงกชนใหใชงานเปนจานวนมากกวา 129 ฟงกชน แตสาหรบผ เรมตน ร

เพยง 6 ฟงกชนกสามารถเขยนโปรแกรม MPI ไดแลว

• ฟงกชนทง 6 ไดแก– MPI_INIT(int

*argc, char **argv);

• เรมการทางานของโปรแกรม MPI

– MPI_FINALIZE();• จบการทางานของโปรแกรม MPI

– MPI_COMM_SIZE(comm,size);• อานคาจานวนของโปรเซสทประมวลผลอย

– MPI_COMM_RANK(comm,pid);• อานคาของ Rank ปจจบนของโปรเซสปจจบน

– MPI_SEND(buf,count,datatype,dest,tag,comm);

– MPI_RECV(buf,count,datatype,source,tag,comm,status);119

#include "mpi.h"#include <stdio.h>

int main( int argc, char *argv[] ){

int rank, size;MPI_Init( &argc, &argv );MPI_Comm_rank( MPI_COMM_WORLD, &rank );MPI_Comm_size( MPI_COMM_WORLD, &size );printf( "I am %d of %d\n", rank, size );MPI_Finalize();return 0;

}

120

MPI_Send

(start, count, datatype, dest, tag,  comm)

• ขอมลทจะสงจะระบโดยอาศย (start, count, datatype).

• ปลายทางทจะสง จะระบโดย dest

(เปน rank ของปลายทางทจะ สงไป)

• tag และ comm ใชระบ tag และกลมทจะสงขอมล

• เมอฟงกชนเสรจสนการทางานแลว ขอมลจะถกนาสงไปเพอเตรยม สงไปยงปลายทาง โดยขอมลอาจจะยงไปไมถงปลายทาง

121

MPI_Recv(start, count, datatype, source, tag, comm,  status)

• Start ชไปถงจดเรมตนของ buffer ทจะรบขอมล• รอจนกวาขอมลทสงมาจาก Rank ทระบโดย Source และ Tag จะมาถง

• หากตองการไมระบทมาของขอความ สามารถระบ source เปน  MPI_ANY_SOURCE 

• Status จะระบสถานะของการรบขอมล• Count ใชระบขนาดสงสดของ buffer ทใชพกขอมล

122

• Status เป

นต

วแปรประเภท MPI_Status ท

ใช

านข

อม

ลของผ

งข

อม

int recvd_tag, recvd_from, recvd_count;MPI_Status status;MPI_Recv(..., MPI_ANY_SOURCE, MPI_ANY_TAG, ..., &status )recvd_tag = status.MPI_TAG;recvd_from = status.MPI_SOURCE;MPI_Get_count( &status, datatype, &recvd_count );

123

#include <mpi.h>

#include <stdio.h>

double wtime1,wtime2;

int

buff[1024]={1,2,3,};

MPI_Status

status;

int

main(int

argc,char

**argv)

{

int

mysize,myid;

int

i;

MPI_Init(&argc,&argv);

MPI_Comm_size(MPI_COMM_WORLD,&mysize);

MPI_Comm_rank(MPI_COMM_WORLD,&myid);

124

if ( myid==0 ) {

wtime1=MPI_Wtime();

printf("I

am process #%d sending\n",myid);

MPI_Send(buff,100,MPI_INT,1,0,MPI_COMM_WORLD);

printf("I

am process #%d receiving\n",myid);

MPI_Recv(buff,1024,MPI_INT,MPI_ANY_SOURCE,0,MPI_COMM_WORLD,&status);

wtime2=MPI_Wtime();

printf("Round

Trip Time=%10.4f\n",wtime2‐wtime1);

MPI_Finalize();} else {

printf("I

am process #%d receiving\n",myid);

MPI_Recv(buff,1024,MPI_INT,MPI_ANY_SOURCE,0,MPI_COMM_WORLD,&status);

for(i=0;i<3;i++) printf("%d

",buff[i]);

printf("\n");

printf("I

am process #%d sending\n",myid);

MPI_Send(buff,100,MPI_INT,0,0,MPI_COMM_WORLD);

MPI_Finalize();

}

}

125

ตวอยางของโปรแกรม  MPI

126

• การหาคาของ PI สามารถประมาณไดโดยการใชฟงกชนดงน

• โดยการอนทเกรดคาตามฟงกชนน จาก 0 ไปถง 1 และคณดวย 4

127

4111

02

π=

+∫ dxx

• แบงการอนทเกรด ใหเปนการหาพนทใตกราฟดงตวอยาง โดยแบงพนทออกเปนพนทยอยๆ หลายๆพนท

• โปรเซสแตละโปรเซสจะคานวณหาพนทในแตละสวน

• เมอคานวณหาพนทเสรจแลวจงนามารวมกนในขนตอนสดทาย

• ในกรณน จะเหนไดวายงแบงยอยพนท (เพมจานวนโปรเซส) มากขน กจะไดคา PI ทมความ ละเอยดสงขน

128

#include <stdio.h>

#include <math.h>

#include <mpi.h>

int

main(int

argc, char *argv[])

{

int

myid, numprocs, i, rc, count;

/* divide graph into 10000000 fragment */

int

n = 100000;

double PI25DT = 3.141592653589793238462643;

double mypi, pi, h, sum, x, a;

MPI_Status

status;

MPI_Init(&argc,&argv);

MPI_Comm_size(MPI_COMM_WORLD,&numprocs);

MPI_Comm_rank(MPI_COMM_WORLD,&myid);

h = 1.0 / (double) n;

sum = 0.0;

for (i = myid

+ 1; i <= n; i += numprocs) {

x = h * ((double)i

0.5);

sum += 4.0 / (1.0 + x*x);

}

mypi

= h * sum;

ตวอยางโปรแกรมหาคา  Pi อยางงาย

if(myid

!= 0) {

// send back data

MPI_Send(&mypi, 1, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD);

} else {

// gather all data

pi = mypi;

count = 0;

while(count

< (numprocs

1) ) {

MPI_Recv(&mypi, 1, MPI_DOUBLE, MPI_ANY_SOURCE,

0, MPI_COMM_WORLD, NULL);

count++;

pi += mypi;

}

}

if (myid

== 0)

printf("pi

is approximately %.16f, Error is %.16f\n",

pi, fabs(pi

PI25DT));

MPI_Finalize();

return 0;

} 129

เรมการ

ทางาน

คานวณพนท

กราฟ

สวนยอย

รวมผลลพธ

การคานวณ

แสดงผลและ

จบการทางาน

#include <stdio.h>

#include <math.h>

#include <mpi.h>

int

main(int

argc, char *argv[])

{

int

myid, numprocs, i, rc, count;

/* divide graph into 10000000 fragment */

int

n = 100000;

double PI25DT = 3.141592653589793238462643;

double mypi, pi, h, sum, x, a;

MPI_Status

status;

MPI_Init(&argc,&argv);

MPI_Comm_size(MPI_COMM_WORLD,&numprocs);

MPI_Comm_rank(MPI_COMM_WORLD,&myid);

h = 1.0 / (double) n;

sum = 0.0;

for (i = myid

+ 1; i <= n; i += numprocs) {

x = h * ((double)i

0.5);

sum += 4.0 / (1.0 + x*x);

}

mypi

= h * sum;

ตวอยางโปรแกรมหาคา  Pi ฉบบปรบปรง

MPI_Reduce(&mypi, &pi, 1, MPI_DOUBLE, MPI_SUM, 0,

MPI_COMM_WORLD);

if (myid

== 0)

printf("pi

is approximately %.16f, Error is %.16f\n",

pi, fabs(pi

PI25DT));

MPI_Finalize();

return 0;

}

130

เรมการ

ทางาน

คานวณพนท

กราฟ

สวนยอย

รวมผลลพธ

การคานวณ

แสดงผลและ

จบการทางาน

• หาคาของผลลพธในการคณเมตรกซ A และ B

A B

X

double a,b,c;

main(int argc,char *argv[])

{

integer i,j,k;

readfile(a,b);

for( i=0; i < n; i++)

for (j=0; j < n; j++) {

c[i][j]=0;

for(k=0; k < n; k++)

c[i][j] += a[i][k] * b[k][j];

}

writefile( c);

}

• สมมตเราม 4 โปรเซส:

P0- P3

– ขนท 1: กระจาย B ไปยง  P0-P3

– ขนท 2: สง column ท

ถกตองไปยง P0-P3

– ขนท 3: คานวณผลลพธของ เมตรกซยอย

– ขนท 4: รวมเมตรกซยอยเขา เปนผลลพธรวม

B

P0

P1

P2P3

A

C

P0

P1

P2P3

โปรแกรมคณเมตรกซแบบขนานโดยใช MPI

/*/**  mmult.c: matrix multiplication using MPI.* There are some simplifications here. The main one 

is that matrices B and C 

* are fully allocated everywhere, even though only a 

portion of them is 

* used by each processor (except for processor 0)*/

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

#define SIZE 400

/* Size of matrices */

int

A[SIZE][SIZE], B[SIZE][SIZE], C[SIZE][SIZE];

void fill_matrix(int

m[SIZE][SIZE]){static int

n=0;int

i, j;for (i=0; i<SIZE; i++)for (j=0; j<SIZE; j++)m[i][j] = n++;

}

void print_matrix(int

m[SIZE][SIZE])

{int

i, j = 0;

for (i=0; i<SIZE; i++) {printf("\n\t| ");for (j=0; j<SIZE; j++)printf("%2d ", m[i][j]);printf("|");}}

int

main(int

argc, char *argv[]){int

myrank, P, from, to, i, j, k;int

tag = 666;         /* any value will do */MPI_Status

status;

double t1,t2,t; 

MPI_Init

(&argc, &argv);MPI_Comm_rank(MPI_COMM_WORLD, &myrank);  /* who am i */MPI_Comm_size(MPI_COMM_WORLD, &P); /* number of processors */

if (SIZE%P!=0) {if (myrank==0) printf("Matrix size not divisible by number of 

processors\n");MPI_Finalize();exit(‐1);}from = myrank

* SIZE/P;to = (myrank+1) * SIZE/P;/* Process 0 fills the input matrices and broadcasts them to the rest *//* (actually, only the relevant stripe of A is sent to each process) */if (myrank==0) {fill_matrix(A);fill_matrix(B);}t1

= MPI_Wtime(); MPI_Bcast

(B, SIZE*SIZE, MPI_INT, 0, MPI_COMM_WORLD);MPI_Scatter

(A, SIZE*SIZE/P, MPI_INT, A[from], SIZE*SIZE/P, MPI_INT, 0, MPI_COMM_WORLD);

//  printf("computing slice %d (from row %d to %d)\n", myrank, from, to‐1);for (i=from; i<to; i++) for (j=0; j<SIZE; j++) {C[i][j]=0;for (k=0; k<SIZE; k++)C[i][j] += A[i][k]*B[k][j];}

MPI_Gather

(C[from], SIZE*SIZE/P, MPI_INT, C, SIZE*SIZE/P, MPI_INT, 0, MPI_COMM_WORLD);

t2

= MPI_Wtime(); if (myrank==0) printf("%d,%5.2f\n",P,t2‐t1);if (myrank==0) {printf("\n\n");    print_matrix(A);   printf("\n\n\t

* \n");  print_matrix(B);printf("\n\n\t

= \n");    print_matrix(C);    printf("\n\n");}MPI_Finalize();return 0;}

การสงงานประมวลผลใน ระบบคลสเตอร

137

Sun Grid Engine (SGE)

• ทาไมตองเรยก “กรด”?– รองรบการทางานบนทรพยากร

หลากหลายชนด อาท compute  server, data collector, 

visualization

terminal..

• SGE คอ โปรแกรมบรหารจดการ ทรพยากร

– รองรบการสงงานจากผใช

– จดลาดบการทางานตามเงอนไขทผแล กาหนด

– รองรบการทางานไดมากกวา 100  งานพรอมกน

138

• การบรหารงานใน SGE• ผใชแตละคนสามารถสงงานไปประมวลผลผานระบบจดลาดบงาน  SGE แลว

สามารถออกจากระบบไดเลย โดยทไมจาเปนตองรอใหงานประมวลผลเสรจ

• ระบบจดลาดบงาน SGE จะเลอกเครองประมวลผลเองอตโนมต ตามนโยบายท

ผดแลเครองกาหนดไว

• ขอมลขาออก(output) และขอมลความผดพลาด(error) ของงานทไป ประมวลผลนน  จะถกบนทกอยในไฟลขอมลขาออกและขอมลความผดพลาด

139

คาสง คาอธบาย

qsub สงงานไปประมวลผล

qstat แสดงสถานะการทางาน

qdel ยกเลกงานทประมวลผล

qhost แสดงเครองประมวลผลทสามารถตดตอไดในขณะน

qalter แกไขคาคณลกษณะของงาน

• คาสงพนฐานของระบบจดลาดบงาน SGE

140

• การเขยนสครปตงาน เปนการระบโปรแกรมทตองการประมวลผล โดยในสครปต

งานหนงอาจจะเรยกใชมากกวา 1 โปรแกรม

• ตวอยางการเขยนสครปตงานเพอทจะสงงานไประบบจดลาดบงาน  SGE

#!/bin/shdateecho “Hello world”

141

• ขนตอนการเขยนสครปตงานเพอสงไปยงระบบจดลาดบงาน SGE– เปดโปรแกรมเขยนขอความ เชน vi, nano, pico เปนตน– เขยนสครปตงานตามทตองการ– บนทกขอมลใหนามสกลเปน .sh หรอ .job– สงงานไประบบจดลาดบงาน SGE ดวยคาสง qsub– ตรวจสอบสถานะการทางานดวยคาสง qstat

142

• เปดโปรแกรมเขยนขอความ

• เขยนสครปตงาน

• บนทก

#!/bin/shdateecho “Hello world”

[userl @frontend-0 ~]$ vi simplejob.sh

1. Esc

2. Shift + :wq

3. enter

143

• สงงานไปยงระบบจดลาดบงาน SGE ดวยคาสง qsub

• หลงจากสงงานไปแลวระบบจดลาดบงาน SGE จะมอบหมายเลขงาน (Job  ID) ซงเอาไวอางองถงงานน เชนถาหากตองการยกเลกการประมวลผลงานนให

ใชคาสง qdel พรอม Job ID

[user1@frontend-0 ~]$ qsub simplejob.shYour job 3241 (“simplejob.sh") has been submitted[user1@frontend-0 ~]$

144

• หลงจากทงานไดถกประมวลผลเรยบรอย ขอมลขาออก (output) จะถกบนทก อยในไฟล “simplejob.o<job id>” และขอความผดพลาด (error) 

จะถกบนทกในไฟล “simplejob.e<job id>”[user1@frontend-0 ~]$ ls simplejob*simplejob.sh simplejob.sh.e3249 simplejob.sh.o3249[user1@frontend-0 ~]$ cat simplejob.sh.o3249Mon Oct 22 13:18:55 ICT 2007Hello world[user1@frontend-0 ~]$ cat simplejob.sh.e3249[user1@frontend-0 ~]$

145

• เปดโปรแกรมเขยนขอความ

• เขยนสครปตงาน

• บนทก

[userl @frontend-0 ~]$ nano simplejob2.sh

#!/bin/shdateecho “sleep 10000 seconds”sleep 10000

146

• สงงานไปยงระบบจดลาดบงาน SGE ดวยคาสง qsub

• ตรวจสอบสถานะการทางานดวยคาสง qstat

• สถานะ “qw” หมายถงงานรอการประมวลผลอยทควประมวลผล ซงระบบ จดลาดบงาน SGE กาลงหาเครองประมวลผลใหกบงานอย

[userl @frontend-0 userl]$ qsub simplejob2.sh

[userl @frontend-0 ~]$ qsub simplejob2.shYour job 3250 ("simplejob2.sh") has been submitted[userl @frontend-0 ~]$ qstatjob-ID prior name user state submit/start at queue slots ja-task-ID--------------------------------------------------------------------------------

3250 0.00000 simplejob2 userl qw 10/22/2007 13:24:59 1[userl @frontend-0 ~]$

147

• ตวอยางท 2 การเขยนสครปตงานเพอสงไปยงระบบจดลาดบงาน  SGE

• เมอลองตรวจสอบอกครงหนงดวย qstat พบวาสถานะเปน “t”  หมายถง งานกาลงเรมประมวลผล

• เมอสถานะเปน “r” หมายถง งานกาลงประมวลผล

[userl @frontend-0 ~]$ qstatjob-ID prior name user state submit/start at queue slots ja-task-ID-------------------------------------------------------------------------------3255 0.55500 simplejob2 userl t 10/22/2007 13:34:55 all.q@compute-0-3.local 1

[userl @frontend-0 ~]$ qstatjob-ID prior name user state submit/start at queue slots ja-task-ID-------------------------------------------------------------------------------3255 0.55500 simplejob2 userl r 10/22/2007 13:34:55 all.q@compute-0-3.local 1

148

ขอมล คาอธบาย

job id หมายเลขประมวลผล

name ชองาน

user name ชอเจาของงาน

state สถานะการทางาน

queue ควประมวลผลงาน ใน Rocks สวนใหญจะเปนชอเครองลกขาย

• ขอมลทสาคญของการแสดงสถานะ

149

• การยกเลกการประมวลผลงาน• ตรวจสอบหมายเลขประมวลผลดวยคาสง qstat

• ยกเลกการประมวลผลงานดวยคาสง qdel

<job id>[userl @frontend-0 ~]$ qdel 3255userl has registered the job 3255 for deletion[userl @frontend-0 ~]$

[userl @frontend-0 ~]$ qstatjob-ID prior name user state submit/start at queue slots ja-task-ID-------------------------------------------------------------------------------3255 0.55500 simplejob2 userl t 10/22/2007 13:34:55 all.q@compute-0-3.local 1

150

• ตวอยางท 3 การเขยนสครปตงานเพอสงไปยงระบบจดลาดบงาน SGE

• สรางไดเรกทอร “myproject” แลวเขาไปยงไดเรกทอรน

• สรางโปรแกรม “myprog.c” ตามตวอยางตอไปน

[userl@frontend-0 ~]$ mkdir myproject

[userl@frontend-0 ~]$ cd myproject

#include <stdio.h>

int main(int argc, char * argv[]){if(argc < 2){

return -1;}printf("arg 1 is %s\n", argv[1]);return 0;

}

151

• คอมไพลโปรแกรม “myprog”

• เขยนสครปตงานทชอ “advancejob.sh”

[userl @frontend-0 myproject]$ gcc myprog.c -o myprog

#!/bin/sh

echo "This is advance job"echo "Job argument is $*"

./myprog $*

152

• สงงานไปยงระบบจดลาดบงาน  SGE ดวยคาสง qsub

• ตรวจสอบขอมลขาออก (output) และขอความผดพลาด (error)

[userl @frontend-0 myproject]$ qsub advancejob.sh

[userl @frontend-0 myproject]$ qsub advancejob.shYour job 3257 ("advancejob.sh") has been submitted[userl @frontend-0 myproject]$ lsadvancejob.sh myprog myprog.c[userl @frontend-0 myproject]$ qstat[userl @frontend-0 myproject]$ cd ..[userl @frontend-0 ~]$ ls advancejob*advancejob.sh advancejob.sh.e3257 advancejob.sh.o3257[userl @frontend-0 ~]$ cat advancejob.sh.o3257This is advance jobJob argument is[userl @frontend-0 ~]$ cat advancejob.sh.e3257/opt/gridengine/default/spool/compute-0-1/job_scripts/3257: line 6: ./myprog: No such file or directory[userl @frontend-0 ~]$ ไมเจอโปรแกรม myprog

153

• ปกตระบบจดลาดบงาน SGE จะทางานอยบนไดเรกทอร home  ของแตละผใช

• ขอมลขาออก (output) และขอมลความผดพลาด (error) จะถก เกบไวทไดเรกทอร home

• เพอทจะประมวลผลงานตวอยางท 3 ได จาเปนตองกาหนดตวเลอก  (option)ของระบบจดลาดบงาน SGE ดงน

– ‐cwd เปนการเปลยนไดเรกทอรททางานของระบบจดลาดบงาน SGE จาก เดมทเปนไดเรกทอร home ใหเปนไดเรกทอรปจจบนทใชคาสง qsub

– ‐o, ‐e เปนการระบชอไฟลทเปนขอมลขาออก (output) และขอมล ความผดพลาด (error) ใหม

154

• ลองสงงานไประบบจดลาดบงาน SGE ใหมอกครง พรอมกบตวเลอกทตงคาใหม

ดงน (โดยอารกวเมนต arg1 arg2 arg3 เปนการกาหนดคาตวแปรใน โปรแกรม myprog)

• ผลลพธทไดเปนดงน

[userl@frontend-0 myproject]$ qsub -cwd -o ./advancejob.out -e ./advancejob.err advancejob arg1 arg2 arg3

[userl@frontend-0 myproject]$ lsadvancejob.err advancejob.out advancejob.sh myprog myprog.c[userl@frontend-0 myproject]$ cat advancejob.outThis is advance jobJob argument is arg1 arg2 arg3arg 1 is arg1[userl@frontend-0 myproject]$ cat advancejob.err[userl@frontend-0 myproject]$

155

• ระหวางทงานรอประมวลผล ผใชสามารถทจะหยดการประมวลผล ชวคราว (suspend) เพอใหงานทสาคญกวาแตมาทหลงได

ประมวลผลกอนได

• งานทหยดการประมวลผลชวคราวไดนน ตองเปนงานทกาลงรออยใน ควประมวลผล (มสถานะเปน qw)

156

• หยดการทางานชวคราวดวยคาสง  “qhold

<job id>”

• ใหงานกลบมาประมวลใหมอกครง  ใชคาสง “qrls

<job id>”

[user1@frontend-0 myproject]$ qhold 3259modified hold of job 3259[user1@frontend-0 myproject]$ qstatjob-ID prior name user state submit/start at queue slots ja-task-ID-----------------------------------------------------------------------------

3259 0.00000 advancejob user1 hqw 10/22/2007 14:12:07 1[user1@frontend-0 myproject]$

[user1@frontend-0 myproject]$ qrls 3259[user1@frontend-0 myproject]$ qstatjob-ID prior name user state submit/start at queue slots ja-task-ID-----------------------------------------------------------------------------

3259 0.00000 advancejob user1 qw 10/22/2007 14:12:07 1[user1@frontend-0 myproject]$

157

• ในการเขยนสครปตงานสามารถทจะกาหนดตวเลอกของ SGE ลงไป ในสครปตได ดวยการระบ “#$”

#!/bin/sh

#$ -cwd#$ -j y#$ -N advancejob#$ -o ./myprog.out

echo "This is advance job"echo "Job argument is $*"

./myprog $*

158

• mpirun จะรนโปรแกรมบนโพรเซสเซอรเฉพาะทระบไว ซงอาจจะ เพมภาระใหโพรเซสเซอรนนมากเกนไป

• SGE สามารถจดการกบโปรแกรม MPI ซงจะชวยกระจายงานไปยง โพรเซสเซอรตางๆใหเหมาะสม 

• ใชคาสง qsub

–pe

<parallel environment>   <number of processor>  <script>

159

• สรางสครปตงานดงน  (greetings.sh)

• รนโปรแกรมผาน SGE ดวยคาสง qsub

–pe

mpich

<np> <script>– qsub

–pe

mpich

5 greetings.sh

(ใช 5

processor)

– qsub

–pe

mpich

3‐5 greetings.sh

(ใช 3 - 5 processor)– qsub

–pe

mpich

‐5 greetings.sh

(ใชไมเกน 5

processor)

– qsub

–pe

mpich

5‐

greetings.sh

(ใช 5

processor ขนไป)

#!/bin/bash#$ -cwd#$ -j y

export MPICH_HOME=/opt/mpich/gnuexport MPIAPP=greetings

$MPICH_HOME/bin/mpirun -np $NSLOTS -machinefile $TMPDIR/machines $MPIAPP

160

จบการนาเสนอ

161

Recommended