在 C++ 中对 bool 数组进行矢量化
Vectorize on array of bool in c++
我有一个布尔数组(或任何等效结构)。我需要计算第 n 个和第 m 个位置之间的 true 数。是否可以让编译器对其进行矢量化,以便一次检查 64 个或更多元素?
如果您使用 -O3
进行编译并且可能 -march=native
:
就已经发生了
#include <algorithm>
#include <iostream>
void count(char* v) {
auto x = std::count(&v[0], &v[100], true);
std::cout << x << std::endl;
}
对于 gcc,这会为您提供一堆 vp* 指令,这意味着计数是矢量化的。您可以在 godbolt.
上轻松查看
bool
实际上有一个 std::vector
的物种形成:std::vector<bool>
但它不是很好而且没有计数功能。
您可以考虑使用 std:: bitset
, that does offer a count
成员函数。它或多或少是为此目的而设计的,很可能会有一个有效的实施。
我有一个布尔数组(或任何等效结构)。我需要计算第 n 个和第 m 个位置之间的 true 数。是否可以让编译器对其进行矢量化,以便一次检查 64 个或更多元素?
如果您使用 -O3
进行编译并且可能 -march=native
:
#include <algorithm>
#include <iostream>
void count(char* v) {
auto x = std::count(&v[0], &v[100], true);
std::cout << x << std::endl;
}
对于 gcc,这会为您提供一堆 vp* 指令,这意味着计数是矢量化的。您可以在 godbolt.
上轻松查看bool
实际上有一个 std::vector
的物种形成:std::vector<bool>
但它不是很好而且没有计数功能。
您可以考虑使用 std:: bitset
, that does offer a count
成员函数。它或多或少是为此目的而设计的,很可能会有一个有效的实施。