Chi phí tra cứu so với tính toán


12

Tôi quan tâm đến việc thiết lập các phép tính để kiểm tra xem một tiêu chí khoảng cách có được thỏa mãn hay không: đó là khoảng cách giữa một vectơ và vectơ bao phấn x j nên nhỏ hơn một số giá trị r m a x . Dữ liệu của tôi được phân vùng theo một lưới tọa độ trực giao. Vì điểm cắt của tôi nhỏ hơn khoảng cách giữa các điểm cuối của tọa độ lân cận gần nhất, tôi muốn thêm biến "octant" để kiểm tra xem mọi thứ có được thiết lập chính xác không:xixjrmax

if octant[j] in allowed_list continue

như một "ngắn mạch" để

if dist(x[i], x[j]) < r_max

Câu hỏi của tôi là: làm thế nào hiệu quả tính toán là tra cứu boolean và so sánh so với các hoạt động dấu phẩy động? Đây có phải là giá trị làm trên kiến ​​trúc hiện đại?


3
Bạn có sẵn sàng phân nhánh mã của mình và kiểm tra nó không? Tôi cảm thấy giống như câu trả lời tiêu chuẩn cho hầu hết những điều này "Tốt hơn là viết mã (theo một cách) hoặc (một số cách khác)?" loại câu hỏi là "Hãy thử và đánh giá nó."
Geoff Oxberry

1
Chỉ 2 xu của tôi. Như Geoff đã viết, loại lời khuyên này là những gì tôi luôn nhận được khi tôi hỏi những câu hỏi tương tự trên stackoverflow, liên quan đến mã C ++: mã hóa mọi thứ trước, tổ chức mã sao cho tôi vẫn mô đun và có thể sử dụng lại, và chỉ sau đó bắt đầu tái cấu trúc. Có một quy tắc 80-20: phần mềm dành 80% thời gian cho 20% mã. Đợi cho đến khi cấu trúc lên, và sau đó thay đổi, kiểm tra, thay đổi, kiểm tra ..
tmaric

@GeoffOxberry: Câu hỏi của tôi không quá cụ thể: Tôi chỉ muốn biết liệu có lợi thế về phần cứng hoặc trình biên dịch khi thực hiện kiểm tra boolean so với thực hiện thao tác dấu phẩy động hay không.
aeismail

3
Nhưng câu hỏi của bạn quá chung chung. Không ai có thể nói mà không nhìn thấy một số mã cụ thể. Có một quy tắc nói rằng ngay cả những lập trình viên giỏi nhất cũng không thể biết được nút thắt của mã của họ ở đâu mà không cần lược tả. Tôi đã dành 25 năm để lập trình và tôi biết điều đó đúng với tôi.
Wolfgang Bangerth

Câu trả lời:


15

Nguyên tắc nhỏ của tôi là nếu bạn có thể tính toán một số lượng một cách hiệu quả (sử dụng tốt FPU) với ít hơn 50 flops cho mỗi giá trị chính xác gấp đôi, thì tốt hơn là tính toán lại hơn là lưu trữ. Xu hướng, đã ổn định trong nhiều thập kỷ, là khả năng dấu phẩy động để cải thiện nhanh hơn hiệu suất bộ nhớ và không có khả năng phụ thuộc do các hạn chế vật lý và yêu cầu năng lượng của bộ nhớ nhanh. Giá trị 50 là độ lớn phù hợp cho tất cả các nền tảng điện toán phổ biến (Intel / AMD, Blue Gene và GPU).

Dự toán chi phí gần đúng cho mỗi lõi

[hướng dẫn cho 2011/2012 Máy dựa trên Intel và AMD]

  • ns: thời gian để thực hiện một thao tác điểm nổi chính xác kép như là một phần của mã được vector hóa mà không phụ thuộc dữ liệu và nhân / thêm xen kẽ0.05
  • ns: thời gian để thực hiện một thao tác điểm nổi không được vector hóa mà không phụ thuộc vào vector hoặc dữ liệu0.2
  • ns: thời gian để thực hiện một thao tác điểm nổi không được vector hóa mà không phụ thuộc vào vector hoặc dữ liệu, nhưng không có phép nhân / cộng xen kẽ (1 chu kỳ đồng hồ)0.4
  • đến 0,8 ns: độ trễ để tham chiếu bộ đệm L10.40.8
  • ns: độ trễ của phép toán dấu phẩy động (được vector hóa hay không)2
  • đến 5 ns: thời gian để tải một giá trị chính xác gấp đôi từ bộ nhớ như là một phần của luồng được tải trước hoàn toàn và được sử dụng đầy đủ35
  • đến 5 ns: gọi hàm gián tiếp (phương thức ảo hoặc con trỏ hàm, không có áp suất đăng ký)35
  • ns: dự đoán sai nhánh có điều kiện5
  • đến 8 ns: thời gian cho một bộ phận (được vector hóa hay không, không thể chạy đồng thời với các hướng dẫn khác)48
  • ns: Lỗi bộ nhớ cache L1 hài lòng từ L2 cục bộ12
  • ns: trường hợp tốt nhất so sánh và trao đổi hoặc tìm nạp và thêm hướng dẫn nguyên tử12
  • - 50 ns: Lỗi ghi bộ nhớ cache L1 hoặc lệnh nguyên tử trong đó dòng bộ đệm có sẵn cục bộ, nhưng lõi hiện tại phải có quyền truy cập độc quyền3050
  • ns: lỗi bộ nhớ cache hoặc hướng dẫn nguyên tử được thỏa mãn từ ổ cắm hoặc bộ nhớ100
  • 1031 μ
  • 10410 μ
  • 106
  • 2106MPI_Allreduce
  • 107
  • 5108
  • 1.81012

đọc thêm


Tôi tìm thấy thông tin này thực sự hữu ích. Nhân tiện, bạn lấy dữ liệu này ở đâu? Tôi đang tìm kiếm tài liệu tham khảo để trích dẫn.
Eldila
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.