我正在寻找一种可能的解决方案来优雅地包装OpenMP任务,特别是指令。在OpenMP任务中,参数必须与关键字in
,out
和inout
类似:
#pragma omp task inout(x) out(y)
plus_equal(x,y); // x+=y
很好,但我正在寻找一种自动解决方案,以避免为每个函数引入指令,我正在考虑使用可变参数模板:
template<class Functor, class... Args>
void helper (Functor& f, Args&... args){
#pragma in(SOMETHING), inout(SOMETHING ELSE)
f(args...);
}
客观地说&#34;胶水&#34;如果参数是const
,则可变参数模板和参数之间应该是const
关键字:它是in
否则它是inout
或out
(客观上没有解决方案来区分in
和inout
)然后我的代码变为:
helper(plus_equal, x,y);
阅读一些帖子,似乎可以提取可变参数模板的参数,并且可以使用const
在non const
和std::is_const
之间提取参数。
但是我不知道我们是否可以将非基本内容传递给指令。我认为它应该是可能的,因为它是一个宏。
但是,我不确定这种解决方案是否存在。
有什么想法吗?
最佳,
++吨