Làm thế nào tôi nên báo cáo thông tin hồ sơ / thời gian về mã của tôi?


8

Tôi đã thấy rất nhiều ấn phẩm trong các tạp chí Vật lý tính toán sử dụng các số liệu khác nhau để thực hiện mã của họ. Đặc biệt đối với mã GPGPU, dường như có rất nhiều kết quả về thời gian mà mọi người công bố. Cụ thể, tôi đã thấy:

  • So sánh (về cơ bản) chạy timetrên các phiên bản GPU và CPU và báo cáo trung bình
  • So sánh dữ liệu lược tả trên từng chức năng GPU / CPU được gọi (vì vậy thời gian chạy mainvà tất cả các chức năng được gọi từ nó, nhưng bỏ qua thời gian khởi tạo trình điều khiển)
  • So sánh dữ liệu lược tả cho một số chức năng có liên quan, bỏ qua những thứ như chuyển bộ nhớ (trên bus PCI-E trong trường hợp này), I / O vào đĩa, chuyển đổi dữ liệu từ định dạng này sang định dạng khác, v.v.
  • So sánh dữ liệu lược tả chỉ cho một chức năng (ví dụ, chỉ so sánh thời gian thực hiện cập nhật spin trong CPU so với GPU Quantum Monte Carlo) và bỏ qua những thứ như thời gian chuyển bộ nhớ, I / O sang đĩa, thiết lập Hamilton / chéo , Vân vân

Cảm giác của tôi là lựa chọn đầu tiên là 'trung thực' nhất trong bốn người, mặc dù tôi cũng có thể thấy công trạng của thứ hai và thứ ba. Thật là hơi vô lý khi báo cáo chênh lệch thời gian chạy là 5s khi 4,99 trong số đó là sự khác biệt trong triển khai I / O giữa các ngôn ngữ hoặc Infiniband so với Gigabit. Tùy chọn cuối cùng có vẻ hơi "sơ sài" đối với tôi, vì trừ khi chức năng này là điểm đau của toàn bộ thông tin báo cáo về chương trình về nó sẽ không phản ánh hiệu suất mà ai đó sao chép kết quả của tôi sẽ thấy. Những cách tiếp cận nào là thẳng thắn hơn? Lý tưởng nhất là một bài báo có chứa tất cả những điều này nhưng trong trường hợp giới hạn về số liệu / chiều dài, đó là / có giá trị nhất, trung thực và có liên quan để cung cấp?

Câu trả lời:


6

Tổng thời gian chạy (đồng hồ treo tường) là số liệu duy nhất quan trọng trong các ứng dụng công nghiệp hoặc thực tế: con số này không bao giờ được bỏ qua, ngay cả khi lúng túng. Tất nhiên số liệu này rất phụ thuộc vào môi trường thử nghiệm, vì vậy điều này cần được mô tả chi tiết.

Tất cả các số liệu khác có thể (hoặc nên được) báo cáo nếu họ cung cấp cái nhìn sâu sắc về vấn đề, hoặc kết luận thú vị (ví dụ: xác minh một số ràng buộc lý thuyết) có thể được rút ra từ chúng.

Tôi nghĩ rằng mục blog này giải quyết điểm này, đặc biệt là đoạn cuối cùng.


2
Ngay cả thời gian đồng hồ treo tường cũng gây ấn tượng với tôi vì có thể gây hiểu lầm, bởi vì chất lượng thực hiện của từng thuật toán có vấn đề. Joel Spolsky giải quyết vấn đề "không có thứ gọi là mã nhanh nhất" trong một bài đăng trên blog. Không đăng mã nguồn của các triển khai (và tôi nghi ngờ trong một số trường hợp, ngay cả khi một người đã đăng mã nguồn của các triển khai), làm thế nào để tôi biết cái gì thực sự "nhanh nhất"? Nói cách khác, làm thế nào để làm cho một so sánh về thời gian đồng hồ treo tường (hoặc bất kỳ số liệu khác) có ý nghĩa?
Geoff Oxberry

1
@GeoffOxberry Trong một quá khứ xa xôi, hầu hết mọi tính toán đều là nối tiếp và hệ thống phân cấp bộ nhớ chỉ có hai cấp độ, trong lõi và ngoài lõi. Trong những ngày (hạnh phúc) matlabvẫn được báo cáo flopsđếm sau mỗi lệnh ... Ngày nay, chúng ta có CPUS, GPGPUS, cụm, đám mây, bộ nhớ cache L1 / L2 / L3, ... Hiệu quả được xác định bởi mức độ bạn có thể lập bản đồ thuật toán với kiến ​​trúc hw / sw đã cho. Thật ngớ ngẩn khi cố gắng cô đọng mọi thứ thành một con số duy nhất, nhưng tuy nhiên chúng ta sẽ có thể đưa ra một trật tự, và nói, tại một số điều kiện nhất định và được xác định rõ, ai nhanh hơn.
Stefano M

Vâng tôi đồng ý. Tôi đang hỏi làm thế nào người ta nên đưa ra một thứ tự như vậy để đưa ra một so sánh có ý nghĩa sẽ xác định, trong bất kỳ điều kiện nào được đưa ra và được xác định rõ mà bạn chỉ định, ai nhanh hơn.
Geoff Oxberry

+1 Tất cả điều này có ý nghĩa, và nó phụ thuộc vào điểm người ta đang cố gắng thực hiện trong ấn phẩm. Nếu vấn đề là về hiệu suất, thì nó cần được giải thích kỹ hơn rất nhiều.
Mike Dunlavey

4

Nó thường là trường hợp mà người ta chỉ có thể báo cáo phần nổi của tất cả các công việc và thỏa hiệp đã đi vào một phần mềm. Hiệu suất báo cáo là tốt nhưng vấn đề thực sự là khi mã được tạo tự do có thể truy cập được trên internet, bằng cách này, bất kỳ ai quan tâm đều có thể đánh giá và tái tạo kết quả.

Lý tưởng nhất, nếu bạn phát hành phần mềm, bạn cũng có thể cung cấp các bài kiểm tra tạo ra dữ liệu được trình bày trong một bài báo.


1
Tôi hoàn toàn đồng ý: con số trần không có ý nghĩa. Để có mã nguồn kết quả có thể lặp lại và có ý nghĩa, các bộ dữ liệu thử nghiệm, cấu hình hw, cấu hình sw, phải được công khai.
Stefano M

Trong trường hợp tôi đã thực hiện thuật toán hai lần, một lần trên GPU và một lần trên CPU, tôi đồng ý rằng các cấu hình HW / SW là hoàn toàn cần thiết để đưa vào. Tôi vẫn chưa rõ dữ liệu nào sẽ được trình bày trong trường hợp tôi tìm thấy "hiệu ứng mở rộng" (ví dụ, so sánh tốc độ tăng tốc với kích thước ma trận cho ED). Tôi có nên so sánh wallclocks? Chỉ là phần ED của tính toán?
chanh

Nếu bạn quan tâm đến việc so sánh sâu các mã, tôi thích công việc của Volkov và Demmel, trong bài báo (hơi cũ nhưng có tính minh họa) của họ: GPU điểm chuẩn để điều chỉnh đại số tuyến tính dày đặc
fcruz
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.