markdown:
# Tính toán song song
|Bài này
|là một bản dịch thô từ ngôn ngữ khác. Đây có thể là kết quả của máy tính hoặc của người chưa thông thạo dịch thuật. Xin hãy giúp **Tính toán song song** là một hình thức [tính toán](/w/index.php?title=T%C3%ADnh_to%C3%A1n&action=edit&redlink=1) trong đó nhiều phép tính được thực hiện đồng thời, hoạt động trên nguyên tắc là những vấn đề lớn đều có thể chia thành nhiều phần nhỏ hơn, sau đó được giải quyết [1] [tương tranh](/wiki/T%C6%B0%C6%A1ng_tranh_(khoa_h%E1%BB%8Dc_m%C3%A1y_t%C3%ADnh))("trong lĩnh vực tính toán"). Có nhiều hình thức khác nhau của tính toán song song: [song song cấp bit](/w/index.php?title=Song_song_c%E1%BA%A5p_bit&action=edit&redlink=1), [song song cấp lệnh](/w/index.php?title=Song_song_c%E1%BA%A5p_l%E1%BB%87nh&action=edit&redlink=1), [song song dữ liệu](/w/index.php?title=Song_song_d%E1%BB%AF_li%E1%BB%87u&action=edit&redlink=1), và [song song tác vụ](/w/index.php?title=Song_song_t%C3%A1c_v%E1%BB%A5&action=edit&redlink=1). Song song đã được sử dụng từ nhiều năm qua, chủ yếu là trong lĩnh vực [tính toán hiệu năng cao](/wiki/T%C3%ADnh_to%C3%A1n_hi%E1%BB%87u_n%C4%83ng_cao). Gần đây hình thức tính toán này được quan tâm nhiều hơn, do những hạn chế vật lý ngăn chặn việc tăng hiệu năng tính toán chỉ bằng cách [tăng tần số](/w/index.php?title=T%C4%83ng_t%E1%BA%A7n_s%E1%BB%91&action=edit&redlink=1). Vì việc tiêu hao điện năng (dẫn đến sinh nhiệt) từ máy tính đã trở thành một mối lo ngại trong những năm gần đây, [[2]](#cite_note-2) tính toán song song đã trở thành mô hình thống trị trong lĩnh vực [[3]](#cite_note-3) [kiến trúc máy tính](/wiki/Ki%E1%BA%BFn_tr%C3%BAc_m%C3%A1y_t%C3%ADnh), phần lớn là dưới dạng [bộ xử lý đa nhân](/wiki/CPU_%C4%91a_nh%C3%A2n). [[4]](#cite_note-View-Power-4)
Các máy tính song song có thể được phân loại tùy theo cấp độ hỗ trợ cho song song của phần cứng, với những chiếc máy tính
[đa nhân](/w/index.php?title=%C4%90a_nh%C3%A2n&action=edit&redlink=1) và [đa xử lý](/w/index.php?title=%C4%90a_x%E1%BB%AD_l%C3%BD_%C4%91%E1%BB%91i_x%E1%BB%A9ng&action=edit&redlink=1) có bộ phận đa xử lý trong một máy đơn lẻ, trong khi [cụm máy tính](/w/index.php?title=C%E1%BB%A5m_m%C3%A1y_t%C3%ADnh&action=edit&redlink=1), [xử lý song song hàng loạt](/w/index.php?title=X%E1%BB%AD_l%C3%BD_song_song_h%C3%A0ng_lo%E1%BA%A1t&action=edit&redlink=1), và [điện toán lưới](/wiki/%C4%90i%E1%BB%87n_to%C3%A1n_l%C6%B0%E1%BB%9Bi) sử dụng nhiều máy tính để xử lý cùng một công việc. Những kiến trúc máy tính song song chuyên dụng thỉnh thoảng cũng sử dụng các bộ xử lý truyền thống nhằm tăng tốc độ cho những công việc đặc trưng. [Thuật toán song song](/wiki/Thu%E1%BA%ADt_to%C3%A1n_song_song) khó viết hơn so với những thuật toán tuần tự, vì sự tương tranh tạo ra nhiều lớp mới tiềm tàng các [5] [lỗi phần mềm](/w/index.php?title=L%E1%BB%97i_ph%E1%BA%A7n_m%E1%BB%81m&action=edit&redlink=1), trong đó lỗi [điều kiện ganh đua](/w/index.php?title=%C4%90i%E1%BB%81u_ki%E1%BB%87n_ganh_%C4%91ua&action=edit&redlink=1)là phổ biến nhất. Quản lý việc [Giao tiếp](/wiki/Giao_ti%E1%BA%BFp)và [đồng bộ](/w/index.php?title=%C4%90%E1%BB%93ng_b%E1%BB%99_(khoa_h%E1%BB%8Dc_m%C3%A1y_t%C3%ADnh)&action=edit&redlink=1)giữa các [luồng xử lý](/w/index.php?title=Lu%E1%BB%93ng_x%E1%BB%AD_l%C3%BD&action=edit&redlink=1)là một trong những trở ngại lớn nhất để tạo ra một chương trình song song tốt.
Khả năng
[tăng tốc](/w/index.php?title=T%C4%83ng_t%E1%BB%91c&action=edit&redlink=1) cao nhất có thể đạt được của một chương trình khi được song song hóa tuân theo [định luật Amdahl](/wiki/Lu%E1%BA%ADt_Amdahl).
## Mục lục
[1 Bối cảnh](#B.E1.BB.91i_c.E1.BA.A3nh) [2 Hình thức song song](#H.C3.ACnh_th.E1.BB.A9c_song_song) [3 Phần cứng](#Ph.E1.BA.A7n_c.E1.BB.A9ng) [3.1 Bộ nhớ và sự kết nối](#B.E1.BB.99_nh.E1.BB.9B_v.C3.A0_s.E1.BB.B1_k.E1.BA.BFt_n.E1.BB.91i) [3.2 Các dạng máy tính song song](#C.C3.A1c_d.E1.BA.A1ng_m.C3.A1y_t.C3.ADnh_song_song) [3.2.1 Tính toán đa nhân](#T.C3.ADnh_to.C3.A1n_.C4.91a_nh.C3.A2n) [3.2.2 Đa xử lý đối xứng](#.C4.90a_x.E1.BB.AD_l.C3.BD_.C4.91.E1.BB.91i_x.E1.BB.A9ng) [3.2.3 Tính toán phân tán](#T.C3.ADnh_to.C3.A1n_ph.C3.A2n_t.C3.A1n) [3.2.4 Máy tính song song chuyên ngành](#M.C3.A1y_t.C3.ADnh_song_song_chuy.C3.AAn_ng.C3.A0nh)
-
-
[4 Phần mềm](#Ph.E1.BA.A7n_m.E1.BB.81m) [5 Phương pháp thuật toán](#Ph.C6.B0.C6.A1ng_ph.C3.A1p_thu.E1.BA.ADt_to.C3.A1n) [6 Lịch sử](#L.E1.BB.8Bch_s.E1.BB.AD) [7 Xem thêm](#Xem_th.C3.AAm) [8 Tham khảo](#Tham_kh.E1.BA.A3o) [9 Đọc thêm](#.C4.90.E1.BB.8Dc_th.C3.AAm) [10 Liên kết ngoài](#Li.C3.AAn_k.E1.BA.BFt_ngo.C3.A0i)
## Bối cảnh[
[sửa](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&veaction=edit&vesection=1) | [sửa mã nguồn](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&action=edit§ion=1)]
Theo truyền thống, phần mềm máy tính được viết cho tính toán tuần tự. Để giải quyết một vấn đề, một
[thuật toán](/wiki/Thu%E1%BA%ADt_to%C3%A1n) được xây dựng và thực thi tuần tự theo các dòng lệnh. Những câu lệnh này lại được chạy trên một [đơn vị xử lý trung tâm](/wiki/CPU) (CPU) của chiếc máy tính. Chỉ có một câu lệnh được chạy trong một khoảng thời gian. Sau khi câu lệnh đó kết thúc, câu tiếp theo mới được thực hiện. [[6]](#cite_note-llnltut-6)
Tính toán song song, mặt khác, lại sử dụng đồng thời các bộ đa xử lý để giải quyết một vấn đề. Việc này được hoàn thành bằng cách tách vấn đề thành nhiều phần độc lập sau đó mỗi bộ xử lý có thể chạy thuật toán của nó đồng thời với những cái khác. Các bộ phận xử lý có thể khác nhau và bao gồm các dạng tài nguyên như: một máy tính đơn gồm nhiều bộ đa xử lý, nhiều máy tính được kết nối mạng, phần cứng chuyên biệt, hoặc có thể là sự kết hợp của những dạng trên.
[[6]](#cite_note-llnltut-6) [Tăng tần số](/w/index.php?title=T%C4%83ng_t%E1%BA%A7n_s%E1%BB%91&action=edit&redlink=1) là cách chủ đạo để cải thiện khả năng xử lý của máy tính từ giữa những năm 1980 cho đến năm 2004. [Thời gian](/wiki/Th%E1%BB%9Di_gian) chạy của một chương trình được tính bằng số câu lệnh nhân với thời gian trung bình của một câu lệnh. Như vậy nếu duy trì tất cả những thứ khác ổn định, gia tăng [tần số](/wiki/T%E1%BA%A7n_s%E1%BB%91) xung nhịp sẽ làm giảm thời gian trung bình để thực thi một câu lệnh. Như vậy tần số tăng sẽ giảm đi thời gian chạy của những chương trình [chạy trong CPU](/w/index.php?title=Ch%E1%BA%A1y_trong_CPU&action=edit&redlink=1). [[7]](#cite_note-7)
Tuy nhiên, mức tiêu hao
[năng lượng](/wiki/N%C4%83ng_l%C6%B0%E1%BB%A3ng) của một con chip được tính bởi công thức P = C × V 2 × F, trong đó P là [công suất](/wiki/C%C3%B4ng_su%E1%BA%A5t) tiêu thụ, C là [điện dung](/wiki/%C4%90i%E1%BB%87n_dung) được chuyển trong mỗi chu kỳ xung nhịp (tỷ lệ thuận với số lượng [transistor](/wiki/Tranzito) có đầu vào thay đổi), V là [điện áp](/wiki/%C4%90i%E1%BB%87n_th%E1%BA%BF), và F là tần số của bộ xử lý (số chu kỳ mỗi giây). Như vậy tăng tần số cũng làm năng lượng sử dụng của bộ xử lý tăng theo. Việc tăng tiêu hao năng lượng này đã dẫn đến quyết định ngừng phát triển bộ xử lý [8] [Tejas và Jayhawk](/w/index.php?title=Tejas_v%C3%A0_Jayhawk&action=edit&redlink=1)của [Intel](/wiki/Intel)tháng 5 năm 2004, được cho là sự chấm dứt của việc sử dụng tăng tần số như một kiến trúc máy tính chủ đạo. [[9]](#cite_note-9) [Định luật Moore](/wiki/%C4%90%E1%BB%8Bnh_lu%E1%BA%ADt_Moore) là một quan sát thực tế cho thấy mật độ transistor trong bộ vi xử lý tăng gấp hai lần sau mỗi 18 đến 24 tháng. Bất chấp nhược điểm về tiêu hao năng lượng, và những dự đoán về sự chấm dứt của nó, định luật Moore vẫn khá thông dụng. Với sự kết thúc của phương pháp tăng tần số, các transistor bổ sung này (không còn được sử dụng cho việc tăng tần số) có thể được sử dụng để tạo ra phần cứng bổ sung cho tính toán song song. [10]
### Định luật Amdahl và định luật Gustafson[
[sửa](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&veaction=edit&vesection=2) | [sửa mã nguồn](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&action=edit§ion=2)] ![ ](//upload.wikimedia.org/wikipedia/commons/thumb/e/ea/AmdahlsLaw.svg/300px-AmdahlsLaw.svg.png)
![ ](http://upload.wikimedia.org/wikipedia/commons/thumb/e/ea/AmdahlsLaw.svg/300px-AmdahlsLaw.svg.png)
[định luật Amdahl](/wiki/Lu%E1%BA%ADt_Amdahl). Khả năng tăng tốc của một chương trình song song hóa bị hạn chế bởi việc có bao nhiêu phần của chương trình có thể được song song. Ví dụ, nếu 90% chương trình được song song, tốc độ tăng cực đại khi sử dụng tính toán song song sẽ là gấp 10 lần, không phụ thuộc vào bao nhiêu bộ xử lý được sử dụng.
Trong trường hợp tối ưu, khả năng tăng tốc từ việc song song hóa là tuyến tính — gấp đôi các thành phần xử lý sẽ làm giảm một nửa thời gian chạy, và gấp đôi lần nữa sẽ lại tiếp tục giảm thời gian chạy xuống còn một nửa. Tuy nhiên, có rất ít thuật toán song song có thể đạt được sự tăng tốc tối ưu. Hầu hết đều chỉ đạt đến gần mức tuyến tính khi số thành phần xử lý là nhỏ, và tiệm cận đến một giá trị không đổi khi số lượng các thành phần xử lý tăng lên nhiều.
Tiềm năng của việc tăng tốc bởi một thuật toán trên nền tảng tính toán song song được đưa ra bởi
[định luật Amdahl](/wiki/Lu%E1%BA%ADt_Amdahl), ban đầu được xây dựng bởi [Gene Amdahl](/w/index.php?title=Gene_Amdahl&action=edit&redlink=1) trong những năm 1960. Trong đó nói rõ rằng chỉ một phần nhỏ của chương trình không thể được song song cũng sẽ hạn chế khả năng tăng tốc tổng thể của việc song song hóa. Một chương trình giải quyết một vấn đề toán học hoặc kỹ thuật lớn thường sẽ bao gồm một số bộ phận song song và bộ phận không song song (tuần tự). Nếu là tỷ lệ thời gian chạy mà một chương trình tuần tự bỏ ra trên bộ phận không song song, thì [11]
là tỷ lệ tăng tốc tối đa khi song song hóa chương trình. Ví dụ, nếu coi phần tuần tự của một chương trình là 10% thời gian chạy, tốc độ tăng sẽ không thể đạt được quá 10 lần, bất kể có bao nhiêu bộ xử lý được thêm vào. Điều này đặt ra một giới hạn về tính hữu ích của việc thêm các đơn vị thực hiện song song với nhau nhiều hơn. "Khi công việc không thể được phân chia vì ràng buộc về trình tự, dù có áp dụng thêm nhiều phương pháp cũng không ảnh hưởng đến tiến độ. Mang thai một đứa trẻ phải mất 9 tháng, cho dù có bao nhiêu người phụ nữ đi nữa."
[[12]](#cite_note-12) ![ ](//upload.wikimedia.org/wikipedia/commons/thumb/4/40/Optimizing-different-parts.svg/300px-Optimizing-different-parts.svg.png)
![ ](http://upload.wikimedia.org/wikipedia/commons/thumb/4/40/Optimizing-different-parts.svg/300px-Optimizing-different-parts.svg.png)
[lập trình viên](/wiki/L%E1%BA%ADp_tr%C3%ACnh_vi%C3%AAn)có thể làm cho phần việc này nhanh gấp 5 lần, nhưng điều này chỉ làm giảm thời gian của toàn bộ tính toán đi một chút. Ngược lại, người đó có thể chỉ phải làm việc ít hơn để khiến cho phần A nhanh gấp hai lần. Phương án thứ hai sẽ làm cho toàn bộ công việc tiến triển nhanh hơn so với phương án thứ nhất, mặc dù B có tốc độ tăng lớn hơn (5× so với 2×). [Định luật Gustafson](/w/index.php?title=%C4%90%E1%BB%8Bnh_lu%E1%BA%ADt_Gustafson&action=edit&redlink=1) là một nguyên lý khác trong tính toán, liên quan chặt chẽ đến định luật Amdahl. Nó chỉ ra rằng việc tăng tốc với bộ xử lý là [13]
Định luật Amdahl giả định kích thước bài toán là cố định và thời gian chạy của các phần tuần tự của chương trình là độc lập với số lượng bộ xử lý, trong khi định luật Gustafson không đưa ra giả thuyết này.
### Phụ thuộc[
[sửa](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&veaction=edit&vesection=3) | [sửa mã nguồn](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&action=edit§ion=3)]
Hiểu biết về
[phụ thuộc dữ liệu](/w/index.php?title=Ph%E1%BB%A5_thu%E1%BB%99c_d%E1%BB%AF_li%E1%BB%87u&action=edit&redlink=1) là bước cơ bản trong việc thực hiện [thuật toán song song](/wiki/Thu%E1%BA%ADt_to%C3%A1n_song_song). Không một chương trình nào có thể chạy nhanh hơn chuỗi dài nhất của các phép tính phụ thuộc (được biết đến như là [đường tới hạn](/w/index.php?title=Ph%C6%B0%C6%A1ng_ph%C3%A1p_%C4%91%C6%B0%E1%BB%9Dng_t%E1%BB%9Bi_h%E1%BA%A1n&action=edit&redlink=1)), khi mà các phép tính phụ thuộc vào các phép tính trước trong chuỗi phải được thực hiện theo thứ tự. Tuy nhiên, hầu hết các thuật toán không chỉ bao gồm một chuỗi dài các phép tính phụ thuộc, luôn luôn có khả năng phải thực hiện các phép tính độc lập song song.
Cho P
i và P j là hai đoạn của chương trình. Bernstein's conditions mô tả khi nào hai đoạn độc lập với nhau và có thể được thực hiện song song. Với [14] *P* , đặt *i* *I* là tất cả các biến đầu vào, *i* *O* là biến đầu ra, tương tự ta làm như vậy với *i* *P* . *j* *P* và *i* *P* là độc lập nếu chúng thỏa mãn *j*
Không thỏa mãn điều kiện đầu tiên sẽ tạo ra một phụ thuộc lưu lượng, giông như câu lệnh đầu tiên sẽ tạo ra một kết quả được sử dụng ở câu lệnh thứ hai. Điều kiện thứ hai có thể coi là
[chống phụ thuộc](/w/index.php?title=Ch%E1%BB%91ng_ph%E1%BB%A5_thu%E1%BB%99c&action=edit&redlink=1), khi mà câu lệnh thứ hai ( *P* ) sẽ ghi đè lên biến được sử dụng ở biểu thức thứ nhất ( j *P* ). Điều kiện thứ ba và cuối cùng thể hiện một sự phụ thuộc đầu ra: Khi hai câu lệnh cùng thực hiện một công việc, kết quả cuối cùng phải lấy từ các câu lệnh thực hiện một cách hợp lý nhất. *i* [[15]](#cite_note-15)
Xem xét các hàm sau đây, trong đó thể hiện nhiều loại phụ thuộc:
1: function Dep(a, b) 2: c:= a•b 3: d:= 2•c 4: end function
Operation 3 in Dep(a, b) cannot be executed before (or even in parallel with) operation 2, because operation 3 uses a result from operation 2. It violates condition 1, and thus introduces a flow dependency.
1: function NoDep(a, b) 2: c:= a•b 3: d:= 2•b 4: e:= a+b 5: end function
Trong ví dụ này, không có phụ thuộc giữa các chỉ lệnh, do đó, tất cả đều có thể chạy song song.
Điều kiện của Bernstein không cho phép bộ nhớ được chia sẻ giữa các quá trình khác nhau. Nó cho rằng, một số phương tiện thực thi một lệnh giữa các truy cập là cần thiết, ví dụ như
[semaphores](/w/index.php?title=Semaphore_(programming)&action=edit&redlink=1), [barriers](/w/index.php?title=Barrier_(computer_science)&action=edit&redlink=1) hoặc một số [phương pháp đồng bộ](/w/index.php?title=%C4%90%E1%BB%93ng_b%E1%BB%99_h%C3%B3a_(khoa_h%E1%BB%8Dc_m%C3%A1y_t%C3%ADnh)&action=edit&redlink=1) khác.
### Race conditions, mutual exclusion, synchronization, và parallel slowdown[
[sửa](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&veaction=edit&vesection=4) | [sửa mã nguồn](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&action=edit§ion=4)]
Công việc phụ trong một chương trình song song thường được gọi là
[threads](/w/index.php?title=Thread_(computer_science)&action=edit&redlink=1). Một số kiến trúc máy tính song song sử dụng các phiên bản nhỏ và nhẹ hơn gọi là [fibers](/w/index.php?title=Fiber_(computer_science)&action=edit&redlink=1), trong khi các phiên bản lớn được gọi là [processes](/w/index.php?title=Process_(computing)&action=edit&redlink=1). Tuy nhiên, "threads" thường được chấp nhận như một thuật ngữ chung cho các công việc phụ. Threads sẽ phải thường xuyên cập nhật các [biến](/w/index.php?title=Bi%E1%BA%BFn_(l%E1%BA%ADp_tr%C3%ACnh)&action=edit&redlink=1) được chia sẻ giữa chúng. Các chỉ lệnh giữa hai chương trình có thể được [xen kẽ](/w/index.php?title=Xen_k%E1%BA%BD&action=edit&redlink=1) theo bất kỳ thứ tự nào. Ví dụ, xem chương trình sau đây:
|Thread A||Thread B|
|1A: Read variable V||1B: Read variable V|
|2A: Add 1 to variable V||2B: Add 1 to variable V|
|3A Write back to variable V||3B: Write back to variable V|
Nếu chỉ lệnh 1B được thực hiện giữa 1A và 3A, hoặc nếu chỉ lệnh được thực hiện giữa 1B và 3B, chương trình sẽ tạo ra dữ liệu không chính xác. Đây được gọi là một
[race condition](/w/index.php?title=Race_condition&action=edit&redlink=1). Chương trình sẽ phải sử dụng [khóa](/w/index.php?title=Lock_(computer_science)&action=edit&redlink=1) để cung cấp [mutual exclusion](/w/index.php?title=Mutual_exclusion&action=edit&redlink=1). Khóa là một cấu trúc ngôn ngữ lập trình cho phép một thread kiểm soát một biến và ngăn ngừa các biến khác đọc hoặc ghi nó, cho đến khi biến đó được mở khóa. Thread giữ khóa có thể hoàn toàn thoải mái truy cập [phần tới hạn](/w/index.php?title=Ph%E1%BA%A7n_t%E1%BB%9Bi_h%E1%BA%A1n&action=edit&redlink=1) của nó (phần của chương trình yêu cầu quyền truy cập chuyên biệt tới một số biến), và mở khóa các dữ liệu khi nó được hoàn tất. Vì vậy, để đảm bảo chương trình thực hiện chính xác, chương trình trên có thể được viết lại để sử dụng khóa:
|Thread A||Thread B|
|1A: Lock variable V||1B: Lock variable V|
|2A: Read variable V||2B: Read variable V|
|3A: Add 1 to variable V||3B: Add 1 to variable V|
|4A Write back to variable V||4B: Write back to variable V|
|5A: Unlock variable V||5B: Unlock variable V|
Một thread sẽ khóa biến V thành công, trong khi các thread khác sẽ bị
[khóa lại](/w/index.php?title=Kh%C3%B3a_ph%E1%BA%A7n_m%E1%BB%81m&action=edit&redlink=1)—không thể truy cập cho đến khi V được mở khóa. Điều này đảm bảo chương trình được thực hiện đúng. Để đảm bảo chương trình thực hiện chính xác, khóa rất có thể sẽ làm chậm chương trình khi cần thiết.
Khóa nhiều biến bằng cách sử dụng phương pháp khóa
[non-atomic](/w/index.php?title=Atomic_operation&action=edit&redlink=1) có khả năng tạo ra một [deadlock](/wiki/Deadlock). Một khóa atomic khóa nhiều biến cùng một lúc. Nếu nó không thể khóa một trong số các biến đó, nó sẽ không khóa biến nào. Nếu hai thread cùng khóa hai biến giống nhau bằng khóa non-atomic, có khả năng một thread sẽ khóa một biến và thread thứ hai sẽ khóa biến còn lại. Trong trường hợp này, không thread nào có thể hoàn tất, và kết quả là deadlock.
Nhiều chương trình song song yêu cầu các công việc phụ
[act in synchrony](/w/index.php?title=Synchronization_(computer_science)&action=edit&redlink=1) (thực hiện đồng bộ). Điều này đòi hỏi việc sử dụng một [barrier](/w/index.php?title=Barrier_(computer_science)&action=edit&redlink=1) (hàng rào). Những barrier thường được tạo ra bằng cách sử dụng khóa phần mềm. Một lớp của thuật toán, được gọi là [lock-free and wait-free algorithms](/w/index.php?title=Lock-free_and_wait-free_algorithms&action=edit&redlink=1), hoàn toàn có thể tránh được việc sử dụng khóa và barrier. Tuy nhiên, cách tiếp cận này thường khó thực hiện và yêu cầu thiết kế cấu trúc dữ liệu một cách chính xác.
Không phải tất cả mọi song song hóa đều cho kết quả tăng tốc độ. Nói chung, khi một công việc được chia ra thành càng nhiều thread, thì thời gian những thread đó sử dụng để kết nối với nhau sẽ ngày càng tăng. Suy cho cùng, tổng chi phí từ việc kết nối vượt trội thời gian sử dụng để giải quyết vấn đề, và song song hóa hơn nữa (nghĩa là, tách khối lượng công việc thành nhiều thread hơn) sẽ là tăng hơn là giảm thời gian cần thiết để hoàn thành. Đây được gọi là
[parallel slowdown](/w/index.php?title=Parallel_slowdown&action=edit&redlink=1).
### Fine-grained, coarse-grained, và embarrassing parallelism[
[sửa](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&veaction=edit&vesection=5) | [sửa mã nguồn](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&action=edit§ion=5)]
Các ứng dụng thường được phân loại theo mức độ thường xuyên của các công việc phụ của họ cần phải đồng bộ hóa hoặc giao tiếp với nhau. Một ứng dụng được cho là song song hạt mịn nếu các công việc phụ của nó giao tiếp nhiều lần mỗi giây; gọi là song song hạt thô nếu chúng kết nối nhiều lần mỗi giây, và là
[embarrassingly parallel](/w/index.php?title=Embarrassingly_parallel&action=edit&redlink=1) nếu rất ít hoặc không bao giờ kết nối. Các ứng dụng embarrassingly parallel được xem là dễ song song nhất.
### Mô hình thống nhất[
[sửa](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&veaction=edit&vesection=6) | [sửa mã nguồn](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&action=edit§ion=6)]
Ngôn ngữ lập trình song song và các máy tính song song phải có một
[mô hình thống nhất](/w/index.php?title=M%C3%B4_h%C3%ACnh_th%E1%BB%91ng_nh%E1%BA%A5t&action=edit&redlink=1) (còn được gọi là một mô hình bộ nhớ). Các mô hình thống nhất xác định các quy tắc về cách hoạt động trên [bộ nhớ máy tính](/wiki/B%E1%BB%99_nh%E1%BB%9B) xảy ra và làm thế nào tạo ra kết quả.
Một trong những mô hình thống nhất đầu tiên là mô hình
[tuần tự thống nhất](/w/index.php?title=Tu%E1%BA%A7n_t%E1%BB%B1_th%E1%BB%91ng_nh%E1%BA%A5t&action=edit&redlink=1) của [Leslie Lamport](/w/index.php?title=Leslie_Lamport&action=edit&redlink=1). Tuần tự thống nhất là một tính chất của một chương trình song song khi thực hiện song song của nó tạo ra kết quả tương tự như một chương trình tuần tự. Cụ thể, một chương trình là tuần tự thống nhất nếu "... kết quả của bất kỳ hành động nào đều giống như là các hành động của tất cả các bộ xử lý được thực hiện theo một quy tắc tuần tự, và các hoạt động của mỗi bộ xử lý cá nhân xuất hiện trong trình tự này theo một thứ tự xác định bởi chương trình". [[16]](#cite_note-16) [Bộ nhớ giao tác phần mềm](/w/index.php?title=B%E1%BB%99_nh%E1%BB%9B_giao_t%C3%A1c_ph%E1%BA%A7n_m%E1%BB%81m&action=edit&redlink=1) là một dạng phổ biến của mô hình thống nhất. Bộ nhớ giao tác phần mềm vay mượn từ [lý thuyết cơ sở dữ liệu](/w/index.php?title=H%E1%BB%87_th%E1%BB%91ng_qu%E1%BA%A3n_l%C3%BD_c%C6%A1_s%E1%BB%9F_d%E1%BB%AF_li%E1%BB%87u&action=edit&redlink=1) khái niệm của [giao dịch nguyên tử](/w/index.php?title=Chuy%E1%BB%83n_giao_nguy%C3%AAn_t%E1%BB%AD&action=edit&redlink=1) và áp dụng chúng để truy cập bộ nhớ.
Dưới góc độ toán học, các mô hình này có thể được thể hiện bằng nhiều cách.
[Mạng Petri](/w/index.php?title=M%E1%BA%A1ng_Petri&action=edit&redlink=1), được giới thiệu trong luận án tiến sĩ của Carl Adam Petri năm 1962, là một cố gắng sớm để hệ thống hóa các quy tắc của mô hình thống nhất. Lý thuyết luồng dữ liệu sau này xây dựng dựa trên những, và [kiến trúc luồng dữ liệu](/w/index.php?title=Ki%E1%BA%BFn_tr%C3%BAc_lu%E1%BB%93ng_d%E1%BB%AF_li%E1%BB%87u&action=edit&redlink=1) được tạo ra để thực hiện những ý tưởng của lý thuyết luồng dữ liệu. Bắt đầu từ cuối những năm 1970, [process calculi](/w/index.php?title=Process_calculi&action=edit&redlink=1) như [Phép tính của hệ thống truyền thông](/w/index.php?title=Ph%C3%A9p_t%C3%ADnh_c%E1%BB%A7a_h%E1%BB%87_th%E1%BB%91ng_truy%E1%BB%81n_th%C3%B4ng&action=edit&redlink=1) và [Quá trình giao tiếp tuần tự](/w/index.php?title=Qu%C3%A1_tr%C3%ACnh_giao_ti%E1%BA%BFp_tu%E1%BA%A7n_t%E1%BB%B1&action=edit&redlink=1) đã được phát triển để cho phép đại số lý luận về hệ thống gồm các thành phần tương tác. Những bổ sung gần đây cho quá trình tính toán, ví dụ như [phép tính π](/w/index.php?title=Ph%C3%A9p_t%C3%ADnh_pi&action=edit&redlink=1), đã thêm vào các khả năng cho lý luận về cấu trúc liên kết năng động. Những logic như [TLA+](/w/index.php?title=Temporal_logic_of_actions&action=edit&redlink=1) của Lamport, và các mô hình toán học như là [dấu vết](/w/index.php?title=L%C3%BD_thuy%E1%BA%BFt_d%E1%BA%A5u_v%E1%BA%BFt&action=edit&redlink=1) và [biểu đồ sự kiện tác động](/w/index.php?title=L%C3%BD_thuy%E1%BA%BFt_m%C3%B4_h%C3%ACnh_t%C3%A1c_%C4%91%E1%BB%99ng&action=edit&redlink=1), cũng đã được phát triển để mô tả hành vi của hệ thống tương tranh.
### Phân loại Flynn[
[sửa](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&veaction=edit&vesection=7) | [sửa mã nguồn](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&action=edit§ion=7)] [Michael J. Flynn](/w/index.php?title=Michael_J._Flynn&action=edit&redlink=1) đã tạo ra một trong những hệ thống phân loại sớm nhất cho các máy tính và chương trình song song (và tuần tự), bây giờ được gọi là [Phép phân loại của Flynn](/w/index.php?title=Ph%C3%A9p_ph%C3%A2n_lo%E1%BA%A1i_c%E1%BB%A7a_Flynn&action=edit&redlink=1). Flynn phân loại chương trình và máy tính bằng cách chúng có thể đã được điều hành bằng cách sử dụng một hay nhiều bộ chỉ lệnh, những chỉ lệnh đó có thể có hoặc không sử dụng một hay nhiều bộ dữ liệu.
Kiểu phân loại single-instruction-single-data (SISD) tương đương với một chương trình hoàn toàn tuần tự. Kiểu phân loại single-instruction-multiple-data (SIMD) tương tự như thực hiện các hoạt động liên tục trên cùng một tập dữ liệu lớn. Kiểu này thường được dùng trong các ứng dụng
[xử lý tín hiệu](/w/index.php?title=X%E1%BB%AD_l%C3%BD_t%C3%ADn_hi%E1%BB%87u&action=edit&redlink=1). Multiple-instruction-single-data (MISD) là một kiểu phân loại hiếm khi được sử dụng. Trong khi các kiến trúc máy tính để xử lý vấn đề này được nghĩ ra (ví dụ như [mảng tâm thu](/w/index.php?title=M%E1%BA%A3ng_t%C3%A2m_thu&action=edit&redlink=1)), vài ứng dụng phù hợp được hiện thực hóa. Các chương trình multiple-instruction-multiple-data (MIMD) đang là dạng phổ biến nhất trong các chương trình song song.
Theo
[David A. Patterson](/w/index.php?title=David_A._Patterson_(scientist)&action=edit&redlink=1) và [John L. Hennessy](/w/index.php?title=John_L._Hennessy&action=edit&redlink=1), "Một số cỗ máy là sự kết hợp của những loại này, nhưng mô hình cổ điển này đã tồn tại bởi tính đơn giản, dễ hiểu, và đưa ra được xấp xỉ đầu tiên với kết quả tốt. Nó cũng là chương trình được sử dụng rộng rãi nhất-có lẽ vì tính dễ hiểu của mình." [[17]](#cite_note-17)
## Hình thức song song[
[sửa](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&veaction=edit&vesection=8) | [sửa mã nguồn](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&action=edit§ion=8)]
### Song song cấp bit[
[sửa](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&veaction=edit&vesection=9) | [sửa mã nguồn](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&action=edit§ion=9)]
Từ sự ra đời của công nghệ chế tạo chip máy tính
[very-large-scale integration](/w/index.php?title=Very-large-scale_integration&action=edit&redlink=1) (VLSI) từ những năm 1970 cho đến năm 1986, tăng tốc trong kiến trúc máy tính được điều khiển bằng cách tăng gấp đôi [kích cỡ từ máy tính](/w/index.php?title=Word_(data_type)&action=edit&redlink=1)—khối lượng thông tin bộ xử lý có thể thao tác trên một chu kỳ. Tăng kích thước từ làm giảm số lượng chỉ lệnh các bộ xử lý phải thực thi để thực hiện một hoạt động trên các biến có kích cỡ lớn hơn độ dài của từ. Ví dụ, khi một bộ xử lý [18] [8-bit](/w/index.php?title=8-bit&action=edit&redlink=1)phải tạo thêm 2 [nguyên số](/w/index.php?title=Nguy%C3%AAn_s%E1%BB%91&action=edit&redlink=1) [16-bit](/w/index.php?title=16-bit&action=edit&redlink=1), trước tiên bộ xử lý phải thêm vào các bit bậc thấp hơn 8 từ mỗi số nguyên bằng cách sử dụng lệnh cộng tiêu chuẩn, sau đó thêm vào các bit bậc cao hơn 8 bằng cách sử dụng lệnh cộng có nhớ và [bit nhớ](/w/index.php?title=Bit_nh%E1%BB%9B&action=edit&redlink=1)lấy từ việc thêm vào bậc thấp; do đó, bộ xử lý 8-bit cần đến hai câu lệnh để hoàn thành một thao tác, trong khi bộ xử lý 16-bit có thể làm xong công việc này chỉ với một câu lệnh duy nhất.
Trong lịch sử, các vi xử lý
[4-bit](/w/index.php?title=4-bit&action=edit&redlink=1) đã từng được thay thế bằng 8-bit, 16-bit, sau đó là 32-bit. Xu hướng này đã kết thúc với sự ra đời của bộ vi xử lý 32-bit, đã trở thành tiêu chuẩn cho các tính toán chung trong hai thập kỷ. Cho đến gần đây (khoảng 2003–2004), với sự ra đời của kiến trúc [x86-64](/wiki/X86-64), bộ xử lý [64-bit](/wiki/64-bit) đã trở nên phổ biến.
### Song song cấp lệnh[
[sửa](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&veaction=edit&vesection=10) | [sửa mã nguồn](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&action=edit§ion=10)] ![ ](//upload.wikimedia.org/wikipedia/commons/thumb/2/21/Fivestagespipeline.png/300px-Fivestagespipeline.png)
![ ](http://upload.wikimedia.org/wikipedia/commons/thumb/2/21/Fivestagespipeline.png/300px-Fivestagespipeline.png)
[RISC](/wiki/RISC)(IF = Nạp lệnh, ID = Giải mã lệnh, EX = thực thi, MEM = truy cập bộ nhớ, WB = Register write back)
Một chương trình máy tính, về bản chất là một loạt những câu lệnh được thực hiện bởi một bộ xử lý. Những câu lệnh này sẽ được
[sắp xếp lại](/w/index.php?title=Th%E1%BB%B1c_thi_sai_th%E1%BB%A9_t%E1%BB%B1&action=edit&redlink=1) và kết hợp thành các nhóm mà sau đó được thực hiện song song mà không thay đổi kết quả của chương trình. Đây được gọi là song song cấp câu lệnh. Những ưu điểm của song song cấp câu lệnh đã thống trị kiến trúc máy tính từ giữa những năm 1980 cho đến giữa thập niên 1990. [[19]](#cite_note-19)
Các bộ xử lý hiện đại có những
[đường liên kết câu lệnh](/w/index.php?title=%C4%90%C6%B0%E1%BB%9Dng_li%C3%AAn_k%E1%BA%BFt_c%C3%A2u_l%E1%BB%87nh&action=edit&redlink=1) đa công đoạn. Mỗi giai đoạn trong đường liên kết tương ứng với mỗi hành động khác nhau mà bộ xử lý thực hiện với câu lệnh trong giai đoạn đó; bộ xử lý với một đường liên kết N giai đoạn có thể có đến N câu lệnh ở những giai đoạn khác nhau. Ví dụ tiêu chuẩn của một bộ xử lý đường liên kết là bộ xử lý [RISC](/wiki/RISC), với 5 công đoạn: nạp lệnh, giải mã, thực thi, truy cập bộ nhớ, và write back. Bộ xử lý [Pentium 4](/wiki/Pentium_4) có một đường liên kết 35 giai đoạn. [[20]](#cite_note-20) ![ ](//upload.wikimedia.org/wikipedia/commons/thumb/4/46/Superscalarpipeline.svg/300px-Superscalarpipeline.svg.png)
![ ](http://upload.wikimedia.org/wikipedia/commons/thumb/4/46/Superscalarpipeline.svg/300px-Superscalarpipeline.svg.png)
[bộ xử lý](/w/index.php?title=Microprocessor&action=edit&redlink=1) [siêu vô hướng](/w/index.php?title=Si%C3%AAu_v%C3%B4_h%C6%B0%E1%BB%9Bng&action=edit&redlink=1)với liên kết 5 giai đoạn, có khả năng phát ra 2 câu lệnh một chu kỳ. Nó có thể có 2 câu lệnh trong mỗi giai đoạn của đường liên kết, với tổng số lên đến 10 câu lệnh (màu xanh lá cây) được thực hiện đồng thời.
Ngoài mô hình song song cấp câu lệnh từ đường liên kết, một số bộ xử lý cũng có thể tạo ra nhiều hơn một câu lệnh tại một thời điểm. Chúng được gọi là bộ xử lý
[siêu vô hướng](/w/index.php?title=Si%C3%AAu_v%C3%B4_h%C6%B0%E1%BB%9Bng&action=edit&redlink=1). Các câu lệnh chỉ được nhóm lại với nhau khi giữa chúng không có [phụ thuộc dữ liệu](/w/index.php?title=Ph%E1%BB%A5_thu%E1%BB%99c_d%E1%BB%AF_li%E1%BB%87u&action=edit&redlink=1). [Scoreboarding](/w/index.php?title=Scoreboarding&action=edit&redlink=1) và [thuật toán Tomasulo](/w/index.php?title=Thu%E1%BA%ADt_to%C3%A1n_Tomasulo&action=edit&redlink=1) (tương tự như scoreboarding nhưng sử dụng [đổi tên thanh ghi](/w/index.php?title=%C4%90%E1%BB%95i_t%C3%AAn_thanh_ghi&action=edit&redlink=1)) là hai trong số những kỹ thuật phổ biến nhất cho việc thực thi sai thứ tự và song song cấp câu lệnh.
### Song song dữ liệu[
[sửa](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&veaction=edit&vesection=11) | [sửa mã nguồn](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&action=edit§ion=11)]
Song song dữ liệu là song song vốn có trong
[Vòng lặp chương trình](/w/index.php?title=V%C3%B2ng_l%E1%BA%B7p_ch%C6%B0%C6%A1ng_tr%C3%ACnh&action=edit&redlink=1), trong đó tập trung vào phân phối dữ liệu qua các nút tính toán khác nhau để được xử lý song song. "Vòng song song thường dẫn đến những chuỗi hoạt động tương tự (không nhất thiết phải giống nhau) hoặc các chức năng được thực hiện trên các yếu tố của một cấu trúc dữ liệu lớn." Nhiều ứng dụng khoa học và kỹ thuật áp dụng song song dữ liệu. [21]
Một phụ thuộc loop-carried là sự phụ thuộc của một vòng lặp đi lặp lại trên đầu ra của một hoặc nhiều lần lặp lại trước. Phụ thuộc loop-carried ngăn chặn sự song song hóa của các vòng. Ví dụ, xem xét
[giả mã](/w/index.php?title=Gi%E1%BA%A3_m%C3%A3&action=edit&redlink=1) sau khi tính một vài [số Fibonacci](/wiki/D%C3%A3y_Fibonacci) đầu tiên:
1: PREV1:= 0 2: PREV2:= 1 4: do: 5: CUR:= PREV1 + PREV2 6: PREV1:= PREV2 7: PREV2:= CUR 8: while (CUR < 10)
Vòng này không thể song song vì CUR phụ thuộc vào chính nó (PREV2) và PREV1, được tính toán trong mỗi lần lặp vòng. Vì mỗi lần lặp phụ thuộc vào kết quả của lần lặp trước đó, nên chúng không thể song song. Khi vấn đề trở nên lớn hơn, khối lượng của dữ liệu song song luôn luôn tăng theo.
[[22]](#cite_note-Culler125-22)
### Song song tác vụ[
[sửa](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&veaction=edit&vesection=12) | [sửa mã nguồn](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&action=edit§ion=12)]
Song song tác vụ là thuộc tính của một chương trình song song mà "các phép tính hoàn toàn khác nhau có thể được thực hiện trên các bộ dữ liệu giống hoặc khác nhau".
This contrasts with data parallelism, where the same calculation is performed on the same or different sets of data. Task parallelism does not usually scale with the size of a problem. [21] [[22]](#cite_note-Culler125-22)
## Phần cứng[
[sửa](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&veaction=edit&vesection=13) | [sửa mã nguồn](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&action=edit§ion=13)]
### Bộ nhớ và sự kết nối[
[sửa](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&veaction=edit&vesection=14) | [sửa mã nguồn](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&action=edit§ion=14)]
Bộ nhớ chính trong một máy tính song song có thể là
[bộ nhớ chia sẻ](/w/index.php?title=B%E1%BB%99_nh%E1%BB%9B_chia_s%E1%BA%BB&action=edit&redlink=1) (chia sẻ giữa tất cả các yếu tố xử lý trong một [vùng địa chỉ](/w/index.php?title=V%C3%B9ng_%C4%91%E1%BB%8Ba_ch%E1%BB%89&action=edit&redlink=1) đơn lẻ), hoặc [bộ nhở phân tán](/w/index.php?title=B%E1%BB%99_nh%E1%BB%9F_ph%C3%A2n_t%C3%A1n&action=edit&redlink=1) (trong đó mỗi yếu tố xử lý có vòng địa chỉ cục bộ riêng). Bộ nhớ phân tán đề cập đến việc bộ nhớ được phân phối một cách hợp lý, nhưng cũng bao hàm đến việc nó bị phân tán vật lý. [23] [Bộ nhớ chia sẻ phân tán](/w/index.php?title=B%E1%BB%99_nh%E1%BB%9B_chia_s%E1%BA%BB_ph%C3%A2n_t%C3%A1n&action=edit&redlink=1)và [ảo hóa bộ nhớ](/w/index.php?title=%E1%BA%A2o_h%C3%B3a_b%E1%BB%99_nh%E1%BB%9B&action=edit&redlink=1)kết hợp hai phương pháp tiếp cận, nơi mà các phần tử xử lý có bộ nhớ cục bộ riêng và truy cập vào bộ nhớ trên bộ xử lý không cục bộ. Truy cập vào bộ nhớ cục bộ thường nhanh hơn là truy cập vào bộ nhớ không cục bộ. ![ ](//upload.wikimedia.org/wikipedia/commons/thumb/7/7b/Numa.svg/400px-Numa.svg.png)
![ ](http://upload.wikimedia.org/wikipedia/commons/thumb/7/7b/Numa.svg/400px-Numa.svg.png)
[Non-Uniform Memory Access](/w/index.php?title=Non-Uniform_Memory_Access&action=edit&redlink=1)(NUMA). Bộ xử lý trong một thư mục có thể truy cập bộ nhớ của thư mục đó với độ trễ ít là truy cập vào bộ nhớ trong bộ nhớ của các thư mục khác.
Kiến trúc máy tính trong đó mỗi phần tử của bộ nhớ chính có thể được truy cập với
[độ trễ](/w/index.php?title=Memory_latency&action=edit&redlink=1) và [băng thông](/w/index.php?title=Bandwidth_(computing)&action=edit&redlink=1) bằng nhau được gọi là hệ thống [Truy cập bộ nhớ đồng bộ](/w/index.php?title=Truy_c%E1%BA%ADp_b%E1%BB%99_nh%E1%BB%9B_%C4%91%E1%BB%93ng_b%E1%BB%99&action=edit&redlink=1) (UMA). Thông thường, việc đó chỉ có thể được thực hiện bởi một hệ thống [bộ nhớ chia sẻ](/w/index.php?title=B%E1%BB%99_nh%E1%BB%9B_chia_s%E1%BA%BB&action=edit&redlink=1), trong đó bộ nhớ không bị phân tán vật lý. Một hệ thống không có thuộc tính này được gọi là kiến trúc [truy cập bộ nhớ không đồng bộ](/w/index.php?title=Truy_c%E1%BA%ADp_b%E1%BB%99_nh%E1%BB%9B_kh%C3%B4ng_%C4%91%E1%BB%93ng_b%E1%BB%99&action=edit&redlink=1) (NUMA). Hệ thống bộ nhớ phân tán có NUMA.
Hệ thống máy tính sử dụng các
[vùng nhớ đệm](/w/index.php?title=V%C3%B9ng_nh%E1%BB%9B_%C4%91%E1%BB%87m&action=edit&redlink=1)—các bộ nhớ nhỏ, nhanh đặt gần bộ xử lý mà lưu trữ các bản sao tạm thời của các giá trị bộ nhớ (gần trong cả ý nghĩa về vật lý và logic). Hệ thống máy tính song song gặp khó khăn với vùng nhớ đệm có thể lưu trữ cùng một giá trị ở nhiều vị trí, với khả năng thực thi chương trình không chính xác. Những máy tính này yêu cầu một hệ thống [đồng bộ vùng nhớ đệm](/w/index.php?title=%C4%90%E1%BB%93ng_b%E1%BB%99_v%C3%B9ng_nh%E1%BB%9B_%C4%91%E1%BB%87m&action=edit&redlink=1), trong đó theo dõi các giá trị lưu trữ và dọn dẹp chúng theo trình tự, do đó đảm bảo chương trình được thực hiện đúng. [Bus snooping](/w/index.php?title=Bus_sniffing&action=edit&redlink=1) là một trong những phương pháp phổ biến nhất cho việc theo dõi những giá trị nào đang được truy cập (và nên được thanh lọc). Thiết kế hệ thống đồng bộ vùng nhớ đệm lớn, hiệu suất cao là một vấn đề rất khó trong kiến trúc máy tính. Kết quả là, kiến trúc máy tính chia sẻ bộ nhớ không được coi trọng như hệ thống bộ nhớ phân tán. [[23]](#cite_note-PH713-23)
Kiểu kết nối bộ xử lý-bộ xử lý và bộ xử lý-bộ nhớ có thể được thực hiện trong phần cứng theo nhiều cách, bao gồm thông qua chia sẻ (bộ nhớ đa cổng hoặc
[đa hợp](/w/index.php?title=Multiplexing&action=edit&redlink=1)), một [bộ chuyển mạch thanh ngang](/w/index.php?title=B%E1%BB%99_chuy%E1%BB%83n_m%E1%BA%A1ch_thanh_ngang&action=edit&redlink=1), một [dòng](/w/index.php?title=Bus_(computing)&action=edit&redlink=1) chia sẻ hay một mạng liên kết của vô số các [cấu trúc liên kết](/w/index.php?title=Network_topology&action=edit&redlink=1) bao gồm [star](/w/index.php?title=Star_network&action=edit&redlink=1), [ring](/w/index.php?title=Ring_network&action=edit&redlink=1), [tree](/w/index.php?title=Tree_(graph_theory)&action=edit&redlink=1), [hypercube](/w/index.php?title=Hypercube_graph&action=edit&redlink=1), fat hypercube (một hypercube với nhiều hơn một bộ xử lý tại nút a), hoặc [mạng n chiều](/wiki/Mesh_networking).
Máy tính song song dựa trên kết nối mạng cần phải có một số loại
[định tuyến](/wiki/%C4%90%E1%BB%8Bnh_tuy%E1%BA%BFn) để cho phép việc truyền thông điệp giữa các nút không được kết nối trực tiếp. Phương pháp được sử dụng cho kết nối giữa các bộ xử lý có thể được phân cấp trong các máy vi xử lý lớn.
### Các dạng máy tính song song[
[sửa](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&veaction=edit&vesection=15) | [sửa mã nguồn](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&action=edit§ion=15)]
Máy tính song song có thể được tạm phân loại theo mức độ các phần cứng hỗ trợ song song. Kiểu phân loại này nói chung tương tự như khoảng cách giữa các nút tính toán cơ bản. Đây không phải là loại trừ lẫn nhau; ví dụ, các cụm đa xử lý đối xứng là tương đối phổ biến.
#### Tính toán đa nhân[
[sửa](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&veaction=edit&vesection=16) | [sửa mã nguồn](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&action=edit§ion=16)]
Một bộ xử lý đa lõi là một bộ xử lý bao gồm nhiều
[đơn vị thực hiện](/w/index.php?title=%C4%90%C6%A1n_v%E1%BB%8B_th%E1%BB%B1c_hi%E1%BB%87n&action=edit&redlink=1) ("nhân") trên cùng một chip. Những bộ xử lý này khác với bộ xử lý siêu vô hướng, có thể tạo ra nhiều câu lệnh trên một chu kỳ từ một dòng lệnh (thread). Mỗi lõi trong bộ xử lý đa lõi đều có khả năng là siêu vô hướng—có nghĩa là, trên mỗi chu kỳ, mỗi lõi có thể tạo ra nhiều câu lệnh từ một dòng lệnh. [Xử lý đa luồng đồng thời](/w/index.php?title=X%E1%BB%AD_l%C3%BD_%C4%91a_lu%E1%BB%93ng_%C4%91%E1%BB%93ng_th%E1%BB%9Di&action=edit&redlink=1) (trong đó [HyperThreading](/w/index.php?title=HyperThreading&action=edit&redlink=1) của Intel là nổi tiếng nhất) là một hình thức ban đầu của giả đa nhân. Một bộ xử lý có khả năng xử lý đa luồng đồng thời chỉ có một đơn vị thực hiện ("nhân"), nhưng khi đơn vị thực hiện đó không hoạt động (chẳng hạn như trong lỗi [không tìm thấy trong vùng nhớ đệm](/w/index.php?title=Kh%C3%B4ng_t%C3%ACm_th%E1%BA%A5y_trong_v%C3%B9ng_nh%E1%BB%9B_%C4%91%E1%BB%87m&action=edit&redlink=1)), nó sử dụng đơn vị thực hiện đó để xử lý một chuỗi thứ hai. [Cell microprocessor](/w/index.php?title=Cell_(microprocessor)&action=edit&redlink=1) của [IBM](/wiki/IBM), được thiết kế để sử dụng cho [Sony](/wiki/Sony) [PlayStation 3](/wiki/PlayStation_3), là một bộ xử lý đa lỗi nổi bật khác.
#### Đa xử lý đối xứng[
[sửa](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&veaction=edit&vesection=17) | [sửa mã nguồn](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&action=edit§ion=17)]
Một bộ đa xử lý đối xứng (SMP) là một hệ thống máy tính với nhiều bộ xử lý giống hệt nhau chia sẻ bộ nhớ và kết nối thông qua một kênh.
[[24]](#cite_note-HP549-24) [Bus contention](/w/index.php?title=Bus_contention&action=edit&redlink=1) ngăn chặn các kiến trúc khỏi việc mở rộng. Kết quả là, SMPS thường không bao gồm hơn 32 bộ xử lý. "Vì kích thước nhỏ của bộ xử lý và việc giảm đáng kể trong các yêu cầu về băng thông đạt được bởi các vùng nhớ đệm lớn, bộ đa xử lý đối xứng như vậy là cực kỳ hiệu quả, với điều kiện là tồn tại một băng thông bộ nhớ đủ dung lượng." [25] [[24]](#cite_note-HP549-24)
#### Tính toán phân tán[
[sửa](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&veaction=edit&vesection=18) | [sửa mã nguồn](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&action=edit§ion=18)]
Một máy tính phân tán (còn được gọi là bộ đa xử lý bộ nhớ phân tán) là một hệ thống máy tính phân tán bộ nhớ trong đó các thành phần xử lý được kết nối bởi mạng. Máy tính phân tán có khả năng mở rộng cao.
##### Tính toán cụm[
[sửa](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&veaction=edit&vesection=19) | [sửa mã nguồn](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&action=edit§ion=19)]
Cluster là một nhóm các máy tính kết nối lỏng làm việc cùng nhau chặt chẽ, như vậy trong một số khía cạnh nào đó chúng có thể được coi là một chiếc máy tính.
Các cụm gồm nhiều máy tính độc lập được kết nối qua mạng. Khi các máy trong cụm không cần phải đối xứng, [26] [cân bằng tải](/w/index.php?title=Load_balancing_(computing)&action=edit&redlink=1)sẽ trở nên khó hơn nếu chúng không đối xứng. Dạng phổ biến nhất của cụm là [cụm Beowulf](/w/index.php?title=Beowulf_(computing)&action=edit&redlink=1), là một cụm thực hiện trên nhiều máy tính [commercial off-the-shelf](/w/index.php?title=Commercial_off-the-shelf&action=edit&redlink=1)giống nhau kết nối qua [mạng cục bộ](/wiki/LAN) [TCP/IP](/wiki/TCP/IP) [Ethernet](/wiki/Ethernet). Công nghệ Beowulf được phát triển đầu tiên bởi [[27]](#cite_note-27) [Thomas Sterling](/w/index.php?title=Thomas_Sterling_(computing)&action=edit&redlink=1)và [Donald Becker](/w/index.php?title=Donald_Becker&action=edit&redlink=1). Đại đa số các siêu máy tính [TOP500](/w/index.php?title=TOP500&action=edit&redlink=1)là cụm. [[28]](#cite_note-28)
##### Tính toán song song hàng loạt[
[sửa](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&veaction=edit&vesection=20) | [sửa mã nguồn](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&action=edit§ion=20)]
Một bộ xử lý song song hàng loạt (MPP) là một máy tính đơn được kết nối với nhiều bộ xử lý. MPPs có nhiều đặc điểm tương tự như cụm, nhưng MPPs có kết nối mạng riêng biệt (trong khi các cụm sử dụng phần cứng cho mạng). MPPs cũng có xu hướng lớn hơn so với các cụm, thường có "nhiều hơn" 100 bộ xử lý.
Trong một MPP, "mỗi CPU có bộ nhớ riêng của nó và bản sao của hệ điều hành và ứng dụng. Mỗi hệ thống con giao tiếp với những cái khác thông qua một kết nối tốc độ cao." [29] [[30]](#cite_note-30) [Blue Gene / L](/w/index.php?title=Blue_Gene_/_L&action=edit&redlink=1), siêu máy tính nhanh thứ năm thế giới theo xếp hạng TOP500 tháng sáu năm 2009, là một MPP.
##### Tính toán mạng lưới[
[sửa](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&veaction=edit&vesection=21) | [sửa mã nguồn](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&action=edit§ion=21)]
Tính toán mạng lưới là dạng phân tán nhất của tính toán song song. Nó sử dụng các máy tính kết nối thông qua mạng
[Internet](/wiki/Internet) để làm việc với một vấn đề nhất định. Vì băng thông thấp và độ trễ rất cao của Internet, tính toán mạng lưới thường chỉ đối mặt với vấn đề [embarrassingly parallel](/w/index.php?title=Embarrassingly_parallel&action=edit&redlink=1). [Nhiều ứng dụng tính toán mạng lưới](/w/index.php?title=Danh_s%C3%A1ch_c%C3%A1c_d%E1%BB%B1_%C3%A1n_t%C3%ADnh_to%C3%A1n_ph%C3%A2n_t%C3%A1n&action=edit&redlink=1) đã được tạo ra, trong đó [SETI@home](/wiki/SETI@home) và [Folding@Home](/w/index.php?title=Folding@Home&action=edit&redlink=1) là những ví dụ nổi tiếng nhất. [[31]](#cite_note-31)
Hầu hết những ứng dụng đều sử dụng
[middleware](/wiki/Middleware), phần mềm ở giữa hệ điều hành và các ứng dụng quản lý tài nguyên mạng và chuẩn hoá giao diện phần mềm. Middleware tính toán mạng lưới phổ biển nhất là [Berkeley Open Infrastructure for Network Computing](/wiki/BOINC) (BOINC). Thông thường, phần mềm tính toán mạng lưới sử dụng các "chu kỳ rỗi", thực hiện tính toán vào các thời điểm khi một máy tính đang không hoạt động.
#### Máy tính song song chuyên ngành[
[sửa](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&veaction=edit&vesection=22) | [sửa mã nguồn](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&action=edit§ion=22)]
Trong tính toán song song, có những thiết bị song song chuyên ngành vẫn còn những khu vực quan tâm thích hợp. Khi không có
[miền riêng](/w/index.php?title=Ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh_cho_mi%E1%BB%81n_ri%C3%AAng&action=edit&redlink=1), chúng có xu hướng áp dụng đối với chỉ một vài phần của vấn đề song song.
##### Reconfigurable computing with field-programmable gate arrays[
[sửa](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&veaction=edit&vesection=23) | [sửa mã nguồn](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&action=edit§ion=23)] [Reconfigurable computing](/w/index.php?title=Reconfigurable_computing&action=edit&redlink=1) is the use of a [field-programmable gate array](/wiki/Field-programmable_gate_array) (FPGA) as a co-processor to a general-purpose computer. An FPGA is, in essence, a computer chip that can rewire itself for a given task.
FPGAs can be programmed with
[hardware description languages](/w/index.php?title=Hardware_description_language&action=edit&redlink=1) such as [VHDL](/wiki/VHDL) or [Verilog](/w/index.php?title=Verilog&action=edit&redlink=1). However, programming in these languages can be tedious. Several vendors have created [C to HDL](/w/index.php?title=C_to_HDL&action=edit&redlink=1) languages that attempt to emulate the syntax and/or semantics of the [C programming language](/w/index.php?title=C_programming_language&action=edit&redlink=1), with which most programmers are familiar. The best known C to HDL languages are [Mitrion-C](/w/index.php?title=Mitrion-C&action=edit&redlink=1), [Impulse C](/w/index.php?title=Impulse_C&action=edit&redlink=1), [DIME-C](/w/index.php?title=DIME-C&action=edit&redlink=1), and [Handel-C](/w/index.php?title=Handel-C&action=edit&redlink=1). Specific subsets of [SystemC](/w/index.php?title=SystemC&action=edit&redlink=1) based on C++ can also be used for this purpose.
AMD's decision to open its
[HyperTransport](/w/index.php?title=HyperTransport&action=edit&redlink=1) technology to third-party vendors has become the enabling technology for high-performance reconfigurable computing. According to Michael R. D'Amour, Chief Operating Officer of [32] [DRC Computer Corporation](/w/index.php?title=DRC_Computer_Corporation&action=edit&redlink=1), "when we first walked into AMD, they called us 'the [socket](/w/index.php?title=CPU_socket&action=edit&redlink=1)stealers.' Now they call us their partners." [[32]](#cite_note-DAmour-32)
##### Tính toán đa năng trên các đơn vị xử lý đồ họa (GPGPU)[
[sửa](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&veaction=edit&vesection=24) | [sửa mã nguồn](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&action=edit§ion=24)]
Tính toán đa năng trên các
[đơn vị xử lý đồ họa](/w/index.php?title=%C4%90%C6%A1n_v%E1%BB%8B_x%E1%BB%AD_l%C3%BD_%C4%91%E1%BB%93_h%E1%BB%8Da&action=edit&redlink=1) (GPGPU) là một xu hướng khá phổ biến gần đây trong nghiên cứu kỹ thuật máy tính. GPUs là các bộ xử lý đồng bộ được tối ưu hóa mạnh cho việc xử lý [đồ họa máy tính](/wiki/%C4%90%E1%BB%93_h%E1%BB%8Da_m%C3%A1y_t%C3%ADnh). Xử lý đồ họa máy tính là một lĩnh vực bị chi phối bởi các thao tác dữ liệu song song—đặc biệt là các thao tác [33] [ma trận](/wiki/Ma_tr%E1%BA%ADn) [đại số tuyến tính](/wiki/%C4%90%E1%BA%A1i_s%E1%BB%91_tuy%E1%BA%BFn_t%C3%ADnh).
Trong những ngày đầu, các chương trình GPGPU sử dụng đồ họa thông thường APIs để chạy. Tuy nhiên, một số ngôn ngữ và nền tảng lập trình mới đã được xây dựng để thực hiện tính toán đa năng trên GPU với cả
[Nvidia](/w/index.php?title=Nvidia&action=edit&redlink=1) và [AMD](/wiki/AMD) tạo ra môi trường lập trình với [CUDA](/wiki/CUDA) và [CTM](/w/index.php?title=Close_to_Metal&action=edit&redlink=1) tương ứng. Các ngôn ngữ lập trình GPU khác là [BrookGPU](/w/index.php?title=BrookGPU&action=edit&redlink=1), [PeakStream](/w/index.php?title=PeakStream&action=edit&redlink=1), và [RapidMind](/w/index.php?title=RapidMind&action=edit&redlink=1). Nvidia cũng đã tung ra các sản phẩm dành riêng cho tính toán trong [dòng Tesla](/w/index.php?title=Nvidia_Tesla&action=edit&redlink=1) của họ. Tập đoàn công nghệ Khronos Group đã tạo ra kỹ thuật [OpenCL](/w/index.php?title=OpenCL&action=edit&redlink=1), một khuôn khổ cho việc viết chương trình chạy trên nền tảng bao gồm CPU và GPU. [Apple](/wiki/Apple_Inc.), [Intel](/wiki/Intel), [Nvidia](/w/index.php?title=Nvidia&action=edit&redlink=1) và nhiều nhãn hiệu khác đều hỗ trợ [OpenCL](/w/index.php?title=OpenCL&action=edit&redlink=1).
##### Mạch tích hợp ứng dụng cụ thể[
[sửa](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&veaction=edit&vesection=25) | [sửa mã nguồn](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&action=edit§ion=25)]
Một số phương pháp tiếp cận
[mạch tích hợp ứng dụng cụ thể](/w/index.php?title=M%E1%BA%A1ch_t%C3%ADch_h%E1%BB%A3p_%E1%BB%A9ng_d%E1%BB%A5ng_c%E1%BB%A5_th%E1%BB%83&action=edit&redlink=1) (ASIC) đã được nghĩ ra để đối phó với các ứng dụng song song. [[34]](#cite_note-34) [[35]](#cite_note-35) [[36]](#cite_note-36)
Vì một ASIC (theo định nghĩa) là dành riêng cho một ứng dụng nhất định, nó có thể được tối ưu hóa hoàn toàn cho ứng dụng đó. Kết quả là, đối với một ứng dụng nhất định, ASIC là một xu hướng tốt hơn một máy tính đa năng. Tuy nhiên, ASIC được tạo ra bởi
[X-ray lithography](/w/index.php?title=X-ray_lithography&action=edit&redlink=1). Quá trình này đòi hỏi một màn chắn rất tốn kém. Một màn chắn đơn có thể có giá hơn một triệu đô la Mỹ. (Các bóng bán dẫn cần thiết cho chip càng nhỏ, các màn chắn sẽ càng đắt tiền.) Trong khi đó, tăng hiệu quả tính toán đa năng theo thời gian (như mô tả của định luật Moore) có xu hướng xóa bỏ lợi nhuận trong chỉ một hoặc hai thế hệ chip. [37] Chi phí ban đầu cao, và xu hướng bị vượt qua bởi tính toán đa năng của định luật Moore, đã làm cho ASIC không khả thi với hầu hết các ứng dụng tính toán song song. Tuy nhiên, một số đã được xây dựng. Một ví dụ là máy peta-flop [[32]](#cite_note-DAmour-32) [RIKEN MDGRAPE-3](/w/index.php?title=RIKEN_MDGRAPE-3&action=edit&redlink=1)đã sử dụng tùy chỉnh ASIC cho mô phỏng [động học phân tử](/w/index.php?title=%C4%90%E1%BB%99ng_h%E1%BB%8Dc_ph%C3%A2n_t%E1%BB%AD&action=edit&redlink=1).
##### Xử lý liên hợp[
[sửa](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&veaction=edit&vesection=26) | [sửa mã nguồn](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&action=edit§ion=26)]
Một bộ xử lý liên hợp là hệ thống CPU hoặc máy tính có thể thực hiện cùng một lệnh trên các bộ dữ liệu lớn. "Các bộ xử lý liên hợp có những thao tác cấp cao làm việc trên các mảng tuyến tính của số hoặc vector. Một ví dụ thao tác liên hợp là
*A* = *B* × *C*, trong đó *A*, *B*, và *C* là các vector phần tử 64 của các số [dấu phẩy động](/w/index.php?title=D%E1%BA%A5u_ph%E1%BA%A9y_%C4%91%E1%BB%99ng&action=edit&redlink=1) 64-bit." Chúng liên quan chặt chẽ đến phân loại SIMD của Flynn. [38] [[38]](#cite_note-PH751-38)
Các máy tính
[Cray](/w/index.php?title=Cray&action=edit&redlink=1) trở nên nổi tiếng với bộ xử lý liên hợp của chúng trong những năm 1970 và 1980. Tuy nhiên, bộ xử lý liên hợp—trong cả các hệ thống CPU cũng như máy tính—đã gần như biến mất. Các [bộ xử lý lệnh](/w/index.php?title=T%E1%BA%ADp_l%E1%BB%87nh&action=edit&redlink=1) hiện đại có bao gồm một số câu lệnh xử lý liên hợp, chẳng hạn như [AltiVec](/w/index.php?title=AltiVec&action=edit&redlink=1) và [Streaming SIMD Extensions](/w/index.php?title=Streaming_SIMD_Extensions&action=edit&redlink=1) (SSE).
## Phần mềm[
[sửa](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&veaction=edit&vesection=27) | [sửa mã nguồn](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&action=edit§ion=27)]
### Ngôn ngữ lập trình song song[
[sửa](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&veaction=edit&vesection=28) | [sửa mã nguồn](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&action=edit§ion=28)] [Ngôn ngữ lập trình tương tác](/w/index.php?title=Th%E1%BB%83_lo%E1%BA%A1i:Ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh_t%C6%B0%C6%A1ng_t%C3%A1c&action=edit&redlink=1), [thư viện](/w/index.php?title=Library_(computing)&action=edit&redlink=1), [APIs](/w/index.php?title=Application_programming_interface&action=edit&redlink=1), và các [mô hình lập trình song song](/w/index.php?title=M%C3%B4_h%C3%ACnh_l%E1%BA%ADp_tr%C3%ACnh_song_song&action=edit&redlink=1) (như [thuật toán Skeletons](/w/index.php?title=Thu%E1%BA%ADt_to%C3%A1n_skeleton&action=edit&redlink=1)) đã được xây dựng cho các máy tính lập trình song song. Những thứ này có thể được chia thành các lớp dựa trên những giả thuyết chúng tạ ra về kiến trúc bộ nhớ cơ bản—bộ nhớ chia sẻ, bộ nhớ phân tán, hay DSM. Các ngôn ngữ lập trình chia sẻ bộ nhớ giao tiếp bằng cách điều khiển các biến chia sẻ bộ nhớ. Bộ nhớ phân tán sử dụng [truyền tin](/wiki/Truy%E1%BB%81n_tin). [POSIX Threads](/w/index.php?title=POSIX_Threads&action=edit&redlink=1) và [OpenMP](/w/index.php?title=OpenMP&action=edit&redlink=1) là hai trong số các API phổ biến nhất sử dụng bộ nhớ chia sẻ, trong khi [Giao diện truyền tin](/w/index.php?title=Giao_di%E1%BB%87n_truy%E1%BB%81n_tin&action=edit&redlink=1) (MPI) là API sử dụng hệ thống truyền tin nổi bật nhất. Một khái niệm được sử dụng trong chương trình lập trình song song là [39] [Khái niệm tương lai](/w/index.php?title=T%C6%B0%C6%A1ng_lai_v%C3%A0_s%E1%BB%B1_h%E1%BB%A9a_h%E1%BA%B9n&action=edit&redlink=1), khi một phần của chương trình hứa hẹn sẽ mang lại dữ liệu cần thiết cho một phần khác ở một thời điểm trong tương lai.
### Song song hóa tự động[
[sửa](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&veaction=edit&vesection=29) | [sửa mã nguồn](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&action=edit§ion=29)]
Song song hóa tự động của một chương trình tuần tự bởi
[trình biên dịch](/wiki/Tr%C3%ACnh_bi%C3%AAn_d%E1%BB%8Bch) là [holy grail](/w/index.php?title=Holy_grail&action=edit&redlink=1) của tính toán song song. Mặc dù các nhà nghiên cứu trình biên dịch đã làm việc hàng thập kỷ, song song hóa tự động vẫn chỉ đạt được những thành công giới hạn. [[40]](#cite_note-40)
Các ngôn ngữ lập trình song song có thể là
[song song hiện](/w/index.php?title=Explicit_parallelism&action=edit&redlink=1) hoặc (tốt nhất) [ngầm một phần](/w/index.php?title=Song_song_ng%E1%BA%A7m&action=edit&redlink=1), trong đó các lập trình viên [chỉ thị](/w/index.php?title=Directive_(programming)&action=edit&redlink=1) trình biên dịch song song hóa. Cũng có một vài ngôn ngữ lập trình song song ngầm hoàn toàn tồn tại— [SISAL](/w/index.php?title=SISAL&action=edit&redlink=1), song song [Haskell](/w/index.php?title=Haskell_(programming_language)&action=edit&redlink=1), và [Mitrion-C](/w/index.php?title=Mitrion-C&action=edit&redlink=1) (cho [FPGAs](/wiki/Field-programmable_gate_array)).
### Tạo điểm kiểm tra ứng dụng[
[sửa](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&veaction=edit&vesection=30) | [sửa mã nguồn](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&action=edit§ion=30)]
Các máy tính càng lớn và càng phức tạp thì càng dễ sai và
[thời gian giữa các thất bại](/w/index.php?title=Th%E1%BB%9Di_gian_gi%E1%BB%AFa_c%C3%A1c_th%E1%BA%A5t_b%E1%BA%A1i&action=edit&redlink=1) càng ngắn. [Tạo điểm kiểm tra ứng dụng](/w/index.php?title=T%E1%BA%A1o_%C4%91i%E1%BB%83m_ki%E1%BB%83m_tra_%E1%BB%A9ng_d%E1%BB%A5ng&action=edit&redlink=1) là kỹ thuật mà hệ thống máy tính tạo một "bản ghi nhanh" của ứng dụng—một bản ghi của tất cả các phân bổ tài nguyên và trạng thái của biến ở thời điểm đó, giống như một [kết xuất bộ nhớ](/w/index.php?title=K%E1%BA%BFt_xu%E1%BA%A5t_b%E1%BB%99_nh%E1%BB%9B&action=edit&redlink=1); thông tin này có thể được sử dụng để khôi phục lại chương trình nếu máy tính bị gặp sự cố. Tạo điểm kiểm tra ứng dụng có nghĩa là chương trình chỉ phải khởi động lại từ điểm kiểm tra cuối cùng chứ không phải từ đầu. Đối với ứng dụng có thể chạy trong hàng tháng, điều này rất quan trọng. Tạo điểm kiểm tra ứng dụng có thể được sử dụng cho [xử lý di chuyển](/w/index.php?title=X%E1%BB%AD_l%C3%BD_di_chuy%E1%BB%83n&action=edit&redlink=1) thuận lợi.
## Phương pháp thuật toán[
[sửa](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&veaction=edit&vesection=31) | [sửa mã nguồn](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&action=edit§ion=31)]
Khi các máy tính song song trở nên lớn hơn và nhanh hơn, sẽ là khả thi để giải quyết những vấn đề mà trước đây đã mất quá lâu để chạy. Tính toán song song được sử dụng trong phạm vi rất rộng, từ
[sinh học](/wiki/Sinh_h%E1%BB%8Dc) ( [kết xoắn protein](/w/index.php?title=K%E1%BA%BFt_xo%E1%BA%AFn_protein&action=edit&redlink=1) và [phân tích chuỗi](/w/index.php?title=Ph%C3%A2n_t%C3%ADch_chu%E1%BB%97i&action=edit&redlink=1)) đến kinh tế ( [toán học tài chính](/wiki/To%C3%A1n_h%E1%BB%8Dc_t%C3%A0i_ch%C3%ADnh)). Các dạng vấn đề thường gặp được tìm thấy trong các ứng dụng tính toán song song là: [[41]](#cite_note-41) [Đại số tuyến tính](/wiki/%C4%90%E1%BA%A1i_s%E1%BB%91_tuy%E1%BA%BFn_t%C3%ADnh)dày đặc.
- Đại số tuyến tính thưa.
- Phương pháp quang phổ (như
[biến đổi Fourier nhanh của Cooley–Tukey](/w/index.php?title=Cooley%E2%80%93Tukey_FFT_algorithm&action=edit&redlink=1)) [Vấn đề](/w/index.php?title=M%C3%B4_ph%E1%BB%8Fng_n-body&action=edit&redlink=1)(như *n*-body [mô phỏng Barnes–Hut](/w/index.php?title=M%C3%B4_ph%E1%BB%8Fng_Barnes%E2%80%93Hut&action=edit&redlink=1))
- Các vấn đề
[Mạng lưới cấu trúc](/w/index.php?title=Regular_grid&action=edit&redlink=1)(như [Phương pháp lưới Boltzmann](/w/index.php?title=Ph%C6%B0%C6%A1ng_ph%C3%A1p_l%C6%B0%E1%BB%9Bi_Boltzmann&action=edit&redlink=1))
- Các vấn đề
[mạng lưới không cấu trúc](/w/index.php?title=M%E1%BA%A1ng_l%C6%B0%E1%BB%9Bi_kh%C3%B4ng_c%E1%BA%A5u_tr%C3%BAc&action=edit&redlink=1)(như trong [phân tích phần tử hữu hạn](/w/index.php?title=Ph%C3%A2n_t%C3%ADch_ph%E1%BA%A7n_t%E1%BB%AD_h%E1%BB%AFu_h%E1%BA%A1n&action=edit&redlink=1)) [Mô phỏng Monte Carlo](/wiki/Ph%C6%B0%C6%A1ng_ph%C3%A1p_Monte_Carlo) [Tổ hợp logic](/w/index.php?title=T%E1%BB%95_h%E1%BB%A3p_logic&action=edit&redlink=1)(như [kỹ thuật mật mã brute-force](/w/index.php?title=T%E1%BA%A5n_c%C3%B4ng_Brute_force&action=edit&redlink=1)) [Đồ thị giao nhau](/w/index.php?title=%C4%90%E1%BB%93_th%E1%BB%8B_giao_nhau&action=edit&redlink=1)(như [thuật toán](/wiki/Thu%E1%BA%ADt_to%C3%A1n)) [Quy hoạch động](/wiki/Quy_ho%E1%BA%A1ch_%C4%91%E1%BB%99ng)
- Phương pháp
[nhánh và cận](/w/index.php?title=Nh%C3%A1nh_v%C3%A0_c%E1%BA%ADn&action=edit&redlink=1) [Mô hình đồ họa](/w/index.php?title=M%C3%B4_h%C3%ACnh_%C4%91%E1%BB%93_h%E1%BB%8Da&action=edit&redlink=1)(như phát hiện [mô hình Markov ẩns](/wiki/M%C3%B4_h%C3%ACnh_Markov_%E1%BA%A9n)và xây dựng [mạng Bayesian](/w/index.php?title=M%E1%BA%A1ng_Bayesian&action=edit&redlink=1))
- Mô phỏng
[Máy trạng thái hữu hạn](/w/index.php?title=M%C3%A1y_tr%E1%BA%A1ng_th%C3%A1i_h%E1%BB%AFu_h%E1%BA%A1n&action=edit&redlink=1)
## Lịch sử[
[sửa](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&veaction=edit&vesection=32) | [sửa mã nguồn](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&action=edit§ion=32)]
Nguồn gốc của song song (MIMD) xuất phát từ
[Federico Luigi, Conte Menabrea](/w/index.php?title=Federico_Luigi,_Conte_Menabrea&action=edit&redlink=1) và "Phác thảo của [máy giả tích](/w/index.php?title=M%C3%A1y_gi%E1%BA%A3_t%C3%ADch&action=edit&redlink=1) phát minh bởi [Charles Babbage](/wiki/Charles_Babbage)" của ông. [[43]](#cite_note-43) [[44]](#cite_note-PH753-44) [IBM](/wiki/IBM) giới thiệu [704](/w/index.php?title=IBM_704&action=edit&redlink=1) vào năm 1954, thông qua một dự án, trong đó [Gene Amdahl](/w/index.php?title=Gene_Amdahl&action=edit&redlink=1) là một trong những kiến trúc sư chính. Nó đã trở thành máy tính thương mại đầu tiên sử dụng lệnh số học [dấu phẩy động](/w/index.php?title=D%E1%BA%A5u_ph%E1%BA%A9y_%C4%91%E1%BB%99ng&action=edit&redlink=1) hoàn toàn tự động. [[45]](#cite_note-45)
Vào tháng Tư năm 1958, S. Gill (Ferranti) thảo luận về lập trình song song và nhu cầu phân nhánh và chờ đợi.
Cũng trong năm 1958, hai nhà nghiên cứu của IBM [46] [John Cocke](/w/index.php?title=John_Cocke&action=edit&redlink=1)và [Daniel Slotnick](/w/index.php?title=Daniel_Slotnick&action=edit&redlink=1)lần đầu tiên thảo luận về việc sử dụng song song trong các tính toán số học. [[47]](#cite_note-G_Wilson-47) [Tập đoàn Burroughs](/w/index.php?title=T%E1%BA%ADp_%C4%91o%C3%A0n_Burroughs&action=edit&redlink=1)đã giới thiệu D825 năm 1962, một máy tính bốn bộ xử lý có thể truy cập lên đến 16 module bộ nhớ thông qua một [bộ chuyển mạch thanh ngang](/w/index.php?title=B%E1%BB%99_chuy%E1%BB%83n_m%E1%BA%A1ch_thanh_ngang&action=edit&redlink=1). Năm 1967, Amdahl và Slotnick công bố một cuộc tranh luận về tính khả thi của xử lý song song tại của Hội nghị xử lý thông tin xã hội Liên bang Mỹ. [[48]](#cite_note-48) Từ cuộc tranh luận này mà định luật Amdahl đã được đặt ra để xác định giới hạn sự tăng tốc do song song. [[47]](#cite_note-G_Wilson-47)
Năm 1969, công ty của Mỹ
[Honeywell](/w/index.php?title=Honeywell&action=edit&redlink=1) giới thiệu hệ thống Multics đầu tiên của mình, một hệ thống đa xử lý đối xứng có khả năng chạy lên đến tám bộ xử lý song song. [[47]](#cite_note-G_Wilson-47) [C.mmp](/w/index.php?title=C.mmp&action=edit&redlink=1), một dự án bộ đa xử lý ở [Đại học Carnegie Mellon](/wiki/%C4%90%E1%BA%A1i_h%E1%BB%8Dc_Carnegie_Mellon) những năm 1970, là "một trong những bộ đa xử lý đầu tiên với hơn một vài bộ vi xử lý". "Bộ đa xử lý đầu tiên kết nối kênh với snooping vùng nhớ đệm là [44] [Synapse N+1](/w/index.php?title=Synapse_N%2B1&action=edit&redlink=1)năm 1984." [[44]](#cite_note-PH753-44)
Máy tính song song SIMD có nguồn gốc từ những năm 1970. Hoạt động của những máy tính SIMD đời đầu là giảm dần các
[chậm trể ở cổng](/w/index.php?title=Propagation_delay&action=edit&redlink=1) ở [đơn vị kiểm soát](/w/index.php?title=%C4%90%C6%A1n_v%E1%BB%8B_ki%E1%BB%83m_so%C3%A1t&action=edit&redlink=1) của bộ xử lý trên nhiều lệnh. Năm 1964, Slotnick đã đề xuất xây dựng một máy tính song song hàng loạt cho [49] [Phòng thí nghiệm quốc gia Lawrence Livermore](/w/index.php?title=Ph%C3%B2ng_th%C3%AD_nghi%E1%BB%87m_qu%E1%BB%91c_gia_Lawrence_Livermore&action=edit&redlink=1). Thiết kế của ông được tài trợ bởi [[47]](#cite_note-G_Wilson-47) [Không quân Hoa Kỳ](/wiki/Kh%C3%B4ng_qu%C3%A2n_Hoa_K%E1%BB%B3), là nỗ lực tính toán song song SIMD đầu tiên, [ILLIAC IV](/w/index.php?title=ILLIAC_IV&action=edit&redlink=1). Chìa khóa cho việc thiết kế của nó là một song song khá cao, lên đến 256 bộ xử lý, cho phép máy làm việc trên bộ dữ liệu lớn mà sau này được biết đến như là [[47]](#cite_note-G_Wilson-47) [xử lý liên hợp](/w/index.php?title=B%E1%BB%99_x%E1%BB%AD_l%C3%BD_li%C3%AAn_h%E1%BB%A3p&action=edit&redlink=1). Tuy nhiên, ILLIAC IV được gọi là "nổi tiếng nhất trong các siêu máy tính", vì dự án đã được chỉ hoàn thành được một phần tư, nhưng tốn 11 năm và chi phí gấp gần bốn lần so với ước tính ban đầu. Khi nó cuối cùng cũng có thể chạy ứng dụng đầu tiên vào năm 1976, nó đã hoàn toàn thua kém so với những siêu máy tính thương mại lúc đó như [[42]](#cite_note-infamous-42) [Cray-1](/w/index.php?title=Cray-1&action=edit&redlink=1).
## Xem thêm[
[sửa](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&veaction=edit&vesection=33) | [sửa mã nguồn](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&action=edit§ion=33)] [List of important publications in concurrent, parallel, and distributed computing](/w/index.php?title=List_of_important_publications_in_concurrent,_parallel,_and_distributed_computing&action=edit&redlink=1) [List of distributed computing conferences](/w/index.php?title=List_of_distributed_computing_conferences&action=edit&redlink=1) [Content Addressable Parallel Processor](/w/index.php?title=Content_Addressable_Parallel_Processor&action=edit&redlink=1) [Transputer](/w/index.php?title=Transputer&action=edit&redlink=1)
## Tham khảo[
[sửa](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&veaction=edit&vesection=34) | [sửa mã nguồn](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&action=edit§ion=34)] **Almasi, G.S. and A. Gottlieb (1989).** [^](#cite_ref-1) [. Benjamin-Cummings publishers, Redwood City, CA.](http://portal.acm.org/citation.cfm?id=160438) *Highly Parallel Computing* **S.V. Adve et al. (November 2008).** [^](#cite_ref-2) ["Parallel Computing Research at Illinois: The UPCRC Agenda"](http://www.upcrc.illinois.edu/documents/UPCRC_Whitepaper.pdf)(PDF). Parallel@Illinois, University of Illinois at Urbana-Champaign. "The main techniques for these performance benefits – increased clock frequency and smarter but increasingly complex architectures – are now hitting the so-called power wall. The computer industry has accepted that future performance increases must largely come from increasing the number of processors (or cores) on a die, rather than making a single core go faster." **Asanovic et al. Old [conventional wisdom]: Power is free, but transistors are expensive. New [conventional wisdom] is [that] power is expensive, but transistors are "free".** [^](#cite_ref-3) **Asanovic, Krste et al. (ngày 18 tháng 12 năm 2006).** [^](#cite_ref-View-Power_4-0) ["The Landscape of Parallel Computing Research: A View from Berkeley"](http://www.eecs.berkeley.edu/Pubs/TechRpts/2006/EECS-2006-183.pdf)(PDF). University of California, Berkeley. Technical Report No. UCB/EECS-2006-183. "Old [conventional wisdom]: Increasing clock frequency is the primary method of improving processor performance. New [conventional wisdom]: Increasing parallelism is the primary method of improving processor performance... Even representatives from Intel, a company generally associated with the 'higher clock-speed is better' position, warned that traditional approaches to maximizing performance through maximizing clock speed have been pushed to their limit." [^](#cite_ref-5) [Patterson, David A.](/w/index.php?title=David_A._Patterson_(scientist)&action=edit&redlink=1)và [John L. Hennessy](/w/index.php?title=John_L._Hennessy&action=edit&redlink=1)(1998). *Computer Organization and Design*, Second Edition, Morgan Kaufmann Publishers, p. 715. [ISBN 1-55860-428-6](/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Ngu%E1%BB%93n_s%C3%A1ch/1558604286).
- ^
**a** [Barney, Blaise.](#cite_ref-llnltut_6-1) **ă** [“Introduction to Parallel Computing”](http://www.llnl.gov/computing/tutorials/parallel_comp/). Lawrence Livermore National Laboratory. Truy cập ngày 9 tháng 11 năm 2007. [^](#cite_ref-7) [Hennessy, John L.](/w/index.php?title=John_L._Hennessy&action=edit&redlink=1)và [David A. Patterson](/w/index.php?title=David_A._Patterson_(scientist)&action=edit&redlink=1)(2002). *Computer Architecture: A Quantitative Approach*. 3rd edition, Morgan Kaufmann, p. 43. [ISBN 1-55860-724-2](/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Ngu%E1%BB%93n_s%C3%A1ch/1558607242). **Rabaey, J. M. (1996).** [^](#cite_ref-8) *Digital Integrated Circuits*. Prentice Hall, p. 235. [ISBN 0-13-178609-1](/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Ngu%E1%BB%93n_s%C3%A1ch/0131786091). **Flynn, Laurie J.** [^](#cite_ref-9) ["Intel Halts Development of 2 New Microprocessors"](http://www.nytimes.com/2004/05/08/business/08chip.html?ex=1399348800&en=98cc44ca97b1a562&ei=5007). *The New York Times*, ngày 8 tháng 5 năm 2004. Truy cập ngày 22 tháng 4 năm 2008. **Moore, Gordon E. (1965).** [^](#cite_ref-Moore1965paper_10-0) [“Cramming more components onto integrated circuits”](ftp://download.intel.com/museum/Moores_Law/Articles-Press_Releases/Gordon_Moore_1965_Article.pdf)(PDF). *. tr. 4. Truy cập ngày 11 tháng 11 năm 2006.* [Electronics Magazine](/w/index.php?title=Electronics_(t%E1%BA%A1p_ch%C3%AD)&action=edit&redlink=1) **Amdahl, G. (April 1967) "The validity of the single processor approach to achieving large-scale computing capabilities". In** [^](#cite_ref-11) *Proceedings of AFIPS Spring Joint Computer Conference*, Atlantic City, N.J., AFIPS Press, pp. 483–85. [^](#cite_ref-12) [Brooks, Frederick P. Jr.](/w/index.php?title=Fred_Brooks&action=edit&redlink=1) *. Chapter 2 – The Mythical Man Month.* [The Mythical Man-Month: Essays on Software Engineering](/wiki/The_Mythical_Man-Month) [ISBN 0-201-83595-9](/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Ngu%E1%BB%93n_s%C3%A1ch/0201835959) [^](#cite_ref-13) [Reevaluating Amdahl's Law](http://www.scl.ameslab.gov/Publications/Gus/AmdahlsLaw/Amdahls.html)(1988). [Communications of the ACM](/w/index.php?title=Communications_of_the_ACM&action=edit&redlink=1)31(5), pp. 532–33. **Bernstein, A. J. (October 1966). "Program Analysis for Parallel Processing,' IEEE Trans. on Electronic Computers". EC-15, pp. 757–62.** [^](#cite_ref-14) **Roosta, Seyed H. (2000). "Parallel processing and parallel algorithms: theory and computation". Springer, p. 114.** [^](#cite_ref-15) [ISBN 0-387-98716-9](/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Ngu%E1%BB%93n_s%C3%A1ch/0387987169). **Lamport, Leslie (September 1979). "How to Make a Multiprocessor Computer That Correctly Executes Multiprocess Programs", IEEE Transactions on Computers, C-28,9, pp. 690–91.** [^](#cite_ref-16) **Patterson and Hennessy, p. 748.** [^](#cite_ref-17) [^](#cite_ref-18) [Culler, David E.](/w/index.php?title=David_Culler&action=edit&redlink=1); Jaswinder Pal Singh and Anoop Gupta (1999). *Parallel Computer Architecture - A Hardware/Software Approach*. Morgan Kaufmann Publishers, p. 15. [ISBN 1-55860-343-3](/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Ngu%E1%BB%93n_s%C3%A1ch/1558603433). **Culler et al. p. 15.** [^](#cite_ref-19) [^](#cite_ref-20) [Patt, Yale](/w/index.php?title=Yale_Patt&action=edit&redlink=1)(April 2004). " [The Microprocessor Ten Years From Now: What Are The Challenges, How Do We Meet Them?](http://users.ece.utexas.edu/~patt/Videos/talk_videos/cmu_04-29-04.wmv)(wmv). Distinguished Lecturer talk at [Carnegie Mellon University](/wiki/Carnegie_Mellon_University). Truy cập ngày 7 tháng 11 năm 2007.
- ^
**a** [Culler et al. p. 124.](#cite_ref-Culler124_21-1) **ă**
- ^
**a** [Culler et al. p. 125.](#cite_ref-Culler125_22-1) **ă**
- ^
**a** [Patterson and Hennessy, p. 713.](#cite_ref-PH713_23-1) **ă**
- ^
**a** [Hennessy and Patterson, p. 549. Lỗi chú thích: Thẻ](#cite_ref-HP549_24-1) **ă**
<ref>không hợp lệ: tên “HP549” được định rõ nhiều lần, mỗi lần có nội dung khác
**Patterson and Hennessy, p. 714.** [^](#cite_ref-25) [^](#cite_ref-26) [What is clustering?](http://www.webopedia.com/TERM/c/clustering.html)Webopedia computer dictionary. Truy cập ngày 7 tháng 11 năm 2007. [^](#cite_ref-27) [Beowulf definition.](http://www.pcmag.com/encyclopedia_term/0,2542,t=Beowulf&i=38548,00.asp) *PC Magazine*. Truy cập ngày 7 tháng 11 năm 2007. [^](#cite_ref-28) [Architecture share for 06/2007](http://www.top500.org/stats/list/29/archtype). TOP500 Supercomputing Sites. Clusters make up 74.60% of the machines on the list. Truy cập ngày 7 tháng 11 năm 2007. **Hennessy and Patterson, p. 537.** [^](#cite_ref-29) [^](#cite_ref-30) [MPP Definition.](http://www.pcmag.com/encyclopedia_term/0,,t=mpp&i=47310,00.asp) *PC Magazine*. Truy cập ngày 7 tháng 11 năm 2007. **Kirkpatrick, Scott (ngày 31 tháng 1 năm 2003). "Computer Science: Rough Times Ahead".** [^](#cite_ref-31) *Science*, Vol. 299. No. 5607, pp. 668 - 669. DOI: 10.1126/science.1081623
- ^
**a** **ă** [D'Amour, Michael R., Chief Operating Officer,](#cite_ref-DAmour_32-2) **â** [DRC Computer Corporation](/w/index.php?title=DRC_Computer_Corporation&action=edit&redlink=1). "Standard Reconfigurable Computing". Invited speaker at the University of Delaware, ngày 28 tháng 2 năm 2007. **Boggan, Sha'Kia and Daniel M. Pressel (August 2007).** [^](#cite_ref-33) [GPUs: An Emerging Platform for General-Purpose Computation](http://www.arl.army.mil/arlreports/2007/ARL-SR-154.pdf)(PDF). ARL-SR-154, U.S. Army Research Lab. Truy cập ngày 7 tháng 11 năm 2007. **Maslennikov, Oleg (2002).** [^](#cite_ref-34) ["Systematic Generation of Executing Programs for Processor Elements in Parallel ASIC or FPGA-Based Systems and Their Transformation into VHDL-Descriptions of Processor Element Control Units".](http://www.springerlink.com/content/jjrdrb0lelyeu3e9/) *Lecture Notes in Computer Science*, **2328/2002:**p. 272. **Shimokawa, Y.; Y. Fuwa and N. Aramaki (18–ngày 21 tháng 11 năm 1991).** [^](#cite_ref-35) [A parallel ASIC VLSI neurocomputer for a large number of neurons and billion connections per second speed.](http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=170708)IEEE International Joint Conference on Neural Networks. **3:**pp. 2162–67. **Acken, K.P.; M.J. Irwin, R.M. Owens (July 1998).** [^](#cite_ref-36) ["A Parallel ASIC Architecture for Efficient Fractal Image Coding".](http://www.ingentaconnect.com/content/klu/vlsi/1998/00000019/00000002/00167697?crawler=true) *The Journal of VLSI Signal Processing*, **19**(2):97–113(17) **Kahng, Andrew B. (ngày 21 tháng 6 năm 2004) "** [^](#cite_ref-37) [Scoping the Problem of DFM in the Semiconductor Industry](http://www.future-fab.com/documents.asp?grID=353&d_ID=2596)." University of California, San Diego. "Future design for manufacturing (DFM) technology must reduce design [non-recoverable expenditure] cost and directly address manufacturing [non-recoverable expenditures] – the cost of a mask set and probe card – which is well over $1 million at the 90 nm technology node and creates a significant damper on semiconductor-based innovation."
- ^
**a** [Patterson and Hennessy, p. 751. Lỗi chú thích: Thẻ](#cite_ref-PH751_38-1) **ă**
<ref>không hợp lệ: tên “PH751” được định rõ nhiều lần, mỗi lần có nội dung khác
**The** [^](#cite_ref-39) [Sidney Fernbach Award given to MPI inventor Bill Gropp](http://awards.computer.org/ana/award/viewPastRecipients.action?id=16)refers to MPI as "the dominant HPC communications interface" **Shen, John Paul and Mikko H. Lipasti (2005).** [^](#cite_ref-40) *Modern Processor Design: Fundamentals of Superscalar Processors*. McGraw-Hill Professional. p. 561. [ISBN 0-07-057064-7](/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:Ngu%E1%BB%93n_s%C3%A1ch/0070570647). "However, the holy grail of such research - automated parallelization of serial programs - has yet to materialize. While automated parallelization of certain classes of algorithms has been demonstrated, such success has largely been limited to scientific and numeric applications with predictable flow control (e.g., nested loop structures with statically determined iteration counts) and statically analyzable memory access patterns. (e.g., walks over large multidimensional arrays of float-point data)." **Asanovic, Krste, et al. (ngày 18 tháng 12 năm 2006).** [^](#cite_ref-41) [The Landscape of Parallel Computing Research: A View from Berkeley](http://www.eecs.berkeley.edu/Pubs/TechRpts/2006/EECS-2006-183.pdf)(PDF). University of California, Berkeley. Technical Report No. UCB/EECS-2006-183. See table on pages 17–19.
- ^
**a** [Patterson and Hennessy, pp. 749–50: "Although successful in pushing several technologies useful in later projects, the ILLIAC IV failed as a computer. Costs escalated from the $8 million estimated in 1966 to $31 million by 1972, despite the construction of only a quarter of the planned machine... It was perhaps the most infamous of supercomputers. The project started in 1965 and ran its first real application in 1976."](#cite_ref-infamous_42-1) **ă** [^](#cite_ref-43) [Menabrea, L. F.](/w/index.php?title=Federico_Luigi,_Conte_Menabrea&action=edit&redlink=1)(1842). [Sketch of the Analytic Engine Invented by Charles Babbage](http://www.fourmilab.ch/babbage/sketch.html). Bibliothèque Universelle de Genève. Truy cập ngày 7 tháng 11 năm 2007.
- ^
**a** **ă** [Patterson and Hennessy, p. 753.](#cite_ref-PH753_44-2) **â** **da Cruz, Frank (2003).** [^](#cite_ref-45) [“Columbia University Computing History: The IBM 704”](http://www.columbia.edu/acis/history/704.html). Columbia University. Truy cập ngày 8 tháng 1 năm 2008. **Parallel Programming, S. Gill, The Computer Journal Vol. 1 #1, pp2-10, British Computer Society, April 1958.** [^](#cite_ref-46)
- ^
**a** **ă** **â** **b** [Wilson, Gregory V (1994).](#cite_ref-G_Wilson_47-4) **c** [“The History of the Development of Parallel Computing”](http://ei.cs.vt.edu/~history/Parallel.html). Virginia Tech/Norfolk State University, Interactive Learning with a Digital Library in Computer Science. Truy cập ngày 8 tháng 1 năm 2008. **Anthes, Gry (ngày 19 tháng 11 năm 2001).** [^](#cite_ref-48) [“The Power of Parallelism”](http://www.computerworld.com/action/article.do?command=viewArticleBasic&articleId=65878). *. Truy cập ngày 8 tháng 1 năm 2008.* [Computerworld](/w/index.php?title=Computerworld&action=edit&redlink=1) **Patterson and Hennessy, p. 749.** [^](#cite_ref-49)
## Đọc thêm[
[sửa](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&veaction=edit&vesection=35) | [sửa mã nguồn](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&action=edit§ion=35)]
- C. Rodríguez, M. Villagra and B. Barán, 10.1109/BIMNICS.2007.4610083, Asynchronous team algorithms for Boolean Satisfiability, Bionetics2007, pp. 66–69, 2007.
## Liên kết ngoài[
[sửa](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&veaction=edit&vesection=36) | [sửa mã nguồn](/w/index.php?title=T%C3%ADnh_to%C3%A1n_song_song&action=edit§ion=36)]
|
|![]()
|
|[Tính toán song song](http://www.dmoz.org/Computers/Parallel_Computing/)tại [DMOZ](/wiki/DMOZ) [Lawrence Livermore National Laboratory: Introduction to Parallel Computing](http://www.llnl.gov/computing/tutorials/parallel_comp/) [Comparing programmability of Open MP and pthreads](http://www.futurechips.org/tips-for-power-coders/open-mp-pthreads.html) [What makes parallel programming hard?](http://www.futurechips.org/tips-for-power-coders/parallel-programming.html) [Designing and Building Parallel Programs, by Ian Foster](http://www-unix.mcs.anl.gov/dbpp/) [Internet Parallel Computing Archive](http://wotug.ukc.ac.uk/parallel/) [Parallel processing topic area at IEEE Distributed Computing Online](http://dsonline.computer.org/portal/site/dsonline/index.jsp?pageID=dso_level1_home&path=dsonline/topics/parallel&file=index.xml&xsl=generic.xsl) [Parallel Computing Works Free On-line Book](http://www.new-npac.org/projects/cdroms/cewes-1998-05/copywrite/pcw/book.html) [Frontiers of Supercomputing Free On-line Book Covering topics like algorithms and industrial applications](http://ark.cdlib.org/ark:/13030/ft0f59n73z/) [Universal Parallel Computing Research Center](http://www.upcrc.illinois.edu/) [Course in Parallel Programming at Columbia University (in collaboration with IBM T.J Watson X10 project)](http://ppppcourse.ning.com/) [Parallel and distributed Gr?obner bases computation in JAS](http://arxiv.org/PS_cache/arxiv/pdf/1008/1008.0011v1.pdf) [Course in Parallel Computing at University of Wisconsin-Madison](http://sbel.wisc.edu/Courses/ME964/2011/index.htm)
|
|
· · · · · · · · · · · · · · Song song, và các hệ thống
Chú ý: khoa học máy tính còn có thể được chia thành nhiều chủ đề hay nhiều lĩnh vực khác dựa theo

X-Cache: cp1067 miss, cp1055 miss


markdown:
Trợ giúp
Thể loại:Thiên thể phát hiện năm 1904
Bách khoa toàn thư mở Wikipedia
Bước tới:
menu
,
tìm kiếm
Các trang trong thể loại “Thiên thể phát hiện năm 1904”
33 trang sau nằm trong thể loại này, trên tổng số 33 trang.
A
523 Ada
525 Adelaide
B
521 Brixia
C
543 Charlotte
D
541 Deborah
E
527 Euryanthe
F
524 Fidelio
538 Friederike
H
522 Helga
546 Herodias
J
526 Jena
549 Jessonda
544 Jetta
K
3907 Kilmartin
548 Kressida
553 Kundry
M
536 Merapi
545 Messalina
535 Montague
N
534 Nassovia
O
551 Ortrud
P
539 Pamina
537 Pauly
547 Praxedis
529 Preziosa
R
528 Rezia
540 Rosamunde
S
533 Sara
550 Senta
552 Sigelinde
542 Susanna
T
530 Turandot
Z
531 Zerlina
Lấy từ “
https://vi.wikipedia.org/w/index.php?title=Thể_loại:Thiên_thể_phát_hiện_năm_1904&oldid=13028540
”
Thể loại
:
Khoa học năm 1904
Thiên thể phát hiện theo năm
Trình đơn chuyển hướng
Công cụ cá nhân
Chưa đăng nhập
Thảo luận cho địa chỉ IP này
Đóng góp
Mở tài khoản
Đăng nhập
Không gian tên
Thể loại
Thảo luận
Biến thể
Các hiển thị
Đọc
Sửa đổi
Sửa mã nguồn
Xem lịch sử
Khác
Tìm kiếm
Xem nhanh
Trang Chính
Bài viết chọn lọc
Tin tức
Bài viết ngẫu nhiên
Thay đổi gần đây
Phản hồi lỗi
Quyên góp
Tương tác
Hướng dẫn
Giới thiệu Wikipedia
Cộng đồng
Thảo luận chung
Giúp sử dụng
Liên hệ
Công cụ
Các liên kết đến đây
Thay đổi liên quan
Các trang đặc biệt
Liên kết thường trực
Thông tin trang
Khoản mục Wikidata
In/xuất ra
Tạo một quyển sách
Tải về dưới dạng PDF
Bản để in ra
Ngôn ngữ khác
Bosanski
Deutsch
English
Español
فارسی
Français
한국어
Հայերեն
Italiano
Lëtzebuergesch
Македонски
Norsk bokmål
Română
Русский
Slovenščina
Svenska
ไทย
Türkçe
Українська
中文
Sửa liên kết
Trang này được sửa đổi lần cuối lúc 06:32 ngày 7 tháng 8 năm 2013.
Văn bản được phát hành theo
Giấy phép Creative Commons Ghi công–Chia sẻ tương tự
; có thể áp dụng điều khoản bổ sung. Với việc sử dụng trang web này, bạn chấp nhận
Điều khoản Sử dụng
và
Quy định quyền riêng tư
.
Wikipedia® là thương hiệu đã đăng ký của
Wikimedia Foundation, Inc.
, một tổ chức phi lợi nhuận.
Quy định quyền riêng tư
Giới thiệu Wikipedia
Lời phủ nhận
Nhà phát triển
Tuyên bố về cookie
Phiên bản di động

WARC-Type: response

Content-Type: application/http; msgtype=response

Set-Cookie: GeoIP=US:VA:Ashburn:39.04:-77.49:v4; Path=/; secure; Domain=.wikipedia.org

Connection: close

X-Content-Type-Options: nosniff

Cache-Control: private, s-maxage=0, max-age=0, must-revalidate

X-Cache-Status: miss

P3P: CP="This is not a P3P policy! See https://vi.wikipedia.org/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:CentralAutoLogin/P3P for more info."

Via: 1.1 varnish, 1.1 varnish

Content-Language: vi

X-UA-Compatible: IE=Edge

X-Cache: cp1068 miss, cp1055 miss

Vary: Accept-Encoding,Cookie,Authorization

Content-Type: text/html; charset=UTF-8

Accept-Ranges: bytes


markdown:
parametrise
Từ điển mở Wiktionary
Bước tới:
dẫn lái
,
tìm
Tiếng Anh
[
sửa
]
Động từ
[
sửa
]
parametrise
Xem
parameterise
.
Tham khảo
[
sửa
]
Hồ Ngọc Đức,
Dự án Từ điển tiếng Việt miễn phí
(
chi tiết
)
Lấy từ “
https://vi.wiktionary.org/w/index.php?title=parametrise&oldid=930453
”
Thể loại
:
Mục từ tiếng Anh
Động từ
Động từ tiếng Anh
Trình đơn chuyển hướng
Công cụ cá nhân
Chưa đăng nhập
Thảo luận
Đóng góp
Mở tài khoản
Đăng nhập
Không gian tên
Mục từ
Thảo luận
Biến thể
Các hiển thị
Tra
Sửa đổi
Xem lịch sử
Khác
Tìm kiếm
Chuyển hướng
Trang Chính
Cộng đồng
Thay đổi gần đây
Mục từ ngẫu nhiên
Trợ giúp
Thảo luận chung
Quyên góp
Chỉ mục
Ngôn ngữ
Chữ cái
Bộ thủ
Từ loại
Chuyên ngành
In/xuất ra
Tạo một quyển sách
Tải về dưới dạng PDF
Bản in được
Công cụ
Các liên kết đến đây
Thay đổi liên quan
Tải tập tin lên
Các trang đặc biệt
Liên kết thường trực
Thông tin trang
Trích dẫn trang này
Ngôn ngữ định nghĩa
English
Trang này được sửa đổi lần cuối lúc 11:49 ngày 26 tháng 3 năm 2009.
Văn bản được phát hành theo
Giấy phép Creative Commons Ghi công–Chia sẻ tương tự
; có thể áp dụng điều khoản bổ sung. Xem
Điều khoản Sử dụng
để biết thêm chi tiết.
Quy định quyền riêng tư
Giới thiệu Wiktionary
Lời phủ nhận
Nhà phát triển
Tuyên bố về cookie
Phiên bản di động

Set-Cookie: GeoIP=US:VA:Ashburn:39.04:-77.49:v4; Path=/; secure; Domain=.wiktionary.org

P3P: CP="This is not a P3P policy! See https://vi.wiktionary.org/wiki/%C4%90%E1%BA%B7c_bi%E1%BB%87t:CentralAutoLogin/P3P for more info."

X-Cache: cp1067 miss, cp1052 miss


markdown:
vozForums
>
Khu vui chơi giải trí
>
Chuyện trò linh tinh™
học cách quay đầu xe ô tô giống trong phim?
User Name
Remember Me?
Password
FAQ
Social Groups
Calendar
Mark Forums Read
Page 1 of 6
1
2
3
>
Last
»
Thread Tools
#
1
09-11-2009, 01:00
lexuan
Senior Member
Join Date: 06-2007
Posts: 616
học cách quay đầu xe ô tô giống trong phim?
mình lái xe oto, nhưng thấy trong nhiều phim cách quay đầu xe khi đang chạy thì quay 180 độ thì làm cach nào? có phải là đang chạy đánh lái ròi đạp thắng không?
còn có màn biểu diễn quay vòng tròn khói bay mù mịt thì làm thế nào?
ở đây em chỉ bàn cách ntn được như vậy thôi, chứ em không nói là em giỏi và em cũng khong giám làm...ở vn làm thế cho toi mạng.
lexuan
View Public Profile
Send a private message to lexuan
Find all posts by lexuan
#
2
09-11-2009, 01:01
U.F.O
Senior Member
Join Date: 04-2007
Posts: 235
Re: học cách quay đầu xe ô tô giống trong phim?
Kỹ thuật drift à. Khó đấy.
U.F.O
View Public Profile
Send a private message to U.F.O
Find all posts by U.F.O
#
3
09-11-2009, 01:03
Nằm Vùng
K.I.A
Join Date: 04-2009
Posts: 21
Re: học cách quay đầu xe ô tô giống trong phim?
Muốn drift tốt thì trước hết bác phóng thật nhanh trên đường vắng và rộng, sau đấy cảm thấy đủ nhanh rồi thì đột ngột đạp thắng trước, đồng thời bẻ ngoặt vô lăng khoảng 90 độ. Đấy là cách em drift trong NFS
Còn cái kiểu quay xe vòng vòng tại chỗ thì không biết, có bác nào biết không ạ?
Nằm Vùng
View Public Profile
Find all posts by Nằm Vùng
#
4
09-11-2009, 01:05
gatocxu
K.I.A
Join Date: 04-2009
Posts: 1,522
Re: học cách quay đầu xe ô tô giống trong phim?
quan trọng là bác có bao nhiêu cái xe thôi
gatocxu
View Public Profile
Find all posts by gatocxu
#
5
09-11-2009, 01:06
Ghosthammer
Hết xăng
Join Date: 07-2008
Location: Lỗ rún của cục đất
Posts: 7,335
Re: học cách quay đầu xe ô tô giống trong phim?
bóp thắng trước, bẻ lái theo 1 hướng, để số 1, hoặc 2 đạp ga cho tua máy tầm 3/4 maximum ^^
lần trước thử như thế với con xe máy rồi, nhưng mới chỉ được 1 vòng
Ghosthammer
View Public Profile
Send a private message to Ghosthammer
Find all posts by Ghosthammer
#
6
09-11-2009, 01:07
lexuan
Senior Member
Join Date: 06-2007
Posts: 616
Re: học cách quay đầu xe ô tô giống trong phim?
khó lắm hả bác? có thể nói cách thức cho em tí được hem..àh xe 7 chổ thì làm thế được kh?
lexuan
View Public Profile
Send a private message to lexuan
Find all posts by lexuan
#
7
09-11-2009, 01:09
lexuan
Senior Member
Join Date: 06-2007
Posts: 616
Re: học cách quay đầu xe ô tô giống trong phim?
sặc...ai cũng bảo bóp thắng trước? mà xe oto của em làm gì có phân biệt thắng trước và thắng sau? chỉ có 1 bàn thắng ABS gì gì đó...cho cả 4 bánh ???
lexuan
View Public Profile
Send a private message to lexuan
Find all posts by lexuan
#
8
09-11-2009, 01:10
CiCi
Senior Member
Join Date: 09-2008
Location: Trại chim lợn
Posts: 5,875
Re: học cách quay đầu xe ô tô giống trong phim?
Quote:
Originally Posted by
Ghosthammer
bóp thắng trước, bẻ lái theo 1 hướng, để số 1, hoặc 2 đạp ga cho tua máy tầm 3/4 maximum ^^
lần trước thử như thế với con xe máy rồi, nhưng mới chỉ được 1 vòng
Burn out à
CiCi
View Public Profile
Send a private message to CiCi
Visit CiCi's homepage!
Find all posts by CiCi
#
9
09-11-2009, 01:13
lexuan
Senior Member
Join Date: 06-2007
Posts: 616
Re: học cách quay đầu xe ô tô giống trong phim?
TÌm thấy 2 bài này...drift khói mù...
http://backup.lenduong.vn/VietNam/Ho...8/01/2FBE5B69/
http://autopro.com.vn/20090319101054...-mon-drift.chn
cái này thì tán gái không dính không ăn tiền...
http://clip.vn/watch/Ky-thuat-Drift-Xe,4dM
lexuan
View Public Profile
Send a private message to lexuan
Find all posts by lexuan
#
10
09-11-2009, 01:51
sourire1983
Senior Member
Join Date: 07-2006
Location: ////////
Posts: 2,356
Re: học cách quay đầu xe ô tô giống trong phim?
phá xe.
sourire1983
View Public Profile
Send a private message to sourire1983
Find all posts by sourire1983
Page 1 of 6
1
2
3
>
Last
»
«
Previous Thread
|
Next Thread
»
Thread Tools
Show Printable Version
Email this Page
Posting Rules
You
may not
post new threads
You
may not
post replies
You
may not
post attachments
You
may not
edit your posts
BB code
is
On
Smilies
are
On
[IMG]
code is
On
HTML code is
Off
Forum Rules
Forum Jump
User Control Panel
Private Messages
Subscriptions
Who's Online
Search Forums
Forums Home
Đại sảnh
Thông báo
Thắc mắc & Góp ý
Thread post sai mục
Tin tức iNet
Review sản phẩm
Máy tính để bàn
Overclocking & Cooling
Modding
AMD
Intel
Mainboard & Memory
Đồ họa máy tính
Phần cứng chung
Thiết bị ngoại vi & Phụ kiện
Phần mềm
Download
Phát triển Phần mềm
Trường đua
Games
Thảo luận chung
DOTA
MMO -- Game Online
Pokemon GO
Overwatch
Hearthstone
FPS
Liên Minh Huyền Thoại
Sản phẩm công nghệ
Máy tính xách tay
Tất tần tật thông tin về Dell anh em cần biết
Các sản phẩm Apple
Máy tính chuyên dụng
Thiết bị di động
Đồ điện tử & Thiết bị gia dụng
Multimedia
HDmedia
Giao lưu Doanh nghiệp & Người dùng (theo Alphabet)
DELL - Thông tin sản phẩm và dịch vụ chính hãng
Hoanghamobile.com
Công ty cổ phần máy tính Vĩnh Xuân
WD - Thương hiệu ổ cứng tin cây, dịch vụ hỗ trợ tốt nhất
We can do
Khu vui chơi giải trí
Chuyện trò linh tinh™
Superthreads
From f17 with Love
Offline
Các món ăn chơi
Trưng cầu dân ý
Khu thương mại - Mua và Bán
Máy tính để bàn
Máy tính xách tay
Điện thoại di động
Các thiết bị công nghệ khác
All times are GMT +7. The time now is
04:05
.
Contact Us
-
vozExpress
-
Archive
-
Top
Steam Powered by vBulletin® 0.1 pre-alpha
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd.

WARC-Truncated: length

Set-Cookie: vflastactivity=0; expires=Wed, 23-Aug-2017 21:05:38 GMT; path=/; domain=vozforums.com; secure

Cache-Control: private, post-check=0, pre-check=0, max-age=0

Pragma: no-cache