将英特尔的#pragma卸载转换为用于至强融核的OpenMP(性能问题和其他问题)

宇航

我使用Intel C ++编译器17.0.01,并且有两个代码块。

第一个代码块在Xeon Phi上分配内存,如下所示:

#pragma offload target(mic:1) nocopy(data[0:size]: alloc_if(1) free_if(0))

第二个块评估上述内存并将其复制回主机:

#pragma offload target(mic:1) out(data[0:size]: alloc_if(0) free_if(0))

这段代码运行得很好,但是#pragma卸载仅是Intel编译器的一部分(我认为)。因此,我想将其转换为OpenMP。

这就是我将第一个块转换为OpenMP的方式:

#pragma omp target device(1) map(alloc:data[0:size])

这就是我将第二个块翻译成OpenMP的方式:

#pragma omp target device(1) map(from:data[0:size])

另外,我还用export OFFLOAD_REPORT=2它来更好地了解运行时发生的情况。

这是我的问题/疑问:

  • 第一个代码块的OpenMP版本与Intel版本(#pragma offload一样快这里没什么奇怪的。
  • 第二个代码块的OpenMP版本比Intel版本慢5倍。但是,MIC_TIME两者的相同,但是CPU_TIME不同(OpenMP版本更高)。这是为什么?
  • 我的英特尔指令是否最优?
  • 我的Intel-> OpenMP翻译正确且最佳吗?

以下是一些其他问题:

  • 在测试机上,我有两张Intel Phi卡。因为我想用:第二个我这样做:#pragma omp target device(1)...那是对的吗?
  • 如果我这样做#pragma omp target device(5)...,代码仍然有效!而且它运行在Phi卡之一(而不是CPU)上,因为性能相似。这是为什么?
  • 我还在没有Xeon Phi的计算机上试用了我的软件(OpenMP版本),它在CPU上运行得很好!这样可以保证吗?当您的机器上没有加速器时,会target device(1)被忽略吗?
  • 是否可以std::cout << print_phi_card_name_or_uid();在OpenMP卸载区域内执行类似的操作(这样我就可以确定我的软件在哪个卡上运行)?
伊利亚·维尔宾(Ilya Verbin)

第二个OpenMP代码块再次分配内存。您应该通过将两个块都包含在中#pragma omp target data map(from:data[0:size]),或者仅#pragma omp target enter data map(alloc:data[0:size])在第一个块之前添加,将数据映射到设备数据环境

在测试机上,我有两张Intel Phi卡。因为我要使用第二个设备,所以我需要这样做:#pragma omp target device(1)....正确吗?

AFAIK,device(0)表示默认卡,device(1)表示第一张卡,device(2)是第二张卡。

如果我执行#pragma omp target device(5)...代码仍然有效!而且它运行在Phi卡之一(而不是CPU)上,因为性能相似。这是为什么?

因为liboffload执行此(liboffload是GCC和ICC中使用的运行时库)。但是,OpenMP标准不能保证这种行为。

我还在没有Xeon Phi的计算机上试用了我的软件(OpenMP版本),它在CPU上运行得很好!这样可以保证吗?当计算机上没有加速器时,目标设备(1)是否被忽略?

是的。不确定标准,但是icc和gcc的卸载是通过这种方式实现的。

是否可以做类似std :: cout << print_phi_card_name_or_uid();的操作?在OpenMP卸载区域内(所以我将确定我的软件在哪张卡上运行)?

OpenMP 4.5仅提供omp_is_initial_device()区分主机和加速器的功能。也许有一些特定于Intel的界面可以做到这一点。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

英特尔至强融核卸载代码+ STL向量

来自分类Dev

英特尔至强融核能否提高ffmpeg性能?

来自分类Dev

调试英特尔至强融核本机应用程序

来自分类Dev

英特尔OpenMP安装问题

来自分类Dev

我们如何知道英特尔至强融核协处理器是否存在

来自分类Dev

我们如何知道是否存在英特尔至强融核协处理器

来自分类Dev

英特尔高清显卡530性能问题+闪烁

来自分类Dev

英特尔的pragma simd与OpenMP的pragma omp simd

来自分类Dev

我们可以将OpenMp卸载到任何英特尔GPU吗?

来自分类Dev

英特尔软件安装中的问题

来自分类Dev

英特尔内在函数问题

来自分类Dev

英特尔软件安装中的问题

来自分类Dev

英特尔加载固有问题

来自分类Dev

英特尔OpenCL Beignet问题

来自分类Dev

英特尔XDK中用于Cordova Media Capture插件测试的“测试”选项卡和Weinre调试问题

来自分类Dev

英特尔迅驰双核处理器和英特尔迅驰2之间有区别吗?

来自分类Dev

未知的其他驱动程序:英特尔CPU的处理器微代码固件,用于英特尔微代码

来自分类Dev

英特尔图形卡问题与内核4.10和主要选择崩溃

来自分类Dev

英特尔Fortran外部库链接问题

来自分类Dev

英特尔快速存储/智能响应SSD缓存问题

来自分类Dev

英特尔WebRTC 2.1.1服务器连接问题

来自分类Dev

英特尔显卡的Chrome / ium渲染问题

来自分类Dev

我在安装英特尔 HAXM 时遇到问题

来自分类Dev

英特尔显卡的Chrome / ium渲染问题

来自分类Dev

至强融核和 Ubuntu 服务器

来自分类Dev

英特尔至强 E 与 Ubuntu 16.04 的兼容性

来自分类Dev

使用ffmpeg,英特尔i5 Kaby Lake硬件将视频和音频转换为VP9和FLAC

来自分类Dev

具有英特尔MIC卸载功能的异构OpenMP并行循环

来自分类Dev

英特尔双核和Core 2 Duo有什么区别?

Related 相关文章

  1. 1

    英特尔至强融核卸载代码+ STL向量

  2. 2

    英特尔至强融核能否提高ffmpeg性能?

  3. 3

    调试英特尔至强融核本机应用程序

  4. 4

    英特尔OpenMP安装问题

  5. 5

    我们如何知道英特尔至强融核协处理器是否存在

  6. 6

    我们如何知道是否存在英特尔至强融核协处理器

  7. 7

    英特尔高清显卡530性能问题+闪烁

  8. 8

    英特尔的pragma simd与OpenMP的pragma omp simd

  9. 9

    我们可以将OpenMp卸载到任何英特尔GPU吗?

  10. 10

    英特尔软件安装中的问题

  11. 11

    英特尔内在函数问题

  12. 12

    英特尔软件安装中的问题

  13. 13

    英特尔加载固有问题

  14. 14

    英特尔OpenCL Beignet问题

  15. 15

    英特尔XDK中用于Cordova Media Capture插件测试的“测试”选项卡和Weinre调试问题

  16. 16

    英特尔迅驰双核处理器和英特尔迅驰2之间有区别吗?

  17. 17

    未知的其他驱动程序:英特尔CPU的处理器微代码固件,用于英特尔微代码

  18. 18

    英特尔图形卡问题与内核4.10和主要选择崩溃

  19. 19

    英特尔Fortran外部库链接问题

  20. 20

    英特尔快速存储/智能响应SSD缓存问题

  21. 21

    英特尔WebRTC 2.1.1服务器连接问题

  22. 22

    英特尔显卡的Chrome / ium渲染问题

  23. 23

    我在安装英特尔 HAXM 时遇到问题

  24. 24

    英特尔显卡的Chrome / ium渲染问题

  25. 25

    至强融核和 Ubuntu 服务器

  26. 26

    英特尔至强 E 与 Ubuntu 16.04 的兼容性

  27. 27

    使用ffmpeg,英特尔i5 Kaby Lake硬件将视频和音频转换为VP9和FLAC

  28. 28

    具有英特尔MIC卸载功能的异构OpenMP并行循环

  29. 29

    英特尔双核和Core 2 Duo有什么区别?

热门标签

归档