0

这个问题涉及 Xilinx SDSoC 和 HLS 中的数据移动。

我的主函数中有一个大型一维数组,它是使用 sds_alloc 分配的。它基本上是一个二维数组(N 行和 M 列)转换为 N*M 元素的一维数组。

我还有一个函数,它在 PL 部分接受两个大小为 N 的数组作为输入。

我希望这个函数处理原始二维数组的两列 - 因此,N 个元素的两部分顺序存储在一维数组中,该数组已在主函数中使用 sds_alloc 分配。

有没有一种有效的方法可以在加速函数中顺序访问数组的这两个部分作为流?

4

1 回答 1

0

据我所知,sds_alloc连续分配内存缓冲区,SDSoC 通过这些缓冲区推断 DMA 传输(这就是我假设您的目标)。

我不完全确定 SDSoC 是否能够推断出对“共享”阵列的并行访问,但我的直觉是它可以。

我相信您可以通过指向同一数组的不同位置的指针调用您的硬件函数(例如,看起来像这样的参数:) &(x[i * N])

我会尝试这样的方法:

void kernel(const data_t* col_1st,
            const data_t* col_2nd,
            // [...]
            ) {
    // [...]
}

// [...]

data_t* x = sds_alloc(sizeof(data_t) * N * M);

for (int i = 0; i < M; i = i + 2) {
    kernel(&(x[i * N]), &(x[(i + 1) * N]), ...);
}
于 2021-10-27T15:24:45.083 回答