Optimization 这个概念可以用OpenMP优化吗?

Optimization 这个概念可以用OpenMP优化吗?,optimization,parallel-processing,openmp,Optimization,Parallel Processing,Openmp,我宁愿不使用代码,因为这是一个常见的概念: 假设我们有一个函数的场景,它既不太大也不太小,而且本身也不容易用OpenMP for loop优化来优化 然而,在整个项目的运行过程中,在代码中的几百个不相关的环境中,它是一个被调用数百万次的函数 [内联本身似乎没有多大作用(默认情况下,在优化的gcc结果上),并且使其成为一个宏而不是并行的,这将是一个兼容的承诺。]调用函数时,是否多次调用它,特别是在循环中?这个问题有点模糊——可能是的(在几百个不相关的地方->百万中的每一个都调用了数千次),也可能不

我宁愿不使用代码,因为这是一个常见的概念:

假设我们有一个函数的场景,它既不太大也不太小,而且本身也不容易用OpenMP for loop优化来优化

然而,在整个项目的运行过程中,在代码中的几百个不相关的环境中,它是一个被调用数百万次的函数


[内联本身似乎没有多大作用(默认情况下,在优化的gcc结果上),并且使其成为一个宏而不是并行的,这将是一个兼容的承诺。]

调用函数时,是否多次调用它,特别是在循环中?这个问题有点模糊——可能是的(在几百个不相关的地方->百万中的每一个都调用了数千次),也可能不是(在一百个不相关的地方调用了一次,并且您在代码的这些部分中点击了数千次->百万)

在第一种情况下,是的,并行化“映射”——也就是说,将函数独立地应用于一系列情况——很容易,而且OpenMPs也很好

在第二种情况下,如果函数被调用了一百万次,但每次调用一次,则不会。在那里会重复执行,但没有公开的并发性;没有可以独立完成的必须同时完成的任务列表。如果函数可能会被重复参数调用,那么您可以做的就是使用内存化,这是内存/计算时间的折衷,而不是并行化技术

在第二种情况下,您可能可以重新构造代码,以便一次进行一系列函数调用,从而公开并发性并允许并行化——但这不是OpenMP(或任何并行编程模型)可以自动为您做的事情

OpenMP通常用于“使事物并行运行”。不仅仅是循环的
。。。好吧,您甚至不需要任何循环就可以充分利用OpenMP并加速代码


唯一重要的是:“我是否有几个独立的操作,它们一个接一个地运行,并且可以同时工作?”。如果是这样的话,那么您已经找到了一个使用OpenMP进行优化的简单方法。

这太笼统了。答案完全取决于您的函数,以及该函数的实际调用方式。