Bài tập lớn môn Kiến trúc máy tính về "Bốn nghiên cứu điển hình" | Học viện Công nghệ Bưu chính Viễn thông

Bài tập lớn môn Kiến trúc máy tính về "Bốn nghiên cứu điển hình" của Học viện Công nghệ Bưu chính Viễn thông với những kiến thức và thông tin bổ ích giúp sinh viên tham khảo, ôn luyện và phục vụ nhu cầu học tập của mình cụ thể là có định hướng ôn tập, nắm vững kiến thức môn học và làm bài tốt trong những bài kiểm tra, bài tiểu luận, bài tập kết thúc học phần, từ đó học tập tốt và có kết quả cao cũng như có thể vận dụng tốt những kiến thức mình đã học vào thực tiễn cuộc sống. Mời bạn đọc đón xem!

lOMoARcPSD|36991220
Bn nghiên cứu điển hình được gii thiu đầu chương dẫn đến các chương
trình song song quá phc tạp và quá dài để s dng
Thay vào đó, phần này trình bày mt phiên bản đơn giản hóa: b giải phương
trình. B giải phương trình tìm hiểu sâu hơn minh ha cách thc hin mt
chương trình song song bng cách s dng ba hình lp trình. Tt c đưc
viết được viết bng C hoc gi ging Pascal được tăng cường vi các phn
m rộng đơn giản cho phép song song, do đó thể hin các giao tiếp nguyên thy
đng b hóa bản không gian đa ch dùng chung hoc trừu tượng được
cộng tác đề chuyn thông tin. Các ngôn ng tun t tiêu chuẩn đưc b sung
cho tính song song cũng phản ánh trng thái ca hu hết các lp trình song song
thc tế ngày nay.
2.3.1 Nhân ca b giải phương trình
Nhân ca b giải phương trình giải một phương trình vi phân riêng đơn giản trên
i, s dụng phương pháp được gọi là phương pháp vi phân hữu hn. Nó hot
động trên mt mng hai chiều thông thường hoc mt mng gm (n+2)x(n+2)
phn t. Các hàng ct vin của i cha các giá tr biên không thay đổi,
trong khi n x n điểm bên trong được cp nht bi b gii, bắt đầu t các giá tr
ban đu ca chúng . Vic tính toán tiến hành qua mt s ln quét. Trong mi ln
quét, nó hoạt động trên tt c n x n điểm bên trong của lưới. Đối vi mỗi điểm,
nó thay thế giá tr ca nó bng giá tr trung bình trng s ca chính nó và bn
đim lân cn gn nht - trên, dưới, trái phi (xem Hình 2.6). Các cp nht
đưc thc hin ti ch trong lưới, do đó, tính toán cập nht cho một điểm s
thy các giá tr mi của các điểm trên và bên trái của điểm đó và các giá trị
của các điểm bên i bên phi của điểm đó. Hình thức cp nhật này được
gọi phương pháp Gauss Seidel. Trong mi ln quét, hạt nhân cũng tính toán
s khác bit trung bình ca mt phn t đưc cp nht so vi giá tr trước đó
ca nó. Nếu s khác bit trung bình này trên tt c các ments nh hơn một tham
s 'dung sai ' được xác định trước, thì giải pháp được cho là đã hội t và b gii
s thoát ra khi kết thúc quá trình quét. Nếu không, thc hin mt ln quét
khác và kim tra s hi t mt ln na. Mã gi tun t đưc hin th trong Hình
2.7.
lOMoARcPSD|36991220
HÌNH 2.6 Điểm đen là A[i,j] trong mảng hai chiều đi diện cho ới và được cp
nht bng cách s dng chính bốn điểm bóng lân cn gn nht ca
nó theo phương trình ở bên phi
2.3.2 Phân tách
Hình 2.7
lOMoARcPSD|36991220
Đối với các chương trình cấu trúc vòng trong các vòng lp liên tiếp hoc nhóm
vòng lp, một cách đơn giản để xác định tính đng thi là bắt đầu t chính cu
trúc vòng lp. Chúng ta kim tra lần lượt các vòng lp hoc nhóm vòng lp trong
chương trình, xem liu các ln lp ca chúng th đưc thc hin song song
hay không và xác định xem điều này có đưa ra đ đồng thời hay không. Sau đó,
chúng ta th tìm kiếm s đồng thi gia các ng lp hoc thc hin theo
mt cách tiếp cn khác nếu cn. Chúng ta hãy theo dõi cách tiếp cn da trên
cấu trúc chương trình này trong Hình 2.7.
Mi ln lp li ca vòng lp while ngoài cùng, bắt đầu t dòng 15, s quét qua
toàn b i. Nhng ln lặp này rõ ràng là không độc lp vì d liệu được sửa đổi
trong mi ln lp và s đưc truy cp trong ln tiếp theo. Xem xét t hp vòng
lp các dòng 17-24 b qua các dòng cha di
昀昀
. Xem xét vòng lp bên
trong trước (vòng lp th j bắt đầu t dòng 18). Mi ln lp ca vòng lp này
đọc điểm lưới (A[i][j-1]) đã được ghi trong ln lặp trước. Do đó, các lần lp ph
thuc tun tchúng ta gọi đây là vòng lặp tun t. Vòng lp bên ngoài ca t
hp lặp này cũng tuần t, tính t phn t hàng th i - 1 được viết trong ln
lặp trước (th i-1) ca vòng lp này. vậy, phân tích đơn giản v các vòng lp
hin s ph thuc ca chúng phát hin ra không s đồng thi trong
chương trình ví d này
Nói chung, mt gii pháp thay thế cho vic da vào cấu trúc chương trình để tìm
s đồng thi quay tr li s ph thuộc bản trong các thuật toán bản
đưc s dng, không ph thuộc vào chương trình hoặc cu trúc vòng lp. Trong
b giải phương trình* , chúng ta có thể xem xét ph thuộc cơ bản trong vic to
và s dng các giá tr d liu (d liu ph thuc) mc đ chi tiết của các điểm
i riêng lẻ. Như đã thảo luận trước đó, vì tính toán tiến hành t trái sang phi
t trên xuống dưi trong lưới, tính toán a điểm lưới c th trong chương trình
tun t s dng các giá tr cp nht của lưới điểm trc tiếp phía trên và bên trái.
Mu ph thuc d liệu này được hin th trong Hình 2.8. Kết qu là các phn t
dọc theo đường chéo nhất đnh (tây nam đến đông bắc) không ph thuc
gia chúng vi nhau th đưc tính toán song song, trong khi các đim
trong đường chéo tiếp theo ph thuc vào mt s điểm trong đường trước đó
mt. T sơ đồ này, chúng ta có th quan sát thy công vic ca O liên quan đến
mi quét, có mt s đồng thi c hu t l vi n dọc theo đường chéo chng
mt s ph thuc tun t t l vi n dọc theo đường chéo.
lOMoARcPSD|36991220
Hình 2.8
Gi s chúng ta quyết định phân chia công việc thành các điểm lưới riêng l đ
cp nht một điểm lưi duy nht là mt nhim v. Đầu tiên, chúng ta có th gi
nguyên cu trúc vòng lp của chương trình chèn đng b hóa điểm-điểm để
đảm bo rng giá tr mi cho một điểm lưới đã được to ra trong quá trình quét
hin tại trước khi nó được s dng bởi các điểm bên dưới hoc bên phải. Do đó,
các t hp vòng lp khác nhau (của chương trình tuần t) thm chí các quá
trình quét khác nhau th đưc tiến hành đồng thi trên các phn t khác
nhau, min là nhng s ph thuc mc phn t không b vi phạm. Nhưng chi
phí của đồng b hóa này cấp điểm lưới th quá cao. Th hai, chúng ta
th thay đi cu trúc vòng lp: vòng lặp for đầu tiên (dòng 17) th t quá
đưng chéo vòng lp for bên trong th nm trên các phn t trong vòng
lp chống đường chéo. Sau đó, vòng lp bên trong th đưc thc thi song
song hoàn toàn , vi s đồng b hóa toàn cc gia các ln lp ca vòng lp for
bên ngoài (để bo toàn các ph thuc mt cách thn trọng qua các đường chng
chéo). S liên quan s đưc sp xếp rất khác nhau trong hai trường hp, đặc
bit nếu s liên quan trong các thông đip ràng. Tuy nhiên, cách làm này
cũng vấn đề. Đồng b hóa toàn b vn din ra rất thưng xuyên mt ln
cho mi ln chng chéo. Ngoài ra, s ln lp trong ng lp song song (bên trong)
thay đổi với các ý tưởng liên tiếp ca vòng lặp bên ngoài, khi kích thước ca các
đưng chống chéo thay đi, gây ra s mt cân bng ti gia các quá trình, đc
biệt là trong các đưng chng chéo ngắn hơn. Do tn suất đồng b hóa, mt cân
lOMoARcPSD|36991220
bng tải đ phc tp ca lp trình, c hai cách tiếp cận này đều không được
s dng nhiu trên các kiến trúc hiện đại.
Cách tiếp cn th ba và ph biến nht là da trên vic khai thác kiến thc v vn
đề t ra ngoài s ph thuộc trong chính chương trình tuần t. Th t mà các
điểm nút trong lưới được cp nht trong thut toán tun t (t trái sang phi
t trên xuống dưới) trên thc tế không phải là cơ bản đối với phương pháp giải
Gauss -Seidel; nó đơn gin là mt th tth thun tin đ lp trình tun t.
Vì phương pháp GaussSeidel không phi là một phương pháp giải chính xác mà
lp lại cho đến khi hi t, chúng ta th cp nhật các điểm lưới theo mt th
t khác min chúng ta s dng các giá tr cp nhật cho các điểm ới đủ
thường xuyên.2 Mt th t như vậy thường được s dng cho các phiên bn
song song được gi th t đỏ-đen . Ý tưởng đây tách các điểm lưới thành
các điểm đ đen xen k như trên bàn cờ (xem Hình 2.9) để không điểm đỏ
nào tiếp giáp với điểm đen hoặc ngược li. mỗi điểm ch đọc bốn điểm lân cn
gn nht của nó, đ tính một điểm đỏ nhất định, chúng ta không cn giá tr cp
nht ca bt k điểm đỏ nào khác; chúng ta ch cn các giá tr cp nht ca các
điểm đen phía trên và bên trái của nó (trong mt ln quét tiêu chuẩn) và ngược
lại để tính toán các điểm đen . Do đó, chúng ta thể chia quét i thành hai
giai đoạn, đu tiên tính toán tt c các điểm màu đ và sau đó tính toán tt c
các điểm màu đen. Trong mỗi giai đon không tn ti s ph thuc gia các
điểm lưới, ta có th nh toán tt c n^2/2 điểm đ song song, đồng b hóa toàn
bộ, sau đó tính toán tất c n2/2 điểm đen song song cùng c. Đồng b hóa toàn
cc là không nht thiết và có th đưc thay thế bằng đồng b hóa điểm điểm
cấp điểm lưới vì không phi tt c các điểm đen cần phải đợi tt c các điểm đ
được tính toán ; nhưng đồng b toàn cc rt tin li.
Vì th t màu đỏ-đen khác với th t tun t gc ca chúng ta, nó có th hi t
trong ít hoc nhiu lần quét hơn. cũng thể to ra các giá tr cui cùng khác
nhau cho các điểm lưới (mc vn nm trong dung sai hi t). Trong khi các
bn cp nhật điểm đ không thy các giá tr cp nht ca bt k điểm đen nào,
các điểm đen sẽ thy các giá tr cp nht ca tt c các vùng lân cận màu đỏ ca
chúng t giai đoạn đầu tiên ca quá trình quét hin ti, không ch các giá tr
bên trái phía trên. Th t mi tun t tốt hơn hay xấu hơn thứ t tùy
thuc vào vấn đề. Th t màu đỏ-đen cũng lợi thế các giá tr đưc to ra
các thuc tính hi t du hiu ca s ng b x được s dng vì không
s ph thuc nào xy ra trong một giai đoạn. Nếu bản thân chương trình tuần
t s dng th t đỏ đen, tính song song hoàn toàn không thay đi kết qu
hoc đc tính hi tụ, điều đó làm cho chương trình song song được xác định
lOMoARcPSD|36991220
Xem xét một phương pháp đơn giản hơn nhưng vẫn ph biến mà không tách các
điểm thành màu đỏ màu đen. Phương pháp này ch đơn giản b qua s
ph thuc giữa các điểm i trong vòng quét. Trong quá trình quét, mt quá
trình ch cn cp nht các giá tr ca tt c các điểm lưới được ch đnh ca nó,
truy cp các vùng lân cn gn nht ca nó cho dù
chúng đã được cp nht trong quá trình quét hin ti bởi các quy trình được ch
định của chúng hay chưa. Khi chỉ s dng mt quy trình duy nhất, điều này mc
định là th t cp nht tun t ban đầu. Khi nhiều quy trình được s dng, th
t không th đoán trước được; nó ph thuc vào s phân công ca con tr ti
các quy trình, s ợng quy trình đưc s dng tc độ thực thi các đim
chuyên bit khác nhau ti thời điểm chy. Vic thc thi không còn mang tính
quyết định và s ln quét cn thiết để hi t có th ph thuc vào s ng quy
trình được s dụng; tuy nhiên, đối vi hu hết các nhim v, s ln quét s không
thay đổi nhiu.
Hình 2.9
Nếu chúng ta chn phân tách thành các ln lp vòng lp bên trong riêng l (các
điểm lưới), chúng ta có th th hiện chương trình bằng cách sa li các dòng 15-
26 ca Hình 2.7. Hình 2.10
phần được đánh dấu cho thấy các thay đổi đối với in đậm : tt c nhng
chúng ta đã làm thay thế t khóa for trong các vòng lp song song bng for_all.
Mt ng lp for_all ch đơn giản là cho h thng phn cng / phn mềm bản
lOMoARcPSD|36991220
rng tt c các ln lp ca vòng lặp đều th đưc thc thi song song không
cn quan tâm v s ph thuộc, nhưng không nói về vic thay thế. Mt t
vòng lp c hai cấp độ lồng for_all nghĩa tt c các ln lp trong t
vòng lp (n * n hoc n^2 đây) thể đưc thc hin song song. H thng
th ch định sp xếp song song theo bt k cách nào chn; các ca
chương trình có chức năng v điu này . Tt c nhng gì nó gi định là đồng b
hóa toàn b ngm đnh sau mt t vòng lp for_all .
Hình 2.10
Trên thc tế, chúng ta th phân tách vic tính toán không ch thành các ln
lp vòng lp bên trong riêng l thành bt k nhóm lp tng hp nào chúng
ta mong mun. Gi s chúng ta mun phân tách thành các hàng điểm ới để
công vic ca toàn b hàng mt nhim v không th phân tách. Chúng ta
th th hiện điều này bng cách làm cho vòng lp bên trong trên dòng 18 tr
thành mt vòng lp tun t , thay đổi for_all ca nó tr li thành for , nhưng để
vòng lp trên các hàng trên dòng 17 là mt vòng lp for_all song song.
2.3.3 Gán
Bng cách s dng phân tách da trên hàng, chúng ta hãy xem cách chúng ta
th gán các hàng cho các đim chuyên nghip mt cách rõ ràng. Tùy chọn đơn
gin nht mt nhim v tĩnh (xác định trước) mi quy trình chu trách
nhim cho mt khi hàng lin kề, như được hin th trong Hình 2.11, hàng bên
trong I
Hàng ni bên trong i đưc ch định x lý vi p là s tiến trình
. Các nhim v tĩnh thay thế cho vic gán khi , chng hạn như gán theo chu
k trong đó các hàng xen kẽ giữa các quy trình (quy trình i đưc gán các hàng i,
i + p, v.v. ). Chúng ta cũng có th xem xét mt nhim v động trong đó mỗi quá
lOMoARcPSD|36991220
trình lp li vic ly hàng kh dng tiếp theo (chưa đưc tính toán) sau khi
kết thúc vi mt nhim v. S phân chia vấn đề thành nhng phần đơn giản này
th hin s cân bng ti tt các quy trình min là s ng hàng bên trong chia
hết cho s ng quy trình. Vì công vic trên mỗi hàng là đồng nht.
Ta thy rằng các phép gán tĩnh đã làm gim thêm tính song song hoc mức độ
đồng thi ; t n đến p, bng cách làm cho các tác v lớn hơn phép gán khi
đã giảm giao tiếp cn thiết bng cách gán các hàng lin k cho cùng mt b x
lý. T l
giao tiếp trên tính toán hin ch bng
Sau khi kim tra s phân tách gán, chúng ta đã sẵn sàng để điu phối . Điều
này yêu cu chúng ta ghim hình lp trình xung. Chúng tôi bắt đầu vi
hình d song song d liu mức cao sau đó lấy hai hình kết hợp chương
trình chính d liu song song các hình khác th biên dch thành:
không gian địa ch dùng chung và s giao tiếp rõ ràng.
2.3.4 Điều phi theo mô hình d liu song song
Mô hình d liu song song rt tin lợi đối vi ht nhân ca b giải phương trình
việc coi tính toán như một luồng điều khiển đơn lẻ thc hin các phép biến
đổi toàn cc trên cu trúc d liu mng lớn là điều hin nhiên ( Hillis 1985; Millis
và Steele 1986).
lOMoARcPSD|36991220
gi cho b giải phương trình song song d liệu đưc th hin trong Hình
2.12. Gi định rng các khai báo toàn cc (bên ngoài bt k th tc nào) t
d liệu được chia s và tt c các d liu khác (ví d, d liệu trên ngăn chứa th
tục) được ưu tiên trong một quy trình. D liệu được chia s đưc phân b đng,
chng hn như mảng A, được cp phát bng mt lnh gi G _MALLOC thay
một malloc thông thường. G_MALLOC phân b d liu trong một vùng được
chia s ca b nh heap th đưc truy cp sửa đổi bi bt k quá trình
nào. S khác biệt chính (đưc hin th bng ch in đậm) t chương trình tuần
t vic s dng các vòng lp for_all cho các vòng lp, vic s dng câu lnh
DECO, biến mydi 昀昀 riêng cho mi quy trình vic s dng mt tuyên b
REDUCE .
Chúng ta đã thấy rng các vòng lp for_all ch định rng các vòng lp th đưc
hình thành song song. Các quy trình song song khác vi quy trình thc thi chín
lung kiểm soát được ngầm định trong hình d liu song song ch hot
động trongcác vòng lp song song này. Câu lnh DECOMP có hai mục đích. Đầu
tiên, nó ch định vic gán các ln lp li cho các quy trình. đây, nó là phép gán
lOMoARcPSD|36991220
[ BLOCK, *, nprocs), có nghĩa các hàng đầu tiên được phân chia thành các khi
xen k gia các tiến trình nprocs phn th hai hoàn toàn không được phân
chia. Vic ch định [CYCLIC, *, nprocs ] s ng ý phân vùng theo chu k hoc xen
k các hàng gia các tiến trình nprocs , ch định [ BLOCK, BLOCK, nprocs] s ng
ý phân vùng khi lin k 2D ch định [ *, CYCLIC , nprocs] s ng ý phân
vùng xen k các ct. Vai trò th hai ca DECOMP là nó cũng chỉ định cách d liu
ới được phân phi gia các b nh trên máy. Biến mydi 昀昀 đưc s dng
để cho phép mi quá trình lần đầu tiên tính toán độc lp tng các giá tr chênh
lệch cho các điểm lưới được ch đnh của nó. Sau đó, câu lnh REDUCE ch đạo
h thng ni tt c các giá tr mydi 昀昀 tng phn li vi nhau thành biến di
th đưc chia sẻ. Điều này làm tăng tính đồng thi. Hoạt động REDUCE
thc hin gim, là mt kch bản trong đó nhiều quy trình (tt c, trong mt quy
trình gim toàn cc ) thc hin các hoạt động liên kết (chng hạn như cộng, ly
mc tối đa, v.v.) trên cùng một d liệu được chia s mt cách hp lý . Tính liên
ng ng ý rng th t ca các hoạt động không quan trng. Các phép toán
du phẩy đng chng hạn như các phép toán đây, không liên kết ch tích
làm tròn ph thuc vào th t các phép toán. Tuy nhiên, các tác đng này rt
nh.
| 1/10

Preview text:

lOMoARcPSD| 36991220
Bốn nghiên cứu điển hình được giới thiệu ở đầu chương dẫn đến các chương
trình song song quá phức tạp và quá dài để sử dụng
Thay vào đó, phần này trình bày một phiên bản đơn giản hóa: bộ giải phương
trình. Bộ giải phương trình tìm hiểu sâu hơn và minh họa cách thực hiện một
chương trình song song bằng cách sử dụng ba mô hình lập trình. Tất cả được
viết được viết bằng C hoặc mã giả giống Pascal được tăng cường với các phần
mở rộng đơn giản cho phép song song, do đó thể hiện các giao tiếp nguyên thủy
và đồng bộ hóa cơ bản mà không gian địa chỉ dùng chung hoặc trừu tượng được
cộng tác đề chuyền thông tin. Các ngôn ngữ tuần tự tiêu chuẩn được bổ sung
cho tính song song cũng phản ánh trạng thái của hầu hết các lập trình song song thực tế ngày nay.
2.3.1 Nhân của bộ giải phương trình
Nhân của bộ giải phương trình giải một phương trình vi phân riêng đơn giản trên
lưới, sử dụng phương pháp được gọi là phương pháp vi phân hữu hạn. Nó hoạt
động trên một mảng hai chiều thông thường hoặc một mảng gồm (n+2)x(n+2)
phần tử. Các hàng và cột ở viền của lưới chứa các giá trị biên không thay đổi,
trong khi n x n điểm bên trong được cập nhật bởi bộ giải, bắt đầu từ các giá trị
ban đầu của chúng . Việc tính toán tiến hành qua một số lần quét. Trong mỗi lần
quét, nó hoạt động trên tất cả n x n điểm bên trong của lưới. Đối với mỗi điểm,
nó thay thế giá trị của nó bằng giá trị trung bình có trọng số của chính nó và bốn
điểm lân cận gần nhất - trên, dưới, trái và phải (xem Hình 2.6). Các cập nhật
được thực hiện tại chỗ trong lưới, do đó, tính toán cập nhật cho một điểm sẽ
thấy các giá trị mới của các điểm ở trên và bên trái của điểm đó và các giá trị cũ
của các điểm bên dưới và bên phải của điểm đó. Hình thức cập nhật này được
gọi là phương pháp Gauss Seidel. Trong mỗi lần quét, hạt nhân cũng tính toán
sự khác biệt trung bình của một phần tử được cập nhật so với giá trị trước đó
của nó. Nếu sự khác biệt trung bình này trên tất cả các ments nhỏ hơn một tham
số 'dung sai ' được xác định trước, thì giải pháp được cho là đã hội tụ và bộ giải
sẽ thoát ra khi kết thúc quá trình quét. Nếu không, nó thực hiện một lần quét
khác và kiểm tra sự hội tụ một lần nữa. Mã giả tuần tự được hiển thị trong Hình 2.7. lOMoARcPSD| 36991220
HÌNH 2.6 Điểm đen là A[i,j] trong mảng hai chiều đại diện cho lưới và được cập
nhật bằng cách sử dụng chính nó và bốn điểm tô bóng là lân cận gần nhất của
nó theo phương trình ở bên phải 2.3.2 Phân tách Hình 2.7 lOMoARcPSD| 36991220
Đối với các chương trình có cấu trúc vòng trong các vòng lặp liên tiếp hoặc nhóm
vòng lặp, một cách đơn giản để xác định tính đồng thời là bắt đầu từ chính cấu
trúc vòng lặp. Chúng ta kiểm tra lần lượt các vòng lặp hoặc nhóm vòng lặp trong
chương trình, xem liệu các lần lặp của chúng có thể được thực hiện song song
hay không và xác định xem điều này có đưa ra đủ đồng thời hay không. Sau đó,
chúng ta có thể tìm kiếm sự đồng thời giữa các vòng lặp hoặc thực hiện theo
một cách tiếp cận khác nếu cần. Chúng ta hãy theo dõi cách tiếp cận dựa trên
cấu trúc chương trình này trong Hình 2.7.
Mỗi lần lặp lại của vòng lặp while ngoài cùng, bắt đầu từ dòng 15, sẽ quét qua
toàn bộ lưới. Những lần lặp này rõ ràng là không độc lập vì dữ liệu được sửa đổi
trong mỗi lần lặp và sẽ được truy cập trong lần tiếp theo. Xem xét tổ hợp vòng
lặp ở các dòng 17-24 và bỏ qua các dòng chứa di 昀昀. Xem xét vòng lặp bên
trong trước (vòng lặp thứ j bắt đầu từ dòng 18). Mỗi lần lặp của vòng lặp này
đọc điểm lưới (A[i][j-1]) đã được ghi trong lần lặp trước. Do đó, các lần lặp phụ
thuộc tuần tự và chúng ta gọi đây là vòng lặp tuần tự. Vòng lặp bên ngoài của tổ
hợp lặp này cũng là tuần tự, tính từ phần tử hàng thứ i - 1 được viết trong lần
lặp trước (thứ i-1) của vòng lặp này. Vì vậy, phân tích đơn giản về các vòng lặp
hiện có và sự phụ thuộc của chúng phát hiện ra không có sự đồng thời trong chương trình ví dụ này
Nói chung, một giải pháp thay thế cho việc dựa vào cấu trúc chương trình để tìm
sự đồng thời là quay trở lại sự phụ thuộc cơ bản trong các thuật toán cơ bản
được sử dụng, không phụ thuộc vào chương trình hoặc cấu trúc vòng lặp. Trong
bộ giải phương trình* , chúng ta có thể xem xét phụ thuộc cơ bản trong việc tạo
và sử dụng các giá trị dữ liệu (dữ liệu phụ thuộc) ở mức độ chi tiết của các điểm
lưới riêng lẻ. Như đã thảo luận trước đó, vì tính toán tiến hành từ trái sang phải
và từ trên xuống dưới trong lưới, tính toán a điểm lưới cụ thể trong chương trình
tuần tự sử dụng các giá trị cập nhật của lưới điểm trực tiếp phía trên và bên trái.
Mẫu phụ thuộc dữ liệu này được hiển thị trong Hình 2.8. Kết quả là các phần tử
dọc theo đường chéo nhất định (tây nam đến đông bắc) không có phụ thuộc
giữa chúng với nhau và có thể được tính toán song song, trong khi các điểm
trong đường chéo tiếp theo phụ thuộc vào một số điểm trong đường trước đó
một. Từ sơ đồ này, chúng ta có thể quan sát thấy công việc của O liên quan đến
mỗi quét, có một sự đồng thời cố hữu tỷ lệ với n dọc theo đường chéo chống và
một sự phụ thuộc tuần tự tỷ lệ với n dọc theo đường chéo. lOMoARcPSD| 36991220 Hình 2.8
Giả sử chúng ta quyết định phân chia công việc thành các điểm lưới riêng lẻ để
cập nhật một điểm lưới duy nhất là một nhiệm vụ. Đầu tiên, chúng ta có thể giữ
nguyên cấu trúc vòng lặp của chương trình và chèn đồng bộ hóa điểm-điểm để
đảm bảo rằng giá trị mới cho một điểm lưới đã được tạo ra trong quá trình quét
hiện tại trước khi nó được sử dụng bởi các điểm bên dưới hoặc bên phải. Do đó,
các tổ hợp vòng lặp khác nhau (của chương trình tuần tự) và thậm chí các quá
trình quét khác nhau có thể được tiến hành đồng thời trên các phần tử khác
nhau, miễn là những sự phụ thuộc ở mức phần tử không bị vi phạm. Nhưng chi
phí của đồng bộ hóa này ở cấp điểm lưới có thể quá cao. Thứ hai, chúng ta có
thể thay đổi cấu trúc vòng lặp: vòng lặp for đầu tiên (dòng 17) có thể vượt quá
đường chéo và vòng lặp for bên trong có thể nằm trên các phần tử trong vòng
lặp chống đường chéo. Sau đó, vòng lặp bên trong có thể được thực thi song
song hoàn toàn , với sự đồng bộ hóa toàn cục giữa các lần lặp của vòng lặp for
bên ngoài (để bảo toàn các phụ thuộc một cách thận trọng qua các đường chống
chéo). Sự liên quan sẽ được sắp xếp rất khác nhau trong hai trường hợp, đặc
biệt nếu sự liên quan là trong các thông điệp rõ ràng. Tuy nhiên, cách làm này
cũng có vấn đề. Đồng bộ hóa toàn bộ vẫn diễn ra rất thường xuyên – một lần
cho mỗi lần chống chéo. Ngoài ra, số lần lặp trong vòng lặp song song (bên trong)
thay đổi với các ý tưởng liên tiếp của vòng lặp bên ngoài, khi kích thước của các
đường chống chéo thay đổi, gây ra sự mất cân bằng tải giữa các quá trình, đặc
biệt là trong các đường chống chéo ngắn hơn. Do tần suất đồng bộ hóa, mất cân lOMoARcPSD| 36991220
bằng tải và độ phức tạp của lập trình, cả hai cách tiếp cận này đều không được
sử dụng nhiều trên các kiến trúc hiện đại.
Cách tiếp cận thứ ba và phổ biến nhất là dựa trên việc khai thác kiến thức về vấn
đề vượt ra ngoài sự phụ thuộc trong chính chương trình tuần tự. Thứ tự mà các
điểm nút trong lưới được cập nhật trong thuật toán tuần tự (từ trái sang phải và
từ trên xuống dưới) trên thực tế không phải là cơ bản đối với phương pháp giải
Gauss -Seidel; nó đơn giản là một thứ tự có thể thuận tiện để lập trình tuần tự.
Vì phương pháp GaussSeidel không phải là một phương pháp giải chính xác mà
là lặp lại cho đến khi hội tụ, chúng ta có thể cập nhật các điểm lưới theo một thứ
tự khác miễn là chúng ta sử dụng các giá trị cập nhật cho các điểm lưới đủ
thường xuyên.2 Một thứ tự như vậy thường được sử dụng cho các phiên bản
song song được gọi là thứ tự đỏ-đen . Ý tưởng ở đây là tách các điểm lưới thành
các điểm đỏ và đen xen kẽ như trên bàn cờ (xem Hình 2.9) để không có điểm đỏ
nào tiếp giáp với điểm đen hoặc ngược lại. Vì mỗi điểm chỉ đọc bốn điểm lân cận
gần nhất của nó, để tính một điểm đỏ nhất định, chúng ta không cần giá trị cập
nhật của bất kỳ điểm đỏ nào khác; chúng ta chỉ cần các giá trị cập nhật của các
điểm đen phía trên và bên trái của nó (trong một lần quét tiêu chuẩn) và ngược
lại để tính toán các điểm đen . Do đó, chúng ta có thể chia quét lưới thành hai
giai đoạn, đầu tiên tính toán tất cả các điểm màu đỏ và sau đó tính toán tất cả
các điểm màu đen. Trong mỗi giai đoạn không tồn tại sự phụ thuộc giữa các
điểm lưới, ta có thể tính toán tất cả n^2/2 điểm đỏ song song, đồng bộ hóa toàn
bộ, sau đó tính toán tất cả n2/2 điểm đen song song cùng lúc. Đồng bộ hóa toàn
cục là không nhất thiết và có thể được thay thế bằng đồng bộ hóa điểm điểm ở
cấp điểm lưới vì không phải tất cả các điểm đen cần phải đợi tất cả các điểm đỏ
được tính toán ; nhưng đồng bộ toàn cục rất tiện lợi.
Vì thứ tự màu đỏ-đen khác với thứ tự tuần tự gốc của chúng ta, nó có thể hội tụ
trong ít hoặc nhiều lần quét hơn. Nó cũng có thể tạo ra các giá trị cuối cùng khác
nhau cho các điểm lưới (mặc dù vẫn nằm trong dung sai hội tụ). Trong khi các
bản cập nhật điểm đỏ không thấy các giá trị cập nhật của bất kỳ điểm đen nào,
các điểm đen sẽ thấy các giá trị cập nhật của tất cả các vùng lân cận màu đỏ của
chúng từ giai đoạn đầu tiên của quá trình quét hiện tại, không chỉ các giá trị ở
bên trái và phía trên. Thứ tự mới tuần tự tốt hơn hay xấu hơn thứ tự cũ tùy
thuộc vào vấn đề. Thứ tự màu đỏ-đen cũng có lợi thế là các giá trị được tạo ra
và các thuộc tính hội tụ là dấu hiệu của số lượng bộ xử lý được sử dụng vì không
có sự phụ thuộc nào xảy ra trong một giai đoạn. Nếu bản thân chương trình tuần
tự sử dụng thứ tự đỏ đen, và tính song song hoàn toàn không thay đổi kết quả
hoặc đặc tính hội tụ, điều đó làm cho chương trình song song được xác định lOMoARcPSD| 36991220
Xem xét một phương pháp đơn giản hơn nhưng vẫn phổ biến mà không tách các
điểm thành màu đỏ và màu đen. Phương pháp này chỉ đơn giản là bỏ qua sự
phụ thuộc giữa các điểm lưới trong vòng quét. Trong quá trình quét, một quá
trình chỉ cần cập nhật các giá trị của tất cả các điểm lưới được chỉ định của nó,
truy cập các vùng lân cận gần nhất của nó cho dù
chúng đã được cập nhật trong quá trình quét hiện tại bởi các quy trình được chỉ
định của chúng hay chưa. Khi chỉ sử dụng một quy trình duy nhất, điều này mặc
định là thứ tự cập nhật tuần tự ban đầu. Khi nhiều quy trình được sử dụng, thứ
tự không thể đoán trước được; nó phụ thuộc vào sự phân công của con trỏ tới
các quy trình, số lượng quy trình được sử dụng và tốc độ thực thi các điểm
chuyên biệt khác nhau tại thời điểm chạy. Việc thực thi không còn mang tính
quyết định và số lần quét cần thiết để hội tụ có thể phụ thuộc vào số lượng quy
trình được sử dụng; tuy nhiên, đối với hầu hết các nhiệm vụ, số lần quét sẽ không thay đổi nhiều. Hình 2.9
Nếu chúng ta chọn phân tách thành các lần lặp vòng lặp bên trong riêng lẻ (các
điểm lưới), chúng ta có thể thể hiện chương trình bằng cách sửa lại các dòng 15-
26 của Hình 2.7. Hình 2.10
phần được đánh dấu cho thấy các thay đổi đối với mã in đậm : tất cả những gì
chúng ta đã làm là thay thế từ khóa for trong các vòng lặp song song bằng for_all.
Một vòng lặp for_all chỉ đơn giản là cho hệ thống phần cứng / phần mềm cơ bản lOMoARcPSD| 36991220
rằng tất cả các lần lặp của vòng lặp đều có thể được thực thi song song mà không
cần quan tâm về sự phụ thuộc, nhưng nó không nói gì về việc thay thế. Một tổ
vòng lặp có cả hai cấp độ lồng là for_all có nghĩa là tất cả các lần lặp trong tổ
vòng lặp (n * n hoặc n^2 ở đây) có thể được thực hiện song song. Hệ thống có
thể chỉ định và sắp xếp song song theo bất kỳ cách nào mà nó chọn; các của
chương trình có chức năng về điều này . Tất cả những gì nó giả định là đồng bộ
hóa toàn bộ ngầm định sau một tổ vòng lặp for_all . Hình 2.10
Trên thực tế, chúng ta có thể phân tách việc tính toán không chỉ thành các lần
lặp vòng lặp bên trong riêng lẻ mà thành bất kỳ nhóm lặp tổng hợp nào mà chúng
ta mong muốn. Giả sử chúng ta muốn phân tách thành các hàng điểm lưới để
công việc của toàn bộ hàng là một nhiệm vụ không thể phân tách. Chúng ta có
thể thể hiện điều này bằng cách làm cho vòng lặp bên trong trên dòng 18 trở
thành một vòng lặp tuần tự , thay đổi for_all của nó trở lại thành for , nhưng để
vòng lặp trên các hàng trên dòng 17 là một vòng lặp for_all song song. 2.3.3 Gán
Bằng cách sử dụng phân tách dựa trên hàng, chúng ta hãy xem cách chúng ta có
thể gán các hàng cho các điểm chuyên nghiệp một cách rõ ràng. Tùy chọn đơn
giản nhất là một nhiệm vụ tĩnh (xác định trước) mà mỗi quy trình chịu trách
nhiệm cho một khối hàng liền kề, như được hiển thị trong Hình 2.11, hàng bên trong I
Hàng nội bên trong i được chỉ định xử lý với p là số tiến trình
. Các nhiệm vụ tĩnh thay thế cho việc gán khối , chẳng hạn như gán theo chu
kỳ trong đó các hàng xen kẽ giữa các quy trình (quy trình i được gán các hàng i,
i + p, v.v. ). Chúng ta cũng có thể xem xét một nhiệm vụ động trong đó mỗi quá lOMoARcPSD| 36991220
trình lặp lại việc lấy hàng khả dụng tiếp theo (chưa được tính toán) sau khi nó
kết thúc với một nhiệm vụ. Sự phân chia vấn đề thành những phần đơn giản này
thể hiện sự cân bằng tải tốt các quy trình miễn là số lượng hàng bên trong chia
hết cho số lượng quy trình. Vì công việc trên mỗi hàng là đồng nhất.
Ta thấy rằng các phép gán tĩnh đã làm giảm thêm tính song song hoặc mức độ
đồng thời ; từ n đến p, bằng cách làm cho các tác vụ lớn hơn và phép gán khối
đã giảm giao tiếp cần thiết bằng cách gán các hàng liền kề cho cùng một bộ xử lý. Tỷ lệ
giao tiếp trên tính toán hiện chỉ bằng
Sau khi kiểm tra sự phân tách và gán, chúng ta đã sẵn sàng để điều phối . Điều
này yêu cầu chúng ta ghim mô hình lập trình xuống. Chúng tôi bắt đầu với mô
hình dữ song song dữ liệu mức cao và sau đó lấy hai mô hình kết hợp chương
trình chính mà dữ liệu song song và các mô hình khác có thể biên dịch thành:
không gian địa chỉ dùng chung và sự giao tiếp rõ ràng.
2.3.4 Điều phối theo mô hình dữ liệu song song
Mô hình dữ liệu song song rất tiện lợi đối với hạt nhân của bộ giải phương trình
vì việc coi tính toán như một luồng điều khiển đơn lẻ thực hiện các phép biến
đổi toàn cục trên cấu trúc dữ liệu mảng lớn là điều hiển nhiên ( Hillis 1985; Millis và Steele 1986). lOMoARcPSD| 36991220
Mã giả cho bộ giải phương trình song song dữ liệu được thể hiện trong Hình
2.12. Giả định rằng các khai báo toàn cục (bên ngoài bất kỳ thủ tục nào) mô tả
dữ liệu được chia sẻ và tất cả các dữ liệu khác (ví dụ, dữ liệu trên ngăn chứa thủ
tục) được ưu tiên trong một quy trình. Dữ liệu được chia sẻ được phân bổ động,
chẳng hạn như mảng A, được cấp phát bằng một lệnh gọi G _MALLOC thay vì
một malloc thông thường. G_MALLOC phân bổ dữ liệu trong một vùng được
chia sẻ của bộ nhớ heap có thể được truy cập và sửa đổi bởi bất kỳ quá trình
nào. Sự khác biệt chính (được hiển thị bằng chữ in đậm) từ chương trình tuần
tự là việc sử dụng các vòng lặp for_all cho các vòng lặp, việc sử dụng câu lệnh
DECO, biến mydi 昀昀 riêng cho mỗi quy trình và việc sử dụng một tuyên bố REDUCE .
Chúng ta đã thấy rằng các vòng lặp for_all chỉ định rằng các vòng lặp có thể được
hình thành song song. Các quy trình song song khác với quy trình thực thi chín
luồng kiểm soát được ngầm định trong mô hình dữ liệu song song và chỉ hoạt
động trongcác vòng lặp song song này. Câu lệnh DECOMP có hai mục đích. Đầu
tiên, nó chỉ định việc gán các lần lặp lại cho các quy trình. Ở đây, nó là phép gán lOMoARcPSD| 36991220
[ BLOCK, *, nprocs), có nghĩa là các hàng đầu tiên được phân chia thành các khối
xen kẽ giữa các tiến trình nprocs và phần thứ hai hoàn toàn không được phân
chia. Việc chỉ định [CYCLIC, *, nprocs ] sẽ ngụ ý phân vùng theo chu kỳ hoặc xen
kẽ các hàng giữa các tiến trình nprocs , chỉ định [ BLOCK, BLOCK, nprocs] sẽ ngụ
ý phân vùng khối liền kề 2D và chỉ định [ *, CYCLIC , nprocs] sẽ có ngụ ý phân
vùng xen kẽ các cột. Vai trò thứ hai của DECOMP là nó cũng chỉ định cách dữ liệu
lưới được phân phối giữa các bộ nhớ trên máy. Biến mydi 昀昀 được sử dụng
để cho phép mỗi quá trình lần đầu tiên tính toán độc lập tổng các giá trị chênh
lệch cho các điểm lưới được chỉ định của nó. Sau đó, câu lệnh REDUCE chỉ đạo
hệ thống nối tất cả các giá trị mydi 昀昀 từng phần lại với nhau thành biến di 昀
昀 có thể được chia sẻ. Điều này làm tăng tính đồng thời. Hoạt động REDUCE
thực hiện giảm, là một kịch bản trong đó nhiều quy trình (tất cả, trong một quy
trình giảm toàn cục ) thực hiện các hoạt động liên kết (chẳng hạn như cộng, lấy
mức tối đa, v.v.) trên cùng một dữ liệu được chia sẻ một cách hợp lý . Tính liên
tưởng ngụ ý rằng thứ tự của các hoạt động không quan trọng. Các phép toán
dấu phẩy động chẳng hạn như các phép toán ở đây, không liên kết vì cách tích
làm tròn phụ thuộc vào thứ tự các phép toán. Tuy nhiên, các tác động này rất nhỏ.