Tại sao không tạo ra một lõi CPU lớn? [đóng cửa]


25

Tôi không hiểu tại sao các nhà sản xuất CPU tạo ra chip đa lõi. Mở rộng quy mô của nhiều lõi là khủng khiếp, đây là tính ứng dụng cao và tôi chắc chắn rằng bạn có thể chỉ ra một số chương trình hoặc mã chạy tốt trên nhiều lõi, nhưng hầu hết thời gian là tỷ lệ rác. Đó là một sự lãng phí không gian chết silicon và lãng phí năng lượng.

Các trò chơi, ví dụ, hầu như không bao giờ sử dụng nhiều hơn bốn lõi. Các mô phỏng khoa học và kỹ thuật như Ansys hay Fluent được định giá bằng bao nhiêu lõi mà PC chạy trên đó, vì vậy bạn phải trả nhiều tiền hơn vì bạn có nhiều lõi hơn, nhưng lợi ích của nhiều lõi trở nên kém hơn 16 lõi, nhưng bạn có 64 lõi này máy trạm ... thật lãng phí tiền bạc và năng lượng. Tốt hơn là mua một lò sưởi 1500 W cho mùa đông, rẻ hơn nhiều.

Tại sao họ không tạo ra CPU chỉ với một lõi lớn?

Tôi nghĩ rằng nếu họ tạo ra một lõi tương đương với CPU tám lõi, thì một lõi đó sẽ tăng IPC 800%, vì vậy bạn sẽ có được hiệu suất đầy đủ trong tất cả các chương trình, không chỉ các lõi được tối ưu hóa cho nhiều lõi. Nhiều IPC tăng hiệu suất ở mọi nơi, đó là cách đơn giản và đáng tin cậy để tăng hiệu suất. Nhiều lõi chỉ tăng hiệu năng trong số lượng chương trình hạn chế, và tỷ lệ là khủng khiếp và không đáng tin cậy.


Bình luận không dành cho thảo luận mở rộng; cuộc trò chuyện này đã được chuyển sang trò chuyện . Bất kỳ kết luận nào đạt được nên được chỉnh sửa lại thành câu hỏi và / hoặc bất kỳ câu trả lời nào.
Dave Tweed

Bạn có thể quan tâm đến bài viết này: gotw.ca/publications/concurrency-ddj.htm
lvella

"nhưng lợi ích của nhiều lõi trở nên thực sự kém hơn 16 lõi" Bạn rõ ràng không biết bạn đang nói về cái gì. Tin tôi đi, tôi đã làm việc với các tiến trình chạy trên vài chục nghìn CPU. Có cả một nhóm vấn đề gọi là "Xấu hổ song song", trong đó việc ném nhiều lõi vào vấn đề hoạt động rất tốt.
Aron

Câu trả lời:


93

Vấn đề nằm ở giả định rằng các nhà sản xuất CPU chỉ có thể thêm nhiều bóng bán dẫn để làm cho một lõi CPU mạnh hơn mà không có hậu quả.

Để làm cho CPU làm được nhiều hơn, bạn phải lập kế hoạch cho những gì đòi hỏi nhiều hơn. Thực sự có ba lựa chọn:

  1. Làm cho lõi chạy ở tần số xung nhịp cao hơn - Vấn đề với điều này là chúng ta đã gặp phải những hạn chế của những gì chúng ta có thể làm.

    Việc sử dụng năng lượng và do đó tản nhiệt tăng theo tần số - nếu bạn tăng gấp đôi tần số, bạn sẽ tăng gấp đôi công suất tiêu tán. Nếu bạn tăng điện áp, công suất tiêu tán của bạn sẽ tăng theo bình phương điện áp.

    Các kết nối và bóng bán dẫn cũng có độ trễ lan truyền do tính chất không lý tưởng của thế giới. Bạn không thể chỉ tăng số lượng bóng bán dẫn và mong đợi có thể chạy ở cùng tần số đồng hồ.

    Chúng tôi cũng bị giới hạn bởi phần cứng bên ngoài - chủ yếu là RAM. Để làm cho CPU nhanh hơn, bạn phải tăng băng thông bộ nhớ, bằng cách chạy nó nhanh hơn hoặc tăng chiều rộng bus dữ liệu.


  1. Thêm các hướng dẫn phức tạp hơn - Thay vì chạy nhanh hơn, chúng ta có thể thêm một tập lệnh phong phú hơn - các tác vụ phổ biến như mã hóa, v.v. có thể được làm cứng vào silicon. Thay vì mất nhiều chu kỳ xung nhịp để tính toán trong phần mềm, thay vào đó chúng ta có sự tích lũy phần cứng.

    Điều này đã được thực hiện trên bộ xử lý Bộ hướng dẫn phức tạp (CISC). Xem những thứ như SSE2, SSE3. Một lõi CPU đơn ngày nay mạnh hơn rất nhiều so với lõi CPU từ 10 năm trước ngay cả khi chạy ở cùng tần số xung nhịp.

    Vấn đề là, khi bạn thêm các hướng dẫn phức tạp hơn, bạn thêm phức tạp hơn và làm cho chip trở nên lớn hơn. Kết quả trực tiếp là CPU trở nên chậm hơn - tần số xung nhịp có thể giảm xuống khi độ trễ lan truyền tăng.

    Những hướng dẫn phức tạp này cũng không giúp bạn thực hiện các nhiệm vụ đơn giản. Bạn không thể làm cứng mọi trường hợp sử dụng có thể, do đó, chắc chắn phần lớn phần mềm bạn đang chạy sẽ không được hưởng lợi từ các hướng dẫn mới và trên thực tế sẽ bị tổn hại do giảm tốc độ xung nhịp.

    Bạn cũng có thể làm cho độ rộng của bus dữ liệu lớn hơn để xử lý nhiều dữ liệu hơn cùng một lúc, tuy nhiên điều này một lần nữa làm cho CPU lớn hơn và bạn đạt được sự đánh đổi giữa thông lượng đạt được thông qua các bus dữ liệu lớn hơn và tốc độ xung nhịp giảm. Nếu bạn chỉ có dữ liệu nhỏ (ví dụ: số nguyên 32 bit), việc có CPU 256 bit không thực sự giúp ích cho bạn.


  1. Làm cho CPU song song hơn - Thay vì cố gắng làm một việc nhanh hơn, thay vào đó hãy làm nhiều việc cùng một lúc. Nếu tác vụ bạn đang thực hiện cho phép hoạt động trên nhiều thứ cùng một lúc, thì bạn muốn một CPU duy nhất có thể thực hiện nhiều phép tính cho mỗi lệnh (Một lệnh nhiều dữ liệu (SIMD)) hoặc có nhiều CPU có thể thực hiện một CPU phép tính.

    Đây là một trong những trình điều khiển chính cho CPU đa lõi. Nếu bạn có nhiều chương trình đang chạy hoặc có thể chia chương trình đơn của bạn thành nhiều tác vụ, thì việc có nhiều lõi CPU cho phép bạn thực hiện nhiều việc cùng một lúc.

    Bởi vì các lõi CPU riêng lẻ là các khối riêng biệt một cách hiệu quả (chặn bộ nhớ cache và giao diện bộ nhớ), mỗi lõi riêng lẻ nhỏ hơn lõi đơn nguyên khối tương đương. Bởi vì lõi nhỏ gọn hơn, độ trễ lan truyền giảm và bạn có thể chạy từng lõi nhanh hơn.

    Về việc một chương trình có thể được hưởng lợi từ việc có nhiều lõi hay không, điều đó hoàn toàn phụ thuộc vào những gì chương trình đó đang làm và cách nó được viết.


Bình luận không dành cho thảo luận mở rộng; cuộc trò chuyện này đã được chuyển sang trò chuyện . Bất kỳ kết luận nào đạt được nên được chỉnh sửa lại thành câu hỏi và / hoặc bất kỳ câu trả lời nào.
Dave Tweed

Một trong những điểm được nêu trong các ý kiến ​​vẫn chưa được giải quyết là CPU có thể song song bằng cách chạy nhiều hướng dẫn trên mỗi đồng hồ (Superscalar). Đó là trực giao với SIMD và tần số; hướng dẫn trên mỗi đồng hồ (IPC) là yếu tố thứ ba trong thông lượng thực tế mỗi lần. Tất cả các CPU hiện đại cho khối lượng công việc sử dụng tương tác tối thiểu là 2 chiều.
Peter Cordes

1
Để có câu trả lời chính xác hơn, hãy đọc scTHERirect.com/topics/computer-science/ từ
Tony Stewart Sunnyskyguy EE75

37

Ngoài các câu trả lời khác, còn có một yếu tố khác: năng suất chip . Một bộ xử lý hiện đại có vài tỷ bóng bán dẫn trong đó, mỗi bóng bán dẫn phải hoạt động hoàn hảo để toàn bộ chip hoạt động tốt.

Bằng cách tạo bộ xử lý đa lõi, bạn có thể phân vùng sạch các nhóm bóng bán dẫn. Nếu một lỗi tồn tại ở một trong các lõi, bạn có thể vô hiệu hóa lõi đó và bán chip với giá giảm theo số lượng lõi hoạt động. Tương tự như vậy, bạn cũng có thể lắp ráp các hệ thống từ các thành phần được xác thực như trong hệ thống SMP.

Đối với hầu hết mọi CPU bạn mua, nó bắt đầu được tạo thành một model cao cấp hàng đầu cho dòng vi xử lý đó. Những gì bạn kết thúc, phụ thuộc vào những phần của con chip đó đang hoạt động không chính xác và bị vô hiệu hóa. Intel không tạo ra bất kỳ bộ xử lý i3 nào: tất cả chúng đều là i7 bị lỗi, với tất cả các tính năng tách dòng sản phẩm bị vô hiệu hóa do chúng không thử nghiệm. Tuy nhiên, các phần vẫn còn hoạt động vẫn hữu ích và có thể được bán với giá rẻ hơn nhiều. Bất cứ điều gì tồi tệ hơn sẽ trở thành đồ trang sức móc khóa.

Và khiếm khuyết không phải là hiếm. Hoàn hảo tạo ra hàng tỷ bóng bán dẫn không phải là một nhiệm vụ dễ dàng. Nếu bạn không có cơ hội sử dụng có chọn lọc các phần của một con chip nhất định, giá của kết quả sẽ tăng lên, rất nhanh.

Chỉ với một bộ xử lý über duy nhất, sản xuất là tất cả hoặc không có gì, dẫn đến một quá trình lãng phí hơn nhiều. Đối với một số thiết bị, như cảm biến hình ảnh cho mục đích khoa học hoặc quân sự, nơi bạn cần một cảm biến khổng lồ và tất cả đều phải hoạt động, chi phí của những thiết bị đó rất lớn chỉ có ngân sách cấp nhà nước mới có thể chi trả cho chúng.


4
Nếu / khi năng suất cải thiện và đang sản xuất chip hoạt động hoàn toàn hơn so với nhu cầu của thị trường, các nhà cung cấp thường bắt đầu hợp nhất một số lõi / bộ đệm và / hoặc đóng gói chúng ở SKU tần số thấp hơn, thay vì điều chỉnh cấu trúc giá để tạo ra mức cao chip cuối tương đối rẻ hơn. Với GPU / card đồ họa bạn đã từng có thể mở khóa các đơn vị shader bị vô hiệu hóa trên một số thẻ bằng hack firmware, để xem bạn có may mắn không và có thẻ nơi chúng chỉ bị vô hiệu hóa để phân khúc thị trường, không phải lỗi thực tế.
Peter Cordes

4
Intel đã sản xuất khuôn lõi kép cho một số chip của họ. Với tất cả các SKU di động ULV (điện áp cực thấp) của chúng là lõi kép, không có đủ lõi tứ bị lỗi và diện tích khuôn nhỏ hơn (đặc biệt là với iGPU bị cắt giảm) sẽ cung cấp nhiều chip lõi kép hoạt động hơn trên mỗi wafer hơn là hợp nhất với lõi tứ chết. vi.wikichip.org/wiki/intel/microarchitectures/ Nhẫn có các bức ảnh chết của Sandybridge 131 mm² kích thước lõi kép đồ họa + GT1, so với 149 mm² lõi kép + đồ họa GT2 + 216 mm² quad + GT2. Vẫn còn chỗ cho các khiếm khuyết trong bộ nhớ cache, v.v.
Peter Cordes

Và (một số) lỗi trong một phần của đơn vị FMA có thể được xử lý bằng cách kết hợp nó và bán nó dưới dạng chip Celeron hoặc Pentium (không có AVX, vì vậy chỉ có vectơ 128 bit.) Ngay cả các chip Skylake hoặc Coffee Lake Pentium hiện đại cũng không có AVX . Các đơn vị FMA SIMD chiếm một phần nhỏ của lõi (và chạy nhiều op SIMD khác với toán học FP, bao gồm cả số nguyên mul và dịch chuyển số nguyên), vì vậy tôi sẽ không ngạc nhiên nếu các đơn vị FMA 256 bit có thể được ánh xạ tới 2x 128-bit sử dụng bất cứ 2 khối nào vẫn hoạt động. Với Skylake Xeon, thậm chí còn có SKU với thông lượng FMA AVX512 giảm (chỉ có 1 FMA 512 bit hoạt động)
Peter Cordes

@PeterCordes Nếu sản lượng đạt được điều đó, thì các nhà cung cấp sẽ đưa ra các thiết kế có mật độ xung nhịp cao hơn và / hoặc nhanh hơn (và do đó tốc độ lỗi cao hơn) cho đến khi tỷ lệ lỗi quay trở lại nơi họ có thể vô hiệu hóa lõi và / hoặc dưới đồng hồ chip để bán giảm giá ..
Monty Harder

@MontyHarder: Điều đó đúng, nhưng xác thực tốn tiền và thời gian, và dây chuyền sản xuất hiện tại sẽ tiếp tục tạo ra các thiết kế hiện có trong một thời gian. Nhưng vâng, một số ví dụ của Intel về những gì bạn đang nói đến là Haswell Refresh , và các tinh chỉnh khác nhau của Skylake mà về cơ bản không có thay đổi kiến ​​trúc và cải tiến nhỏ cho quy trình 14nm của họ. (Đôi khi với iGPU mới). ví dụ: Kaby Lake sau đó là Coffee Lake, v.v. như các bước "tối ưu hóa" trong nhịp tick-tock bình thường của Intel.
Peter Cordes

26

Phụ thuộc dữ liệu

Khá dễ dàng để thêm nhiều hướng dẫn trên mỗi đồng hồ bằng cách làm cho chip "rộng hơn" - đây là cách tiếp cận "SIMD". Vấn đề là điều này không giúp ích cho hầu hết các trường hợp sử dụng.

Có khoảng hai loại khối lượng công việc, độc lập và phụ thuộc. Một ví dụ về khối lượng công việc độc lập có thể là "đưa ra hai chuỗi số A1, A2, A3 ... và B1, B2, ... vv, tính toán (A1 + B1) và (A2 + B2), v.v." Loại khối lượng công việc này được nhìn thấy trong đồ họa máy tính, xử lý âm thanh, học máy, v.v. Khá nhiều thứ này đã được trao cho GPU, được thiết kế đặc biệt để xử lý nó.

Một khối lượng công việc phụ thuộc có thể là "Cho A, thêm 5 vào nó và tra cứu nó trong một bảng. Lấy kết quả và thêm 16 vào nó. Nhìn lên trong một bảng khác."

Ưu điểm của khối lượng công việc độc lập là nó có thể được chia thành nhiều phần khác nhau, vì vậy nhiều bóng bán dẫn sẽ giúp điều đó. Đối với khối lượng công việc phụ thuộc, điều này không giúp ích gì cả - nhiều bóng bán dẫn chỉ có thể làm cho nó chậm hơn . Nếu bạn phải lấy một giá trị từ bộ nhớ, đó là một thảm họa cho tốc độ. Một tín hiệu phải được gửi đi khắp bo mạch chủ, đi qua đèn phụ, DRAM phải sạc một hàng và chờ kết quả, sau đó gửi lại tất cả. Điều này mất hàng chục nano giây. Sau đó, khi thực hiện một phép tính đơn giản, bạn phải gửi đi cho lần tiếp theo.

Quản lý năng lượng

Các lõi dự phòng bị tắt hầu hết thời gian. Trên thực tế, trên khá nhiều bộ xử lý, bạn không thể chạy tất cả các lõi mọi lúc mà không có thứ gì bắt lửa, vì vậy hệ thống sẽ tắt hoặc tắt chúng cho bạn.

Viết lại phần mềm là cách duy nhất để chuyển tiếp

Phần cứng không thể tự động chuyển đổi khối lượng công việc phụ thuộc thành khối lượng công việc độc lập. Không thể phần mềm. Nhưng một lập trình viên đã chuẩn bị thiết kế lại hệ thống của họ để tận dụng rất nhiều lõi.


2
Trích dẫn cần thiết cho "không thể chạy tất cả các lõi cùng một lúc". Trừ khi bạn coi tốc độ xung nhịp tối đa lõi đơn là tốc độ xung nhịp "thực" của CPU. Theo nghĩa cổ điển (trước khi chúng ta chạm vào tường điện và tốc độ đồng hồ bị hạn chế bởi độ trễ lan truyền đường dẫn quan trọng), đúng vậy, nhưng trong thế giới hiện đại, việc nhìn vào tốc độ đồng hồ cơ bản là điều có thể duy trì với tất cả lõi hoạt động chạy khối lượng công việc nặng. Bất cứ điều gì cao hơn mức hấp dẫn bạn có thể sử dụng một cách cơ hội khi giới hạn công suất / nhiệt cho phép. (ví dụ Turbo của Intel).
Peter Cordes

1
Nhưng về mặt quyền lực, thậm chí là một đơn max clock core được giới hạn bởi thermals nhiều hơn so với sự chậm trễ công tác tuyên truyền (mặc dù có lẽ là giai đoạn ranh giới đường ống được lựa chọn vì vậy bạn gần giới hạn đó tại mục tiêu tuabin max). Và điện áp cũng là một biến số: công suất kém hơn nhưng độ trễ cổng ngắn hơn. Vì vậy, dù sao đi nữa, sẽ không có ý nghĩa gì khi coi max turbo đơn lõi là thứ mà bạn "nên" có thể chạy tất cả các lõi tại, bởi vì giới hạn đó đã đến từ sức mạnh.
Peter Cordes

Bối cảnh của câu hỏi ban đầu chắc chắn là hỏi về tốc độ tối đa lõi đơn, và vì nhiều mục đích thực tế mà (và bộ nhớ cache của nó bị bỏ lỡ) là yếu tố giới hạn thực sự cho tốc độ cho người dùng.
pjc50

Có, tất cả chúng ta đều có hiệu năng đơn luồng 8 lần thay vì CPU 8 lõi nếu có thể. (Với SMT để cho phép nó chạy khối lượng công việc riêng biệt một cách tự nhiên mà không cần chi phí chuyển đổi ngữ cảnh. Xem câu trả lời của tôi. :) Một lõi siêu rộng giả thuyết có thể có thể tự chạy nhanh hơn khi khối lượng công việc gây ra nhiều gian hàng, thay vì giữ tất cả các bóng bán dẫn trong các đơn vị SIMD FMA được cấp nguồn và chuyển đổi mọi đồng hồ. (Công suất trong một lõi đơn cũng là chìa khóa để không tan chảy ở đồng hồ cao; en.wikipedia.org/wiki/Dark_silicon ). Vì vậy, có một lõi rộng duy nhất sẽ không làm cho điều này khác biệt.
Peter Cordes

Mặc dù bạn có một điểm rằng hiệu năng đơn luồng mà chúng ta thấy trên các CPU hiện tại tốt hơn so với việc chúng bị giới hạn ở tốc độ xung nhịp mà chúng có thể duy trì đồng thời trên tất cả các lõi ngay cả với khối lượng công việc trong trường hợp xấu nhất. tức là Turbo là chìa khóa, đặc biệt là đối với các bộ phận TDP thấp như chip máy tính xách tay ( Tại sao CPU của tôi không thể duy trì hiệu suất cao nhất trong HPC ): thường là tỷ lệ lớn giữa đường cơ sở và turbo tối đa, không giống như chip máy tính để bàn có công suất cao nhưng có lõi thấp , ví dụ: i7-6700k Skylake là cơ sở 4GHz, turbo đơn lõi 4.2GHz (không ép xung; có thể cao hơn với TDP 95W).
Peter Cordes

20

Quay ngược thời gian, bộ xử lý không thể chạy nhanh như vậy. Kết quả là, nếu bạn muốn xử lý nhiều hơn thì bạn cần nhiều bộ xử lý hơn. Điều này có thể là với một bộ đồng xử lý toán học, hoặc đơn giản là với nhiều bộ xử lý tương tự. Ví dụ điển hình nhất cho điều này là Inmos Transputer từ những năm 80, được thiết kế đặc biệt để xử lý song song ồ ạt với nhiều bộ xử lý được cắm với nhau. Toàn bộ khái niệm dựa trên giả định rằng không có cách nào tốt hơn để tăng sức mạnh xử lý hơn là thêm bộ xử lý.

Rắc rối là, giả định đó (tạm thời) không chính xác. Bạn cũng có thể nhận được nhiều sức mạnh xử lý hơn bằng cách làm cho một bộ xử lý thực hiện nhiều phép tính hơn. Intel và AMD đã tìm ra cách để đẩy tốc độ xung nhịp cao hơn bao giờ hết, và như bạn nói, cách dễ dàng hơn để giữ mọi thứ trên một bộ xử lý. Kết quả là cho đến giữa những năm 2000, bộ xử lý lõi đơn nhanh đã sở hữu thị trường. Inmos đã chết một cái chết vào đầu những năm 90, và tất cả kinh nghiệm của họ đã chết với họ.

Thời gian tốt đẹp đã kết thúc mặc dù. Khi tốc độ xung nhịp lên đến GHz, thực sự không có phạm vi để tiến xa hơn. Và trở lại, chúng tôi đã đi đến nhiều lõi một lần nữa. Nếu bạn thực sự không thể nhanh hơn, nhiều lõi hơn là câu trả lời. Như bạn nói, không phải lúc nào cũng dễ dàng sử dụng các lõi đó một cách hiệu quả. Ngày nay chúng ta tốt hơn rất nhiều, nhưng chúng ta vẫn còn cách nào đó để làm cho nó dễ dàng như Transputer đã làm.

Tất nhiên cũng có những lựa chọn khác để cải thiện - thay vào đó bạn có thể hiệu quả hơn. SIMD và các bộ hướng dẫn tương tự được xử lý nhiều hơn cho cùng một số lượng đồng hồ. DDR lấy dữ liệu của bạn vào và ra khỏi bộ xử lý nhanh hơn. Tất cả đều giúp ích. Nhưng khi xử lý, chúng tôi trở lại thập niên 80 và nhiều lõi một lần nữa.


Bình luận không dành cho thảo luận mở rộng; cuộc trò chuyện này đã được chuyển sang trò chuyện . Bất kỳ kết luận nào đạt được nên được chỉnh sửa lại thành câu hỏi và / hoặc bất kỳ câu trả lời nào.
Dave Tweed

20

Câu hỏi hay, hoặc ít nhất một câu trả lời thú vị. Một phần của câu trả lời này hình ảnh một thế giới nơi CPU có thể mở rộng hiệu quả theo chiều rộng thay vì có nhiều lõi riêng biệt. Mô hình cấp phép / giá sẽ khác nhau!

Phần còn lại giải thích lý do tại sao họ không thể. Tóm lược:

  • Chi phí của quy mô nhiều lõi gần với tuyến tính
  • Chi phí mở rộng quy mô đường ống siêu lớp 1 lõi ~ bậc hai Điều này có thể thực hiện được với lực lượng vũ phu đủ, dù sao cũng đến một điểm. Hiệu suất đơn luồng rất quan trọng đối với việc sử dụng tương tác (vấn đề độ trễ từ đầu đến cuối, không chỉ là thông lượng), vì vậy các CPU cao cấp lõi lớn hiện tại phải trả giá đó. ví dụ: Skylake (4 chiều), Ryzen (5 hoặc 6 rộng) và A12 của Apple (rộng 7 cho lõi lớn, rộng 3 cho lõi nhỏ hiệu quả năng lượng)
  • IPC giảm dần nghiêm trọng trả lại từ việc chỉ mở rộng đường ống vượt quá 3 hoặc 4 chiều, ngay cả khi thực hiện không theo thứ tự để tìm ILP . Chi nhánh bỏ lỡ và bộ nhớ cache là khó khăn, và vẫn còn toàn bộ đường ống.
  • Bạn đã không đề cập đến tần số, chỉ IPC, nhưng tần số mở rộng cũng khó. Tần số cao hơn đòi hỏi điện áp cao hơn, do đó thang đo công suất với tần số được tạo thành : ^1từ tần số trực tiếp và^2 từ điện áp. (Tụ lưu trữ các thang đo năng lượng với V ^ 2, và hầu hết năng lượng động ngoài dòng rò là từ việc bơm điện vào tải điện dung của cổng FET + dây.)

    Hiệu suất = tần số lần IPC. (Trong cùng một kiến ​​trúc. SIMD rộng hơn cho phép bạn hoàn thành công việc tương tự với ít hướng dẫn hơn và một số ISA dày đặc hơn các cấu trúc khác, ví dụ: MIPS thường mất nhiều hướng dẫn để thực hiện cùng một công việc so với x86 hoặc AArch64.)

Chi phí nằm trong khu vực chết (chi phí sản xuất) và / hoặc năng lượng (gián tiếp hạn chế tần số vì làm mát là khó khăn). Ngoài ra, bản thân công suất và hiệu suất thấp hơn mỗi watt cũng là một mục tiêu, đặc biệt là cho thiết bị di động (pin) và máy chủ (mật độ năng lượng / chi phí làm mát / chi phí điện).

Trước khi đa lõi trên mỗi ổ cắm là một điều, bạn đã có hệ thống đa ổ cắm cho các trường hợp sử dụng cao cấp, nơi bạn muốn có nhiều thông lượng hơn mức có thể đạt được với một CPU có thể được sản xuất, vì vậy đó là những hệ thống SMP duy nhất. (Máy chủ, máy trạm cao cấp).

Nếu một lõi đơn có thể mở rộng hiệu quả như bạn mong muốn, chúng tôi sẽ có các hệ thống với 1 lõi vật lý trên mỗi ổ cắm và SMT (ví dụ HyperThreading) để cho phép chúng hoạt động như nhiều lõi logic. Máy tính để bàn / máy tính xách tay thông thường sẽ chỉ có 1 lõi vật lý và chúng tôi sẽ không đấu tranh để song song hóa những thứ không có quy mô tuyến tính với nhiều lõi hơn. ví dụ: make -j4để tận dụng các máy chủ đa ổ cắm và / hoặc để ẩn độ trễ I / O trên máy tính để bàn. . trình bày SMT cho HĐH rất khác nhau, vì vậy các thuật toán lập lịch song song và khóa vẫn sẽ cần thiết ở đó.


Donald Knuth nói trong một cuộc phỏng vấn năm 2008

Tôi cũng có thể châm ngòi một chút về sự bất hạnh cá nhân của mình với xu hướng hiện tại đối với kiến ​​trúc đa lõi. Đối với tôi, có vẻ như ít nhiều các nhà thiết kế phần cứng đã hết ý tưởng và họ đang cố gắng đổ lỗi cho sự sụp đổ trong tương lai của Định luật Moore cho các nhà văn phần mềm bằng cách cho chúng tôi các máy hoạt động nhanh hơn chỉ với một số điểm chuẩn chính!

Có, nếu chúng ta có thể có CPU lõi đơn kỳ diệu với thông lượng gấp 8 lần trên các chương trình thực , có lẽ chúng ta vẫn đang sử dụng chúng. Với các hệ thống ổ cắm kép chỉ khi nó đáng để trả nhiều hơn cho thông lượng nhiều hơn (không phải hiệu suất đơn luồng).

Nhiều CPU giảm chi phí chuyển đổi ngữ cảnh khi nhiều chương trình đang chạy (bằng cách cho phép chúng thực sự chạy song song thay vì chuyển đổi nhanh giữa chúng); đa nhiệm ưu tiên làm gián đoạn các máy móc không theo thứ tự khổng lồ mà CPU yêu cầu có thể sẽ còn gây tổn hại nhiều hơn bây giờ.

Về mặt vật lý, nó sẽ là lõi đơn (đối với hệ thống phân cấp bộ đệm đơn giản không có kết nối giữa các lõi) nhưng hỗ trợ SMT (ví dụ HyperThreading của Intel) để phần mềm có thể sử dụng nó như 8 lõi logic cạnh tranh linh hoạt cho các tài nguyên thông lượng. Hoặc khi chỉ có 1 luồng đang chạy / không bị đình trệ, nó sẽ nhận được toàn bộ lợi ích.

Vì vậy, bạn sẽ sử dụng nhiều luồng khi điều đó thực sự dễ dàng / tự nhiên hơn (ví dụ: các quy trình riêng biệt chạy cùng một lúc) hoặc cho các vấn đề dễ dàng song song với các chuỗi phụ thuộc sẽ ngăn chặn tối đa IPC của con thú này.

Nhưng thật không may, đó là suy nghĩ mong muốn của Knuth rằng CPU đa lõi sẽ không còn là một điều tại thời điểm này.


Chia tỷ lệ hiệu suất đơn luồng

Tôi nghĩ rằng nếu họ tạo ra 1 lõi tương đương với CPU 8 lõi, thì một lõi đó sẽ tăng 800% IPC để bạn có được hiệu suất đầy đủ trong tất cả các chương trình, không chỉ các lõi được tối ưu hóa cho nhiều lõi.

Vâng đó là sự thật. Nếu có thể xây dựng một CPU như vậy , nó sẽ rất tuyệt vời. Nhưng tôi nghĩ đó là nghĩa đen không thể trên cùng một quy trình sản xuất chất bán dẫn (nghĩa là cùng chất lượng / hiệu suất của bóng bán dẫn). Chắc chắn không thể có cùng ngân sách năng lượng và diện tích chết như CPU ​​8 lõi, mặc dù bạn sẽ tiết kiệm logic để dán các lõi lại với nhau và sẽ không cần nhiều không gian cho bộ nhớ riêng trên mỗi lõi.

Ngay cả khi bạn cho phép tăng tần số (vì tiêu chí thực sự là hoạt động mỗi giây, không hoạt động trên mỗi đồng hồ), làm cho ngay cả CPU nhanh hơn gấp 2 lần sẽ là một thách thức lớn.

Nếu có thể ở bất cứ nơi nào gần sức mạnh tương tự và ngân sách die-khu vực (như vậy, sản xuất chi phí) để xây dựng một CPU như vậy, có các nhà cung cấp CPU sẽ đã được xây dựng chúng theo cách đó.

Xem Bộ vi xử lý hiện đại Hướng dẫn 90 phút!

Cụ thể là thêm Cores hay Wider Cores? phần, cho nền tảng cần thiết để hiểu câu trả lời này; nó bắt đầu đơn giản với cách CPU hoạt động theo thứ tự hoạt động, sau đó thay thế siêu tốc (nhiều hướng dẫn trên mỗi đồng hồ). Sau đó giải thích cách chúng ta chạm tường điện ngay trong kỷ nguyên P4, dẫn đến việc kết thúc việc mở rộng tần số dễ dàng, chủ yếu chỉ là IPC và thực hiện nhiều công việc hơn theo hướng dẫn (ví dụ SIMD) khi tiến về phía trước, ngay cả với các bóng bán dẫn nhỏ hơn.

Làm cho một đường ống rộng hơn (hướng dẫn tối đa trên mỗi đồng hồ) thường có tỷ lệ chi phí là bình phương chiều rộng . Chi phí đó được đo bằng diện tích và / hoặc công suất, để kiểm tra phụ thuộc song song rộng hơn (phát hiện nguy cơ) và bộ lập lịch ngoài đơn đặt hàng rộng hơn để tìm hướng dẫn sẵn sàng để chạy. Và nhiều cổng đọc / ghi hơn trên tệp đăng ký và bộ đệm của bạn nếu bạn muốn chạy các hướng dẫn khác nop. Đặc biệt nếu bạn có các hướng dẫn 3 đầu vào như FMA hoặc add-with-carry (2 thanh ghi + cờ).

Ngoài ra còn có lợi nhuận IPC giảm dần để làm cho CPU rộng hơn ; hầu hết các khối lượng công việc đã giới hạn ILP quy mô nhỏ / phạm vi ngắn (Song song mức hướng dẫn) cho CPU để khai thác, do đó làm cho lõi rộng hơn không làm tăng IPC (hướng dẫn trên mỗi đồng hồ) nếu IPC bị giới hạn dưới độ rộng của cốt lõi bởi chuỗi phụ thuộc, bỏ lỡ chi nhánh, bỏ lỡ bộ nhớ cache hoặc các quầy hàng khác. Chắc chắn bạn sẽ tăng tốc trong một số vòng lặp không được kiểm soát với các lần lặp độc lập, nhưng đó không phải là điều mà hầu hết các mã dành phần lớn thời gian để làm. So sánh / hướng dẫn chi nhánh chiếm 20% hỗn hợp hướng dẫn trong mã "điển hình", IIRC. (Tôi nghĩ rằng tôi đã đọc các số từ 15 đến 25% cho các bộ dữ liệu khác nhau.)

Ngoài ra, một lỗi bộ nhớ cache lưu trữ tất cả các hướng dẫn phụ thuộc (và sau đó mọi thứ một khi đạt được dung lượng ROB) sẽ tốn nhiều chi phí hơn cho CPU rộng hơn. (Chi phí cơ hội của việc để nhiều đơn vị thực thi nhàn rỗi hơn; công việc tiềm năng hơn không được thực hiện.) Hoặc một chi nhánh bị bỏ lỡ tương tự gây ra bong bóng.

Để có được 8 lần IPC, chúng tôi cần ít nhất một sự cải thiện về độ chính xác dự đoán chi nhánh và tỷ lệ trúng bộ nhớ cache . Nhưng tốc độ nhấn bộ đệm không mở rộng tốt với dung lượng bộ đệm vượt qua một điểm nhất định đối với hầu hết các khối lượng công việc. Và HW tìm nạp trước là thông minh, nhưng không thể thông minh. Và ở mức 8, IPC, các dự đoán nhánh cần tạo ra 8 lần dự đoán cho mỗi chu kỳ cũng như có chúng chính xác hơn.


Các kỹ thuật hiện tại để xây dựng CPU thực thi không theo thứ tự chỉ có thể tìm thấy ILP trong phạm vi ngắn . Ví dụ: kích thước ROB của Skylake là 224 uops miền hợp nhất, bộ lập lịch cho các uops không được thực thi là 97 miền không sử dụng. Xem Hiểu về tác động của lfence trên một vòng lặp với hai chuỗi phụ thuộc dài, để tăng độ dài cho trường hợp kích thước bộ lập lịch là yếu tố giới hạn trong việc trích xuất ILP từ 2 chuỗi lệnh dài, nếu chúng quá dài. Và / hoặc xem câu trả lời tổng quát và giới thiệu này ).

Vì vậy, việc tìm ILP giữa hai vòng dài riêng biệt không phải là điều chúng ta có thể làm với phần cứng. Việc biên dịch lại nhị phân động cho phản ứng tổng hợp vòng lặp có thể có thể xảy ra trong một số trường hợp, nhưng khó và không phải CPU nào đó thực sự có thể làm được trừ khi chúng đi theo lộ trình Transmeta Crusoe. (lớp mô phỏng x86 ở trên cùng của một ISA bên trong khác; trong trường hợp đó là VLIW). Nhưng các thiết kế x86 hiện đại tiêu chuẩn với bộ đệm uop bộ giải mã mạnh mẽ không dễ bị đánh bại đối với hầu hết các mã.

Và ngoài x86, tất cả các ISA vẫn đang được sử dụng tương đối dễ giải mã, do đó không có động lực nào cho việc biên dịch lại động ngoài việc tối ưu hóa đường dài. TL: DR: hy vọng các trình biên dịch ma thuật có thể tiết lộ nhiều ILP hơn cho phần cứng đã không hoạt động đối với Itanium IA-64 và không có khả năng hoạt động cho CPU siêu rộng cho bất kỳ ISA hiện có nào với mô hình thực thi nối tiếp.


Nếu bạn đã có một CPU siêu rộng, bạn chắc chắn muốn nó hỗ trợ SMT để bạn có thể duy trì hoạt động của nó bằng cách chạy nhiều luồng ILP thấp.

Vì Skylake hiện rộng 4 uops (và đạt được IPC thực tế từ 2 đến 3 u mỗi đồng hồ, hoặc thậm chí gần hơn với 4 trong mã thông lượng cao), CPU rộng hơn 8 giả thuyết sẽ có chiều rộng 32!

Có thể khắc nó trở lại thành 8 hoặc 16 CPU logic có thể chia sẻ động các tài nguyên thực thi đó sẽ rất tuyệt vời: các luồng không bị đình trệ có được tất cả băng thông phía trước và thông lượng phía sau.

Nhưng với 8 lõi riêng biệt, khi một luồng xử lý, không có gì khác để giữ cho các đơn vị thực thi được cung cấp; các chủ đề khác không có lợi.

Việc thực thi thường bùng nổ: nó chờ đợi tải bộ nhớ cache bị mất, sau đó một khi có nhiều hướng dẫn song song có thể sử dụng kết quả đó. Với CPU siêu rộng, sự bùng nổ đó có thể diễn ra nhanh hơn và nó thực sự có thể giúp với SMT.


Nhưng chúng ta không thể có CPU siêu rộng kỳ diệu

Vì vậy, để đạt được thông lượng, thay vào đó chúng ta phải phơi bày song song với phần cứng dưới dạng song song mức luồng . Nói chung các trình biên dịch không tuyệt vời khi biết khi nào / làm thế nào để sử dụng các luồng, ngoại trừ các trường hợp đơn giản như các vòng lặp rất lớn. (OpenMP, hoặc gcc's -ftree-parallelize-loops). Vẫn cần sự thông minh của con người để làm lại mã để có hiệu quả thực hiện song song các công việc hữu ích, bởi vì giao tiếp giữa các luồng rất tốn kém, và khởi động luồng cũng vậy.

TLP là song song hạt thô, không giống như ILP hạt mịn trong một luồng thực thi duy nhất mà CTNH có thể khai thác.


CPU nhắm vào khối lượng công việc tương tác (như Intel / AMD x86 và lõi cao cấp Apple / ARM AArch64) chắc chắn đẩy vào lợi nhuận giảm dần của quy mô IPC, bởi vì hiệu năng đơn luồng vẫn rất có giá trị khi độ trễ, không chỉ là thông lượng cho vấn đề ồ ạt song song.

Có thể chạy song song 8 bản sao của trò chơi với tốc độ 15 khung hình / giây, ít có giá trị hơn nhiều so với khả năng chạy một bản sao ở tốc độ 45 khung hình / giây. Các nhà cung cấp CPU biết điều này và đó là lý do tại sao các CPU hiện đại sử dụng thực thi không theo thứ tự mặc dù nó tiêu tốn năng lượng và diện tích đáng kể. (Nhưng GPU thì không vì khối lượng công việc của chúng đã song song lớn).

Phần cứng Xeon Phi nhiều lõi của Intel (Hiệp sĩ hạ cánh / Hiệp sĩ của Hiệp sĩ) là một điểm nửa thú vị: thực thi không theo thứ tự rất hạn chế và SMT để giữ các lõi 2 chiều được cung cấp với các hướng dẫn SIMD AVX512 để xử lý số. Các lõi dựa trên kiến ​​trúc Silvermont năng lượng thấp của Intel. (Người thực hiện không theo thứ tự nhưng với một cửa sổ sắp xếp lại nhỏ, nhỏ hơn nhiều so với gia đình Sandybridge lõi lớn. Và một đường ống hẹp hơn.)


BTW, tất cả điều này là trực giao với SIMD. Hoàn thành nhiều công việc hơn theo hướng dẫn luôn có ích, nếu có thể cho vấn đề của bạn.


Mô hình định giá

Các mô hình định giá phần mềm được xác định dựa trên bối cảnh hiện tại của phần cứng.

Các mô hình cấp phép mỗi lõi trở nên phổ biến hơn (và có liên quan ngay cả với máy tính để bàn một ổ cắm) với sự ra đời của CPU đa lõi. Trước đó, nó chỉ liên quan đến máy chủ và máy trạm lớn.

Nếu phần mềm không cần nhiều lõi để chạy ở tốc độ cao nhất, thì thực sự sẽ không có cách nào bán rẻ hơn cho những người không nhận được nhiều lợi ích từ nó vì họ chạy nó trên CPU yếu hơn. Trừ khi có thể hệ sinh thái phần mềm / phần cứng đã phát triển các điều khiển trên "kênh SMT" cho phép bạn định cấu hình độ rộng thực thi tối đa cho mã chạy trên lõi logic đó. (Một lần nữa tưởng tượng một thế giới nơi CPU có quy mô theo chiều rộng đường ống thay vì nhiều lõi riêng biệt.)


2
"Khởi động luồng là tốn kém" - đó không phải là một thực tế khó khăn; đó là một tạo tác của các hệ điều hành hiện đại phổ biến.
MSalters

1
@MSalters Và thực sự, một số dự án nghiên cứu đã khám phá mức độ tuyệt vời của việc bỏ phương pháp này. Điều tương tự với "sự thông minh của con người đối với việc làm lại mã" - có những cách viết mã dễ dàng song song hóa hơn, chúng chỉ trở nên rất phổ biến trong vài thập kỷ qua. Khi chúng được sử dụng, bạn thường có thể thấy tỷ lệ ngang lớn với chi phí rất thấp; trong thực tế, đến mức quy mô ngang đang bắt đầu trở nên rẻ hơn nhiều so với chiều dọc trong nhiều ứng dụng. Điều đó chỉ có nghĩa là bạn không được cung cấp cho nhà phát triển sự lựa chọn - nếu hoàn cảnh bắt buộc, nó hoạt động tốt: D
Luaan

11

Hãy để tôi rút ra một tương tự:

Nếu bạn có một con khỉ gõ máy đánh chữ, và bạn muốn gõ nhiều hơn để hoàn thành, bạn có thể cho cà phê khỉ, học bài, và có thể tạo ra các mối đe dọa để làm cho nó hoạt động nhanh hơn, nhưng sẽ đến lúc khỉ sẽ được gõ ở công suất tối đa.

Vì vậy, nếu bạn muốn gõ nhiều hơn, bạn phải lấy thêm khỉ.


Để mở rộng sự tương tự hơn nữa, bạn cần một máy đánh chữ riêng cho mỗi con khỉ (đại diện cho bus dữ liệu mà mỗi lõi sẽ cần), bạn cần một cách để đưa chuối đến từng con khỉ và một cái gì đó để nhặt phân của chúng (tương tự như phân phối điện và nhiệt tiêu tan) và bạn cần một cách để đảm bảo rằng những con khỉ không cố gắng gõ cùng một đoạn trong Đêm thứ mười hai (tương tự như phân chia đúng khối lượng công việc giữa các bộ xử lý). Nhưng tất cả điều này là công việc ít hơn để đạt được nhiều hơn là cố gắng để có được nhiều gõ từ một con khỉ.


7

Bạn chỉ ra rằng rất nhiều phần mềm không sử dụng nhiều hơn (x) lõi. Nhưng đây hoàn toàn là một hạn chế được đặt ra bởi các nhà thiết kế phần mềm đó. Máy tính gia đình có nhiều lõi vẫn còn mới (ish) và việc thiết kế phần mềm đa luồng cũng khó khăn hơn với các API và ngôn ngữ truyền thống.

PC của bạn cũng không chỉ chạy 1 chương trình đó. Nó đang thực hiện một loạt các thứ khác có thể được đưa vào các lõi ít ​​hoạt động hơn để phần mềm chính của bạn không bị gián đoạn bởi chúng nhiều như vậy.

Hiện tại không thể chỉ tăng tốc độ của một lõi đơn để phù hợp với thông lượng của 8 lõi. Nhiều tốc độ hơn có thể sẽ phải đến từ kiến ​​trúc mới.

Vì nhiều lõi thường có sẵn và API được thiết kế với giả định đó, các lập trình viên sẽ bắt đầu sử dụng nhiều lõi hơn. Những nỗ lực để làm cho các thiết kế đa luồng dễ dàng thực hiện đang diễn ra. Nếu bạn hỏi câu hỏi này trong một vài năm, có lẽ bạn sẽ nói "Trò chơi của tôi chỉ thường sử dụng 32 lõi, vậy tại sao CPU của tôi có 256?".


3
Sự khác biệt giữa 1 so với nhiều lõi là rất lớn về việc tận dụng phần mềm. Hầu hết các thuật toán và chương trình là nối tiếp. ví dụ Donald Knuth đã nói rằng các CPU đa lõi trông giống như các nhà thiết kế CTNH đang " cố gắng đổ lỗi cho sự sụp đổ trong tương lai của Định luật Moore cho các nhà văn phần mềm bằng cách cho chúng tôi các máy hoạt động nhanh hơn trên một vài điểm chuẩn chính! "
Peter Cordes

Thật không may, chưa có ai nghĩ ra cách tạo một lõi rộng / nhanh chạy một chương trình đơn luồng ở bất cứ đâu gần nhanh như chúng ta có thể nhận được mã song song hiệu quả để chạy trên nhiều lõi. Nhưng may mắn thay, các nhà thiết kế CPU nhận ra rằng hiệu năng đơn luồng vẫn rất quan trọng và làm cho mỗi lõi riêng lẻ lớn hơn và mạnh hơn nhiều so với nếu họ định thông qua các vấn đề song song. (So ​​sánh Skylake (4 chiều) hoặc Ryzen (5 rộng) so với lõi của Xeon Phi (Hiệp sĩ hạ cánh / Hiệp sĩ dựa trên Silvermont + AVX512) (điều hành OoO rộng 2 và giới hạn)
Peter Cordes

2
Dù sao, có ít nhất 2 lõi thường hữu ích cho hệ điều hành đa nhiệm, nhưng đa tác vụ ưu tiên trên một lõi đơn có tốc độ gấp 4 hoặc 8 lần so với CPU hiện tại sẽ khá tốt. Đối với nhiều trường hợp sử dụng tương tác sẽ tốt hơn nhiều, nếu có thể xây dựng tất cả / với cùng một ngân sách năng lượng. (Tuy nhiên, lõi kép giúp giảm chi phí chuyển đổi ngữ cảnh khi nhiều tác vụ muốn có thời gian của CPU.)
Peter Cordes

1
Tất cả đều đúng, nhưng trong lịch sử đa lõi thì đắt hơn. Không có nhiều lý do để thiết kế các thuật toán song song bên ngoài các ứng dụng khoa học. Có rất nhiều chỗ để song song hóa, ngay cả trong các thuật toán đòi hỏi phải thực hiện nối tiếp. Nhưng IPC thế hệ hiện tại không tuyệt vời và dễ gây rối. Mà nói chung dẫn đến các lỗi thực sự khó tìm và sửa. Tất nhiên, CPU nhanh hơn gấp 4 lần sẽ rất tuyệt vời (nhưng bạn vẫn muốn có nhiều lõi).
hekete

2
@PeterCordes Vâng, hầu hết các thuật toán và chương trình không nối tiếp vì chúng phải như vậy, nhưng chủ yếu là vì đó là cách nó luôn được thực hiện (với một dòng chữ "đó là một sự đánh đổi tốt"). Các trường hợp nghiêm trọng nhất là bạn có thể chạy cùng một chương trình bốn lần trên bốn khối lượng công việc riêng biệt và để chúng chạy song song mà không gặp vấn đề gì. Nhưng điều đó đánh vào một vấn đề khác - CPU không phải là một nút cổ chai thường xuyên, và thông thường cách thức sử dụng các thuật toán tốt hơn, không phải nhiều CPU hơn. Đôi khi, những trợ giúp với các nút cổ chai khác cũng vậy (bộ nhớ, đĩa, mạng ...).
Luaan

3

Lý do thuyết phục nhất từ ​​quan điểm lịch sử, là sự phân tán quyền lực .

Sau Pentium IV, Intel đã cố gắng theo đuổi bộ xử lý thế hệ tiếp theo có tên mã Tejas, được cho là chạy trong phạm vi 4 GHz đến 12 GHz. Vấn đề là chạy ở tốc độ đó đã tạo ra quá nhiều nhiệt để có thể tồn tại.

Sau khi Tejas bị hủy, Intel phải mất thêm 10 đến 15 năm nữa trước khi cuối cùng họ có lõi chạy ở tốc độ 4 GHz với mức nhiệt chấp nhận được.

Xem Tejas và Jayhawk .

Intel đã có một dự án khác song song với Tejas liên quan đến việc sử dụng nhiều lõi. Dự án đó có mức nhiệt chấp nhận được, vì vậy đó là cách họ đã đi. Nó cho phép họ tăng hiệu suất ngay bây giờ thay vì chờ thêm 10 năm cho các quy trình chế tạo 10nm.

Giả sử các lõi không bị thiếu tài nguyên, thì để có cùng số lượng lệnh mỗi giây từ một lõi thay vì N lõi, bạn sẽ cần tốc độ lệnh của lõi đơn đó nhanh hơn N lần. Công suất tiêu tán động của lõi CPU tỷ lệ tuyến tính với tần số hoạt động. Nó cũng tỷ lệ với bình phương của điện áp hoạt động. Chạy ở tần số thấp hơn cho phép sử dụng điện áp hoạt động thấp hơn. Sử dụng điện áp thấp hơn ở tần số thấp hơn có nghĩa là nhiệt thực tế được tạo ra đi xuống với khối của tần số hoạt động.

Một ví dụ cực đoan về điều này là bộ não con người, có thể thực hiện tương đương 2 ^ 18 thao tác mỗi giây chỉ với 20 W năng lượng. Nó đạt được điều này bằng cách sử dụng hàng tỷ tế bào thần kinh chạy song song với tốc độ chỉ vài trăm Hz.

Ngoài ra, hãy nhớ rằng thường có hàng trăm hoặc hàng ngàn luồng chạy cùng một lúc trên PC. Hệ điều hành xử lý phân bổ thời gian trên lõi cho mỗi luồng. Vì vậy, ngay cả khi một chương trình riêng lẻ không tận dụng được tất cả các lõi, nó vẫn có lợi vì các chương trình khác sẽ mất ít thời gian CPU hơn nếu chúng chạy trên lõi khác.

Nếu bất cứ điều gì, thị trường hiệu suất cao đang chuyển sang xử lý song song hơn dưới dạng các GPU. Intel gần đây đã mua Altera (nhà sản xuất đồ họa lớn thứ hai) và hiện đang bán các bo mạch với bộ tăng tốc phần cứng trên đó. Phần mềm có thể tải FPGA với một hình ảnh trong thời gian chạy bằng cách sử dụng lệnh gọi API. CPU sau đó cung cấp dữ liệu vào FPGA và cho phép nó thực hiện hầu hết công việc. Các loại ứng dụng thường là mã hóa video, AI, kết xuất, tìm kiếm cơ sở dữ liệu, v.v.


Ngoài ra, hãy nhớ rằng thường có hàng trăm hoặc hàng ngàn luồng chạy cùng một lúc trên PC. Không, không chạy . Có nhiều luồng tồn tại trên các máy tính để bàn hiện đại, nhưng hầu hết tất cả chúng đều đang ngủ chờ I / O hoặc đồng hồ bấm giờ tại bất kỳ thời điểm nào. ví dụ: mức trung bình tải (trong phút cuối) trên máy tính để bàn Linux của tôi hiện là 0,19 nhiệm vụ sẵn sàng tích cực để sử dụng thời gian CPU tại bất kỳ thời điểm nào. Nếu tôi đang chạy mã hóa video, x264 sẽ bắt đầu nhiều luồng để HĐH lên lịch trên nhiều lõi, nhưng chỉ có nhiều như tôi có lõi hợp lý.
Peter Cordes

Và BTW, OP (vì một số lý do) đã bỏ qua tần số hoàn toàn và hỏi về việc mở rộng IPC (hướng dẫn trên mỗi chu kỳ đồng hồ), không phải mỗi giây. Những gì bạn nói là đúng, nhưng họ đã đề xuất làm cho CPU rộng hơn , không bị xung nhịp cao hơn. Tôi đã giải quyết rằng trong câu trả lời của tôi, vì vậy câu trả lời của bạn giải thích việc tăng sức mạnh theo tần số là một bổ sung hay, +1.
Peter Cordes

@PeterCordes Điều đó là chính xác, tôi không có ý ám chỉ rằng tất cả các luồng thực thi cùng một lúc, tất nhiên là thay phiên nhau. Cảm ơn đã làm rõ.
dùng4574

Cũng không quá nhiều "thay phiên nhau" vì hầu như họ không sẵn sàng để chạy mọi lúc. Hầu hết tất cả đều ngủ, thường chỉ thức dậy trong một đợt tính toán ngắn, ví dụ sau khi HĐH cung cấp một phím nhấn hoặc đọc mạng hoặc đánh thức chúng vì hết giờ. Thật hiếm khi có hơn 2 người thức dậy cùng một lúc, trừ khi bạn thực sự đang làm một việc gì đó chuyên sâu về mặt tính toán. Và nếu là bạn, bạn không bắt đầu hàng trăm luồng, bạn bắt đầu một số luồng ~ = số lõi có sẵn.
Peter Cordes

2

Chỉ cần làm tròn bức tranh về nơi tất cả những điều này sẽ diễn ra ...

Mạng lưới thần kinh và AI là những chủ đề siêu hot của thời điểm này. Một lý do là người ta có thể sử dụng hiệu quả số lượng lớn các lõi đơn giản song song và do đó trích xuất gần với hiệu suất tính toán tối đa. Yêu cầu vốn dĩ là song song ồ ạt và ánh xạ khá dễ dàng vào mảng bộ xử lý mà không cần nhiều giao tiếp giữa các lõi. Đây là lý do tại sao GPU là công nghệ goto đầu tiên để tăng tốc AI. Ngay bây giờ chúng ta đang thấy các chip được tối ưu hóa thậm chí còn tốt hơn GPU video cho các NN sắp ra mắt. Bước tiếp theo, hoặc có thể là cuối cùng, là tạo ra các NN sử dụng các công nghệ tương tự như memristor.

Và như một bên, trong một cái gì đó giống như một PC chơi game có hiệu năng cao hơn nhiều so với card đồ họa so với CPU Intel hoặc AMD đa lõi


2
Re "... vốn dĩ ồ ạt song song" : Thậm chí xấu hổ song song ?
Peter Mortensen

1

Về cơ bản, tổn thất CMOS là theo cấp số nhân (^ 1,5) theo tần số và hiệu suất CPU song song có phần nhỏ hơn tỷ lệ tuyến tính với số lượng CPU.

Vì vậy, tỷ lệ cho khả năng tính toán với công suất tiêu tán được cải thiện cho các ứng dụng đa CPU ở các tốc độ xung nhịp khác nhau khi so sánh tốc độ với qty của CPU cho mức tiêu thụ năng lượng cố định.

Nó phức tạp hơn thế này, nhưng đây là những nguyên tắc cơ bản tại sao CPU song song hoạt động tốt hơn trên mỗi watt trong các ứng dụng động. Sẽ luôn có ngoại lệ khi được tối ưu hóa cho một kịch bản.

Nó không phải là kích thước của CPU lớn hơn giúp cho các ứng dụng PC điển hình của Intel / AMD nhanh hơn, thay vào đó là kích thước giảm từ độ phân giải in thạch bản và điện dung cổng thấp hơn làm giảm năng lượng cùng với giảm mức ngưỡng phụ và điện áp Core.

Sự cải tiến không phải là tuyến tính và không có nghĩa là 8 lõi tốt hơn gấp 4 lần nhưng mục tiêu nếu được đáp ứng là có nhiều dải động xử lý hơn với sự điều tiết của công suất tiêu tán, tốc độ và điện áp để cải thiện cả hiệu suất và hiệu suất và công suất cao nhất theo yêu cầu mà không cần nhiệt độ tăng quá mức.

Để có câu trả lời khoa học hơn, hãy đọc https://www.scTHERirect.com/topics/computer-science/dynamic-power-conscharge


-2

Multicores thường không đa tài. Và lõi đa tài chính không phải là đa lõi.

Sẽ là hoàn hảo khi tìm thấy một kiến ​​trúc đa tài chính chạy ở tốc độ vài megahertz, nhưng nói chung, các cầu của nó sẽ không được người tiêu dùng kích hoạt, nhưng tốn kém vì vậy xu hướng là lập trình đa lõi ở tần số thấp hơn là các hướng dẫn ngắn ở tốc độ xung nhịp cao.

Nhiều lõi lệnh rẻ hơn và dễ chỉ huy hơn, và đó là lý do tại sao đó là một ý tưởng tồi có kiến ​​trúc đa tài chính ở một số gigahertz.


1
Bạn có nghĩa là "siêu âm", nhiều hướng dẫn trên mỗi đồng hồ? Hầu hết các CPU đa lõi siêu khối. ví dụ Ryzen rộng 5 tầng. Các chip AArch64 cao cấp của Apple có kích thước 6 hoặc 8. Có rất nhiều trái cây treo thấp cho CPU 2 chiều để khai thác trong hầu hết các mã, do đó, đáng để tạo mỗi lõi ít ​​nhất là 2 chiều trước khi nhân rộng ra nhiều lõi mà mỗi lõi cần bộ đệm riêng và kết nối giữa các lõi ( ví dụ: thẻ tính toán nhiều lõi Xeon Phi của Intel có nhiều lõi có vấn đề kép). Tương tự đối với lõi điện thoại thông minh: lõi nhỏ tối thiểu 2 chiều. Vấn đề hiệu suất đơn luồng!
Peter Cordes

1
Hoặc bạn có nghĩa là dl.acm.org/citation.cfm?id=224451 - một bài viết nghiên cứu về cái mà họ gọi là lõi "Đa tài chính" tìm ILP trên phạm vi lớn hơn trong biểu đồ luồng điều khiển của chương trình cấp cao, sử dụng một sự kết hợp của CTNH và SW. Các CPU chính mà chúng ta sử dụng trong máy tính để bàn và điện thoại thông minh không giống như thế này, chúng chỉ là siêu khối thông thường với việc thực hiện không theo thứ tự, thực hiện một chuỗi nối tiếp giả vờ chạy từng lệnh một.
Peter Cordes

Cảm ơn. afaik, ý tưởng đằng sau vòm vô hướng là khả năng đo nhiệt đằng sau các bộ hướng dẫn đã biết hoặc được xác định trước (trường hợp AVX). <br/> Kiến trúc hiện tại tính toán so với nhiệt được suy ngẫm không thể dự đoán được. điều này giúp tăng cường khả năng đa lõi có thể chạy ở tần số lớn do khả năng thực hiện trong lý tưởng thời gian / nhiệt của chúng là không thể tính toán được. đó là tất cả những gì tôi biết cho đến nay. Tôi đang đào các máy vectơ cho mục đích này để hiểu vật lý của "đa tài". trường hợp là xeon / phy đi theo một đường cong nhiệt lý tưởng như cpus cổ đại đã làm. nâng cao trải nghiệm của khách hàng
machtur

Các tập lệnh SIMD như AVX là một cách để có được nhiều công việc hơn thông qua đường ống mà không phải làm cho toàn bộ đường ống rộng hơn, chỉ là các đơn vị thực thi. Ví dụ, Skylake có thể chạy 3 vpaddd ymm0, ymm1, ymm2lệnh trên mỗi đồng hồ, mỗi lệnh thực hiện 8 phép cộng số nguyên 32 bit được đóng gói. Vì vậy, 24 số nguyên thêm vào mỗi đồng hồ, nhưng máy móc thực hiện không theo thứ tự "chỉ" phải theo dõi 3 hướng dẫn trong chuyến bay. Nó rẻ hơn nhiều để xây dựng so với CPU có thể chạy 24 add eax, edxlệnh trên mỗi đồng hồ. SIMD về cơ bản là trực giao với chiều rộng đường ống.
Peter Cordes

Skylake là một trường hợp tối ưu hóa tốt cho mỗi chu kỳ đồng hồ. các biến thể không phải là một trong những trường hợp thú vị về tối ưu hóa xe buýt nội bộ kể từ khi các bộ xương tích hợp giảm tải ban đầu Xeon vào đường ống SIMD theo cách đó. Tôi giả sử một lõi lớn sẽ tích hợp giảm tải và tính toán trong vài chu kỳ theo cách (ví dụ) phenom làm cho AVX. đó là cách tính toán đã tích hợp về phía trước so với sức mạnh cần thiết cho các hoạt động của khối bên trong. trái ngược với nhiều hướng dẫn ngắn như trong Gpu giống như có nhiều lõi "ảo" tương tự như bổ sung cho Nehalem
machtur
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.