Bữa trưa miễn phí có kết thúc không? [đóng cửa]


12

Trong bài viết nổi tiếng Bữa trưa miễn phí đã kết thúc từ năm 2005, Herb Sutter đã tiên đoán một cuộc cách mạng lập trình đồng thời lớn như cuộc cách mạng hướng đối tượng. Cuộc cách mạng này có thực sự xảy ra trong những năm 2005 - 2013 không?


Những điểm chính trong bài viết:

  • Các nhà sản xuất bộ xử lý đã hết phòng với hầu hết các cách tiếp cận truyền thống của họ để tăng hiệu suất CPU. Thay vì lái tốc độ đồng hồ cao hơn bao giờ hết, thay vào đó họ chuyển sang kiến ​​trúc siêu phân luồng và đa lõi.

  • Các ứng dụng sẽ ngày càng cần phải đồng thời nếu chúng muốn khai thác triệt để mức tăng thông lượng của CPU.

  • Hay, hiệu suất không quan trọng lắm, máy tính cứ tiếp tục nhận được tuyên bố nhanh hơn sẽ sai.

  • Hiệu quả và tối ưu hóa hiệu suất sẽ nhận được nhiều hơn, không ít hơn, quan trọng. Những ngôn ngữ đã cho vay để tối ưu hóa nặng nề sẽ tìm thấy cuộc sống mới; những người không cần phải tìm cách cạnh tranh và trở nên hiệu quả và tối ưu hơn. Mong đợi nhu cầu gia tăng lâu dài cho các ngôn ngữ và hệ thống định hướng hiệu suất.

  • Ngôn ngữ lập trình và hệ thống sẽ ngày càng bị buộc phải đối phó tốt với sự tương tranh. Chúng tôi rất cần một mô hình lập trình cấp cao hơn để đồng thời hơn các ngôn ngữ hiện nay.


15
Điện thoại của bạn có bao nhiêu lõi?
Matt D

6
Nokia 2700 của tôi có một lõi.
cpp

5
@MattD Xin lỗi, nhưng tại sao đến lúc "nâng cấp" và số lõi trong điện thoại của cpp phải làm gì với nó? Làm thế nào để bạn biết Nokia 2700 không đủ cho nhu cầu của anh ấy / cô ấy?
Andres F.

2
Tôi sẽ ghi lại để nói, bằng một quan sát hoàn toàn phi khoa học, rằng đã có một cuộc cách mạng như vậy về mặt phần cứng, nhưng cuộc cách mạng phần mềm đã diễn ra cực kỳ chậm. Có được các công cụ đồng thời chất lượng cho tất cả các lập trình viên vẫn là một hợp đồng khó khăn và đồng thời vẫn là điều khiến các nhà phát triển song song dày dạn kinh nghiệm theo những cách khó tái tạo.
Jesse C. Choper

2
Tôi chỉ muốn chỉ ra rằng chỉ vì thời gian của các dự đoán là sai, nên nó không nhất thiết làm cho các dự đoán sai. Một điều khá rõ ràng là các điểm chính mà bạn đã liệt kê ở trên không đạt được tầm quan trọng ngụ ý, nhưng đã có các bước theo hướng của từng điểm đó. Vì vậy, tôi muốn nói rằng những dự đoán trên sẽ trở thành sự thật, nó chỉ là một câu hỏi khi nào. KHI NÀO sẽ là khi nó trở thành một yêu cầu và không chỉ là một mong muốn. Biết khi nào ngưỡng đó sẽ được vượt qua là lý do tại sao dự đoán khi nào là rất khó.
Dunk

Câu trả lời:


23

Có, nhưng nó phụ thuộc.

Bạn không thể mong đợi để viết nontrivial , cao hiệu suất phần mềm mà không cần cả hai lợi dụng của phần cứng song song và sử dụng đồng thời như một kỹ thuật chương trình cơ cấu. Nhưng hầu hết các phần mềm đều không quan trọng về hiệu năng. Một ứng dụng web không thực hiện nhiều lần khủng hoảng và các ứng dụng CRUD không có gì giống như giới hạn thời gian cứng của một số phần mềm mô phỏng và y tế.

Các nhà phát triển trò chơi đặc biệt cần quan tâm đến điều này, bởi vì trò chơi là loại ứng dụng phổ biến nhất với các yêu cầu thời gian thực mềm. Vấn đề là nổi bật trên điện thoại di động, nơi bạn muốn tận dụng sức mạnh tính toán và kết xuất càng nhiều càng tốt từ một con chip tích hợp với hai lõi CPU và GPU công suất thấp. Đó là một lý do khác mà rất nhiều nhà phát triển đang xem xét Haskell và chờ đợi các ngôn ngữ như Rust trưởng thành, chúng tôi muốn sự an toàn hiệu suất trên phần cứng hiện đại.

Từ năm 2005, chúng tôi đã đạt được các công cụ mới và cải tiến như OpenCL, CUDA, OpenMP và các bộ hướng dẫn vectơ để làm việc với tính đồng thời và song song dữ liệu trong các ngôn ngữ đã được thiết lập. Tuy nhiên, những người mới tương đối được thiết kế từ sớm để làm nhiều điều thú vị hơn với sự tương tranh.

Thời gian chạy đồng thời của Haskell cho phép ngôn ngữ cung cấp hỗ trợ phong phú cho tính song song nhẹ (tia lửa) và trừu tượng đồng thời (chủ đề, kênh và tài liệu tham khảo có thể thay đổi được chia sẻ). Go và Rust cũng cung cấp các tác vụ nhẹ, Đi sử dụng các kênh và Rust sử dụng chuyển tin nhắn.

Các hệ thống này cung cấp sự an toàn cho bộ nhớ, thời gian thực hiện và bảo vệ tĩnh đối với các loại chủng tộc nhất định. Tính bất biến theo mặc định của Haskell và Rust giúp con người dễ quản lý hơn nhiều. Erlang đã làm điều này từ những năm 80, nhưng nhu cầu về phần mềm và kiến ​​thức của chúng tôi về cách thiết kế hệ thống lập trình cũng đã được cải thiện kể từ khi cảm ơn lòng tốt.

Cuối cùng, nhiều ngôn ngữ hiện có, tôi sẽ không đặt tên cho tên của mình, sẵn sàng từ chối là những lựa chọn đáng tin cậy để viết phần mềm mới. Gánh nặng của họ về sự phức tạp và sự trừu tượng đồng thời kém khiến chúng không phù hợp với những cân nhắc của các ứng dụng hiện đại. Chúng tôi chỉ đơn giản là chờ đợi sự thay thế trưởng thành.


2
Tôi không chắc chắn về sự suy giảm của một số ngôn ngữ nhất định, tôi hy vọng chúng ta sẽ thấy mã được tập trung vào việc giảm thiểu sự phụ thuộc hơn bất kỳ ngôn ngữ nào khác. Rốt cuộc, đó không thực sự là ngôn ngữ có lỗi, đó là cách bạn sử dụng nó. Và "quả treo thấp" của việc sử dụng nó không còn phù hợp với đa luồng / đồng thời.
Matt D

6
@MattD: Cả cách bạn sử dụng ngôn ngữ ngôn ngữ đều có thể có lỗi. Nói rằng chương trình của bạn là sai. Bạn là người đã viết sai, nhưng ngôn ngữ không nhất thiết giúp bạn viết đúng và điều đó cũng quan trọng.
Jon Purdy

6

Dưới đây là một vài điểm dữ liệu; quyết định cho chính mình nếu nó được coi là một cuộc cách mạng.

Phần cứng song song

Khoảng năm 2005, cả Intel và AMD đều bắt đầu sản xuất hàng loạt CPU x86 máy tính để bàn 2 nhân (Pentium D và Athlon 64), với tốc độ xung nhịp khoảng 3 GHz.

Năm 2006, PlayStation 3 được phát hành, nổi bật với bộ xử lý Cell với lõi 8 + 1 tốc độ 3,2 GHz.

Năm 2006, loạt GeForce 8 được phát hành. Nó bao gồm số lượng lớn (~ 100) bộ xử lý 'mục đích chung', trái ngược với các đơn vị cụ thể về đồ họa. Khoảng năm 2007, thông số CUDA 1.0 được phát hành, cho phép một số tính toán có mục đích chung chạy trên phần cứng NVidia song song.

Kể từ đó, xu hướng tiếp tục.

Giả sử, bây giờ, vào năm 2013, cả Intel và AMD đều cung cấp CPU 4, 8 và 16 lõi, với tốc độ xung nhịp chỉ cao hơn 4 GHz. Thiết kế lõi kép và lõi tứ là phổ biến cho các thiết bị có công suất thấp hơn, chẳng hạn như máy tính xách tay và điện thoại thông minh.

Tất cả điều này được sản xuất hàng loạt, phần cứng máy tính hàng ngày của người tiêu dùng.

Phần mềm

CUDA được phát hành vào năm 2007, sau đó là OpenCL năm 2008, cho phép sử dụng các GPU song song ồ ạt nói chung (không phải đồ họa). Mô hình trở nên phổ biến; nhiều công ty lưu trữ (ví dụ Amazon) cung cấp GPU cho các tác vụ điện toán chung.

Go được phát hành vào năm 2009, bao gồm các chủ đề phủ đầu rất rẻ ("goroutines") và cho phép thể hiện hiệu quả các thuật toán đồng thời cao.

Bộ công cụ Akka được phát hành cho Java và Scala vào năm 2009, cho phép đồng thời dựa trên diễn viên.

Erlang (một ngôn ngữ đồng thời cao) thấy một số sự gia tăng trong việc sử dụng.

Đồng thời so với song song

Lưu ý rằng để sử dụng phần cứng song song, người ta không nhất thiết cần đồng thời phần mềm , nghĩa là, tung hứng với các luồng thực hiện trong một tính toán. Nhiều vấn đề được giải quyết bằng các quá trình song song , không tương tác, trong đó mỗi quy trình là một chương trình tuần tự truyền thống.

Xử lý song song có thể sử dụng các ngôn ngữ truyền thống và khung song song hơn, như map-less hoặc MPC hoặc OpenMP. Đối với các khung như vậy, sự hiện diện của nhiều lõi trên cùng một tinh thể CPU không khác biệt về mặt khái niệm so với việc chỉ có nhiều CPU trong cụm; sự khác biệt chủ yếu là tốc độ.

Không có bữa trưa miễn phí cho đến nay

Tốc độ CPU vẫn còn ở mức khoảng 5 GHz ở mức cao. Với các công nghệ tốt hơn trong tầm nhìn, như bóng bán dẫn graphene, tần số có thể một lần nữa tăng lên trong tương lai, nhưng có lẽ không sớm.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.