SDSoC:仅使用数组的一部分作为 HLS 函数中的顺序输入
SDSoC: Using only part of an array as sequential input in a function in HLS
此问题涉及 Xilinx SDSoC 和 HLS 中的数据移动。
我的主函数中有一个大的一维数组,正在使用 sds_alloc 进行分配。它基本上是一个二维数组(N 行和 M 列)转换为一个 N*M 元素的一维数组。
在 PL 部分,我还有一个函数接受两个大小为 N 的数组作为输入。
我希望此函数处理原始二维数组的两列 - 因此,N 元素的两部分顺序存储在一维数组中,该数组已在主函数中使用 sds_alloc 分配。
有没有一种有效的方法可以在加速函数中以流的形式顺序访问数组的这两部分?
据我所知,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]), ...);
}
此问题涉及 Xilinx SDSoC 和 HLS 中的数据移动。
我的主函数中有一个大的一维数组,正在使用 sds_alloc 进行分配。它基本上是一个二维数组(N 行和 M 列)转换为一个 N*M 元素的一维数组。
在 PL 部分,我还有一个函数接受两个大小为 N 的数组作为输入。
我希望此函数处理原始二维数组的两列 - 因此,N 元素的两部分顺序存储在一维数组中,该数组已在主函数中使用 sds_alloc 分配。
有没有一种有效的方法可以在加速函数中以流的形式顺序访问数组的这两部分?
据我所知,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]), ...);
}