std::copy 是否实现了使用多线程?
Is std::copy implemented to use multiple threads?
我想尽快将一个向量复制到另一个向量中。
一种方法是使用 std::copy
:
std::copy(other_vector().begin(),other_vector().end(),this_vector.begin());
但是由于向量很长,我想知道是否实现了 std::copy
函数以便它使用多个线程。
我可以提供自定义逻辑,将向量分成相等的分离部分,分别复制项目,但我不想重新发明轮子。
那么 std::copy
是否适用于多线程?
你很幸运从 C++17 获得了
template< class ExecutionPolicy, class ForwardIt1, class ForwardIt2 >
ForwardIt2 copy( ExecutionPolicy&& policy, ForwardIt1 first, ForwardIt1 last, ForwardIt2 d_first );
不,您在问题中显示的 std::copy
重载通常不能实现并行执行,因为它被指定为按从头到尾的顺序依次复制元素。它可能永远不会在任何情况下实现并行执行。
自 C++17 以来,标准库算法有并行扩展,它采用额外的第一个参数指定 执行策略 ,它可以是并行的,假设标准库以这种方式实现它,例如(需要 #include<execution>
):
std::copy(std::execution::par, other_vector().begin(), other_vector().end(), this_vector.begin());
有关执行策略的不同选项及其具体含义,请参阅cppreference.com。
这还没有在所有 compilers/standard 库中完全实现,可能需要额外的编译器选项。请参阅 cppreference.com's compiler support table 中的“并行化标准化 TS”。
我想尽快将一个向量复制到另一个向量中。
一种方法是使用 std::copy
:
std::copy(other_vector().begin(),other_vector().end(),this_vector.begin());
但是由于向量很长,我想知道是否实现了 std::copy
函数以便它使用多个线程。
我可以提供自定义逻辑,将向量分成相等的分离部分,分别复制项目,但我不想重新发明轮子。
那么 std::copy
是否适用于多线程?
你很幸运从 C++17 获得了
template< class ExecutionPolicy, class ForwardIt1, class ForwardIt2 >
ForwardIt2 copy( ExecutionPolicy&& policy, ForwardIt1 first, ForwardIt1 last, ForwardIt2 d_first );
不,您在问题中显示的 std::copy
重载通常不能实现并行执行,因为它被指定为按从头到尾的顺序依次复制元素。它可能永远不会在任何情况下实现并行执行。
自 C++17 以来,标准库算法有并行扩展,它采用额外的第一个参数指定 执行策略 ,它可以是并行的,假设标准库以这种方式实现它,例如(需要 #include<execution>
):
std::copy(std::execution::par, other_vector().begin(), other_vector().end(), this_vector.begin());
有关执行策略的不同选项及其具体含义,请参阅cppreference.com。
这还没有在所有 compilers/standard 库中完全实现,可能需要额外的编译器选项。请参阅 cppreference.com's compiler support table 中的“并行化标准化 TS”。