C 编程优化和处理器扩展
C Programming Optimization and Processor Extensions
我有一项 C 编程作业,其中涉及尽可能优化代码。我已经在 Internet 上阅读了一些关于此的内容,发现了诸如使用 case
而不是 if
、通过指针而不是值传递等内容。
我想问的是,为什么了解可用的处理器扩展可以帮助我优化代码?我知道机器上可以使用 SSE 和 AVX,但这对我这个程序员来说到底意味着什么?
关于我的上述问题,我发现 Intel Intrinsic Guide 我认为它与处理器扩展有关。与其他 C 函数相比,使用这些函数在性能方面有什么优势吗?例如使用 xmmintrin.h
中的 _mm_sqrt_ps
会比 math.h
中的 sqrt
更快吗?
想法是每个 CPU 优化库(SSE、AVX 等),并调用 _may_i_use_cpu_feature() 之类的东西来动态确定运行时可用的功能并加载 [= CPU.
的 16=] 实施
对于您想要使用 sqrt() 的可移植代码 - 一些运行时库已经优化了足够好的实现。如果你想在特定平台上完全控制和最大化性能,而不关心可移植性,你可以编写手工优化的程序集(或使用内部函数)。
大多数性能都是通过更好的算法获得的...
我有一项 C 编程作业,其中涉及尽可能优化代码。我已经在 Internet 上阅读了一些关于此的内容,发现了诸如使用 case
而不是 if
、通过指针而不是值传递等内容。
我想问的是,为什么了解可用的处理器扩展可以帮助我优化代码?我知道机器上可以使用 SSE 和 AVX,但这对我这个程序员来说到底意味着什么?
关于我的上述问题,我发现 Intel Intrinsic Guide 我认为它与处理器扩展有关。与其他 C 函数相比,使用这些函数在性能方面有什么优势吗?例如使用 xmmintrin.h
中的 _mm_sqrt_ps
会比 math.h
中的 sqrt
更快吗?
想法是每个 CPU 优化库(SSE、AVX 等),并调用 _may_i_use_cpu_feature() 之类的东西来动态确定运行时可用的功能并加载 [= CPU.
的 16=] 实施对于您想要使用 sqrt() 的可移植代码 - 一些运行时库已经优化了足够好的实现。如果你想在特定平台上完全控制和最大化性能,而不关心可移植性,你可以编写手工优化的程序集(或使用内部函数)。
大多数性能都是通过更好的算法获得的...