c++ 并行算法调用期间的安全内存分配(使用英特尔 TBB)?
Safe Memory allocation during a c++ parallel algorithms invocation (with Intel TBB)?
我想了解线程执行的函数内部的内存分配对于 C++ 并行算法是否安全。考虑以下情况:
std::for_each(std::execution::par, first, last, func),
其中func
是函数对象。在调用 func
(CPU 和 GPU)期间分配内存。当过多的线程执行分配内存时,系统会运行 out of memory 并抛出异常。到目前为止,这还没有发生。我想知道我只是幸运还是执行策略是否考虑了这种内存限制或捕获了与内存相关的异常?并行算法通过Intel TBB实现。
您可以使用任务而不是线程,因为英特尔 oneTBB 处理任务而不是低级线程,也就是说,它创建任务而不是线程,它会在运行时将这些任务映射到硬件上。
任务调度器负责将任务映射到线程。
当我们按照 Jerome Richard 的建议在源代码中使用 for_each 时,您应该显式释放内存 space。
我想了解线程执行的函数内部的内存分配对于 C++ 并行算法是否安全。考虑以下情况:
std::for_each(std::execution::par, first, last, func),
其中func
是函数对象。在调用 func
(CPU 和 GPU)期间分配内存。当过多的线程执行分配内存时,系统会运行 out of memory 并抛出异常。到目前为止,这还没有发生。我想知道我只是幸运还是执行策略是否考虑了这种内存限制或捕获了与内存相关的异常?并行算法通过Intel TBB实现。
您可以使用任务而不是线程,因为英特尔 oneTBB 处理任务而不是低级线程,也就是说,它创建任务而不是线程,它会在运行时将这些任务映射到硬件上。 任务调度器负责将任务映射到线程。 当我们按照 Jerome Richard 的建议在源代码中使用 for_each 时,您应该显式释放内存 space。