Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

Vadd example on kv260 : Missing CONNECTIVITY section in xclbin

未关闭
#90 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

评估

难度
4/5
预计耗时
3-5 天
新手友好度
25/100
Issue 类型
缺陷
描述清晰度
需要澄清
活跃度
停滞
技术栈
cpp
领域
embedded-iot

调研方向

Reproduce the failure with the vadd command and the provided simpleCL code on KV260, then compare the xclbin CONNECTIVITY, GROUP_CONNECTIVITY, memory configuration, and instance information against ZCU104. Start with the xclbin differences and xbutil output; done means identifying why the KV260 metadata is incomplete and documenting or correcting the cause so the example runs.

由索引模型根据 Issue 内容生成。

描述

Hi all,

I am currently trying to add some HLS IP on kv260 with 2022.1 tool chain.

I have tried the basic vadd example, it could run properly on zcu104.

But with the same work flow on kv260 is not working with the same example code.

# ./vadd /lib/firmware/xilinx/app-vadd/app-vadd.xclbin 
INFO: Reading ./app-vadd/app-vadd.xclbin
Loading: './app-vadd/app-vadd.xclbin'
Trying to program device[0]: edge
Device[0]: program successful!
Segmentation fault

The info of xrt & zocl from xbutil seems to be the same between zcu104 & kv260.

# xbutil examine
System Configuration
  OS Name              : Linux
  Release              : 5.15.19-xilinx-v2022.1
  Version              : #1 SMP Mon Apr 11 17:52:14 UTC 2022
  Machine              : aarch64
  CPU Cores            : 4
  Memory               : 3929 MB
  Distribution         : PetaLinux 2022.1_release_S04190222 (honister)
  GLIBC                : 2.34
  Model                : ZynqMP SM-K26 Rev1/B/A

XRT
  Version              : 2.13.0
  Branch               : 2022.1
  Hash                 : 2a6dc026480914ea1c9f02977a6ab4b57e8a3c8d
  Hash Date            : 2022-04-12 14:31:55
  ZOCL                 : 2.13.0, 2a6dc026480914ea1c9f02977a6ab4b57e8a3c8d

Devices present
BDF             :  Shell  Platform UUID  Device ID     Device Ready*  
[0000:00:00.0]  :  edge   0x0            user(inst=0)  Yes            

* Devices that are not ready will have reduced functionality when using XRT tools

By comparing the difference between xclbin I find out :

  • The xclbin of kv260 is missing section CONNECTIVITY & GROUP_CONNECTIVITY.
    Selection_485
  • The Address Size in Memory Configuration of the xclbin for kv260 is all 0x0.
    Selection_486
  • The Memory in Instance of the xclbin for kv260 is all not applicable.
    Selection_487

Is the failure of vadd example code caused by these reason?

Or there is something I have missed?

By the way I have also verify the function with a simple xrt code which works on zcu104 but out_of_range on kv260.

# ./simpleCL.exe /lib/firmware/xilinx/app-vadd/app-vadd.xclbin 1
init
create rand value
terminate called after throwing an instance of 'std::out_of_range'
  what():  vector::_M_range_check: __n (which is 0) >= this->size() (which is 0)
Aborted
#include <string>
#include "xrt/xrt_device.h"
#include "xrt/xrt_kernel.h"
#include "xrt/xrt_bo.h"
#include "xrt/xrt.h"

#define CU_NAME "krnl_vadd"

int main(int argc, char* argv[])
{
    if (argc < 3)
        return -1;

    std::cout << "init" << std::endl;
    std::string xclbin = argv[1];
    if (xclbin.empty())
        return -2;
    auto device = xrt::device(0);
    auto uuid = device.load_xclbin(xclbin);
    auto kernel = xrt::kernel(device, uuid, CU_NAME);

    int DATASIZE = atoi(argv[2]);

    int a[DATASIZE], b[DATASIZE], s[DATASIZE], o[DATASIZE];
    size_t size_in_byte = sizeof(int) * DATASIZE;

    std::cout << "create rand value" << std::endl;
    for (int i=0; i<DATASIZE; i++){
        a[i] = rand();
        b[i] = rand();
        s[i] = a[i] + b[i];
    }

    auto bo_a = xrt::bo(device, size_in_byte, kernel.group_id(0));
    auto bo_b = xrt::bo(device, size_in_byte, kernel.group_id(1));
    auto bo_o = xrt::bo(device, size_in_byte, kernel.group_id(2));

    std::cout << "write data to buffer" << std::endl;
    bo_a.write(a);
    bo_b.write(b);

    std::cout << "run" << std::endl;
    auto run = kernel(bo_a, bo_b, bo_o, DATASIZE);
    
    std::cout << "wait" << std::endl;
    int status = run.wait(10000);
    std::cout << "runner status : " << status << std::endl;

    std::cout << "read data to buffer" << std::endl;
    bo_o.read(o);
    
    for (int i=0; i<DATASIZE; i++){
        if(o[i] != s[i])
            std::cout << "value diff " << o[i] << " != " << s[i] << std::endl;
    }
    
    return 0;
};

Thanks,
JH

主要语言
Makefile
星标
609
派生
233
PR 合并指标
30 天内没有已合并 PR

环境准备

  • 没有 Dockerfile 或 Docker Compose 文件
  • 没有 Pull Request 模板
  • 阅读贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

Xilinx/Vitis_Accel_Examples 的其他 Issue

查看 Xilinx/Vitis_Accel_Examples 的全部 Issue

相似的 Issue

更多 Embedded & IoT Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。