gpt4 book ai didi

c++ - OpenMP 和内存限制

转载 作者:行者123 更新时间:2023-11-28 07:26:20 28 4
gpt4 key购买 nike

我有一个使用 openmp 并行构造的 C++ 应用程序。

for 循环中的方法使用大量内存。它在开始时分配内存并在结束时释放它们。

如果系统有足够的内存,则运行良好,但如果内存不足,则运行失败。

目标系统可能有足够的内存,因此只能并行运行 2 个线程,或者可能并行运行 3 个线程。

有什么方法可以配置 openmp,使其根据可用内存知道应该使用多少线程?

如果 OpenMP 做不到,有什么办法可以自己做吗?

最佳答案

OpenMP 在监控内存使用方面非常愚蠢,您必须自己实现它。一个好的策略是获取可用内存量,然后将其除以每个线程的内存需求,以获得可以并发处理数据的线程数上限。知道该数字后,您可以使用 num_threads 子句强制 parallel 区域与那么多线程一起运行:

int max_threads = mem_size / mem_per_thread;

#pragma omp parallel for num_threads(max_threads)
for (...)
{
}

现在的难题是如何获得可用内存量,特别是考虑到几乎所有现代操作系统都实现了虚拟内存。一种解决方案是将其留给最终用户,例如在您的程序配置中提供一个参数,用户可以将其设置为他认为合理的特定值。另一种策略可能是将该值设置为物理内存大小的给定百分比。

关于c++ - OpenMP 和内存限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18701106/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com