stanford-oval/wikipedia huggingface dataset:
Tính toán song song
Bối cảnh > Phụ thuộc

Hiểu biết về phụ thuộc dữ liệu là bước cơ bản trong việc thực hiện thuật toán 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), 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 Pi và Pj 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 Pi, đặt Ii là tất cả các biến đầu vào, Oi là biến đầu ra, tương tự ta làm như vậy với Pj. P i và Pj là độc lập nếu chúng thỏa mãn
I_{j}\cap O_{i}=\varnothing ,\,
I_{i}\cap O_{j}=\varnothing ,\,
O_{i}\cap O_{j}=\varnothing .\,
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, khi mà câu lệnh thứ hai (Pj) sẽ ghi đè lên biến được sử dụng ở biểu thức thứ nhất (Pi). Đ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.
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
Hoạt động 3 trong Dep(A, B) không thể được thực thi trước hoặc thậm chí song song với hoạt động 2, vì hoạt động 3 sử dụng kết quả từ hoạt động 2. Nó vi phạm điều kiện 1 và do đó giới thiệu một phụ thuộc dòng chảy.
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, barriers hoặc một số phương pháp đồng bộ khác.
Bối cảnh > Fine-grained, coarse-grained, và embarrassing parallelism

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 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.
Bối cảnh > Mô hình thống nhất

Bài chi tiết: Mô hình thống nhất
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 (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 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 của Leslie Lamport. 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".
Bộ nhớ giao tác phần mềm 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 khái niệm của giao dịch nguyên tử 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, đượ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 đượ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 như Phép tính của hệ thống truyền thông và Quá trình giao tiếp tuần tự đã đượ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 π, đã 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+ của Lamport, và các mô hình toán học như là dấu vết và biểu đồ sự kiện tác động, cũng đã được phát triển để mô tả hành vi của hệ thống tương tranh.
Bối cảnh > Phân loại Flynn

Michael J. Flynn đã 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. 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.
Bản mẫu:Phân loại Flynn
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. 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), 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 và John L. Hennessy, "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."
Hình thức song song > Song song cấp bit

Bài chi tiết: Song song cấp bit
Từ sự ra đời của công nghệ chế tạo chip máy tính very-large-scale integration (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—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ý 8-bit phải tạo thêm 2 nguyên số 16-bit, 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ớ 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 đã 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, bộ xử lý 64-bit đã trở nên phổ biến.
Hình thức song song > Song song cấp lệnh

Bài chi tiết: Song song cấp lệnh
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 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.
Các bộ xử lý hiện đại có những đường liên kết câu lệnh đ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, 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 có một đường liên kết 35 giai đoạn.
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. 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. Scoreboarding và thuật toán Tomasulo (tương tự như scoreboarding nhưng sử dụng đổi tên thanh ghi) 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.
Hình thức song song > Song song dữ liệu

Bài chi tiết: Song song dữ liệu
Song song dữ liệu là song song vốn có trong Vòng lặp chương trình, 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.
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ã sau khi tính một vài số 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.
Hình thức song song > Song song tác vụ

Bài chi tiết: Song song tác vụ
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.
Phần cứng > Bộ nhớ và sự kết nối

Bộ nhớ chính trong một máy tính song song có thể là bộ nhớ chia sẻ (chia sẻ giữa tất cả các yếu tố xử lý trong một vùng địa chỉ đơn lẻ), hoặc bộ nhở phân tán (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ý. Bộ nhớ chia sẻ phân tán và ảo hóa bộ nhớ 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ộ.
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ễ và băng thông bằng nhau được gọi là hệ thống Truy cập bộ nhớ đồng bộ (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ẻ, 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ộ (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—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, 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 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.
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), một bộ chuyển mạch thanh ngang, một dòng 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 bao gồm star, ring, tree, hypercube, 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.
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 để 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.
Phần cứng > Các dạng máy tính song song

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.
Phần cứng > Các dạng máy tính song song > Tính toán đa nhân

Bài chi tiết: CPU đa nhân
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 ("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 (trong đó HyperThreading 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), nó sử dụng đơn vị thực hiện đó để xử lý một chuỗi thứ hai.Cell microprocessor của IBM, được thiết kế để sử dụng cho Sony PlayStation 3, là một bộ xử lý đa lỗi nổi bật khác.
Phần cứng > Các dạng máy tính song song > Đa xử lý đối xứng

Bài chi tiết: Đa xử lý đối xứng
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. Bus contention 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."
Phần cứng > Các dạng máy tính song song > Tính toán phân tán

Bài chi tiết: Tính toán phân tán
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.
Phần cứng > Các dạng máy tính song song > Tính toán phân tán > Tính toán cụm

Bài chi tiết: Tính toán cụm
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, cân bằng tải 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, là một cụm thực hiện trên nhiều máy tính commercial off-the-shelf giống nhau kết nối qua mạng cục bộ TCP/IP Ethernet. Công nghệ Beowulf được phát triển đầu tiên bởi Thomas Sterling và Donald Becker. Đại đa số các siêu máy tính TOP500 là cụm.
Phần cứng > Các dạng máy tính song song > Tính toán phân tán > Tính toán song song hàng loạt

Bài chi tiết: Tính toán song song hàng loạt
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."
Blue Gene / L, siêu máy tính nhanh thứ năm thế giới theo xếp hạng TOP500 tháng 6 năm 2009, là một MPP.
Phần cứng > Các dạng máy tính song song > Tính toán phân tán > Tính toán mạng lưới

Bài chi tiết: Điện toán lưới
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 để 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. Nhiều ứng dụng tính toán mạng lưới đã được tạo ra, trong đó SETI@home và Folding@Home là những ví dụ nổi tiếng nhất.
Hầu hết những ứng dụng đều sử dụng 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 (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.
Phần cứng > Các dạng máy tính song song > Máy tính song song chuyên ngành

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, 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.
Phần cứng > Các dạng máy tính song song > Máy tính song song chuyên ngành > Máy tính cấu hình lại với các mảng cổng lập trình trường

Điện toán cấu hình lại là việc sử dụng một mảng cổng có thể lập trình trường (FPGA) làm bộ xử lý cho máy tính đa năng. Một FPGA là, về bản chất, một con chip máy tính có thể tự nối lại cho một nhiệm vụ nhất định.
FPGA có thể được lập trình với các ngôn ngữ mô tả phần cứng như VHDL hoặc Verilog. Tuy nhiên, lập trình trong các ngôn ngữ này có thể tẻ nhạt. Một số nhà cung cấp đã tạo các ngôn ngữ C đến HDL cố gắng mô phỏng cú pháp và / hoặc ngữ nghĩa của ngôn ngữ lập trình C, mà hầu hết các lập trình viên quen thuộc. Các ngôn ngữ C đến HDL nổi tiếng nhất là Mitrion-C, Impulse C, Dime-C và Handel-C. Các tập hợp con cụ thể của SystemC dựa trên C ++ cũng có thể được sử dụng cho mục đích này.
Quyết định của AMD để mở công nghệ HyperTransport cho các nhà cung cấp của bên thứ ba đã trở thành công nghệ cho phép máy tính cấu hình lại hiệu suất cao. Theo Michael R. D'amour, Giám đốc điều hành của DRC Computer Corporation, "Khi chúng tôi lần đầu tiên bước vào AMD, họ đã gọi cho chúng tôi  ' những người đánh cắp ổ cắm '. Bây giờ họ gọi chúng tôi là đối tác của họ. "
Phần cứng > Các dạng máy tính song song > Máy tính song song chuyên ngành > Tính toán đa năng trên các đơn vị xử lý đồ họa (GPGPU)

Bài chi tiết: GPGPU
Tính toán đa năng trên các đơn vị xử lý đồ họa (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. 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 ma trận đại số tuyến tính.
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 và AMD tạo ra môi trường lập trình với CUDA và CTM tương ứng. Các ngôn ngữ lập trình GPU khác là BrookGPU, PeakStream, và RapidMind. Nvidia cũng đã tung ra các sản phẩm dành riêng cho tính toán trong dòng Tesla của họ. Tập đoàn công nghệ Khronos Group đã tạo ra kỹ thuật OpenCL, 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, Intel, Nvidia và nhiều nhãn hiệu khác đều hỗ trợ OpenCL.
Phần cứng > Các dạng máy tính song song > Máy tính song song chuyên ngành > Mạch tích hợp ứng dụng cụ thể

Bài chi tiết: Application-specific integrated circuit
Một số phương pháp tiếp cận mạch tích hợp ứng dụng cụ thể (ASIC) đã được nghĩ ra để đối phó với các ứng dụng song song.
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. 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. 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 RIKEN MDGRAPE-3 đã sử dụng tùy chỉnh ASIC cho mô phỏng động học phân tử.
Phần cứng > Các dạng máy tính song song > Máy tính song song chuyên ngành > Xử lý liên hợp

Bài chi tiết: Xử lý liên hợp
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 64-bit." Chúng liên quan chặt chẽ đến phân loại SIMD của Flynn.
Các máy tính Cray 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 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 và Streaming SIMD Extensions (SSE).
Phần mềm > Ngôn ngữ lập trình song song

Bài chi tiết: List of concurrent and parallel programming languages
Ngôn ngữ lập trình tương tác, thư viện, APIs, và các mô hình lập trình song song (như thuật toán Skeletons) đã đượ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ạo 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. POSIX Threads và OpenMP 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 (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à Khái niệm tương lai, 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.
Phần mềm > Song song hóa tự động

Bài chi tiết: Automatic parallelization
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 là holy grail 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.
Các ngôn ngữ lập trình song song có thể là song song hiện hoặc (tốt nhất) ngầm một phần, trong đó các lập trình viên chỉ thị 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, song song Haskell, và Mitrion-C (cho FPGAs).