我做了一些表演实验。我想在ICC中启用/禁用自动向量化。
我添加-no-vec选项但是可以进行一些调试打印,如:
printf("%s", VEC_ENABLED ? "vectorized" : "not vectorized");
是否有任何嵌入式ICC宏来执行此操作?
UPD :VEC_ENABLED只是一个示例,而不是真正的宏。 docs中没有这样的宏。
make文件的简单解决方法是:
# by default vectorization enabled
#OPTFLAGS= -DVEC_ENABLED=1
# vectorization disabled
OPTFLAGS= -no-vec -DVEC_ENABLED=0
CFLAGS=... $(OPTFLAGS)
但仍然寻找更好的方法。
UPD2 :来自Anoop Madhusoodhanan Prabha - 要禁用自动和显式矢量化,必须使用2个标志:-no-vec -no-simd
答案 0 :(得分:1)
我们目前不会根据传递的编译器选项公开任何反映自动矢量化状态的宏。要记住的一件重要事情是-no-vec只会禁用自动矢量化。如果您碰巧在程序中使用#pragma omp simd(OpenMP SIMD),那么这些循环的矢量化仍将发生。要完全禁用矢量化(自动矢量化和显式矢量化),请使用编译器选项-no-vec -no-simd。