首页 文章

Xeon-Phi从主机openMP并行区域异步卸载

提问于
浏览
0

我在主机openMP代码中使用intel的卸载编译指示 . 代码如下所示

int s1 = f(a,b,c);

#prama offload singnal(s1) in (...) out(x:len)
{
    for (int i = 0; i < len; ++i)
    {
        x[i] = ...
    }   
}

#pragma omp parallel default(shared)
{
    #pragma omp for schedule(dynamic) nowait
    for (int i = 0; i < count; ++i)
    {
        /* code */
    }

    #pragma omp for schedule(dynamic) 
    for (int j = 0; j < count2; ++j)
    {
        /* code */
    }
}

#pragma offload wait(s1)
{
    /* code */
}

代码卸载计算$ x $到MIC . 代码通过向CPU核心提供一些openMP来保持自己的忙碌 . 上面的代码按预期工作 . 然而,第一个卸载pragma花费了大量时间并且已经成为瓶颈 . 不过总的来说,将$ x $的计算卸载到MIC是值得的 . 我正在尝试的一种可能克服此延迟问题的方法如下

int s1 = f(a,b,c);

#pragma omp parallel default(shared)
{
    #pragma omp single nowait
    {
        #prama offload singnal(s1) in (...) out(x:len)
        {
            for (int i = 0; i < len; ++i)
            {
                x[i] = ...
            }   
        }

    }

    #pragma omp for schedule(dynamic) nowait
    for (int i = 0; i < count; ++i)
    {
        /* code */
    }

    #pragma omp for schedule(dynamic) 
    for (int j = 0; j < count2; ++j)
    {
        /* code */
    }
}

#pragma offload wait(s1)
{
    /* code */
}

所以这个新代码,指定一个线程来执行卸载,而其他openmp线程可以用于其他工作共享结构 . 但是这段代码不起作用 . 我收到以下错误消息

device 1 does not have a pending signal for wait(0x1)

卸载报告指出上面的代码是主要的罪魁祸首 . 一个临时工作是使用常数作为信号,即信号(0),它起作用 . 但是,我需要一个更持久的解决方案 . 任何人都可以了解我的代码中出错的地方 .

谢谢

2 回答

  • 1

    让我补充泰勒的答复 .

    第一次卸载确实需要比后续卸载更多的时间,因为初始化的东西正在进行 . 泰勒勾勒出那里发生的一些事情 . 您可以使用环境变量OFFLOAD_INIT = on_start来避免虚拟卸载 . 这应该让运行时系统提前完成所有初始化 . 这种开销不会消失,但它会从您的第一次卸载转移到应用程序初始化 .

    您的第二个代码段的问题似乎是您的卸载目标是不同的设备 . 仅当信号和等待发生在同一目标设备上时,信令和等待才有效 . 由于您没有在卸载时明确使用 target(mic:0) 子句,因此运行时系统选择不同的目标设备的可能性很高 .

    我想提出的一个建议是不使用普通整数来表示信令 . 通常,信号表示某个缓冲区已准备就绪 . 在这些情况下,最好将缓冲区指针用作信号句柄,因为对于使用不同缓冲区的并发卸载,它是唯一的 .

    干杯, - 迈克尔

  • 0

    我不能评论第二个代码块 . 我对第一个有一些看法 .

    第一次卸载总是花费更长的时间,因为它还设置了卸载基础架构 . 这个结构包括传递环境变量,复制libomp5的mic实现,设置线程池等等 .

    避免这种情况的方法是首先设置一个虚拟卸载,这意味着它实际上没有做任何事情,也不是你的计算块的一部分 .

    有关xeon phi协处理器优化的一系列优秀参考资料位于software.intel.com/mic-developer的培训选项卡下 .

    另请参阅software.intel.com/en-us/articles/programming-and-compiling-for-intel-many-integrated-core-architecture,software.intel.com/en-us/articles/optimization-and -performance-tuning-for-intel-xeon-phi-coprocessors-part-1-optimization,and software.intel.com/en-us/articles/optimization-and-performance-tuning-for-intel-xeon-phi-协处理器部分-1-优化 .

    很抱歉长URL,但stackoverflow不允许我包含两个以上的链接,因为我是新的 .

相关问题