gpt4 book ai didi

C++ 中 SSE/AVX 的 x86 CPU 调度

转载 作者:行者123 更新时间:2023-12-04 22:06:30 24 4
gpt4 key购买 nike

我有一个算法,它受益于 SSE(2) 内在函数的手动优化。此外,该算法 future 还将能够受益于 256 位 AVX 寄存器。

我的问题是什么是最好的方法

  • 在编译时注册我的类的可用性变体;因此,如果我的类(class)是:Foo , FooSSE2FooAVX我需要一种在运行时确定编译的类的方法。
  • 确定当前 CPU 的能力。在最低级别,这将导致 cpuid称呼。
  • 在运行时根据编译的内容和支持的内容决定使用什么。

  • 虽然我可以破解上述大部分内容,但它似乎是一个足够常见的问题,必须出现一些最佳实践。理想情况下,我试图避免 #ifdef困惑
    #ifdef COMPILE_SSE2
    if (sse2_supported)
    // Use the SSE2 class
    #endif

    最佳答案

    只需创建一个“工厂”类或函数来创建类的适当实例并隐藏实现工厂的文件中的所有逻辑。

    有一些类或文件本地 bool 值,如“isSSE2Supported”或“isAVXSupported”。在启动时,调用一些函数来初始化这些值。然后,您的工厂逻辑可以检查这些值以确定要使用的类。

    由于 SSE2 在 x64 芯片上始终可用,因此您并不真的想避免所有 ifdef。您可以避免在 x64 构建的某些类中进行编译。

    关于C++ 中 SSE/AVX 的 x86 CPU 调度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4788592/

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