std::execution::seq, std::execution::par, std::execution::par_unseq, std::execution::unseq
De es.cppreference.net
< cpp | algoritmos
| Definido en el encabezado <execution>
|
||
inline constexpr
std::execution::sequenced_policy seq { /* unspecified */ };
|
(desde C++17) | |
inline constexpr
std::execution::parallel_policy par { /* unspecified */ };
|
(desde C++17) | |
inline constexpr
std::execution::parallel_unsequenced_policy par_unseq { /* unspecified */ };
|
(desde C++17) | |
inline constexpr
std::execution::unsequenced_policy unseq { /* unspecified */ };
|
(desde C++20) | |
Los tipos de políticas de ejecución
- std::execution::sequenced_policy,
- std::execution::parallel_policy,
- std::execution::parallel_unsequenced_policy, y
- std::execution::unsequenced_policy
tienen las siguientes instancias respectivas:
std::execution::seq,std::execution::par,std::execution::par_unseq, ystd::execution::unseq.
Estas instancias se usan para especificar la política de ejecución de algoritmos paralelos, es decir, los tipos de paralelismo permitidos.
Políticas de ejecución adicionales pueden ser proporcionadas por una implementación de la biblioteca estándar (posibles adiciones futuras pueden incluir std::parallel::cuda y std::parallel::opencl).
Ejemplo
Ejecutar este código
#include <algorithm>
#include <chrono>
#include <cstdint>
#include <iostream>
#include <random>
#include <vector>
#ifdef PARALLEL
#include <execution>
namespace execution = std::execution;
#else
enum class execution { seq, unseq, par_unseq, par };
#endif
void measure([[maybe_unused]] auto policy, std::vector<std::uint64_t> v)
{
const auto start = std::chrono::steady_clock::now();
#ifdef PARALLEL
std::sort(policy, v.begin(), v.end());
#else
std::sort(v.begin(), v.end());
#endif
const auto finish = std::chrono::steady_clock::now();
std::cout << std::chrono::duration_cast<std::chrono::milliseconds>(finish - start)
<< '\n';
};
int main()
{
std::vector<std::uint64_t> v(1'000'000);
std::mt19937 gen {std::random_device{}()};
std::ranges::generate(v, gen);
measure(execution::seq, v);
measure(execution::unseq, v);
measure(execution::par_unseq, v);
measure(execution::par, v);
}
Posible salida:
// online GNU/gcc compiler (PARALLEL macro is not defined)
81ms
80ms
79ms
78ms
// with g++ -std=c++23 -O3 ./test.cpp -ltbb -DPARALLEL
165ms
163ms
30ms
27ms
Véase también
(C++17)(C++17)(C++17)(C++20) |
tipos de políticas de ejecución (clase) |