Parallel processing OpenAcc:如何并行化函数调用

Parallel processing OpenAcc:如何并行化函数调用,parallel-processing,openacc,Parallel Processing,Openacc,我正在做一个项目,我正在尝试并行化应用程序。 有一些函数我正在尝试并行化,但问题是这些函数调用其他函数的频率非常高。循环仅用于计算,一个函数体中有许多循环。 我知道OpenACC在其指令中不支持函数调用(仅支持内联调用),因此我提出了两种方法: a) 或者只是将OpenAcc指令放在循环周围,获得所需的并行性,忽略函数调用(不只是忽略它,只是保持原样)(在每个函数体中执行此操作) b) 或者我可以将被调用的函数体放在调用函数中,这样在输入acc指令时多次创建线程的开销就最小化了(通过在一个块中包

我正在做一个项目,我正在尝试并行化应用程序。 有一些函数我正在尝试并行化,但问题是这些函数调用其他函数的频率非常高。循环仅用于计算,一个函数体中有许多循环。 我知道OpenACC在其指令中不支持函数调用(仅支持内联调用),因此我提出了两种方法: a) 或者只是将OpenAcc指令放在循环周围,获得所需的并行性,忽略函数调用(不只是忽略它,只是保持原样)(在每个函数体中执行此操作) b) 或者我可以将被调用的函数体放在调用函数中,这样在输入acc指令时多次创建线程的开销就最小化了(通过在一个块中包含大量循环)。但这似乎是一个很大的难题,因为函数体很大(大约4000-5000行代码)

我不知道如何处理这种情况


总之,我需要找到一种有效的方法来并行化OpenACC中的函数调用,正如一些人所说,OpenACC 2.0就是解决方案。中的例程指令允许将函数标记为设备目标。

如果将函数调用保留在并行区域中,则编译器很可能无法并行化循环。您使用的是哪种编译器?编译器的输出将对您非常有帮助。好消息是,OpenACC 2.0规范中增加了函数调用支持。