使用OpenMP与Affinity调度进行软件并行化?

时间:2016-04-20 19:22:49

标签: c++ c parallel-processing openmp affinity

场景:我有一个可以使用OpenMP 轻松并行化的程序,假设程序的主循环是for循环和其中的独立数据,因此并行化它将是微不足道的。但是目前我并行化它,而是使用关联性调度。

该程序对命令行参数中的文件夹指定的某些输入文件执行操作。要并行运行此程序,有人可以像这样创建一个bat文件:

start \affinity 1 "1" bat1
start \affinity 2 "2" bat2
start \affinity 3 "3" bat3
start \affinity 4 "4" bat4

其中bat1 - 4是一个bat文件,它为每个bat文件调用main.exe不同的输入文件夹。因此,在这种情况下,将分别在main.exe上运行input_folder1, input_folder2, input_folder3, input_folder4的4个实例。

使用像OpenMP这样的库会有什么好处而不是关联性调度?我认为

  • 单个程序实例的内存使用量,单个堆栈和堆,而不是n核心程序的n个实例
  • 更好的缩放

但我是否希望实际看到性能提升?为什么会这样?

1 个答案:

答案 0 :(得分:1)

如果您的问题是简单并行,并且单独的输入文件中的数据之间没有交互,那么您可能看不到OpenMP的加速,甚至可能会看到速度变慢,因为内存分配和其他各种事情然后必须是线程安全的。单线程进程可以获得很多效率,事实上在GNU libc上也是如此,其中POSIX线程支持的链接意味着你也可以更慢地实现malloc