Cấu trúc cơ bản của hiệu suất mã khoa học là gì?


11

Hãy xem xét hai máy tính có cấu hình phần cứng và phần mềm khác nhau. Khi chạy mã Navier-Stokes nối tiếp chính xác trên mỗi nền tảng, phải mất x và y thời gian để thực hiện một lần lặp cho máy tính 1 và 2, tương ứng. Trong trường hợp này, , là chênh lệch thời gian lặp giữa máy tính 1 và máy tính 2.Δ=xy

Điều gì có thể tác động đến cường độ của ? Một ứng cử viên rõ ràng là CPU, câu hỏi chính của tôi là liệu có các yếu tố khác có thể ảnh hưởng đến theo cùng thứ tự với sự khác biệt về phần cứng giữa các CPU không?ΔΔΔ


4
Tất nhiên của bạn chỉ là một mẫu duy nhất. Bạn cũng nên điều tra về cách phụ thuộc vào kích thước và cấu trúc vấn đề. Thứ hai tôi sẽ đề nghị lập hồ sơ mã, cố gắng phân chia và theo tổng các đóng góp khác nhau và phân tích hiệu suất của các phần khác nhau của mã liên quan đến cấu hình hw và sw. delta x yΔΔxy
Stefano M

4
NHIỆM VỤ LINE CACHE . Đó là điều đầu tiên cần xem xét. Bộ nhớ là yếu tố thắt cổ chai cho rất nhiều thuật toán.
Deer Hunter

Câu trả lời:


13

Danh sách này chưa hoàn thành, nhưng hy vọng kích thước của nó sẽ đưa ra gợi ý về quy mô của các yếu tố có thể. Tôi giả sử bạn đang biên dịch mã từ nguồn trên nền tảng bạn chọn.

Phần mềm

  • Hiệu suất thư viện chuẩn
  • Lâm. Alg. Hiệu suất thư viện (nếu phần mềm liên kết với các thư viện bên ngoài)
  • Lựa chọn trình biên dịch
  • Tối ưu hóa trình biên dịch
  • Cờ biên dịch
  • Quá trình nền (Có thể thay đổi đáng kể nếu các hệ điều hành khác nhau)

Phần cứng

CPU

  • Tốc độ đồng hồ
  • Kiến trúc (cùng một hướng dẫn có thể có số chu kỳ khác nhau trên các kiến ​​trúc khác nhau)
  • Kích thước bộ nhớ cache
  • Độ trễ bộ nhớ cache
  • Khả năng SIMD (Hướng dẫn đơn, Nhiều dữ liệu)

Ký ức

  • số kênh
  • Tốc độ

Ổ cứng

  • Tốc độ đọc / ghi (chủ yếu chỉ quan trọng để ghi kết quả, do đó, điều này phụ thuộc vào tần suất bạn viết đầu ra để gửi cho bộ giải NS, nhưng có thể quan trọng đối với các chương trình khác thực hiện những việc như xử lý ảnh)

Đây là tất cả bỏ qua các thủ thuật nhỏ và các tính năng khác nhau của các nhà sản xuất bao gồm để cung cấp cho chip của họ một lợi thế trên thị trường. Mặc dù vậy, cái lớn là nhiều thư viện đại số tuyến tính thưa thớt bị ràng buộc bộ nhớ. Thực hiện một ma trận thưa thớt nhân lên bao gồm rất nhiều dữ liệu di chuyển xung quanh mà không có nhiều thất bại thực tế.


Tôi sẽ thêm vào CPU, cả số lượng lõi và khả năng SIMD của nó.
Pedro

@Pedro Tôi đã bỏ lõi vì câu hỏi cho biết người giải quyết nối tiếp, nhưng tôi sẽ thêm SIMD. Cảm ơn.
Godric Seer

1
@GodricSeer Tôi đã biên dịch trên một máy và sau đó chạy nó. Sau đó, bằng cách sử dụng cùng thực thi được biên dịch, tôi chạy nó trên máy thứ hai. Từ lời giải thích của bạn, có vẻ tốt hơn là biên dịch lại từ nguồn trên máy tính thứ hai. Có phải vậy không?
Dao động Isopycnal

1
@IsopycnalOscillation Khi biên dịch trên / cho một máy cụ thể, bạn có thể sử dụng tùy chọn gcc / gfortran -march=nativehoặc tùy chọn icc / ifort -xHOSTsẽ áp dụng tối ưu hóa cụ thể cho kiến ​​trúc cơ bản.
Pedro

1
Một điểm quan trọng ở đây là hiệu suất máy tính không phải là số lượng một chiều. Sự cân bằng tương đối của tất cả các yếu tố mà Godric đã liệt kê ở trên có thể rất khác nhau, ngay cả đối với các máy tính có chip xử lý từ cùng một nhà sản xuất (ví dụ Intel.) Do đó, các điểm chuẩn khác nhau có thể hiển thị các tỷ lệ hiệu suất rất khác nhau cho hai bộ xử lý. Là một vấn đề thực tế, hầu hết các máy móc hiện đại đang thiếu nghiêm trọng băng thông bộ nhớ để hỗ trợ khối lượng công việc tính toán khoa học và đây thường là nút cổ chai.
Brian Borchers

2

x/yxy

Thứ hai, câu hỏi của bạn đặc biệt loại trừ sự khác biệt trong phần mềm. Theo kinh nghiệm của tôi, phần thưởng hiệu suất cho việc điều chỉnh cẩn thận có thể là yếu tố lớn, vì vậy trong khi bạn đang xem xét các sự cố phần cứng, đừng quên các sự cố phần mềm. Rốt cuộc, phần cứng chỉ có thể thực hiện các hướng dẫn bạn đưa ra và nếu bạn cung cấp ít hơn, nó sẽ hoàn thành sớm hơn.

Không mở rộng về điều này quá nhiều, nhưng đối với bất kỳ vấn đề nào, có vô số chương trình sẽ giải quyết nó. Trong số này, một số mất ít thời gian hơn tất cả những cái khác, và đó là giới hạn thấp hơn. Đừng cho rằng bất kỳ chương trình nào ở hoặc thậm chí gần giới hạn dưới này nếu nó không được điều chỉnh cẩn thận.

Liên kết này giải thích chi tiết phương pháp không chính thống mà tôi sử dụng.

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.