• Nenhum resultado encontrado

[PENDING] Κατανεμημένος και παράλληλος προγραμματισμός με Matlab

N/A
N/A
Protected

Academic year: 2024

Share "Κατανεμημένος και παράλληλος προγραμματισμός με Matlab"

Copied!
93
0
0

Texto

(1)

AΔΙ ΠΔΙΡΑΙΑ T.T.

΢ΥΟΛΗ ΣΔΥΝΟΛΟΓΙΚΧΝ ΔΦΑΡΜΟΓΧΝ

ΣΜΗΜΑ ΜΗΥΑΝΙΚΧΝ ΗΛΔΚΣΡΟΝΙΚΧΝ ΤΠΟΛΟΓΙ΢ΣΙΚΧΝ ΢Τ΢ΣΗΜΑΣΧΝ T.E.

ΓΙΠΛΧΜΑΣΙΚΗ ΔΡΓΑ΢ΙΑ

Καηαλεκεκέλνο θαη παξάιιεινο πξνγξακκαηηζκόο κε MATLAB

Νηελίο Β. Σζεξθόβ

Δηζεγεηήο: Γξ Αλαζηαζία Βειώλε, Καζεγήηξηα εθαξκνγώλ

ΑΘΗΝΑ ΑΠΡΙΛΙΟ΢ 2016

(2)
(3)

ΓΙΠΛΧΜΑΣΙΚΗ ΔΡΓΑ΢ΙΑ

Καηαλεκεκέλνο θαη παξάιιεινο πξνγξακκαηηζκόο κε MATLAB

Νηελίο Β. Σζεξθόβ Α.Μ. 34023

Δηζεγεηήο:

Γξ Αλαζηαζία Βειώλε, Καζεγήηξηαεθαξκνγώλ

Δμεηαζηηθή Δπηηξνπή:

_ _

Ηκεξνκελία εμέηαζεο __/__/2016

(4)

ΓΗΛΧ΢Η ΢ΤΓΓΡΑΦΔΑ ΠΣΤΥΙΑΚΗ΢ ΔΡΓΑ΢ΙΑ΢

Ο/Η θάησζη ππνγεγξακκέλνο/ε ………, ηνπ ………, κε αξηζκό κεηξώνπ

……….. θνηηεηήο/ηξηα ηνπ Σκήκαηνο Μεραληθώλ H/Τ ΢πζηεκάησλ Σ.Δ.

ηνπ Α.Δ.Ι. Πεηξαηά Σ.Σ. πξηλ αλαιάβσ ηελ εθπόλεζε ηεο Πηπρηαθήο Δξγαζίαο κνπ, δειώλσ όηη ελεκεξώζεθα γηα ηα παξαθάησ:

«Η Πηπρηαθή Δξγαζία (Π.Δ.) απνηειεί πξντόλ πλεπκαηηθήο ηδηνθηεζίαο ηόζν ηνπ ζπγγξαθέα, όζν θαη ηνπ Ιδξύκαηνο θαη ζα πξέπεη λα έρεη κνλαδηθό ραξαθηήξα θαη πξσηόηππν πεξηερόκελν.

Απαγνξεύεηαη απζηεξά νπνηνδήπνηε θνκκάηη θεηκέλνπ ηεο λα εκθαλίδεηαη απηνύζην ή κεηαθξαζκέλν από θάπνηα άιιε δεκνζηεπκέλε πεγή. Κάζε ηέηνηα πξάμε απνηειεί πξντόλ ινγνθινπήο θαη εγείξεη ζέκα Ηζηθήο Σάμεο γηα ηα

πλεπκαηηθά δηθαηώκαηα ηνπ άιινπ ζπγγξαθέα. Απνθιεηζηηθόο ππεύζπλνο είλαη ν ζπγγξαθέαο ηεο Π.Δ., ν νπνίνο θέξεη θαη ηελ επζύλε ησλ ζπλεπεηώλ, πνηληθώλ θαη άιισλ, απηήο ηεο πξάμεο.

Πέξαλ ησλ όπνησλ πνηληθώλ επζπλώλ ηνπ ζπγγξαθέα ζε πεξίπησζε πνπ ην Ίδξπκα ηνπ έρεη απνλείκεη Πηπρίν, απηό αλαθαιείηαη κε απόθαζε ηεο ΢πλέιεπζεο ηνπ Σκήκαηνο. Η ΢πλέιεπζε ηνπ Σκήκαηνο κε λέα απόθαζεο ηεο, κεηά από αίηεζε ηνπ ελδηαθεξόκελνπ, ηνπ αλαζέηεη εθ λένπ ηελ εθπόλεζε ηεο Π.Δ. κε άιιν ζέκα θαη δηαθνξεηηθό επηβιέπνληα θαζεγεηή. Η εθπόλεζε ηεο ελ ιόγσ Π.Δ.

πξέπεη λα νινθιεξσζεί εληόο ηνπιάρηζηνλ ελόο εκεξνινγηαθνύ 6κήλνπ από ηελ εκεξνκελία αλάζεζεο ηεο. Καηά ηα ινηπά εθαξκόδνληαη ηα πξνβιεπόκελα ζην άξζξν 18, παξ. 5 ηνπ ηζρύνληνο Δζσηεξηθνύ Καλνληζκνύ.»

(5)
(6)

ΔΤΥΑΡΙ΢ΣΙΔ΢

Θα ήζεια λα επραξηζηήζσ ηελ θαζεγήηξηα θ. Βειώλε Αλαζηαζία γηα ηελ δηάζεζε πνπ είρε λα κε βνεζήζεη ζηελ επηινγή ηνπ ζέκαηνο ηεο πηπρηαθήο εξγαζίαο. Γηάζεζε πνπ είρε ζε έλαλ θαηξό δύζθνιν, δηόηη νη θαζεγεηέο δελ έρνπλ θαζόινπ ειεύζεξν ρξόλν.

Με ηελ παξνύζα πηπρηαθή εξγαζία κνπ δόζεθε επθαηξία λα αζρνιεζώ ηαπηόρξνλα θαη κε ηα δύν αληηθείκελα πνπ κνπ αξέζνπλ, ηνλ πξνγξακκαηηζκό (γηα ηελ αθξίβεηα ηνλπαξαιιειηζκόο ησλ πξνγξακκάησλ)θαη ην MATLAB.

Αθόκα ζα ήζεια λα επραξηζηήζσ ηνλ θαζεγεηή θ. Αιαηζαζηαλό ΢ηακάηε γηα ηηο πνιύηηκεο ζπκβνπιέο ηνπ θαη ηελ νηθνγέλεηά κνπ πνπ κε παξαθηλνύζε λα πάξσ ην πηπρίν. Ιδηαίηεξα επραξηζηώ ηελ θνπέια κνπ Ρσμάλε πνπ κε παξαθίλεζε λα κελ δνπιέςσ απηό ην ρεηκώλα ζην εζηηαηόξην, ώζηε λα ηειεηώζσ ηελ ζρνιή, θαζώο θαη όινπο ηνπο άιινπο θαζεγεηέο ηνπ ΑΣΔΙ Πεηξαηά πνπ κνηξάζηεθαλ ηηο γλώζεηο ηνπο καδί κνπ.

(7)
(8)

ΠΔΡΙΛΗΦΗ

Η πξόνδνο ε νπνία έρεη ζπληειεζηεί ηα ηειεπηαία ρξόληα, ζηνπο ππνινγηζηέο κε ηελ αύμεζε ηνπ αξηζκνύ ππξήλσλ πνπ δηαζέηνπλ, θαζώο θαη ε ρξήζε εμσηεξηθώλ ζπζηνηρηώλ από ππνινγηζηέο έρεη νδεγήζεη ζηελ ξαγδαία αλάπηπμε ηνπ θαηαλεκεκέλνπ θαη παξάιιεινπ πξνγξακκαηηζκνύ.

Σν MATLAB ρξεζηκνπνηεί έηνηκεο παξάιιειεο ζπλαξηήζεηο, νη νπνίεο έρνπλ αλαπηπρζεί κε ζθνπό ηελ θαηαλνκή ή ηνλ παξαιιειηζκό κηαο εξγαζίαο.

΢πγθεθξηκέλα ζα δνπιέςνπκε κε ηελ εξγαιεηνζήθε ParallelComputingToolbox, ε νπνία δηαζέηεη ζπλαξηήζεηο γηα ηελ δεκηνπξγία θαη εθηέιεζε θαηαλεκεκέλσλ θαη παξάιιεισλ εξγαζηώλ.Θα δνύκε πσο θαη πόηε κπνξνύκε λα εθηειέζνπκε έλαλ ζεηξηαθό βξόρν for παξάιιεια. Θα δνύκε πσο ρξεζηκνπνηείηαη ε ηερληθή Απιό Πξόγξακκα Πνιιαπιά δεδνκέλα ζην MATLAB. Θα δώζνπκε ηδηαίηεξε πξνζνρή ζην πην δπλαηό ζεκείν ηνπ MATLAB, ζηνπο πίλαθεο δειαδή. Θα δνύκε επίζεο θαη ην παξάζπξν ηνπ παξάιιεινπ πξνγξακκαηηζκνύ ηνπ MATLAB.

ABSTRACT

The progress that has occurred in recent years in a computer science, with increasing number of cores available, and the use of external computerclusters has led to the rapid development of the distributed and parallel programming.

The MATLAB uses built in parallel functions, which have been developed with a purpose of distribution or the parallelism of a task. In particular we will work with the Parallel Computing Toolbox, which offers functions for the creation and implementation of distributed and parallel operations. We'll see how and when we can perform a serial for loop in parallel. We will see how the technique Simple Program Multiple data in MATLAB is used. We will give special attention to the strongest point of MATLAB, namely tables. We will also take a look at the MATLAB Pmode window.

ΔΠΙ΢ΣΗΜΟΝΙΚΗ ΠΔΡΙΟΥΗ: Παξάιιεινο πξνγξακκαηηζκόο ΛΔΞΔΙ΢ ΚΛΔΙΓΙΑ:MATLAB,parfor, SPMD, θαηαλεκεκέλνη πίλαθεο

(9)

ΠΔΡΙΔΥΟΜΔΝΑ

1. ΔΙ΢ΑΓΧΓΗ... 15

1.1 Ιζηνξία θαη ε ζεκαζία ησλ ππνινγηζκώλ ...15

1.2 Η ηζηνξία ηεο IBM ...16

1.3 Λίγα ιόγηα γηα ην MATLAB...18

1.4 Δξγαιεηνζήθε παξάιιεινπ πξνγξακκαηηζκνύ ηνπ MATLAB...19

1.5 Πεξηπηώζεηο ρξήζεο ηεο εξγαιεηνζήθεο παξάιιεινπ πξνγξακκαηηζκνύ ηνπ MATLAB……… 21

2. PARFOR ……….……….. 23

2.1 Δηζαγσγή ...23

2.2 Πεξηπηώζεηο ρξήζεσο ...23

2.3 Ξεθηλώληαο ...23

2.3.1 matlabpool...23

2.3.2 Γεκηνπξγία ηεο parfor ...24

2.4 Ιδηαηηεξόηεηεο ηεο parfor...24

2.5 Μεηαβιεηέο ………...25

2.5.1 Μεηαβιεηέο βξόρνπ (loopvariables)...26

2.5.2 Σεκαρηζκέλεο κεηαβιεηέο(slicedvariables) ...26

2.5.2.1 Καλόλεο ηεκαρηζκνύ κεηαβιεηώλ ...27

2.5.2.2 Σεκαρηζκέλεο κεηαβιεηέο εηζόδνπ θαη εμόδνπ ...28

2.5.3 Μεηαδηδόκελεο κεηαβιεηέο (broadcastvariables) ...30

2.5.4 Μεηαβιεηέο αλαγσγήο (reductionvariables) ...30

2.5.5 Πξνζσξηλέο κεηαβιεηέο (temporaryvariables) ...33

2.5.6 Με αξρηθνπνηεκέλεο κεηαβιεηέο ………...34

2.5.7 Πξνζσξηλέο κεηαβιεηέο πνπ πξννξίδνληαη σο κεηαβιεηέο αλαγσγήο35 2.6 Δκθάληζε απνηειεζκάησλ ...35

2.7 Αληηκεηώπηζε ζθαικάησλ ...35

2.8Πεξηνξηζκνί………...36

2.9 Αλεβάδνληαο απόδνζε ………...37

3. ΑΠΛΟ ΠΡΟΓΡΑΜΜΑ ΠΟΛΛΑΠΛΑ ΓΔΓΟΜΔΝΑ ………... 39

3.1 Πόηε ρξεζηκνπνηείηαη ην κπινθ ΑΠΠΓ ...39

3.2 Οξίδνληαο ην κπινθ ΑΠΠΓ ………...39

3.3 Γείθηεο ηνπ εξγάηε (labindex) ...40

(10)

3.4 Αλαθνξά ζηα δεδνκέλα ησλ εξγαηώλ ...41

3.5 Γήισζε ΢ύλζεησλ κεηαβιεηώλ κέζα ζην κπινθ ΑΠΠΓ ...42

3.6 Γηάξθεηα δσήο κηαο ΢ύλζεηεο κεηαβιεηήο ...44

3.7 Γεκηνπξγία ΢ύλζεησλ κεηαβιεηώλ έμσ από ην κπινθ ΑΠΠΓ ...45

3.8 Δκθάληζε απνηειεζκάησλ …………...46

4. ΚΑΣΑΝΔΜΗΜΔΝΟΙ (DISTRIBUTED) ΠΙΝΑΚΔ΢ ..………. 47

4.1 Καηαλεκεκέλνη ελαληίνλ ΢πγθαηαλεκεκέλσλ (Codistiributed) πηλάθσλ ...47

4.2 Γεκηνπξγία θαηαλεκεκέλσλ πηλάθσλ ...47

4.3 Γηαρείξηζε ιαζώλ ...49

4.4 Πεξηνξηζκνί ...49

5. ΓΙΑΓΡΑ΢ΣΙΚΟ΢ ΠΑΡΑΛΛΗΛΟ΢ ΠΡΟΓΡΑΜΜΑΣΙ΢ΜΟ΢ ΜΔ PMODE ... 51

5.1 Ξεθηλώληαο κε ην PMODE ...51

5.2 ΢πλάξηεζε numlabs...52

5.3 ΢πλάξηεζε getLocalPart() ...53

5.4 ΢πλάξηεζε gather() ...54

5.5 ΢πλάξηεζε lab2client ...54

5.6 ΢πλάξηεζε redistribute() ...55

6. ΠΡΑΞΔΙ΢ ΜΔ ΠΙΝΑΚΔ΢ ΢Δ ΠΑΡΑΛΛΗΛΟ ΠΔΡΙΒΑΛΛΟΝ .……...…….. 57

6.1 Με θαηαλεκεκέλνη πίλαθεο ...57

6.1.1 Δπαλαιακβαλόκελνη πίλαθεο ...57

6.1.2 Παξαιιαγκέλνη πίλαθεο ...58

6.1.3 Ιδησηηθνί πίλαθεο ...58

6.2 ΢πγθαηαλεκεκέλνη πίλαθεο ...59

6.3 Πσο ην MATLAB θαηαλέκεη ηνπο πίλαθεο ...59

6.4 Πσο ην MATLAB εκθαλίδεη ηνπο ζπγθαηαλεκεκέλνπο πίλαθεο ...60

6.5 Γεκηνπξγία ζπγθαηαλεκεκέλσλ πηλάθσλ ...61

6.5.1 Σεκαρίδνληαο έλαλ κεγάιν πίλαθα ...61

6.5.2 Καηαζθεπάδνληαο από κηθξόηεξνπο πίλαθεο ...63

6.6 Σνπηθνί πίλαθεο ...64

6.6.1 Γεκηνπξγία ηνπηθνύ πίλαθα από ηνλ ζπθαηαλεκεκέλν πίλαθα ... 64

6.7 Δμεηάδνληαο ηνπο πίλαθεο ……….65

6.7.1 Πξνζδηνξηζκόο εάλ ν πίλαθαο είλαη ζπγθαηαλεκεκέλνο ………..65

6.7.2 Πξνζδηνξηζκόο ηεο δηάζηαζεο θαηαλνκήο ……….65

6.7.3 Λνηπέο ζπλαξηήζεηο πηλάθσλ ………..66

(11)

6.8 Πξνζπέιαζε εγγξαθώλ ηνπ ζπγθαηαλεκεκέλνπ πίλαθα ……….66

6.9 Καηαλνκή δύν δηαζηάζεσλ ……… 68

7. Η ΥΡΗ΢Η ΣΟΤ ΒΡΟΥΟΤ FOR ΢Δ ΚΑΣΑΝΔΜΗΜΔΝΟ ΔΤΡΟ΢ ΣΙΜΧΝ (FOR-DRANGE) .……...………..73

7.1 Παξαιιειηζκόο ηνπ βξόρνπ for………73

7.2 ΢πγθαηαλεκεκέλνη πίλαθεο κέζα ζε for-drange βξόρν ………74

7.3 Πεξηνξηζκνί ………..75

8.

ΑΝΑΛΤ΢Η ΣΟΤ ΠΑΙΥΝΙΓΙΟΤ ‘21’ ΜΔ ΣΗΝ ΜΔΘΟΓΟ MONTECARLO

………..……...……… …….. 77

8.1 Ση είλαη MonteCarlo………77

8.2 Πξνζνκνίσζε MonteCarlo………77

8.3 Η αλάιπζε ηνπ παηρληδηνύ ……….78

8.4 Παξαιιειηζκόο κε βξόρν parfor……….79

8.5 Παξαιιειηζκόο κε κπινθΑΠΠΓ ……… 80

9. ΠΑΡΑΡΣΗΜΑ Α’ .……….……….83

10. ΒΙΒΛΙΟΓΡΑΦΙΑ ……….……… 93

(12)

ΚΑΣΑΛΟΓΟ΢ ΢ΥΗΜΑΣΧΝ

Δηθόλα 5.1: Παξάζπξν ηνπ PMODE………... 40

Δηθόλα 5.2: Αλάζεζε ηηκώλ ζηνπο πίλαθεο ησλ εξγαηώλ ... 41

Δηθόλα 5.3: ΗεληνιήgetLocalPart()...42

Δηθόλα 5.4: Μεηαθνξά ηνπ πίλαθα από ην PMODE ζην ρώξν εξγαζίαο ην θπξίσο πξνγξάκκαηνο...43

Δηθόλα 5.4: Καηαλνκή ηνπ πίλαθα eye() κέζα ζην PMODE... 44

Δηθόλα 5.5: Αιιαγή ηνπ ηξόπνπ θαηαλνκήο κε ηελ ζπλάξηεζε redistribute()….44 Δηθόλα 6.1: Πίλαθαο Α 8 επί 8 ………... 55

Δηθόλα 6.2: Καηαλνκή δύν δηαζηάζεσλ ηνπ πίλαθα Α ... 55

Δηθόλα 6.3: ΢ρήκα ηνπ ηξόπνπ θαηαλνκήο δύν δηαζηάζεσλ ... 56

Δηθόλα 6.4: Καηαλνκή κε κπινθ 3 επί 3 ... 57

Δηθόλα 8.1:΢εηξηαθόο ρξόλνο ηεο εθηέιεζεο ηεο πξνζνκνίσζεο...79

Δηθόλα 8.2: Σν απνηέιεζκα ηεο αλάιπζεο ……… 79

Δηθόλα 8.3: Παξάιιεινο ρξόλνο ηεο εθηέιεζεο ηεο πξνζνκνίσζεο ……… 80

Δηθόλα 8.4: Υξόλνο ηεο εθηέιεζεο κε κπινθ ΑΠΠΓ ……… 81

(13)

ΚΑΣΑΛΟΓΟ΢ ΠΙΝΑΚΧΝ

Πίλαθαο 2.1: Μεηαβιεηέο ηνπ βξόρνπ parfor...18

Πίλαθαο 2.2: Καλόλαο ηεκαρηζκνύ κεηαβιεηώλ ......... 19

Πίλαθαο 2.3: Μεηαβιεηέο αλαγσγήο... 22

Πίλαθαο 2.4: ΢ύγθξηζε παξάιιεινπ θαη ζεηξηαθνύ πξνγξακκάησλ ... 23

Πίλαθαο 4.1: ΢πλαξηήζεηο δεκηνπξγίαο θαηαλεκεκέλσλ πηλάθσλ ……… 37

΢ΤΝΣΟΜΟΓΡΑΦΙΔ΢

ΑΠΠΓΑπιό πξόγξακκα πνιιαπιά δεδνκέλα SPMDSingle program multiple data

PMODE Parallel mode

(14)
(15)

ΚΔΦΑΛΑΙΟ 1

ΔΙ΢ΑΓΧΓΗ

Σα ηειεπηαία ρξόληα κεγαιώλεη ξαγδαία ε αλάγθε γηα ρξήζε πην ζύγρξνλσλ ππνινγηζηηθώλ ζπζηεκάησλ ζηελ έξεπλα θαη ηελ εθπαίδεπζε. Απηό νθείιεηαη ζην γεγνλόο όηη, ζε πνιιά επηζηεκνληθά παηδεία, έζησ θαη νη ζεκειηώδεηο επηζηεκνληθέο κειέηεο, ζπλδένληαη κε πνιύπινθεο αξηζκεηηθέο πξάμεηο θαη πνιιέο θνξέο κε ηελ πξνζνκνίσζε ηνπο. Η γεληθή ηάζε είλαη λα ζπγθεληξώλνληαη ππνινγηζηηθνί πόξνη ζε θέληξα καδηθήο ρξήζεο θαη αλάπηπμε ηεο ππνδνκήο απνκαθξπζκέλεο πξόζβαζεο κε ηε ρξήζε ησλ κέζσλ ηειεπηθνηλσλίαο. Η ηάζε απηή έρεη δεκηνπξγήζεη αλάγθε, γηα έλαλ κεγάιν αξηζκό επαγγεικαηηώλ πνπ λα κπνξνύλ λα εξγαζηνύλ κε ζύγρξνλεο ηερλνινγίεο εξγαζίαο ηόζν ζε ζπζηήκαηα κε πνιινύο απνκαθξπζκέλνπο ππνινγηζηέο, όζν θαη ζε ηνπηθέο νκάδεο ππνινγηζηώλ.

1.1 Ιζηνξία θαη ε ζεκαζίαηωλ ππνινγηζκώλ

Σα ηειεπηαία ρξόληα κεγαιώλεη ε ηάζε αγνξάο γξήγνξσλ ππνινγηζηώλ θαη θηλεηώλ κε κεγάιε ππνινγηζηηθή δύλακε. Γεκηνπξγείηαη ακέζσο ην εξώηεκα εάλ ε ηάζε απηή είλαη ε αληηθεηκεληθή αλάγθε ηεο θνηλσλίαο ή απιώο ηάζε ηεο κόδαο.

Θα κπνξνύζε θάπνηνο άλεηα λα ραξαθηεξίζεη ηελ ηάζε απηή σο ππεξθαηαλαισηηζκόο πνπ εμαζζελεί ηηο ηζέπεο καο. Ωζηόζν γηα λα απαληεζεί απηό ην εξώηεκα είλαη ρξήζηκν λα θνηηάμνπκε ηελ ηζηνξία ησλ ππνινγηζκώλ.

Παξαθάησ αλαθέξνληαη κεξηθά από ηα εξγαιεία πνπ ρξεζηκνπνηήζεθαλ γηα ππνινγηζκνύο πξηλ μεθηλήζεη ε επνρή ηεο IBM:

 Λνγαξηζκηθόο ράξαθαο (1617)

 Τπνινγηζηηθή κεραλή ηνπ Παζθάι (1642).

 Η αξηζκνκεραλή ηνπ Λάηκπληηο(Γεξκαλία, 1673).

 Η αξηζκνκεραλή ηνπ Odhner, ε«Felix»(Ρσζία, 1876)

 Γηαθνξηθή θαη ε αλαιπηηθή κεραλή ηνπ Μπάκπαηδ (1834).

 Η κεραλή Hollerith κε ηαμηλνκεηή ηνπ Υέξκαλ Υόιεξηζ (1890) Μεηά ηελ ίδξπζε ηεο IBM:

 Η κεραλή MARK-1 (IBM, 1939-1944).

 Η εθεπξέζεηο ηνπ Κόλξαλη Σζνύδε (Γεξκαλία, 1938-1945).

(16)

 Ηεθεπξέζεηοηνπ George Stibitz (Bell Laboratories, 1939-1947).

Ση ήηαλ ινηπόλ απηό πνπ ππνθηλνύζε απηνύο ηνπο εθεπξέηεο ησλ κεραλώλ απηώλ;

Δίλαη γλσζηό όηη ην πξώην επαλαζηαηηθό βήκα ην έθαλε ν Παζθάι δεκηνπξγώληαο ηελ πξώηε ππνινγηζηηθή κεραλή. Ο λεαξόο Παζθάι ην έθαλε γηα λα δηεπθνιύλεη ηνλ παηέξα ηνπ, κε ηνπο ππνινγηζκνύο πνπ είρε λα θάλεη σο θνξνεηζπξάθηνξαο.

Φπζηθά γηα λα ην πεηύρεη απηό ν Παζθάι έπξεπε λα είρε ηελ νηθνλνκηθή άλεζε, πνπ πξνθαλώο ηνπ πξόζθεξε ν παηέξαο ηνπ. Η πεξεηαίξσ βειηίσζε ηεο ππνινγηζηηθήο κεραλήο ηνπ Παζθάι πξαγκαηνπνηήζεθε από ηνπο Λάηκπληηο θαη Odhner. Οη βειηηώζεηο επίζεο ήηαλ αληηθεηκεληθή αλάγθε ηεο επνρήο, θπξίσο γηα ηελ δηεπθόιπλζε ησλ ππνινγηζκώλ θαηά ηελ είζπξαμε θόξσλ. Δίλαη αδύλαηνλ λα ππνινγηζηεί ην όθεινο ηεο επηηάρπλζεο ηεο πξαγκαηνπνίεζεο ησλ πξάμεσλ, κεηά από ηηο βειηηώζεηο απηέο. ΢ηελ ΢νβηεηηθή Έλσζε αθόκα θαη ην 1969 θαηαζθεπάζηεθαλ 300000 αξηζκνκεραλέο «Felix». Ωζηόζν ε αξηζκνκεραλέο απηέο δελ κπνξνύζαλ λα είλαη ιύζε γηα όια ηα πξνβιήκαηα. Γηα παξάδεηγκα ηα απνηειέζκαηα ηεο πνιηηνγξάθεζεο ηνπ 1880, όηαλ ν πιεζπζκόο ησλ ΗΠΑ ήηαλ 50 εθαηνκκύξηα, παξαδόζεθαλ κεηά από 7,5 ρξόληα. Ωο απάληεζε γηα απηέο ηηο λέεο αλάγθεο επνρήο δεκηνπξγήζεθε ε «κεραλή πνιηηνγξάθεζεο» ηνπ Υέξκαλ Υόιεξηζ. Ο Υόιεξηζαλέπηπμε έλαλ κεραληθό πηλαθνπνηεηή κε βάζε ηηο δηάηξεηεο θάξηεο, ώζηε λα πηλαθνπνηνύληαη γξήγνξα ηα ζηαηηζηηθά ζηνηρεία από εθαηνκκύξηα δεδνκέλα. Βαζηθή ηδέα ήηαλ όηη ηα δεδνκέλα κπνξνύζαλ λα θσδηθνπνηεζνύλ ζαλ αξηζκνί. Ο Υόιεξηζ είδε όηη αλ νη αξηζκνί κπνξνύζαλ λα ηξππεζνύλ ζε ζπγθεθξηκέλεο ζέζεηο ζε κηα θάξηα, κε ην γλσζηό ζήκεξα ηξόπν ζε γξακκέο θαη ζηήιεο, ηόηε νη θάξηεο κπνξνύζαλ λα θαηακεηξεζνύλ ή λα ηαμηλνκεζνύλ κεραληθά θαη λα γίλεη ε θαηαγξαθή ησλ δεδνκέλσλ.Με ηελ βνήζεηα ηεο κεραλήο ηνπ Υόιεξηζ ην 1890 ν ρξόλνο ηεο επεμεξγαζίαο ησλ δεδνκέλσλ θαηαγξαθήο ησλ πνιηηώλ κεηώζεθε ζηα δύν ρξόληα. Μεηά από απηό ε δήηεζε ηεο κεραλήο απηήο, όρη κόλν ζηελ Ακεξηθή αιιά θαη ζε άιιεο ρώξεο, δξακαηηθά κεγάισζε, θάηη ην νπνίν εμαζθάιηζε ηελ επηηπρεκέλε δεκηνπξγία ηεο εηαηξίαο IBM.

1.2 Η ηζηνξία ηεο IBM

Οη ξίδεο ηεο IBM βξίζθνληαη ζην ηέινο ηνπ 19νπ αηώλα. Σν 1911, κεηά ηε ζπγρώλεπζε αξθεηώλ κηθξώλ ηερληθώλ εηαηξεηώλ, ηδξύζεθε ε Computing- Tabulating-RecordingCompany (C-T-R). Η C-T-R ζπλέρηζε λα δηαηεξεί εγεηηθή ζέζε ζηνλ ηνκέα ηεο έξεπλαο θαη ηεο εθαξκνζκέλεο κεραληθήο, ώζπνπ ην 1924

(17)

κεηνλνκάζζεθε ζε InternationalBusinessMachinesCorporation. Ο ThomasWatson αλέιαβε ηε ζέζε ηνπ γεληθνύ δηεπζπληή ηεο C-T-R ζηηο 4 Μαΐνπ 1914, εκεξνκελία πνπ ζεσξείηαη σο ε εκεξνκελία γέλλεζεο ηεο IBM. Η IBM ηδξύζεθε ζηελ πνιηηεία ηεο Νέαο Τόξθεο. Αλάκεζα ζηα πξώηα πξντόληα ππήξραλ επίζεο ππνινγηζηηθέο κεραλέο θαη δηάηξεηεο θάξηεο, κηα ηερλνινγία πνπ επέηξεπε ζηνπο πειάηεο ζηνπο θιάδνπο ησλ ζηδεξνδξνκηθώλ κεηαθνξώλ, ηεο ρεκηθήο βηνκεραλίαο, ησλ ππεξεζηώλ θνηλήο σθέιεηαο θαη ησλ αζθαιεηώλ δσήο λα απηνκαηνπνηήζνπλ ηηο ινγηζηηθέο δηαδηθαζίεο.

΢ηηο δεθαεηίεο ηνπ ´20 θαη ηνπ ´30, ε IBM δηέζεηε ζηελ αγνξά νινθιεξσκέλεο, πξνζαξκνζκέλεο ιύζεηο ππνινγηζηηθώλ κεραλώλ γηα επηρεηξήζεηο. Σν 1935, κε ην λόκν πεξί θνηλσληθήο αζθάιηζεο (SocialSecurityAct), ε IBM ζύλαςε κε ηελ θπβέξλεζε ησλ Ηλσκέλσλ Πνιηηεηώλ, κηα ζεκαληηθή ζπκθσλία κε ηελ νπνία αλαιάκβαλε ηε δηαρείξηζε ησλ αξρείσλ 26 εθαηνκκπξίσλ αλζξώπσλ, έλα δύζθνιν έξγν πνπ έρεη ραξαθηεξηζηεί σο ην κεγαιύηεξν ινγηζηηθό έξγν όισλ ησλ επνρώλ.

΢ηε δηάξθεηα ηνπ Β΄ Παγθνζκίνπ Πνιέκνπ, ε IBM έθαλε ηα πξώηα ηεο βήκαηα πξνο ηε ζύγρξνλε επηζηήκε ησλ ππνινγηζηώλ κε ηηο βειηηώζεηο πνπ αλέπηπμε ζηα ζπζηήκαηά ηεο, όπσο ην AutomaticSequenceControlledCalculator (γλσζηό σο Mark I). Σν Mark I, πνπ νινθιεξώζεθε ζε ζπλεξγαζία κε ην παλεπηζηήκην Υάξβαξλη, ήηαλ ε πξώηε κεραλή πνπ κπνξνύζε λα εθηειέζεη απηόκαηα ζύλζεηνπο ππνινγηζκνύο. Δπίζεο, ηερλνινγία πνπ αλέπηπμε ε IBM ρξεζηκνπνηήζεθε ζηελ θαηεγνξηνπνίεζε ησλ θξαηνύκελσλ ζηε λαδηζηηθή Γεξκαλία κε ηε ρξήζε κεραλώλ ηαμηλόκεζεο.

΢ηε δεθαεηία ηνπ 1950, ε IBM παξνπζίαζε ηα αθόινπζα ζπζηήκαηα:

 IBM 701 (1952) - Ο πξώηνο ππνινγηζηήο κεγάιεο θιίκαθαο ηεο IBM πνπ βαζηδόηαλ ζε ιπρλίεο θελνύ.

 IBM 305 Random Access Method of Accounting and Control (RAMAC) (1957) - Σνπξώηνζύζηεκααπνζήθεπζεοδεδνκέλσλζεδίζθν.

 FORTRAN (FORmulaTRANslation) - Η IBM δεκηνύξγεζε επίζεο ηε FORTRAN, κηα γιώζζα ππνινγηζηώλ πνπ βαζηδόηαλ ζε θαλόλεο ηεο άιγεβξαο, ηεο γξακκαηηθήο θαη ηνπ ζπληαθηηθνύ. Η FORTRAN εμειίρζεθε ζε κηα από ηηο πην δηαδεδνκέλεο γιώζζεο ππνινγηζηώλ γηα ηερληθέο εξγαζίεο.

(18)

Σν 1959, ην IBM 7090 ήηαλ έλα από ηα πξώηα ζπζηήκαηα mainframe πνπ βαζηδόηαλ απνθιεηζηηθά ζηε ρξήζε ηξαλδίζηνξ. Σν IBM 7090 κπνξνύζε λα εθηειέζεη 229.000 ππνινγηζκνύο ην δεπηεξόιεπην. ΢ηε δεθαεηία ηνπ 1960, ε IBM ζπλέρηζε λα εζηηάδεη ην ελδηαθέξνλ ηεο ζηελ αλάπηπμε ιύζεσλ πνπ ζα επέηξεπαλ ζηνπο ππνινγηζηέο λα θέξνπλ κηα λέα επνρή ζηηο επηρεηξήζεηο. Η ηερλνινγία ηεο ΙΒΜ εθαξκόζηεθε ζε κηα ζεηξά εθαξκνγώλ, από ηε δηαρείξηζε ησλ θξαηήζεσλ αεξνπνξηθώλ εηζηηεξίσλ ζε πξαγκαηηθό ρξόλν, κέρξη ηελ πξνζζειήλσζε ηνπ πξώηνπ αλζξώπνπ ζην θεγγάξη. Σν System/360, πνπ παξνπζηάζηεθε ην 1964, ήηαλ ε πξώηε νηθνγέλεηα ππνινγηζηώλ κεγάιεο θιίκαθαο πνπ κπνξνύζε λα ρξεζηκνπνηήζεη ελαιιαθηηθά πξντόληα ινγηζκηθνύ θαη πεξηθεξεηαθέο ζπζθεπέο.

Απηή ε πξνζέγγηζε ππήξμε ε αθεηεξία γηα κηα λέα επνρή πνπ μέθεπγε από ηε θηινζνθία ηνπ «έλα ζύζηεκα γηα όινπο».

΢ηηο δεθαεηίεο ηνπ '80 θαη ηνπ '90, ε IBM ζπλέρηζε λα θαηλνηνκεί δεκηνπξγώληαο λέα πξντόληα, όπσο:

 Σε ζρεζηαθή βάζε δεδνκέλσλ πνπ απνηειεί ηε βάζε όισλ ησλ ζύγρξνλσλ αξρηηεθηνληθώλ βάζεσλ δεδνκέλσλ.

 Σελ αξρηηεθηνληθή ζπλόινπ εληνιώλ RISC

(ReducedInstructionSetComputer) πνπ αύμεζε ζεκαληηθά ηελ ηαρύηεηα ησλ ππνινγηζηώλ κε ηε ρξήζε απινπνηεκέλσλ εληνιώλ κεραλήο γηα ηηο ιεηηνπξγίεο πνπ ρξεζηκνπνηνύληαη πεξηζζόηεξν.

 Σε κηθξνζθνπία ζάξσζεο (scanningtunnelingmicroscopy) κε ηελ νπνία ειήθζεζαλ νη πξώηεο ηξηζδηάζηαηεο εηθόλεο ηεο επηθάλεηαο αηόκσλ.

 Σνπο κηθξόηεξνπο θαη θζελόηεξνπο πξνζσπηθνύο ππνινγηζηέο ΙΒΜ PersonalComputer, νη νπνίνη αλαθνηλώζεθαλ ηνλ Αύγνπζην ηνπ 1981.

Σν 1992 θάλεη ηελ εκθάληζε ηνπ ν πξώηνο θνξεηόο ππνινγηζηήο ThinkPad 700C κε έγρξσκε νζόλε TFT (ThinFilmTransistor) 10.4" ηληζώλ θαη ζπζθεπή θαηάδεημεο TrackPoint.

1.3 Λίγα ιόγηα γηα ην MATLAB

Δθαηνκκύξηα κεραληθώλ θαη επηζηεκόλσλ ζε όιν ηνλ θόζκν ρξεζηκνπνηνύλ MATLABγηα ηελ αλάιπζε ησλ ζπζηεκάησλ θαη ηελ δεκηνπξγία πξντόληα πνπ εμειίζζνπλ ζπλερώο ηνλ θόζκν καο. MATLAB βξίζθεηαη παληνύ, ζηα ζπζηήκαηα ελεξγεηηθήο αζθάιεηαοησλ απηνθηλήησλ, δηαπιαλεηηθό δηαζηεκόπινην, ζπζθεπέο παξαθνινύζεζεο ηεο πγείαο, ηα επθπή δίθηπα ειεθηξηθήο ελέξγεηαο θαη ηα δίθηπα

(19)

θηλεηήο ηειεθσλίαο LTE. Υξεζηκνπνηείηαη γηα ηελ κεραληθή κάζεζε, επεμεξγαζία ζήκαηνο, επεμεξγαζία εηθόλαο, ηερλεηή όξαζε, επηθνηλσλία, ρξεκαηννηθνλνκηθνύο ππνινγηζκνύο, ην ζρεδηαζκό ηνπ ειέγρνπ, ξνκπνηηθή, θαη πνιιά άιια.

Η πιαηθόξκα ηνπMATLAB έρεη βειηηζηνπνηεζεί γηα ηελ επίιπζε ησλ κεραληθώλ θαη επηζηεκνληθώλ πξνβιεκάησλ. Η βαζηδόκελε ζε πίλαθεο γιώζζα πξνγξακκαηηζκνύ ηνπMATLAB είλαη ν πην θπζηθόο ηξόπνο ηνπ θόζκνπ έθθξαζεο ππνινγηζηηθώλ καζεκαηηθώλ. Δλζσκαησκέλαγξαθηθά θαζηζηνύλ πην εύθνιε ηελ απεηθόληζε θαη ηελ εμέηαζε ησλ δεδνκέλσλ. Μηα ηεξάζηηα βηβιηνζήθε,πνπ πεξηιακβάλεη έηνηκεο εξγαιεηνζήθεο, ζαο επηηξέπεη λα μεθηλήζεηε ακέζσο κε αιγνξίζκνπο απαξαίηεηνπο ζηνλ ηνκέα ζαο. Όια ηα εξγαιεία θαη όιεο νη δπλαηόηεηεο ηνπ MATLABειέγρνληαη απζηεξά θαη είλαη ζρεδηαζκέλα έηζη ώζηε λα ιεηηνπξγνύλ καδί.

Σν MATLAB ζαο επηηξέπεη ηελ πξαγκαηνπνίεζε ησλ ππνινγηζκώλ κεγαιύηεξσλ από ηηο δπλαηόηεηεο ηνπ ππνινγηζηή ζαο κεηαθέξνληαο ηνλ θόξην εξγαζίαο ζε ζπζηνηρίεο ππνινγηζηώλ θαη ζε ζύλλεθα (cloud).

1.4Δξγαιεηνζήθε παξάιιεινπ πξνγξακκαηηζκνύ ηνπ MATLAB(Parallelcomputingtoolbox)

Σν ινγηζκηθό παθέην πνπ πξνζθέξεη ην MATLAB γηα παξάιιειν πξνγξακκαηηζκό νλνκάδεηαη Parallelcomputingtoolbox. Σν παθέην απηό πεξηιακβάλεη έλα ζύλνιν από εληνιέο πνπ επηηξέπνπλ είηε λα ηξέμεη έλα πξόγξακκα ηνπηθά ζηνλ ππνινγηζηή,κεηαθέξνληαο ην θόξην εξγαζίαο από έλα λήκα ζε έλα άιιν θαη λα εθηειεζηνύλ ηαπηόρξνλα, είηε λα κεηαθεξζεί ν θόξηνο εξγαζίαο ζε κηααπνκαθξπζκέλε νκάδα ππνινγηζηώλ θαη λα κνηξαζηεί ζηνπο δηαζπλδεδεκέλνπο ππνινγηζηέο. Σα λήκαηα πνπ δεκηνπξγεί ην MATLAB ζα νλνκάδνληαη εξγάηεο (workers). Σνπηθά ζε έλαλ ππνινγηζηή κπνξνύλ λα δεκηνπξγεζνύληόζνη εξγάηεο όζνη είλαη νη ππξήλεο ηνπ. ΢ε παιηόηεξεο εθδώζεηο ηνπ MATLAB ην όξην ήηαλ 4, ζηελ έθδνζεR2009a έγηλαλ 8, ζηελ έθδνζεR2011b έγηλαλ 12, αιιά πάληα κόλν εάλ δηαζέηεη ην ζύζηεκα ηόζνπο πύξηλεο. ΢ε κηα νκάδα ππνινγηζηώλ (Cluster) ν αξηζκόο ησλ εξγαηώλ πνπ κπνξνύλ λα δεκηνπξγεζνύλ θαζνξίδεηαη από ηελ άδεηα ρξήζεο ηνπ πξντόληνο (MATLABDistributedComputinglicense). Τςεινύ επηπέδνπ εληνιέο όπσο, παξάιιεινο βξόρνο επαλαιήςεσλ(parfor), εηδηθνί πίλαθεο (distributedarrays), παξάιιεινη αξηζκεηηθνί αιγόξηζκνη, θαζηζηνύλ δπλαηό ηνλπαξαιιειηζκό

(20)

πξνγξακκάησλ ρσξίο ηελ ρξήζε ηεο βηβιηνζήθεο κεηαβίβαζεο κελπκάησλ (MPI).

Δπίζεο δίλεηαη ε δπλαηόηεηα ρξήζεο ηεο εξγαιεηνζήθεο παξάιιεινπ πξνγξακκαηηζκνύ ηνπ MATLABκαδί κε ην Simulink γηα ηελ παξάιιειε, πνιιαπιή πξνζνκνίσζε ηνπ κνληέινπ.

1.5 Πεξηπηώζεηο ρξήζεο ηεο εξγαιεηνζήθεο παξάιιεινπ πξνγξακκαηηζκνύ ηνπ MATLAB

Παράιιειες επαλαιήυεης for

Πνιιέο εθαξκνγέο πεξηιακβάλνπλ πνιιά θνκκάηηα θώδηθα, κεξηθά από ηα νπνία κπνξεί λα επαλαιακβάλνληαη πνιιέο θνξέο. ΢πρλά ν βξόρνο forρξεζηκνπνηείηαη γηα απηέο ηηο πεξηπηώζεηο. Η δπλαηόηεηα εθηέιεζεο ηνπ θώδηθα παξάιιεια, είηε ζε έλαλ ππνινγηζηή είηε ζε κηα νκάδα από ππνινγηζηέο(Cluster), κπνξεί λα κεηώζεη δξακαηηθά ην ρξόλν εθηέιεζεο πνιιώλ εθαξκνγώλ όπσο:

 Δθαξκνγέο αληαιιαγήο παξακέηξσλ/δεδνκέλσλ

 Πνιιέο επαλαιήςεηο – Η αληαιιαγή από κόλε ηεο κπνξεί λα κελ δηαξθεί πνιύ, αιιά όηαλ αλαθεξόκαζηε ζε ρηιηάδεο ή εθαηνκκύξηα επαλαιήςεσλ, ν ρξόλνο ηεο ζεηξηαθήο εθηέιεζεο κπνξεί λα είλαη κεγάινο.

 Μεγάινο ρξόλνο επαλάιεςεο – Η αληαιιαγή δεδνκέλσλ κπνξεί λα κελ πεξηιακβάλεη πνιιέο επαλαιήςεηο, αιιά ε θάζε επαλάιεςε κπνξεί λα ρξεηάδεηαη κεγάιν ρξνληθό δηάζηεκα γηα λα εθηειεζηεί.

΢ε πνιιέο πεξηπηώζεηο βξόρσλ forν θώδηθαο επαλαιήςεσλ δελ αιιάδεη, αιιάδνπλ κόλν ηα εηζαγόκελα δεδνκέλα ηεο θάζε επαλάιεςεο. Δθηέιεζε απηώλ ησλ επαλαιήςεσλ παξάιιεια είλαη ηδαληθή γηα δεδνκέλα κεγάινπ όγθνπ. Ο κόλνο πεξηνξηζκόο ηεο παξάιιειεο εθηέιεζεο είλαη ζην όηη ηα εηζαγόκελα δεδνκέλα ηεο θάζε επαλάιεςεο δελ πξέπεη λα εμαξηώληαη από ηα δεδνκέλα πξνεγνύκελσλ επαλαιήςεσλ.

 Γηα ηηο εθαξκνγέο πνπ εθηεινύλ κηα ζεηξά από αλεμάξηεηεο εξγαζίεο (tasks), είλαη εθηθηή ε ηαπηόρξνλε εθηέιεζε ησλ εξγαζηώλ απηώλ ζε μερσξηζηνύο πόξνπο. Μπνξεί ε ζεηξηαθή επαλάιεςε for λα κελ ρξεζηκεύεη ζε θάηη, αιιά ε παξάιιειε parfor λα καο ιύλεη ηα ρέξηα.

Η εξγαιεηνζήθε παξάιιεινπ πξνγξακκαηηζκνύ ηνπ MATLAB βειηηώλεη ηνλ ρξόλν ηεο εθηέιεζεο ηέηνησλ βξόρσλ επηηξέπνληαο ζηνπο εξγάηεο ηνπ MATLABλα

(21)

εθηεινύλ ηηο επαλαιήςεηο ηαπηόρξνλα. Γηα παξάδεηγκα, έλαο βξόρνο 100 επαλαιήςεσλ ζα κπνξνύζε λα εθηειεζηεί από κηα νκάδα 20 εξγαηώλ ηνπ MATLAB, κε απνηέιεζκα ν θάζε εξγάηεο λα εθηειέζεη κόλν 5 επαλαιήςεηο. Ίζνο ν ρξόλνο ηεο εθηέιεζεο λα κελ κεηώλεηαη ζην 1/20 ηνπ ρξόλνπ ιόγνπ ησλ επηθεθαιίδσλ επηθνηλσλίαο θαη ηεο ηαρύηεηαο ηνπ δηθηύνπ, αιιά ε κείσζε ηνπ ζα είλαη εληππσζηαθή. Αθόκα θαη εθηέιεζε ηνπ βξόρνπ ζε έλαλ ππνινγηζηή κε 4 πύξηλεο θαη πάλσ ζα κπνξνύζε λα βειηηώζεη κνλαδηθά ηελ απόδνζε.

Μεγάια ζύλοια δεδοκέλφλ

Δάλ έλαο πίλαθαο είλαη πην κεγάινο από ηελ κλήκε ηνπ ππνινγηζηή ηόηε απηόο ν πίλαθαο δελ είλαη εύθνιν λα επεμεξγαζηεί κε κηα κόλν ζπλεδξίαζε ηνπ MATLAB.

Η εξγαιεηνζήθε παξάιιεινπ πξνγξακκαηηζκνύ ηνπ MATLAB επηηξέπεη λα κνηξαζηεί ν πίλαθαο αλάκεζα ζε πνιιαπινύο εξγάηεο, έηζη ώζηε ν θάζε εξγάηεο λα πεξηέρεη κόλν έλα κέξνο ηνπ πίλαθα. Παξόηη ν πίλαθαο απνηειείηαη από πνιιά θνκκάηηα, ην MATLAB δίλεη ηελ δπλαηόηεηα επεμεξγαζίαο όινπ ηνπ πίλαθα ζαλ λα ήηαλ έλαο. Κάζε εξγάηεο επεμεξγάδεηαη κόλν ην δηθό ηνπ θνκκάηη θαη νη εξγάηεο απηόκαηα αληαιιάζνπλ ηα δεδνκέλα κεηαμύ ηνπο όηαλ απηό απαηηείηαη, όπσο γηα παξάδεηγκα ζηνλ πνιιαπιαζηαζκό ησλ πηλάθσλ. Έηζη γίλεηαη εθηθηή ε άκεζε εθηέιεζε ζπλαξηήζεσλ θαη πξάμεσλ κεηαμύ ησλ πηλάθσλ ρσξίο ηελ πεξαηηέξσ ηξνπνπνίεζε ηνύο.

(22)
(23)

ΚΔΦΑΛΑΙΟ 2

PARFOR

2.1 Δηζαγωγή

Η ινγηθή ηεοparforείλαη αθξηβώο ίδηα λε ηελ ινγηθή ηεοfor ζην MATLAB: MATLAB εθηειεί ζεηξά από εληνιέο (θώδηθαο κέζα ζηελ for) γηα έλαλ ζπγθεθξηκέλν αξηζκό επαλαιήςεσλ. Έλα κέξνο ηεο parfor εθηειείηαη από ην θπξίσο πξόγξακκα ,νη επαλαιήςεηο δηαζπνύληαη ζε ίζα θνκκάηηα θαη εθηεινύληαη παξάιιεια από ηνπο workers (εξγάηεο). Σν θπξίσο πξόγξακκα ζηέιλεη ζηνπο εξγάηεο ηα δεδνκέλα πξνο επεμεξγαζία θαη ζπλζέηεη καδί ηα απνηειέζκαηα πνπ ιακβάλεη. Οη εξγάηεο εθηεινύλ όιεο ηηο πξάμεηο αλεμάξηεηα ν έλαο από ηνλ άιινλ θαη γηα ηπραίεο ηηκέο κεηαβιεηήο επαλάιεςεο. Αλ ν αξηζκόο ησλ επαλαιήςεσλ είλαη ίζνο κε ζύλνιν ησλ εξγαηώλ, ηόηε θάζε εξγάηεο εθηειεί από κηα επαλάιεςε. Αλ ν αξηζκόο ησλ επαλαιήςεσλ είλαη κεγαιύηεξνο από ην πιήζνο ησλ εξγαηώλ ηόηε εξγάηεο ζα εθηειέζνπλ πεξηζζόηεξν από κηα επαλάιεςε. ΢ε απηή ηε πεξίπησζε ν εξγάηεο κπνξεί λα πάξεη πνιιαπιέο ηηκέο επαλαιήςεσλ εμαξρήο ώζηε λα κεησζεί ν ρξόλνο επηθνηλσλίαο.

2.2 Πεξηπηώζεηο ρξήζεωο

Ο βξόρνο parfor ρξεζηκνπνηείηαη όηαλ ππάξρεη αλάγθε εθηέιεζεο πάξα πνιιώλ επαλαιήςεσλ απιώλ πξάμεσλ , όπσο γηα παξάδεηγκα ζηελ πξνζνκνίσζεMonteCarlo, όπνπ ρξεζηκνπνηνύληαη πάξα πνιιέο επαλαιήςεηο ηπραίσλ αξηζκώλ. Οη επαλαιήςεηο ρσξίδνληαη ζε νκάδεο, έηζη ώζηε ν θάζε εξγάηεο λα εθηειεί κόλν έλα κέξνο όινπ ηνπ βξόρνπ. Δπίζεο ν βξόρνο parforρξεζηκεύεη όηαλ ε επαλάιεςε ζέιεη πνιύ ρξόλν γηα λα νινθιεξσζεί, δηόηη νη εξγάηεο εθηεινύλ ηηο επαλάιεςεο ηαπηόρξνλα.

Γελ πξέπεη λα ρξεζηκνπνηείηαη ν βξόρνο parfor, όηαλ κηα επαλάιεςε εμαξηάηαη από θάπνηα άιιε. Κάζε επαλάιεςε πξέπεη λα είλαη αλεμάξηεηε από θάζε άιιε επαλάιεςε. Δπίζεο επεηδή ππάξρεη κηα κηθξή θαζπζηέξεζειόγν κεηαθνξάο δεδνκέλσλ από ην θπξίσο πξόγξακκα ζηνπο εξγάηεο θαη αληίζηξνθα, δελ ζπληζηάηαη ε ρξήζε ηνπ βξόρνπ parfor γηα ιίγεο επαλαιήςεηο απιώλ πξάμεσλ.

2.3 Ξεθηλώληαο 2.3.1 matlabpool

(24)

Η εληνιή matlabpool δεκηνπξγεί λήκαηα ηνπ MATLAB, νπνία νλνκάδνληαη εξγάηεο(workers). Αλάινγα κε ηηο ξπζκίζεηο (parallelconfiguration),νη εξγάηεο δεκηνπξγνύληαη είηε ηνπηθά ζηνλ ππνινγηζηή ζαλ θαηλνύξγηεο δηεξγαζίεο ηνπ MATLAB, είηε απνκαθξπζκέλα ζε θάπνην άιιν κεράλεκα ηνπ δηθηύνπ. Δάλ δελ νξίζνπκε κέζα ζηελ matlabpool πόζνπο εξγάηεο δεηάκε (π.ρ. matlabpoolopen 3), ην MATLAB ζα δεκηνπξγήζεη απηόκαηα ηόζνπο εξγάηεο όζνη είλαη νη ππξήλεο ηνπ ππνινγηζηηθνύ καο ζπζηήκαηνο θαη κέρξη 12. Δάλ δελ εθηειέζνπκεmatlabpool πξηλ ηξέμνπκε ηελ parfor, επαλαιήςεηο εθηεινύληαη ζεηξηαθά, ρσξίο λα ιακβάλεηαη ππόςε ε ζεηξά ησλ επαλαιήςεσλ.

2.3.2 Γεκηνπξγία ηεο parfor

΢ηα παξαθάησ παξαδείγκαηα έρνπκε ηα ίδηα απνηειέζκαηα. Η ζεηξηαθή for αξηζηεξά θαη ε parfor δεμηά:

for i = 1:8 parfor i = 1:8

A ( i ) = i; A ( i ) = i;

end end

A A

Παξαηεξνύκε όηη θάζε ζηνηρείν ηνπ πίλαθα Α είλαη ίζν κε ηνλ αξηζκό ηεο επαλάιεςεο. Ο βξόρνο parforδίλεη έγθαηξναπνηέιεζκα ζην ζπγθεθξηκέλν παξάδεηγκα δηόηη θάζε ζηνηρείν ηνπ Α εμαξηάηαη κόλν από κία ζπγθεθξηκέλε επαλάιεςε θαη από θακία άιιε. Οη βξόρνη for πνπ εθηεινύλ παξόκνηεο εξγαζίεο είλαη νη πην θαηάιιειεο ππνςεθηόηεηεο γηα κεηαηξνπή ζε βξόρνπο parfor.

2.4Ιδηαηηεξόηεηεο ηεο parfor

Ο βξόρνο parforεθηόο από ηελ αλεμαξηεζία ηεο θάζε επαλάιεςεο απαηηεί επίζεο αλεμαξηεζία ησλ επόκελσλ εληνιώλ από ηελ ζεηξά ησλ επαλαιήςεσλ. Απηό γίλεηαη πην εύθνια αληηιεπηό από ην παξαθάησ παξάδεηγκα:

clear A clear A

d = 0; i = 0; d = 0; i = 0;

for i = 1 : 4 parfor i = 1 : 4

d =i*2; d =i*2;

A ( i ) = d; A ( i ) = d;

end end

A A

(25)

d d

i i

Αλ θαη ηα ηειηθά ζηνηρεία ηνπ πίλαθα Α είλαη ζσζηά θαη ζηα δύν παξαδείγκαηα, ε ηηκέο ηνπ d θαη ηνπ i ζηελ παξάιιειε εθδνρή ηνπ πξνγξάκκαηνο είλαη 0. ΢ηελ ζεηξηαθή εθδνρή ηνπ πξνγξάκκαηνο, κεηά από δηαδνρηθή εθηέιεζε ησλ επαλαιήςεσλ, νη κεηαβιεηέοdθαη iπαίξλνπλ ηηο ηηκέο ηεο ηειεπηαίαο επαλάιεςεο, δειαδή 8 θαη 4 αληίζηνηρα. Δπεηδή όκσο ζηελ παξάιιειε εθδνρή ηνπ πξνγξάκκαηνο νη επαλαιήςεηο εθηεινύληαη κε ηπραία ζεηξά, ζα ήηαλ αδύλαηνλ λα αλαηεζνύλ θάπνηεο ζπγθεθξηκέλεο ηηκέο ζηηο κεηαβιεηέο απηέο. Γηα απηό ην ιόγν ν βξόρνο parfor έρεη πξνγξακκαηηζηεί έηζη ώζηε, νη ηηκέο ησλ κεηαβιεηώλ έμσ από ην βξόρν, λα κελ επεξεάδνληαη θαζόινπ θαη λα παξακέλνπλ ίδηεο πξηλ θαη κεηά ηελ εθηέιεζε ησλ επαλαιήςεσλ. Άξα ινηπόλ γηα λα κπνξνύκε λα κεηαηξέςνπκε ζεηξηαθό βξόρν for ζε παξάιιειν parfor πξέπεη:

1. Όιεο νη επαλαιήςεηο λα είλαη αλεμάξηεηεο κεηαμύ ηεο.

2. Ο θώδηθαο πνπ αθνινπζεί λα κελ εμαξηάηαη από ηελ ζεηξά κε ηελ νπνία εθηεινύληαη νη επαλαιήςεηο.

2.5Μεηαβιεηέο

Όηαλ κέζα ζηνλ βξόρν parfor έλα όλνκα αλαγλσξίδεηαη σο όλνκα κεηαβιεηήο, ακέζσο θαηαηίζεηαη ζε κηα από ηηο παξαθάησ θαηεγνξίεο. Ο βξόρνο parfor επηζηξέθεη ζθάικα όηαλ παξαβηάδνληαη θαλόλεο ηεο αληίζηνηρεο θαηεγνξίαο, πνπ αλήθεη ε κεηαβιεηή, ή όηαλ κηα κεηαβιεηή δελ κπνξεί λα θαηαηεζεί κνλαδηθά ζε θάπνηα θαηεγνξία. Οη θαηεγνξίεο απηέο είλαη:

Καηεγνξία Πεξηγξαθή

Βξόρνπ (loop) Τπεξεηεί σο δείθηεο βξόρνπ γηα ηνπο πίλαθεο

Σεκαρηζκέλε(sliced) Πίλαθαο πνπ επεμεξγάδεηαη από πνιιέο επαλαιήςεηο Μεηαδηδόκελε(broadcast) Μεηαβιεηή πνπ ε ηηκή ηεο θαζνξίδεηαη πξηλ από ηελ

αξρή ηνπ βξόρνπ, ρξεζηκνπνηείηαη κέζα ζηνλ βξόρν, αιιά πνηέ δελ απνδίδεηαη κέζα ζηνλ βξόρν.

Αλαγσγήο(reduction) ΢πζζσξεύεη ηηκή κέζα από ηηο επαλαιήςεηο, ρσξίο λα εμαξηάηαη από ηε ζεηξά εθηέιεζεο επαλαιήςεσλ Πξνζσξηλή(temporary) Μεηαβιεηή πνπ δεκηνπξγείηαη κέζα ζηνλ βξόρν, αιιά

δελ είλαη δηαζέζηκε έμσ από ην βξόρν parfor.

(26)

Πίλαθαο 2.1: Μεηαβιεηέο ηνπ βξόρνπ parfor

Κάζε θαηεγνξία κεηαβιεηώλ εκθαλίδεηαη ζηνλ παξαθάησ θώδηθα:

a = 0 ; c = pi ; z = 0 ;

r = rand (1, 10);

parfor i = 1 : 10

πξνζσξηλή κεηαβιεηή a = i ; κεηαβιεηή βξόρνπ z = z + i ;

κεηαβιεηή αλαγσγήο b ( i ) = r ( i ); ηεκαρηζκέλε κεηαβιεηή εηζόδνπ if i< = c

ηεκαρηζκέλε κεηαβιεηή εμόδνπ d = 2 * a; κεηαδηδόκελε κεηαβιεηή end

end

2.5.1 Μεηαβιεηέο βξόρνπ (loop variables)

Γελ επηηξέπεηαη νπνηαδήπνηε επεμεξγαζία κεηαβιεηώλ βξόρνπ κέζα ζηνλ βξόρν parfor, δηόηη ε αιιαγή απηή ζα κπνξνύζε λα επεξεάζεη εύξνο ηηκώλ ην νπνίν έρεη θιεζεί λα εθηειέζνπλ νη εξγάηεο. Σν παξαθάησ παξάδεηγκα δελ κπνξεί λα εθηειεζηεί δηόηη επεξεάδεηαη κεηαβιεηή βξόρνπ:

parfor i = 1 : n i = i + 1;

a ( i ) = i;

end

2.5.2 Σεκαρηζκέλεο κεηαβιεηέο(sliced variables)

Σεκαρηζκέλε κεηαβιεηή είλαη ε κεηαβιεηή πνπ κπνξεί λα δηαζπαζηεί ζε θνκκάηηα, ηα νπνία ζηελ ζπλέρεηα επεμεξγάδνληαη θαη από ηνπο εξγάηεο θαη από ην θπξίσο πξόγξακκα. ΢ε θάζε επαλάιεςε ηνπ βξόρνπ, επεμεξγάδεηαη θαη δηαθνξεηηθό θνκκάηη ηνπ πίλαθα. Η ρξήζε ησλ κεηαβιεηώλ απηώλ ζπλεηζθέξεη πνιύ ζηελ κείσζε ηνπ ρξόλνπ εθηέιεζεο ηνπ παξάιιεινπ βξόρνπ parfor, δηόηη κεηώλεηαη θαηά πνιύ ην θόζηνο ηεο επηθνηλσλίαο κεηαμύ ησλ εξγαηώλ θαη ηνπ θπξίσο πξνγξάκκαηνο. ΢ε θάζε εξγάηε απνζηέιιεηαη κόλν ηα πεξηερόκελα ηνπ θνκκαηηνύ πνπ ζα επεμεξγαζηεί από εθείλνλ.

(27)

2.5.2.1 Καλόλεο ηεκαρηζκνύ κεηαβιεηώλ

Οη κεηαβιεηέο ηεκαρίδνληαη θαηά ηελ εθηέιεζε ηνπ βξόρνπ parfor κόλν εάλ πιεξνύλ όινπο ηνπο παξαθάησ θαλόλεο:

 Δίδνο δήισζεο πίλαθα – Ο ηξόπνο δήισζεο πξέπεη λα είλαη παξελζέζεηο, είηε ( ) , είηε { } .

 Αλαθνξά κηαο ζέζεο – Η αλαθνξά ζηελ κεηαβιεηή ζε θάζε μερσξηζηή επαλάιεςε ηνπ βξόρνπ parfor πξέπεη λα αθνξά κόλν κηα ζπγθεθξηκέλε ζέζε.

 Σξόπνο αλαθνξάο ζε δείθηε πίλαθα – Ηέθθξαζε κέζα ζηηο παξελζέζεηο πξέπεη λα πεξηιακβάλεη ην πνιύ έλαλ δείθηε, ν νπνίνο είλαη θαη ε κεηαβιεηή βξόρνπ.

 Η θαηάζηαζε ηνπ πίλαθα –Η θαηάζηαζε ηνπ πίλαθα δελ πξέπεη λα αιιάδεη θαηά ηελ εθηέιεζε ηνπ βξόρνπ parfor.

Είδος δήιφζες πίλαθα

Ο παξαθάησ πίλαθαο δείρλεη πνηεο δειώζεηο πίλαθα επηηξέπνπλ ηνλ ηεκαρηζκό ηνπ θαη πνηεο όρη:

Μεηαβιεηέο πνπ δελ ηεκαρίδνληαη Μεηαβιεηέο πνπ ηεκαρίδνληαη

A.x A ( . . . )

A. ( . . . ) A { . . . }

Πίλαθαο 2.2: Καλόλαο ηεκαρηζκνύ κεηαβιεηώλ

Δθηόο από ην πξώην επίπεδν επξεηεξίαζεο (indexing), επηηξέπνληαη όιεο νη έγθπξεο εληνιέο επξεηεξίαζεο ηνπ MATLAB δεύηεξνπ θαη πάλσ επηπέδσλ. Η κεηαβιεηή Α αξηζηεξά δελ ηεκαρίδεηαη, ελώ δεμηά ηεκαρίδεηαη:

A . q { i, 12 } A{ i, 12 } . q

Αλαθορά κηας ζέζες

΢ην παξαθάησ αξηζηεξό παξάδεηγκα ε κεηαβιεηή A δελ ηεκαρίδεηαη δηόηη βιέπνπκε δύν αλαθνξέο ζε δύν δηαθνξεηηθέο ζέζεηο , i θαη i + 1, κέζα ζε κηα επαλάιεςε. ΢ην δεμί κέξνο ηνπ παξαδείγκαηνο ηεκαρίδεηαη επεηδή επηηξέπεηαη λα ρξεζηκνπνηείο θαη ( ) θαη { } κέζα ζηελ ίδηα επαλάιεςε:

parfor i = 1 : k parfor i = 1 : k

B ( : ) = h ( A ( i ), A ( i + 1 ) ); B ( : ) = f ( A ( i ) );

end C ( : ) = g ( A { i } );

(28)

end

Τρόπος αλαθοράς ζε δείθηες πίλαθα

Ο ηξόπνο δήισζεο δείθησλ κέζα ζηηο παξελζέζεηο πξέπεη λα είλαη έλαο από ηνπο παξαθάησ: i, i+k, i-k, k+i, k-i, όπνπ i είλαη ε κεηαβιεηή βξόρνπ θαη κεηαβιεηή k πξέπεη λα είλαη είηε κηα ζηαζεξά, είηε κηα απιή κεηαβιεηή (όρη δείθηεο) θαη θάζε άιινο δείθηεο πξέπεη λα είλαη ή ζηαζεξά ή απιή κεηαβιεηή ή άλσ θάησ ηειεία ή end. ΢ην παξαθάησ παξάδεηγκα αξηζηεξά είλαη κεηαβιεηέο Α πνπ δελ ηεκαρίδνληαη, ελώ δεμηά ηεκαρίδνληαη θαη i είλαη ε κεηαβιεηή βξόρνπ:

A ( i + f ( k ), j , : , 3 ) A ( i + k , j , : , 3) A ( i , 20 : 30 , end ) A ( i , : , end) A ( i , : , s.field1) A ( i , : , k)

Όηαλ ρξεζηκνπνηείηαη κεηαβιεηή βξόρνπ καδί κε άιιεο κεηαβιεηέο γηα πξνζπέιαζε ηνπ πίλαθα, απηέο κεηαβιεηέο δελ επηηξέπεηαη λα αξρηθνπνηνύληαη κέζα ζηνλ βξόρν. Δπίζεο νη κεηαβιεηέο απηέο γίλνληαη ζηαζεξέο θαηά ηελ δηάξθεηα εθηέιεζεο ηνπ βξόρνπ parfor θαη δελ επηηξέπεηαη ε επεμεξγαζία ησλ κεηαβιεηώλ απηώλ κέζα ζηνλ βξόρν. Η κεηαβιεηή βξόρνπ δελ κπνξεί λα ζπλδπαζηεί κε ηνλ εαπηό ηεο.

Καηάζηαζε ηοσ πίλαθα

Η κεηαβιεηέο πνπ ζα ηεκαρηζηνύλ πξέπεη λα έρνπλ ζηαζεξή θαηάζηαζε. Η παξαθάησ κεηαβιεηέο δελ ηεκαρίδνληαη:

A(i , :) = [ ] ; A(end + 1) = i;

Ο ιόγνο γηα ηνλ νπνίν δελ ηεκαρίδεηαη ε κεηαβιεηή Α θαη ζηηο δύν πεξηπηώζεηο είλαη επεηδή κε ηελ αιιαγή ηεο θαηάζηαζεο παξαβηάδνληαη παξαδνρέο πνπ δηέπνπλ ηελ επηθνηλσλία κεηαμύ ηνπ πειάηε θαη ησλ εξγαηώλ.

2.5.2.2Σεκαρηζκέλεο κεηαβιεηέο εηζόδνπ θαη εμόδνπ

Όιεο νη κεηαβιεηέο πνπ ηεκαρίδνληαη ρσξίδνληαη ζε δύν θαηεγνξίεο: εηζόδνπ θαη εμόδνπ. Δίλαη δπλαηόλ κηα κεηαβιεηή λα αλήθεη ηαπηόρξνλα θαη ζηηο δύν θαηεγνξίεο. Σν MATLAB κεηαδίδεη κεηαβιεηέο εηζόδνπ πνπ έρνπλ ηεκαρηζηεί από ην θπξίσο πξόγξακκα ζηνπο εξγάηεο θαη ηεκαρηζκέλεο κεηαβιεηέο εμόδνπ από ηνπο εξγάηεο ζην θπξίσο πξόγξακκα. Μεηαβιεηέο πνπ αλήθνπλ θαη ζηηο δύν

(29)

θαηεγνξίεο κεηαδίδνληαη από θαη πξνο ην θπξίσο πξόγξακκα. ΢ην παξαθάησ παξάδεηγκα ε r είλαη ηεκαρηζκέλε κεηαβιεηή εηζόδνπ, ελώ ε b εμόδνπ:

a = 0;

z = 0;

r = rand ( 1 , 10);

parfor i = 1 : 10 a = i;

z = z + i;

b ( i ) = r ( i );

end

΢ηηο πεξηπηώζεηο πνπ είλαη μεθάζαξν όηη ζε θάζε επαλάιεςε ηνπ βξόρνπ, θάζε ζηνηρείν ηνπ πίλαθα έρεη νξηζηεί πξηλ ηελ ρξήζε ηνπ, ηόηε ν πίλαθαο απηόο δελ ηεκαρίδεηαη. ΢ην παξαθάησ παξάδεηγκα ρξεζηκνπνηνύληαη κόλν νη ηηκέο ηνπ πίλαθα Α, πνπ έρνπλ νξηζηεί πξηλ από ηελ ρξήζε ηνπο, δειαδή νη ηηκέο 32 θαη 17:

parfor i = 1 : n

if θάπνηα ζπλζήθε Α ( i ) = 32;

else

A ( i ) = 17;

end

θώδηθαο βξόρνπ πνπ ρξεζηκνπνηεί ην Α ( i ) end

Αθόκα θαη αλ κηα ηεκαρηζκέλε κεηαβιεηή δελ αλαθέξεηαη μεθάζαξα σο κεηαβιεηή εηζόδνπ ε ρξήζε ηεο κέζα ζηνλ θώδηθα ζα κπνξνύζε λα ην θάλεη απηό. ΢ην παξαθάησ παξάδεηγκα δελ είλαη απαξαίηεην όηη όια ηα ζηνηρεία ηνπ Α ζα κεδεληζηνύλ κέζα ζηνλ βξόρν. Έηζη ινηπόλ ηα αξρηθά ζηνηρεία ηνπ πίλαθα Α ιακβάλνληαη, θξαηνύληαη θαη επηζηξέθνληαη κεηά ηελ εθηέιεζε ηνπ βξόρνπ. Γηα απηό ην ιόγν ν πίλαθαο Α είλαη ηεκαρηζκέλε κεηαβιεηή εηζόδνπ θαη εμόδνπ:

A = 1 : 10;

parfor i = 1 : 10 if rand < 0.5

(30)

A ( i ) = 0;

end end

2.5.3 Μεηαδηδόκελεο κεηαβιεηέο (broadcast variables)

Μεηαδηδόκελε κεηαβιεηή είλαη θάζε άιιε κεηαβιεηή πνπ δελ επεξεάδεηαη από θάπνηα αλάζεζε κέζα ζηνλ βξόρν θαη δελ είλαη νύηε κεηαβιεηή βξόρνπ, νύηε ηεκαρηζκέλε κεηαβιεηή. ΢ηελ αξρή ηνπ βξόρνπ parfor νη ηηκέο ησλ κεηαδηδόκελσλ κεηαβιεηώλ απνζηέιινληαη ζε όινπο ηνπο εξγάηεο. Παξά ην γεγνλόο όηη ε ρξήζε απηήο ηεο κεηαβιεηήο κπνξεί λα είλαη ρξήζηκε ή αθόκα θαη απαξαίηεηε, νη κεγάιεο κεηαδηδόκελεο κεηαβιεηέο ζα κπνξνύζαλ λα απμήζνπλ θαηά πνιύ ηνλ ρξόλν επηθνηλσλίαο αλάκεζα ζηνπο εξγάηεο θαη ην θπξίσο πξόγξακκα. ΢ε νξηζκέλεο πεξηπηώζεηο κπνξεί λα είλαη πην απνηειεζκαηηθή ε ρξήζε ησλ πξνζσξηλώλ κεηαβιεηώλ, αξρηθνπνηώληαο θαη αλαζέηνληαο ηεο κέζα ζηνλ βξόρν.

2.5.4 Μεηαβιεηέο αλαγωγήο (reductionvariables)

Σν MATLAB ππνζηεξίδεη ζεκαληηθή εμαίξεζε, πνπ νλνκάδεηαη αλαγσγή (reduction), ηνπ θαλόλα όηη όιεο νη επαλαιήςεηο πξέπεη λα είλαη εληειώο αλεμάξηεηεο κεηαμύ ηνπο. Η κεηαβιεηή αλαγσγήο ζπζζσξεύεη ηηκή ε νπνία εμαξηάηαη από όιεο ηηο επαλαιήςεηο καδί, αιιά δελ εμαξηάηαη από ηε ζεηξά κε ηελ νπνία εθηεινύληαη νη επαλαιήςεηο. Σν MATLAB ππνζηεξίδεη ηηο κεηαβιεηέο αλαγσγήο κέζα ζηνπο βξόρνπο parfor. Δάλ κηα κεηαβιεηή εκθαλίδεηαη θαη από ηηο δύν πιεπξέο ηεο εθρώξεζεο ηηκήο, ηόηε ε κεηαβιεηή απηή νλνκάδεηαη κεηαβιεηή αλαγσγήο. Παξαθάησ είλαη παξαδείγκαηα κεηαβιεηώλ αλαγσγήο πνπ ππνζηεξίδνληαη από ην MATLAB, όπνπ εθθξ είλαη έθθξαζε ηνπ MATLAB:

Μεηαβιεηέο αλαγωγήο

X = X +εθθξ X = εθθξ + Υ

Υ = Υ - εθθξ Υ = εθθξ - Υ

X = X .* εθθξ X =εθθξ .* Υ

X = X * εθθξ X = εθθξ * Υ

X = X&εθθξ X = εθθξ& Υ

X = X | εθθξ X = εθθξ | Υ

X = [X, εθθξ] X = [εθθξ, Υ]

X = [X; εθθξ] X = [εθθξ; Υ]

(31)

X = min (X, εθθξ) X = min (εθθξ, Υ)

X = max (X, εθθξ) X = max (εθθξ, Υ)

X = union (X, εθθξ) X = union (εθθξ, Υ) X = intersect (X, εθθξ) X = intersect (εθθξ, Υ) Πίλαθαο 2.3: Μεηαβιεηέο αλαγσγήο

Κάζε έθθξαζε από ηνλ παξαπάλσ πίλαθα θαιείηαη σο εθρώξεζε αλαγσγήο θαη θαηά θαλόλα νη κεηαβιεηέο αλαγσγήο κπνξνύλ λα εκθαληζηνύλ κόλν ζηηο εθρσξήζεηο ηηκώλ απηνύ ηνπ ηύπνπ. Σν παξαθάησ παξάδεηγκα είλαη θιαζηθή πεξίπησζε ρξήζεο κεηαβιεηήο αλαγσγήο Υ:

X = … ; % Η αξρηθνπνίεζε ηεο κεηαβιεηήο Υ parfori= 1:n

X = X + d(i) end

Σν ηειηθό απνηέιεζκα ηνπ βξόρνπ απηνύ είλαη ηζνδύλακν κε ην παξαθάησ άζξνηζκα, ζην νπνίν θάζε ζηνηρείν d(i) ππνινγίδεηαη ζε δηαθνξεηηθή επαλάιεςε:

X = X + d(1) + . . . + d (n)

Δάλ ν βξόρνο ήηαλ θιαζηθό for, ηόηε ε κεηαβιεηή Υ ζε θάζε επαλάιεςε ζα έπαηξλε ηελ αληίζηνηρε ηηκή, είηε πξηλ ην βξόρν, είηε από ηελ πξνεγνύκελε επαλάιεςε. Ωζηόζν απηό δελ ζπκβαίλεη θαη κε ην βξόρν parfor.

΢ην βξόρν parfor, ε ηηκή ηνπ Υ δελ κεηαθέξεηαη από ην θπξίσο πξόγξακκα ζηνπο εξγάηεο ή από εξγάηε ζε εξγάηε. Ο θάζε εξγάηεο ππνινγίδεη ην δηθό ηνπ ππνζύλνιν αζξνηζκάησλ ηνπ d(i), πνπ αλήθεη ζην ζύλνιν ηνπ 1:n. Οη εξγάηεο επηζηξέθνπλ ηα απνηειέζκαηα πίζσ ζην θπξίσο πξόγξακκα, ην όπνην ζπλζέηεη ηελ ηειηθή ηηκή ηνπ Υ από ηα ππνζύλνια πνπ ηνπ έρνπλ επηζηξέςεη νη εξγάηεο.

Γίλεηαηακέζσο αληηιεθηώ ην όηη ζηελ πεξίπησζε ησλ κεηαβιεηώλ αλαγσγήο δελ κπνξνύκε λα έρνπκε επηηάρπλζε ηνπ ρξόλνπ εθηέιεζεο κε ηνλπαξαιιειηζκό. ΢ην παξαθάησ παξάδεηγκα εθηεινύκε ηνλ βξόρν 100.000.000 θνξέο ώζηε λα γίλεη αληηιεπηή ε θαζπζηέξεζε:

΢εηξηαθό πξόγξακκα Παξάιιειν πξόγξακκα

tic tic

x = 0; x = 0;

for i = 1 : 100000000 parfor i = 1 : 100000000

x = x + i; x = x + i;

(32)

end end

x x

toc toc

Παξαθάησ θαίλνληαη ηα απνηειέζκαηα ηεο ζεηξηαθήο εθηέιεζεο θαη ηεο παξάιιειεο κε 2, 3 θαη 4 εξγάηεο:

΢εηξηαθή 2 εξγάηεο 3 εξγάηεο 4 εξγάηεο Υ 5.0000e+015 5.0000e+015 5.0000e+015 5.0000e+015 Υξόλνο

1νο

0.751140 seconds

35.691738 seconds

24.624766 seconds

18.837196 seconds Υξόλνο

2νο

0.752246 seconds

36.002763 seconds

24.586883 seconds

18.897161 seconds Πίλαθαο 2.4: ΢ύγθξηζε παξάιιεινπ θαη ζεηξηαθνύ πξνγξακκάησλ

Σν παξαθάησ παξάδεηγκα ππνινγίδεη αθνινπζία Fibonacci:

f = zeros (1, 50);

f (1) = 1;

f (2) = 2;

parforn = 3 : 50

f (n) = f (n-1) + f (n - 2);

end

Σν MATLAB δελ επηηξέπεη ηελ εθηέιεζε απηνύ ηνπ παξαδείγκαηνο παξάιιεια κε ηελ ρξήζε ηεο parfor. Ο ιόγνο γηα ηνλ νπνίν δελ επηηξέπεη είλαη επεηδή ε ηηκή ηεο f δελ ππνινγίδεηαη ζε θάζε επαλάιεςε αλεμάξηεηα, αιιά εμαξηάηαη από ηηο δύν πξνεγνύκελεο επαλαιήςεηο.

Βαζηθνί θαλόλεο κεηαβιεηώλ αλαγωγήο

Γηα θάζε κεηαβιεηή αλαγφγής, ζα πρέπεη λα τρεζηκοποηείηαη ίδηα ζσλάρηεζε ή δηαδηθαζία αλαγφγής ζε θάζε αλάζεζε αλαγφγής.

΢ην παξαθάησ παξάδεηγκα ν βξόρνο parfor πνπ είλαη από αξηζηεξά δελ εθηειείηαη δηόηη ρξεζηκνπνηεί + ζηελ πξώηε πεξίπησζε θαη [ , ] ζηελ δεύηεξε. Ο βξόρνο parforπνπ είλαη δεμηά εθηειείηαη θαλνληθά:

parfor i = 1 : n parfor i = 1 : n

if A > 5 * k if A > 5 * k

(33)

A = A + i; A = A + i;

else else

A = [ A , 4 + i ]; A = A + i + 5 * k;

end end

% … παξαθάησ εληνιέο % … παξαθάησ εληνιέο

end end

Εάλ ε αλάζεζε αλαγφγής τρεζηκοποηεί * ή [ , ], ηόηε ζε θάζε αλάζεζε αλαγφγής ηοσ Χ ζα πρέπεη λα ορίδεηαη ζηαζερά φς ηο πρώηο επητείρεκα ή ζηαζερά φς ηο δεύηερο.

΢ην παξαθάησ παξάδεηγκα ν βξόρνο parfor πνπ είλαη από αξηζηεξά δελ εθηειείηαη δηόηη ε κεηαβιεηή αλαγσγήο εκθαλίδεηαη ζηελ ζπλέλσζε θαη αξηζηεξά θαη δεμηά. Ο βξόρνο parfor πνπ είλαη δεμηά εθηειείηαη θαλνληθά:

parfor i = 1 : n parfor i = 1 : n

if A > 5 * k if A > 5 * k

A = [ A , 4 + i ]; A = [ A , 4 + i ];

else else

A = [ r ( i ) , A ]; A = [ A , r ( i ) ];

end end

% … παξαθάησ εληνιέο % … παξαθάησ εληνιέο

end end

2.5.5 Πξνζωξηλέο κεηαβιεηέο (temporary variables)

Πξνζσξηλή κεηαβιεηή είλαη θάζε άιιε κεηαβιεηή πνπ είλαη ζηόρνο ηεο άκεζεο αλάζεζεο θαη δελ είλαη κεηαβιεηή αλαγσγήο θαη δελ είλαη πίλαθαο. ΢ην παξαθάησ παξάδεηγκα κεηαβιεηέο aθαη dείλαη πξνζσξηλέο:

a = 0 ; z = 0 ;

r = rand ( 1 , 10 ) ; parfor i = 1 : 10 a = i ;

Referências

Documentos relacionados