我观察到一种奇怪的行为,想知道它是否与 Intel Xeon Phi 有关。
我有一个小示例代码,基本上是大家都知道的矩阵乘法(三个嵌套的 for 循环)。我将计算卸载到带有 OpenMP 4.0 target
pragma 的 Intel MIC 并使用map(to:A,B)
map(tofrom:C)
.
现在,我观察到的是对于小矩阵,例如 1024x1024,内存传输花费了非常长的时间。与原生版本(相同的代码,相同的并行化策略,只是没有卸载)相比,卸载版本消耗了大约 320 毫秒的时间。我对代码进行了热身运行以消除初始化开销。
与 Nvidia Tesla K20 相比,复制相同数量的内存却没有注意到这 320 毫秒非常糟糕。
是否有一些环境设置可以提高内存传输速度?
另外一个问题:我通过 OFFLOAD_REPORT 环境变量启用了卸载报告。报告中显示的两种计时结果有什么区别:
[Offload] [HOST] [Tag 5] [CPU Time] 26.995279(seconds)
[Offload] [MIC 0] [Tag 5] [CPU->MIC Data] 3221225480 (bytes)
[Offload] [MIC 0] [Tag 5] [MIC Time] 16.859548(seconds)
[Offload] [MIC 0] [Tag 5] [MIC->CPU Data] 1073741824 (bytes)
在 MIC 时间(内存传输?)中缺少的那 10 秒是什么?
那么第三个问题。是否可以将固定内存与英特尔 MIC 一起使用?如果是,如何?