我有代码#pragma clang loop vectorize(enable)
,它强制矢量化。对于某些类型,这种矢量化是不可能的 - 例如:
#include <string>
#include <vector>
template <typename T>
void double_entries(std::vector<T>& vec) {
#pragma clang loop vectorize(enable)
for (auto i = 0; i < 100; ++i) vec[i] = vec[i] + vec[i];
}
int main() {
auto char_vector = std::vector<char>{100};
auto string_vector = std::vector<std::string>{100};
double_entries(char_vector);
double_entries(string_vector);
}
Clang 给了我一个警告:
<source>:7:2: warning: loop not vectorized: failed explicitly specified loop vectorization [-Wpass-failed=loop-vectorize]
for (auto i = 0; i < 100; ++i) vec[i] = vec[i] + vec[i];
^
如果我不知道 的std::string
初始化double_entries
导致问题,这并没有真正的帮助。
有什么方法可以让我打印所有涉及的模板实例?一旦我可以使用该编译器输出识别有问题的类型,我就可以简单地禁用这些类型的矢量化。