2010-10-04 30 views
5

Chúng tôi có một MacPro 12 lõi để thực hiện một số tính toán của Monte Carlo. Bộ vi xử lý Intel Xeon của nó có Hyper-Threading (HT) được kích hoạt, vì vậy trên thực tế, có 24 quy trình chạy song song để làm cho chúng được sử dụng đầy đủ. Tuy nhiên, calcs của chúng tôi hiệu quả hơn để chạy trên 12x100% so với 24x50%, vì vậy chúng tôi đã cố gắng tắt Siêu phân luồng qua ngăn Processor trong tùy chọn hệ thống để có hiệu suất cao hơn. Người ta cũng có thể biến HT tắt bởiTắt Siêu phân luồng trong Intel Xeon

hwprefs -v cpu_ht=false 

Sau đó chúng tôi chạy một số xét nghiệm và đây là những gì chúng tôi đã nhận:

  1. 12 nhiệm vụ song song chạy đồng thời w/hoặc w/o HT đến sự thất vọng của chúng tôi.
  2. 24 nhiệm vụ song song lỏng 20% ​​nếu HT tắt (không -50% như chúng ta nghĩ)
  3. Khi HT được bật, chuyển đổi 24-12 nhiệm vụ giảm hiệu quả bằng 20% ​​(còn đáng ngạc nhiên)
  4. Khi HT tắt, chuyển đổi từ 24 đến 12 không thay đổi bất cứ điều gì.

Dường như Hyper-Threading chỉ làm giảm hiệu suất cho các phép tính của chúng tôi và không có cách nào để tránh nó. Chương trình chúng tôi sử dụng cho các calcs được viết bằng Fortran và được biên dịch với gfortran. Có cách nào để làm cho nó hiệu quả hơn với phần cứng này?


Cập nhật: tính toán Monte Carlo của chúng tôi (MCC) thường được thực hiện trong bước này để tránh mất dữ liệu và do nguyên nhân khác (không phải lúc nào có thể để tránh các bước như vậy). Trong trường hợp của chúng tôi, mỗi bước bao gồm nhiều mô phỏng với thời lượng biến đổi. Vì mỗi bước được tách ra giữa một số tác vụ song song, chúng cũng có thời lượng biến đổi. Về cơ bản, tất cả các nhiệm vụ nhanh hơn phải đợi cho đến khi thực hiện chậm nhất. Thực tế này buộc chúng ta phải thực hiện các bước lớn hơn, kết thúc với độ lệch ít hơn theo thời gian do tính trung bình, vì vậy các bộ vi xử lý không lãng phí thời gian chờ đợi. Đây là động cơ của chúng tôi để có 12 * 2,66 GHz thay vì 24 * 1,33 GHz. Nếu có thể tắt HT, thì chúng tôi sẽ đạt hiệu suất + 10% bằng cách chuyển từ 24 tác vụ w/HT thành 12 tác vụ w/o HT. Tuy nhiên, các thử nghiệm cho thấy chúng ta mất 20%. Vì vậy, kết luận của tôi là tính toán là 30% là không hiệu quả.

Đối với các thử nghiệm, tôi đã sử dụng các bước khá lớn, tuy nhiên thường là các bước ngắn hơn, vì vậy hiệu quả trở nên cao hơn nữa.

Có một lý do nữa - một số tính toán của chúng tôi yêu cầu 3-5 GB bộ nhớ, vì vậy bạn có thể thấy mức độ kinh tế của chúng tôi để có 12 tác vụ nhanh. Chúng tôi đang làm việc để triển khai bộ nhớ chia sẻ, nhưng nó sẽ là một dự án dài hạn. Do đó, chúng tôi cần tìm hiểu cách làm cho phần cứng/phần mềm hiện có nhanh nhất có thể.

+0

http://forums.macrumors.com/archive/index.php/t-733238.html – rwong

+0

Thông thường, điều này có thể được tắt trong thiết lập BIOS, nhưng tôi không quen với máy Mac nên có thể không áp dụng được. –

+2

Có điều gì đó kỳ lạ trong câu hỏi của bạn ... Bạn dường như * đạt được * từ HyperThreading, nhưng bạn sẽ vô hiệu hóa nó? Bạn nói rằng tính toán của bạn hiệu quả hơn với 12 // 24, nhưng các thử nghiệm của bạn có vẻ nói khác đi. Vậy tại sao bạn muốn tắt HT? – jv42

Trả lời

7

Đây là một nhận xét mở rộng hơn câu trả lời:

Tôi không thấy các quan sát của bạn gây ngạc nhiên đáng kinh ngạc. Siêu phân luồng là cách tiếp cận song song của người nghèo, nó cho phép bạn có 2 đường dẫn hướng dẫn đang chờ xử lý trên một CPU. Nhưng nó không cung cấp thêm đơn vị số học dấu chấm động hoặc số nguyên hoặc nhiều thanh ghi; khi một đường ống không thể cấp nguồn ALU (hoặc bất kỳ thứ gì được gọi là những ngày này) thì đường ống khác được kích hoạt trong một chu kỳ đồng hồ hoặc hai. Điều này trái ngược với tình hình trên một CPU mà không cần siêu phân luồng ở đâu, khi các đường ống dẫn lệnh, nó phải được xả và nạp lại với các lệnh từ một tiến trình khác trước khi CPU được sao lưu tốc độ.

Các Wikipedia article on hyperthreading giải thích tất cả điều này khá tốt.

Nếu bạn đang chạy tải trong đó các đường ống dẫn được đồng bộ hóa hoàn hảo và đại diện cho phần chính trong tổng thời gian thực hiện của chương trình, bạn có thể tăng gấp đôi tốc độ của chương trình bằng cách chuyển từ bộ vi xử lý chưa được xử lý sang bộ xử lý siêu phân luồng .

NẾU (đó là một lớn nếu) bạn có thể viết một chương trình mà không bao giờ bị trì hoãn trong các đường ống hướng dẫn sau đó siêu phân luồng sẽ cung cấp không có lợi ích (về tăng tốc thực thi) nào. Những gì bạn đã đo không phải là một tăng tốc do HT (tốt, nó là một tăng tốc do HT nhưng bạn không thực sự muốn điều đó) nhưng sự thất bại của chủ đề của bạn để giữ cho các đường ống di chuyển.

Những gì bạn phải làm thực sự là giảm tốc độ do HT! Hoặc, thay vào đó, bạn phải tăng tốc độ thực hiện của 12 quy trình (một trên mỗi lõi) bằng cách giữ cho đường ống đầy. Cá nhân, tôi sẽ tắt siêu phân luồng trong khi tôi đã tối ưu hóa việc thực thi chương trình trên 12 lõi.

Vui chơi.

1

Vâng, điều đó có nghĩa là với HT bật, chuyển từ 12 tác vụ sang 24 tác vụ tăng hiệu quả lên 20%! Đánh giá tốt!

Mặt khác, nếu chương trình của bạn được viết sao cho mỗi luồng chỉ có thể hoạt động trên một tác vụ riêng biệt (trái ngược với việc tách một tác vụ thành các phần nhỏ hơn và tiến hành đồng thời), thì với mục đích giảm độ trễ cho mỗi tác vụ (từ đầu đến cuối) bạn chỉ cần giới hạn số lượng chủ đề thành 12 phần mềm. Bộ chuyển mạch HT phần cứng có thể vẫn ở một trong hai vị trí.

2

Tôi gặp một chút khó khăn trong việc hiểu mô tả của bạn về điểm chuẩn.

Cho phép xác định 100% là số lượng công việc bạn quản lý để hoàn thành với 12 tác vụ và tắt ht. Và nếu bạn có thể làm được gấp đôi trong cùng một khoảng thời gian, chúng tôi sẽ gọi nó là 200%. Vì vậy, những con số mà bạn sẽ đặt trong ba hộp khác là gì?

Chỉnh sửa: Được cập nhật với số của bạn.

   without HT  with HT 
12 tasks  100%   100% 
24 tasks  100%   125% 

Vì vậy, hiểu biết của tôi là với HT tàn tật, có những khoảng trống thời gian trong khi chủ đề của bạn về cơ bản tạm dừng (chẳng hạn như khi họ đang chờ đợi dữ liệu từ bộ nhớ hoặc từ đĩa), vì vậy họ không thực sự chạy ở 2,66 GHz, nhưng ít hơn một chút. Với tính năng siêu phân luồng được kích hoạt, CUP chuyển các tác vụ thay vì tạm dừng cho những khoảng trống tạm thời này, do đó tổng lượng điện năng xử lý đang được sử dụng tăng lên.

+0

bảng của bạn là một ý tưởng tuyệt vời. '12 + HT = 100%', '24 + HT = 125%', '24-HT = 100%'. Tôi hy vọng sẽ nhận được '12-HT = 125-140% 'thay vì 100. Nhưng điều này dường như là không thể. –

0

Xem bài đăng này cho một ứng dụng trong công cụ Xcode để bật/tắt siêu phân luồng (và số CPU hoạt động). Cài đặt KHÔNG tồn tại trong chế độ ngủ hoặc khởi động lại: http://www.logicprohelp.com/forum/viewtopic.php?f=5&t=88835

(Bạn chạy ứng dụng Dụng cụ, hủy màn hình ban đầu và sau đó thay đổi Tùy chọn CPU).