我试图弄清楚我是否正确使用了Openmp 4构造。
如果有人能给我一些提示,那就好了。
class XY {
#pragma omp declare target
static void function_XY(){
#pragma omp for
loop{}
#pragma omp end declare target
main() {
var declaration
some sequential stuff
#pragma omp target map(some variables) {
#pragma omp parallel {
#pragma omp for
loop1{}
function_XY();
#pragma omp for
loop2{}
}
}
some more sequential stuff
}
我的整体代码正在运行,并且随着更多线程变得更快,但我想知道代码是否在目标设备上正确执行(xeon phi)。 此外,如果我删除所有omp东西并按顺序执行我的程序,它运行速度比执行多个线程(任何数字)。也许是因为omp的初始化?
我想要的是在目标设备上并行执行:loop1,function_XY,loop2。
答案 0 :(得分:0)
"我想知道代码是否在目标设备上正确执行(xeon phi)"
好吧,如果您使用-mmic标志正确编译代码,那么它将生成仅在麦克风上运行的二进制文件。
要在麦克风上运行代码(在纯模式下),将可执行文件复制到麦克风(通过scp),复制所需的库,SSH到麦克风,然后执行它。
请勿忘记导出LD_LIBRARY_PATH以指示麦克风上库的路径。
现在,假设您确实在协处理器上运行代码,在禁用线程时提高了性能,表明代码中某处存在瓶颈。但这需要更多信息来分析。