【发布时间】:2020-10-07 19:53:16
【问题描述】:
这样做的一种方法是创建函数指针,根据选择所需功能集的预处理器指令有条件地指向不同的函数。
#if defined(__AVX512__)
void (*func_ptr)() = _mm512_func;
#else
void (*func_ptr)() = _mm256_func;
#endif
int main()
{
func_ptr();
return 0;
}
有没有更好的方法来做到这一点?谢谢。
【问题讨论】:
-
如果您仅在编译时检测 AVX512,则不需要函数指针。只是
#define func _mm512_func。 (并且只定义实际调用的版本)。或者更简单地说,根本不要为同一个函数定义不同的名称,只需选择要编译的定义即可。 -
@PeterCordes 我认为在 C++ 社区中函数指针优于宏。但这做同样的工作。这是最好的方法吗?还有其他想法吗?
-
... 或只是
#ifdef围绕同一功能的可能实现。 -
@NanashiNoGombe - 你仍然有你建议的函数指针方法的宏,所以即使“函数指针在宏上”是某种规则,这不会摆脱宏。
标签: c++ c-preprocessor intrinsics avx2 avx512