Tôi có một số mã cố gắng xác định thời gian thực hiện của một khối mã.Độ chính xác của hàm clock() trong C
#include <time.h>
#include <stdio.h>
int main()
{
clock_t start_t, end_t, total_t;
int i;
start_t = clock(); //clock start
printf("Starting of the program, start_t = %ld\n", start_t);
printf("Going to scan a big loop, start_t = %ld\n", start_t);
for(i=0; i< 10000000; i++) //trying to determine execution time of this block
{
}
end_t = clock(); //clock stopped
printf("End of the big loop, end_t = %ld\n", end_t);
total_t = (long int)(end_t - start_t);
printf("Total time taken by CPU: %lu\n", total_t );
return(0);
}
Kết quả của đoạn mã trên máy tính của tôi là
Starting of the program, start_t = 8965
Going to scan a big loop, start_t = 8965
End of the big loop, end_t = 27259
Total time taken by CPU: 18294
Vì vậy, nếu CPU của tôi đã chạy ở 21 MHz và giả định rằng đây là điều duy nhất nhận được thực hiện, mỗi chu kỳ máy sẽ là xấp xỉ bằng 47 nano giây (18294 * 47) = 859818 nano giây.
Đây có phải là thời gian thực hiện cho vòng lặp for trong mã của tôi không? Tôi có đưa ra một số giả định không chính xác ở đây không.
Để có thời gian tính bằng giây, bạn nên chia số, ví dụ 'total_t' trong trường hợp của bạn, với' CLOCKS_PER_SEC'. Lưu ý rằng bạn cần truyền 'total_t' vào một giá trị dấu chấm động để nó hoạt động. –
Cũng là một sự đánh dấu nhỏ trên lược đồ đặt tên của bạn: Các biểu tượng kết thúc bằng hậu tố '_t' thường được sử dụng cho các loại bí danh (như được tạo bằng' typdef'). Ví dụ 'size_t' hoặc' time_t' và thậm chí 'clock_t'. –
@JoachimPileborg Tôi đã xem lại tài liệu cho hàm clock() và CLOCK_PER_SEC sẽ trả về thời gian chính xác tối đa 1/100 giây và tôi đang tìm kiếm độ phân giải tối đa 10 micro giây vì vậy tôi đã sử dụng cách tiếp cận được đề cập. Ngoài ra tôi muốn điều này làm việc trên các nền tảng và kiến trúc khác nhau nên tôi nghĩ rằng chỉ cần tính toán sự khác biệt và sau đó nhân với tốc độ đồng hồ sẽ là một lựa chọn tốt hơn vì CLOCKS_PER_SEC sẽ thay đổi với kiến trúc. – user2808264