gpt4 book ai didi

xcode - 在每个功能/每个代码块的基础上启用 SSE4 的正确方法?

转载 作者:行者123 更新时间:2023-12-04 04:59:23 25 4
gpt4 key购买 nike

对于我的一个 OS X 程序,我有一些使用 SSE4.1 指令的优化案例。在仅 SSE3 的机器上,运行未优化的分支:

// SupportsSSE4_1 returns true on CPUs that support SSE4.1, false otherwise
if (SupportsSSE4_1()) {

// Code that uses _mm_dp_ps, an SSE4 instruction

...

__m128 hDelta = _mm_sub_ps(here128, right128);
__m128 vDelta = _mm_sub_ps(here128, down128);

hDelta = _mm_sqrt_ss(_mm_dp_ps(hDelta, hDelta, 0x71));
vDelta = _mm_sqrt_ss(_mm_dp_ps(vDelta, vDelta, 0x71));

...

} else {
// Equivalent code that uses SSE3 instructions
...
}

为了编译上面的内容,我必须设置 CLANG_X86_VECTOR_INSTRUCTIONSsse4.1 .

但是,这似乎指示 clang 可以使用 ROUNDSD在我的程序中的任何地方进行指令。因此,该程序在具有 SIGILL: ILL_ILLOPC 的 SSE3 机器上崩溃。 .

仅对 SupportsSSE4_1() 的 true 分支内的代码行启用 SSE4.1 的最佳实践是什么?如果阻止?

最佳答案

目前无法在 clang 中以 block /函数粒度定位不同的 ISA 扩展。您只能在文件粒度上执行此操作(将您的 SSE4.1 代码放入单独的文件中并指定该文件以使用 -msse4.1 )。如果这对您来说是一项重要功能,请提交错误报告以请求它!

但是,我应该注意到 DPPS 的实际好处在大多数实际场景中非常小(使用 DPPS 甚至会减慢一些代码序列!)。除非这个特定的代码序列很关键,并且您已经仔细测量了使用 DPPS 的效果,否则即使该编译器功能可用,对于 SSE4.1 的特殊情况也可能不值得麻烦。

关于xcode - 在每个功能/每个代码块的基础上启用 SSE4 的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24101875/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com