cuốn sách gpt4 ai đã làm

控制 GCC 优化

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-04 02:17:31 27 4
mua khóa gpt4 Nike

Tôi đang cố kiểm tra thuộc tính bộ đệm của máy mà tôi có quyền truy cập. Để làm điều này, tôi đang cố gắng đọc bộ nhớ và tính thời gian cho nó. Tôi đã thay đổi kích thước bộ làm việc và chế độ truy cập sải chân để có được các phép đo khác nhau.

Mã trông như thế này:

clock1 = get_ticks()
cho (i = 0; tôi < 1000000; i++) {
for (j = 0; j < (bộ công việc * sải chân / sizeof(data_t)); j += sải bước) {
*mảng[j];
}
}
clock2 = get_ticks()

Bây giờ câu hỏi là, ở mức tối ưu hóa hợp lý, gcc sẽ tối ưu hóa việc đọc vì nó không có tác dụng phụ. Tôi không thể có mức tối ưu hóa, nếu không tất cả các biến vòng lặp sẽ khiến bộ nhớ bị đọc. Tôi đã thử một số cách khác nhau, chẳng hạn như làm cho mảng có thể thay đổi và sử dụng hàm nội tuyến chuyển đổi thành có thể thay đổi, nhưng việc xử lý các biến có thể thay đổi của gcc rất khó dự đoán. Cách thích hợp để làm điều này là gì?

câu trả lời hay nhất

Một khả năng là sử dụng dữ liệu mảng theo cách không dễ dàng tối ưu hóa, ví dụ:

clock1 = get_ticks();
tổng = 0;
cho (i = 0; tôi < 1000000; i++) {
for (j = 0; j < (bộ công việc * sải chân / sizeof(data_t)); j += sải bước) {
tổng += mảng[j];
}
}
clock2 = get_ticks();
trả lại số tiền;

tổng hợp Phải nằm trong một thanh ghi và thao tác bổ sung sẽ không có bất kỳ tác động nào đến thời gian vòng lặp.

Nếu hàm kiểm tra và hàm gọi đều nằm trong cùng một đơn vị biên dịch, bạn cũng có thể muốn đảm bảo rằng bạn thực sự làm điều gì đó với giá trị tổng được trả về, chẳng hạn như xuất ra qua printf.

Về việc kiểm soát tối ưu hóa GCC, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/5332625/

27 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress