繁体   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