Chúng tôi đã chuyển một ứng dụng VS2013 C++/MFC sang VS2015 và đang gặp một số vấn đề đáng lo ngại về hiệu suất và mã được tạo bởi trình biên dịch VS2015.log10() hiệu suất trên Visual Studio 2015 chậm hơn rất nhiều so với Visual Studio 2013 cho x86
Lưu ý đây là dành cho x86.
Tốc độ chậm hơn trên các cuộc gọi log10(). Khi lập cấu hình Bản phát hành bản phát hành bằng cách sử dụng lấy mẫu CPU, chúng tôi thấy rằng các cuộc gọi này mất nhiều thời gian hơn so với trước đây. Đi từ ví dụ 49 mẫu trên cùng một hoạt động cho VS2013 đến một con số khổng lồ 7545 mẫu cho cùng một hoạt động trong VS2015. Điều này có nghĩa là chức năng này tăng từ 0,6% tải CPU lên 50% cho ứng dụng được đề cập.
Trong VS2013 profiler cho thấy:
Function Name Inclusive Samples Exclusive Samples Inclusive Samples % Exclusive Samples %
__libm_sse2_log10 49 49 0.61 0.61
Trong VS2015 profiler cho thấy:
Function Name Inclusive Samples Exclusive Samples Inclusive Samples % Exclusive Samples %
___sse2_log102 7,545 7,545 50.43 50.43
Tại sao một tên hàm khác nhau?
Chúng tôi đã xem xét một thời gian ngắn tại hội đồng được tạo cho log10. Vào VS2013, giá trị này chuyển tiếp đến disp_pentium4.inc
và log10_pentium4.asm
. Vào VS2015, điều này khác. Có vẻ như VS2015 quay lại __libm_sse2_log10
trong Gỡ lỗi.
Có thể __sse2_log102
là nguyên nhân của sự khác biệt hiệu suất này không? Chúng tôi đã kiểm tra kết quả đầu ra từ các chức năng gọi đây là những điểm khác biệt trong các điểm nổi.
Chúng tôi đang biên soạn với mục tiêu v140_xp và có các tùy chọn biên dịch sau:
/Yu"stdafx.h" /MP /GS- /GL /analyze- /W4 /wd"4510" /wd"4610" /Zc:wchar_t /Z7 /Gm- /Ox /Ob2 /Zc:inline /fp:fast /D "WINVER=0x0501" /D "WIN32" /D "_WINDOWS" /D "NDEBUG" /D "_CRT_SECURE_NO_WARNINGS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_SCL_SECURE_NO_WARNINGS" /D "_USING_V110_SDK71_" /D "_UNICODE" /D "UNICODE" /errorReport:prompt /WX- /Zc:forScope /GR /arch:SSE2 /Gd /Oy /Oi /MT
Cũng đưa ra ở đây khi xem các thuộc tính:
Tất cả các thiết lập dự án là tương tự cho cả VS2013 và VS2015. Lưu ý chúng tôi đang sử dụng SSE2 và có mô hình điểm nổi được đặt thành nhanh.
Có ai gặp phải cùng một vấn đề và biết cách khắc phục sự cố này không?
Một điều đáng lưu ý là Microsoft đã viết lại đáng kể thư viện của họ, cf. [bài đăng trên blog này] (http://blogs.msdn.com/b/vcblog/archive/2015/09/25/rejuvenating-the-microsoft-c-c-compiler.aspx), bao gồm cả lib toán học của họ. Viết lại có thể rơi giữa hai phiên bản bạn so sánh. –
Mọi thứ hướng tới việc triển khai "__sse2_log102" trong VS2015 là nguyên nhân, nó chậm hơn so với thực hiện cũ. Nếu chúng ta thay thế cuộc gọi thành "log10()" bằng một cuộc gọi tới ippsLog10_64f_A53, hồi quy hiệu suất này sẽ bị xóa. – nietras
@PeterSchneider Cảm ơn, vâng chúng tôi đã nhận thức được điều này kể từ khi cổng, chúng tôi đã có vấn đề với điểm nổi để định dạng chuỗi, cũng đã được viết lại hoàn toàn. – nietras