Một chủ đề siêu tốc cung cấp bao nhiêu speedup? (về lý thuyết)


38

Tôi đang tự hỏi tốc độ lý thuyết là gì từ các CPU siêu luồng. Giả sử 100% song song hóa và 0 giao tiếp - hai CPU sẽ tăng tốc độ 2. Còn CPU siêu luồng thì sao?

Câu trả lời:


59

Như những người khác đã nói, điều này phụ thuộc hoàn toàn vào nhiệm vụ.

Để minh họa điều này, chúng ta hãy nhìn vào một điểm chuẩn thực tế:

nhập mô tả hình ảnh ở đây

Điều này được lấy từ luận văn thạc sĩ của tôi (hiện không có sẵn trực tuyến).

Điều này cho thấy tốc độ tăng tương đối 1 của các thuật toán khớp chuỗi (mỗi màu là một thuật toán khác nhau). Các thuật toán được thực hiện trên hai bộ xử lý lõi tứ Intel Xeon X5550 với siêu phân luồng. Nói cách khác: có tổng cộng 8 lõi, mỗi lõi có thể thực thi hai luồng phần cứng (= siêu tốc độ siêu tốc). Do đó, điểm chuẩn kiểm tra việc tăng tốc với tối đa 16 luồng (là số lượng luồng đồng thời tối đa mà cấu hình này có thể thực hiện).

Hai trong số bốn thuật toán (màu xanh và màu xám) tỷ lệ tuyến tính nhiều hay ít trên toàn bộ phạm vi. Đó là, nó được hưởng lợi từ siêu phân luồng.

Hai thuật toán khác (màu đỏ và màu xanh lá cây; sự lựa chọn không may cho người mù màu) quy mô tuyến tính cho tối đa 8 luồng. Sau đó, họ trì trệ. Điều này chỉ ra rõ ràng rằng các thuật toán này không được hưởng lợi từ siêu phân luồng.

Nguyên nhân? Trong trường hợp cụ thể này, nó tải bộ nhớ; hai thuật toán đầu tiên cần nhiều bộ nhớ hơn để tính toán và bị hạn chế bởi hiệu suất của bus bộ nhớ chính. Điều này có nghĩa là trong khi một luồng phần cứng đang chờ bộ nhớ, thì luồng kia có thể tiếp tục thực thi; một trường hợp sử dụng chính cho chủ đề phần cứng.

Các thuật toán khác đòi hỏi ít bộ nhớ hơn và không cần phải đợi xe buýt. Chúng gần như hoàn toàn tính toán ràng buộc và chỉ sử dụng số học số nguyên (hoạt động bit, trên thực tế). Do đó, không có tiềm năng để thực hiện song song và không có lợi ích từ các đường ống chỉ dẫn song song.


1 Tức là hệ số tăng tốc là 4 có nghĩa là thuật toán chạy nhanh gấp bốn lần như thể nó được thực thi chỉ với một luồng. Theo định nghĩa, sau đó, mọi thuật toán được thực hiện trên một luồng có hệ số tăng tốc tương đối là 1.


Câu trả lời hay nhất :-)
Sklivvz

1
Tốc độ thực tế của các thuật toán, âm mưu so với số lượng lõi là gì? Tức là tốc độ đạt được cho thuật toán nhanh nhất trong các thử nghiệm này là gì? Chỉ cần tự hỏi :).
crazy2be

@ crazy2be Đối với dòng màu xanh ( thuật toán của Horspool ), thời gian chạy từ 4,16 giây xuống 0,35 giây với 16 luồng. Vì vậy, tốc độ tăng là 11,74. Tuy nhiên, đó là với siêu phân luồng. Khi âm mưu so với số lượng lõi, tốc độ tăng tốc của thuật toán này là 7,17 trên 8 lõi.
Konrad Rudolph

5
Vấn đề duy nhất với câu trả lời này là tôi chỉ có thể nâng cấp nó một lần. Đó là một câu trả lời khách quan đáng kinh ngạc cho một câu hỏi chủ quan;)
Journeyman Geek


20

Vấn đề là, nó phụ thuộc vào nhiệm vụ.

Khái niệm đằng sau siêu phân luồng về cơ bản là tất cả các CPU hiện đại đều có nhiều hơn một vấn đề thực thi. Thường gần hơn một chục hoặc bây giờ. Được phân chia giữa Integer, dấu phẩy động, SSE / MMX / Streaming (bất cứ thứ gì nó được gọi là ngày nay).

Ngoài ra, mỗi đơn vị có tốc độ khác nhau. Tức là có thể mất một chu kỳ đơn vị toán học số nguyên 3 để xử lý một cái gì đó, nhưng phép chia dấu phẩy động 64 bit có thể mất 7 chu kỳ. (Đây là những con số thần thoại không dựa trên bất cứ điều gì).

Thực hiện ngoài trật tự giúp rất nhiều trong việc giữ cho các đơn vị khác nhau đầy đủ nhất có thể.

Tuy nhiên, bất kỳ tác vụ đơn lẻ nào sẽ không sử dụng mọi đơn vị thực thi mỗi giây. Thậm chí không chia tách chủ đề có thể giúp hoàn toàn.

Do đó, lý thuyết trở thành bằng cách giả vờ có CPU thứ hai, một luồng khác có thể chạy trên nó, sử dụng các đơn vị thực thi có sẵn không được sử dụng bằng cách chuyển mã Âm thanh của bạn, là công cụ SSE / MMX 98% và các đơn vị int và float hoàn toàn nhàn rỗi trừ một số thứ.

Đối với tôi, điều này có ý nghĩa hơn trong một thế giới CPU duy nhất, việc tạo ra CPU thứ hai cho phép các luồng dễ dàng vượt qua ngưỡng đó với ít mã hóa (nếu có) để xử lý CPU thứ hai giả mạo này.

Trong thế giới lõi 3/4/6/8, có CPU 6/8/12/16, điều đó có giúp ích gì không? Dunno. Càng nhiều? Phụ thuộc vào các nhiệm vụ trong tầm tay.

Vì vậy, để thực sự trả lời câu hỏi của bạn, nó sẽ phụ thuộc vào các tác vụ trong quy trình của bạn, đơn vị thực thi nào đang sử dụng và trong CPU của bạn, đơn vị thực thi nào không hoạt động / không được sử dụng và có sẵn cho CPU giả thứ hai đó.

Một số 'lớp' của các công cụ tính toán được cho là có lợi (nói chung là mơ hồ). Nhưng không có quy tắc cứng và nhanh, và đối với một số lớp, nó làm mọi thứ chậm lại.


2
Mặc dù tôi đang tìm kiếm một cái gì đó như "tăng tốc 1,7 thời gian" nhưng câu trả lời này rất hay vì nó không tạo ra cái nhìn trắng đen về vấn đề này.
Mikhail

@Mikhail: Vấn đề là không có yếu tố đơn giản - nó phụ thuộc, như thường thấy trong cuộc sống :-).
sleske

4
Ý chính là đúng Mặc dù vậy, có một ngụy biện: không có lý do tiên nghiệm tại sao một lõi đơn lại được hưởng lợi nhiều hơn từ siêu phân luồng hơn nhiều lõi. Đối với nhiệm vụ sai, không có lợi nhuận. Đối với nhiệm vụ đúng, cả hai lợi nhuận theo cùng một yếu tố.
Konrad Rudolph

@Konrad: Tôi nghĩ rằng điểm tôi đang nhận được, là sự khác biệt giữa một lõi và hai lõi có thể có giá trị hơn so với sự khác biệt giữa 4 và 8 hoặc 2 và 4. Tức là có lõi thứ hai, cho một ứng dụng có luồng kém có thể giúp ích thêm chút nữa.
geoffc

Đây là một ứng dụng có chủ đề kém, đó là một phần quan trọng. Nhưng thực tế, hầu hết các hỗ trợ luồng của ứng dụng đều kém nên bạn có một điểm.
Konrad Rudolph

5

Tôi có một số bằng chứng giai thoại để thêm vào câu trả lời của geoffc rằng tôi thực sự có CPU Core i7 (4 lõi) với siêu phân luồng và đã chơi một chút với chuyển mã video, đây là một nhiệm vụ đòi hỏi một lượng giao tiếp và đồng bộ hóa nhưng đủ song song rằng bạn có thể tải lên một hệ thống một cách hiệu quả.

Kinh nghiệm của tôi khi chơi với số lượng CPU được gán cho nhiệm vụ thường sử dụng 4 lõi "phụ" siêu phân cấp tương đương với công suất xử lý tương đương khoảng 1 CPU. Thêm 4 lõi "siêu phân luồng" được thêm vào cùng một lượng công suất xử lý có thể sử dụng được như từ 3 đến 4 lõi "thực".

Được cho rằng đây không hoàn toàn là một thử nghiệm công bằng vì tất cả các luồng mã hóa có thể sẽ cạnh tranh cho cùng một tài nguyên trong CPU nhưng với tôi nó đã cho thấy ít nhất là một sự gia tăng nhỏ trong sức mạnh xử lý chung.

Cách thực sự duy nhất để chỉ ra liệu nó có thực sự giúp ích hay không là chạy một vài thử nghiệm loại Integer / Floating Point / SSE khác nhau cùng một lúc trên một hệ thống có chức năng siêu phân luồng được kích hoạt và vô hiệu hóa và xem khả năng xử lý có sẵn trong một điều khiển môi trường.


1
Một điểm rõ ràng - đó là phụ thuộc vào ứng dụng. Tôi chắc chắn rằng tính toán giao tiếp cao có thể được tăng tốc vì lõi 0 và lõi 0-h sẽ giao tiếp qua cùng một bộ đệm, mà không cần sử dụng RAM chậm.
Mikhail

1
@Mikhail, vấn đề là nếu cả hai luồng đòi hỏi một sức mạnh xử lý lớn thì cả hai sẽ cạnh tranh cho cùng một tài nguyên và sẽ tốt hơn nhiều khi giao tiếp thông qua bộ đệm L3 CPU được chia sẻ (i7 có bộ đệm L1 & L2 mỗi lõi và bộ đệm L3 được chia sẻ) hoặc thậm chí bộ nhớ hệ thống và thực hiện các tác vụ riêng biệt. Đó là tất cả một bài tập lắc lư khổng lồ ...
Mokubai

3

Nó phụ thuộc rất nhiều vào CPU và khối lượng công việc như những người khác đã nói.

Intel nói :

Hiệu suất được đo trên bộ xử lý Intel® Xeon® MP với Công nghệ siêu phân luồng cho thấy mức tăng hiệu suất lên tới 30% trên các điểm chuẩn ứng dụng máy chủ phổ biến cho công nghệ này

(Điều này có vẻ hơi bảo thủ đối với tôi.)

Và còn một bài báo dài nữa (mà tôi chưa đọc hết) với nhiều số hơn ở đây . Một điều thú vị khác từ bài báo đó là siêu phân luồng có thể làm cho tốc độ chậm hơn đối với một số nhiệm vụ.

Kiến trúc Bulldozer của AMD có thể thú vị . Họ mô tả mỗi lõi có hiệu quả 1,5 lõi. Đó là loại siêu đa cực hoặc đa lõi tiêu chuẩn phụ thuộc vào mức độ tự tin của bạn về hiệu suất của nó. Các số trong phần đó cho thấy tốc độ nhận xét tăng từ 0,5 lần đến 1,5 lần.

Cuối cùng, hiệu suất cũng phụ thuộc vào hệ điều hành. Hy vọng, HĐH sẽ gửi các quy trình tới các CPU thực sự theo sở thích đối với các siêu phân luồng chỉ đơn thuần là giả mạo như các CPU. Mặt khác, trong một hệ thống lõi kép, bạn có thể có một CPU nhàn rỗi và một lõi rất bận rộn với hai luồng. Tôi dường như nhớ lại rằng điều này đã xảy ra với Windows 2000, tất nhiên, tất cả các hệ điều hành hiện đại đều có khả năng phù hợp.


1
HĐH phải đảm bảo rằng các luồng không chặn đồng hồ với nhau :)
Mikhail
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.