场景:我有一个可以使用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
个实例但我是否希望实际看到性能提升?为什么会这样?
答案 0 :(得分:1)
如果您的问题是简单并行,并且单独的输入文件中的数据之间没有交互,那么您可能看不到OpenMP的加速,甚至可能会看到速度变慢,因为内存分配和其他各种事情然后必须是线程安全的。单线程进程可以获得很多效率,事实上在GNU libc上也是如此,其中POSIX线程支持的链接意味着你也可以更慢地实现malloc