Saturday, 10 September 2011

Một câu lệnh chạy mất bao lâu?

Đã bao giờ ai đó hỏi điều này?
Đã bao giờ bạn đo chương trình của mình chạy mất bao lâu?
Nếu dùng linux, dễ dàng kiểm tra bằng time. Hoặc có thể tự viết vài dòng code để tính. (trong C dùng thư viện time.h)
Tớ sẽ lấy ví dụ với Java - ngôn ngữ bậc cao chậm hơn C tương đối :D

Code:

package com.familug;

public class NanoSecondTest {
    public static void main(String[] args)
    {
        long start = System.currentTimeMillis();
        long finish = System.currentTimeMillis();
        System.out.println("MillisTime: " + (finish - start));
       
        long nanoStart = System.nanoTime();
        long nanoFinish = System.nanoTime();
        System.out.println("NanoTime: " + (nanoFinish - nanoStart));
    }

}
Kết quả:
MillisTime: 0
NanoTime: 427
Như vậy, với em lap của tớ, một câu lệnh chạy không đến 1 mili giây - hiển nhiên vì chỉ với máy thời 198x mới có tốc độ rùa bò như vậy.
Đo bằng nano giây = 1 / tỷ giây thì kết quả là 427.
Máy của tớ là  Intel i3 M370 2.4 Ghz. Tính đơn giản: với tần số 2,4 tỷ circle / giây -> 2,4 circle (xung giao động 2,4 vòng) / nano giây. Nếu chỉ tính 1 nhân thực hiện việc này thì mất 2,4 * 427 = 1024 circle. Chia trung bình cho 3 câu lệnh -> mỗi câu ~400 circle ~ 140 nano giây.
=> trong 1 giây có thể thực hiện khoảng hơn 1 chục triệu câu lệnh.
Vậy những bài mà cắm máy cày top bán Acc ko biết là tính bao nhiêu phép tính đây :">
Tớ tính toán có gì sai ko nhể :D