簡體   English   中英

Visual Studio 2015上的log10()性能比Visual Studio 2013 for x86慢很多

[英]log10() performance on Visual Studio 2015 a lot slower than Visual Studio 2013 for x86

我們已將VS2013 C ++ / MFC應用程序移植到VS2015,並且在VS2015編譯器生成的性能和代碼方面存在一些相當令人不安的問題。

請注意,這是針對x86的。

log10()調用的速度要慢一些。 使用CPU采樣分析版本構建時,我們發現這些調用比以前占用了更多的時間。 從VS2013的同一次運行中的49個樣本到VS2015中相同運行的高達7545個樣本。 這意味着此功能從CPU負載的0.6%變為有問題的應用程序的50%。

在VS2013中,探查器顯示:

Function Name   Inclusive Samples   Exclusive Samples   Inclusive Samples % Exclusive Samples %
__libm_sse2_log10   49  49  0.61    0.61

在VS2015中,分析器顯示:

Function Name   Inclusive Samples   Exclusive Samples   Inclusive Samples % Exclusive Samples %
___sse2_log102  7,545   7,545   50.43   50.43

為什么不同的功能名稱?

我們簡要介紹了生成的log10程序集。 在VS2013上,它轉發到disp_pentium4.inclog10_pentium4.asm 在VS2015上,這是不同的。 似乎VS2015在Debug中回到__libm_sse2_log10

__sse2_log102可能__sse2_log102是這種性能差異的原因嗎? 我們檢查了調用它們的函數的結果輸出是否在預期的浮點差異內。

我們正在使用目標v140_xp進行編譯,並具有以下編譯選項:

/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 

此處還顯示了查看屬性時:

優化

代碼生成

VS2013和VS2015的所有項目設置都相同。 注意我們使用SSE2並將浮點模型設置為快速。

有沒有人遇到過同樣的問題,知道如何解決這個問題?

在這里我的評論作為答案。

似乎VS2015在發布版本中更改了log10的實現,它調用了這個新的__sse2_log102函數而不是舊的__libm_sse2_log10 ,並且這個新實現是導致巨大性能差異的原因。

在這種情況下,我們的解決方案是調用Intels Performance Primitives(IPP)庫中的實現。 例如,而不是呼叫:

return log10(v);

請改為:

double result;
ippsLog10_64f_A53(&v, &result, 1);
return result;

這導致性能問題消失,實際上使用舊的IPP 7.0版本稍微快一些。 然而,並非所有人都可以使用和支付IPP,所以我們希望微軟能夠解決這個問題。

以下是顯示此問題的VS2015版本。

在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM