home | help
std::experi...al::popcount(3)  C++ Standard Libary std::experi...al::popcount(3)

NAME
     std::experimental::popcount - std::experimental::popcount

Synopsis
	Defined in header <experimental/simd>
	template<  class  T,  class Abi >			 (parallelism TS
     v2)
	int popcount( const simd_mask<T, Abi>& k ) noexcept;

	Returns the number of true values in the mask k.

Parameters
	k - the simd_mask to apply the reduction to

Return value
	An int in the range [0, simd_size_v<T, Abi>).

Example
     // Run this code

      #include <cstddef>
      #include <experimental/simd>
      #include <iostream>
      namespace stdx = std::experimental;

      template<typename Abi>
      int count_zeros(stdx::simd<int, Abi> v)
      {
	  return stdx::popcount(v == 0); // v == 0 returns a simd_mask
      }

      void println(auto rem, auto const v)
      {
	  std::cout << rem << ": ";
	  for (std::size_t i = 0; i != v.size(); ++i)
	      std::cout << v[i] << ' ';
      }

      int main()
      {
	  stdx::simd<int> x{8};
	  println("x", x);
	  std::cout << "  zeros: " << count_zeros(x) << '\n';

	  x[3] = x[1] = false;
	  println("x", x);
	  std::cout << "  zeros: " << count_zeros(x) << '\n';
      }

Possible output:
      x: 8 8 8 8   zeros: 0
      x: 8 0 8 0   zeros: 2

http://cppreference.com 	   2024.06.10	   std::experi...al::popcount(3)

home | help