在 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 成员函数。它或多或少是为此目的而设计的,很可能会有一个有效的实施。