Xilinx / Xilinx/Vitis_Accel_Examples

Vadd example on kv260 : Missing CONNECTIVITY section in xclbin

Open
#90 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Makefile
Stars
605
Forks
233
Avg merge
1m
Merged PRs (30d)
1

Description

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

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

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.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp
Domain
embedded-iot
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.