2010-04-20 48 views
12

Tôi thực hiện một số phép tính số lượng lớn và cho tôi hiệu suất dấu phẩy động là rất quan trọng. Tôi thích hiệu suất của trình biên dịch Intel rất nhiều và khá nội dung với chất lượng lắp ráp nó tạo ra.C++ 0x tối ưu hóa chất lượng trình biên dịch

Tôi đang suy nghĩ tại một số điểm để thử C++ 0x chủ yếu cho các phần đường, như auto, danh sách khởi tạo, v.v., nhưng cũng lambdas. tại thời điểm này tôi sử dụng các tính năng trong C++ thông thường bằng các phương tiện tăng cường.

Trình biên dịch C++ 0x tạo ra mã nguồn lắp ráp tốt như thế nào? cụ thể là các trình biên dịch Intel và gcc. Họ có tạo mã SSE không? hiệu suất có thể so sánh với C++ như thế nào? có điểm chuẩn nào không?

Tìm kiếm trên Google của tôi không tiết lộ nhiều.

Cảm ơn bạn.

ps: tại một thời điểm nào đó, tôi sẽ tự mình thử nghiệm nhưng muốn biết những gì mong đợi liên quan đến C++.

+2

Chỉ cần lưu ý rằng Trình biên dịch C++ của Intel chỉ hỗ trợ lambdas tại thời điểm này và các trình biên dịch được triển khai như thể chúng là các trình đơn đơn giản, có tên duy nhất. Vì vậy, từ quan điểm tối ưu hóa, chúng sẽ được tối ưu hóa giống như bất kỳ chức năng nào khác. –

Trả lời

8

Bạn có thể mong đợi cùng một tối ưu hóa cho mã của bạn, bởi vì trình biên dịch chắc chắn không trở nên tồi tệ hơn khi tối ưu hóa. Vì vậy, chỉ sử dụng các tính năng C++ 0x mới có thể ảnh hưởng đến nó. Nhưng tôi nghi ngờ các thói quen cốt lõi của bạn sẽ đột nhiên thay đổi hoàn toàn bằng cách nào đó sử dụng các tính năng C++ 0x-only.

Hãy nhớ những thứ như auto và lambda chỉ là cú pháp. Điều đó sẽ không ảnh hưởng đến tối ưu hóa trình biên dịch bởi vì chúng chỉ là các phương thức tạo ra cùng một mã mà bạn sẽ làm. Vì vậy, bạn chỉ cần lo lắng về "công cụ" mới như danh sách khởi tạo. Nhưng tôi sẽ ngạc nhiên nếu điều đó cũng không hiệu quả.

Bạn cũng nên mong đợi nhiều cải tiến, vì di chuyển ngữ nghĩa. Bạn không còn phải sao chép dữ liệu xung quanh mà chỉ đơn thuần là di chuyển dữ liệu xung quanh. Thiết kế mã của bạn để tận dụng lợi thế này vì lợi ích cao nhất.

+3

Nếu bất cứ điều gì bạn gần như có được một lợi ích ngay lập tức do di chuyển ngữ nghĩa –

+0

@ Billy: Great điểm, thực sự. Tôi sẽ thêm. – GManNickG

+0

tốt, biên dịch lại nguồn C++ với C++ 0x g ++ và thực sự không có sự khác biệt, bất cứ khi nào tôi sử dụng dấu chấm động thông thường hoặc Intel nội tại. cho đến nay, hiệu suất của chúng dường như giống nhau. đã không nhìn vào hội đồng, nhưng tôi đoán cũng tương đương – Anycorn

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