【发布时间】:2016-12-21 17:00:26
【问题描述】:
编辑:正如 Cody Gray 在他的评论中指出的那样,禁用优化的分析完全是浪费时间。那么我应该如何进行这个测试呢?
Microsoft 在其XMVectorZero 中如果定义了_XM_SSE_INTRINSICS_,则使用_mm_setzero_ps,如果没有定义{0.0f,0.0f,0.0f,0.0f}。我决定检查一下胜利有多大。所以我在 Release x86 中使用了以下程序,并将 Configuration Properties>C/C++>Optimization>Optimization 设置为 Disabled (/Od)。
constexpr __int64 loops = 1e9;
inline void fooSSE() {
for (__int64 i = 0; i < loops; ++i) {
XMVECTOR zero1 = _mm_setzero_ps();
//XMVECTOR zero2 = _mm_setzero_ps();
//XMVECTOR zero3 = _mm_setzero_ps();
//XMVECTOR zero4 = _mm_setzero_ps();
}
}
inline void fooNoIntrinsic() {
for (__int64 i = 0; i < loops; ++i) {
XMVECTOR zero1 = { 0.f,0.f,0.f,0.f };
//XMVECTOR zero2 = { 0.f,0.f,0.f,0.f };
//XMVECTOR zero3 = { 0.f,0.f,0.f,0.f };
//XMVECTOR zero4 = { 0.f,0.f,0.f,0.f };
}
}
int main() {
fooNoIntrinsic();
fooSSE();
}
我第一次运行程序两次,只有 zero1 和第二次,所有行都未注释。在第一种情况下,内在输了,在第二种情况下,内在显然是赢家。所以,我的问题是:
- 为什么内在并不总是赢?
- 我使用的分析器是否适合进行此类测量?
【问题讨论】:
-
在禁用优化的情况下分析事物会给您带来毫无意义的结果,完全是浪费时间。
-
@CodyGray 非常感谢,我更新了问题
-
我不确定我是否理解您修改后的问题。你应该如何处理它?启用优化!我猜你已经发现优化器通过完全删除你的基准代码来胜过你?
-
@CodyGray 是的,就是这样,所以我没有优化就做到了:) 我的意思是我如何重写这个测试
标签: c++ visual-studio profiling sse