2009-07-15 24 views
13

Tôi đang tìm cách viết một chương trình điểm chuẩn nhanh có thể được biên dịch và chạy trên nhiều máy khác nhau. Thay vì sử dụng các tùy chọn có sẵn về mặt thương mại/mở-sourceally, tôi muốn có riêng của tôi để chơi xung quanh với luồng và kỹ thuật tối ưu hóa thuật toán.Một vài thao tác tốn thời gian trong C là gì?

Tôi có một cặp vợ chồng mà tôi đã sử dụng, bao gồm tính toán đệ quy số thứ n của dãy Fibonacci, và gieo/rand() ing vài nghìn lần.

Có bất kỳ thuật toán nào khác tương đối đơn giản, nhưng đồng thời tính toán chuyên sâu (và có thể liên quan đến toán học)?

(Lưu ý rằng các hoạt động này sẽ được thực hiện bằng ngôn ngữ C.)

+0

Vậy bạn muốn làm điểm chuẩn nào? Hiệu năng số nguyên? Điểm nổi? Tốc độ truy cập RAM? Kích thước và tốc độ của các cấp bộ nhớ cache khác nhau? Điều duy nhất mà tôi có thể thấy là bạn không quan tâm đến I/O (có thể thống trị cho các nhiệm vụ mà hầu hết mọi người đều làm). – starblue

+0

Bất kỳ và tất cả những điều trên. :) –

Trả lời

8

Các Ackermann function thường là một niềm vui một, nhưng không cung cấp cho nó đóng góp rất lớn nếu bạn muốn nó kết thúc trong cuộc đời của bạn .

0

Tìm số nguyên tố được coi là khá tốn thời gian.

2

Bạn có thể tính số nguyên tố hoặc số nguyên tố lớn.

0

này hiện rất nhiều bổ sung:

int c = 0; 
for (int n = 0; n < INT_MAX; n++) 
    for (int m = 0; m < INT_MAX; m++) 
     c++; 

std::cout << c; 
+5

Thực ra thì không. Bất kỳ decentcompiler sẽ thấy rằng bạn đã hoàn toàn không có gì với n hoặc m, và do đó sẽ tối ưu hóa nó tất cả đi. –

+1

Và thêm số là một trong những điều mà máy tính làm tốt nhất. Phép nhân rộng theo chiều rộng tùy ý sẽ chuyên sâu hơn! –

+0

@Ken White - đã thực hiện điều chỉnh. –

2

Hãy nhìn vào các NAS Parallel Benchmarks. Chúng ban đầu được viết bởi NASA ở Fortran cho các siêu máy tính sử dụng MPI (và vẫn có sẵn theo cách đó), nhưng cũng có các triển khai C, Java và OpenMP hiện có.

Hầu hết trong số này là rất tính toán chuyên sâu, vì chúng được dùng để đại diện cho các thuật toán số được sử dụng trong máy tính khoa học.

3

Fractals

(ở độ phân giải khác nhau) Some fractal source in C (without opengl)

+0

+1: Tôi thích cái này vì bạn có thể thưởng thức kết quả. Hoặc nếu bạn sử dụng một thuật toán tự cải thiện chính nó lặp đi lặp lại, bạn có thể xem nó hoạt động, điều đó thú vị hơn bao giờ hết! – Welbog

+0

Đúng, chỉ cần không sử dụng GPU thông qua OpenGL rõ ràng điều này sẽ đánh bại mục đích đo điểm chuẩn. Bạn cũng có thể vui chơi với rất nhiều toán phức tạp mà cùng nhau lạm dụng API toán học cho điểm chuẩn và làm cho một fractal khá –

3

Tôi biết bạn nói bạn muốn làm của riêng bạn, nhưng có lẽ bạn có thể rút ra các tiêu chuẩn hiện hành để tìm cảm hứng. The Computer language benchmark game đã chạy nhiều ngôn ngữ lập trình thông qua một bộ điểm chuẩn. Có lẽ bạn có thể nhận được một số ý tưởng nhìn vào điểm chuẩn của họ.

Một số ý tưởng nhanh chóng của các đỉnh đầu của tôi:

  • Matrix nhân: mulitplying 2 ma trận lớn là tương đối tính toán chuyên sâu, mặc dù bạn sẽ phải mất bộ nhớ đệm vào tài khoản

  • Tạo số nguyên tố

  • Hệ số nguyên tố

  • Phương pháp số cho ODEs giải quyết - Runge-kutta ví dụ

+0

Raytracing là một nhiệm vụ chuyên sâu CPU tốt. – KitsuneYMG

0

Thanh toán các tiêu chuẩn từ loạt đá luân lưu ngôn ngữ: http://shootout.alioth.debian.org/

Tuy nhiên: tiêu chuẩn chỉ tiêu chuẩn và không nhất thiết cho bạn biết rất nhiều về thế giới thực và có thể, trái lại, là gây hiểu nhầm.

1

Hãy thử tính toán hàng nghìn hoặc hàng triệu pi chữ số. Có một số ít formulas cho nhiệm vụ đó.

+0

Fabrice Bellard của QEmu nổi tiếng là người khám phá công thức tính toán Pi hiệu quả nhất ... bellard.org/pi đa tài năng! ... và anh ta đã giành được một cuộc thi obfuscation nguồn với việc thực hiện! –

+0

Tôi đã đọc một bài báo về Fabrice Bellard trong một tạp chí Linux. Anh chàng thông minh! –

0

Nếu bạn muốn thử song song, hãy thực hiện rất nhiều phép toán ma trận. Kích thước của ma trận bạn có thể sử dụng sẽ bị giới hạn bởi bộ nhớ, nhưng bạn có thể thực hiện nhiều lần lặp như bạn muốn.

Điều này sẽ nhấn mạnh các hướng dẫn SIMD mà CPU hiện đại đi kèm.

1

Bạn có một số tính năng thực sự tốt trong project euler, tất cả đều liên quan đến toán và có thể tốn thời gian khi bạn muốn sử dụng giá trị cao hơn.

+0

không thực sự, với các thuật toán thích hợp (đó là những gì các câu đố cố gắng thúc đẩy) hầu hết các vấn đề quy mô hợp lý tốt. Thật không may, đối với nhiều người trong số những vấn đề phổ biến phần cứng là đủ nhanh mà brute-force là đủ nhanh, đôi khi bởi một biên độ rất lớn. – Javier

+0

tôi biết nhưng nếu anh ta sử dụng một số vấn đề khó khăn hơn (và những người làm tăng giá trị khiến họ tốn nhiều thời gian hơn), anh ta sẽ nhận được các thuật toán đáng giá trong ứng dụng chuẩn –

0

Bạn có thể thử một tsort (Turbo Sort) với một bộ đầu vào rất lớn. Tôi hiểu đây là một hoạt động phổ biến.

0

Thông báo về sự cố NP-Complete là một cách thú vị để lấy mã CPU chuyên sâu. Bạn có thể mã "giải pháp" :) cho một trong số Karps vấn đề NP-Complete.

Các vấn đề liên quan