主机代码组织 - 2022.1 简体中文

Vitis 统一软件平台文档 应用加速开发 (UG1393)

Document ID
UG1393
Release Date
2022-05-25
Version
2022.1 简体中文

VSC 可提供简单的模板,用于应用代码开发和管理对加速器硬件的软件调用。此模板可提供统一样式用于创建 C++ 软件 API,与硬件组合无关。

    auto arg1BP  = myACC::create_bufpool( .... ); (1)
    ....
    myACC::send_while([= .... ]() // (2)
    {
        int* arg1 = myAcc::alloc_buf<int>(arg1BP, .... ); // (4)
        ....
        myACC::compute( arg1, .... ); // (5)
        ....
        return ( while_cond ); // (3)
    }
    myACC::receive_all_in_order([= .... ]() // (6)
    {
        ....
    }
    myACC::join(); // (7)

以上伪代码中所示此模板结构分以下几个部分。请参阅 VPP_ACC 类 API 以获取有关这些元素的详细信息。

  • create_bufpool():为传递给加速器的每个指针实参创建一个缓冲池,并提供实参数据规范(例如,输入、输出和远程)。
  • send_while():该作业用于控制加速器上的作业的整体调度,使用 lambda 函数来为每项作业提供数据。
  • return ( while_cond );:lambda 函数体在循环内执行,必须返回布尔值。send_while 主体内的 return 语句允许用户持续运行循环,前提是返回的值为 true,并且当返回的值为 false 时,停止循环并退出 send_while 线程。如果在声明和使用 lambda 函数前,sent_value 已设为 0,那么 return 语句可以是 (++sent_value<MAX_SEND)。
  • alloc_buf():为当前循环迭代分配来自缓冲池的存储器缓冲器对象。
  • compute():软件调用,用于在加速器硬件上调度 compute() 函数的一次作业执行。
  • receive_all_in_order():此线程等待来自调度的作业的结果。这是另一个用户定义的 lambda 函数,只要 send_while() 线程运行,即可保持在循环内执行。
  • join():等待发送和接收线程完成。

以下各章节提供了有关创建应用代码的更多详细信息。