为了举例说明,我有一个循环,在该循环中,每次迭代都在一次循环中读取和写入数组的内容。
int my_array[10] = ...;
for(i=0; i<10; i++) {
if(i<5) {
my_array[i*2] = func_b(my_array[i*2]);//func_b takes double the time of func_a, but it also runs on 1/2 of the time.
}
func_a(myarray[i]);//func_a is executed quickly
}
仅在 上访问相同的元素以进行读/写操作i=0
,具有适当的延迟和同步算法应该允许并行化。我正在努力寻找合适的 HLS 编译指示来强制它们像这样并行运行
//#pragma HLS to delay by two cycles
for(i=0; i<10; i++) {
func_a(my_array[i]);
}
//#pragma HLS to allow to run each iteration in parallel with the first loop, if possible in two cycles
for(i=0; i<5; i++) {
my_array[i*2] = func_b(my_array[i]);//func_b might be split into two halves for each to fit into one cycle.
}
理想情况下,第一个循环应该在第二个循环完成后完成两个循环,并以这种方式读取最后一个my_array
元素的正确值。我可能有一个误解,但我希望以这种方式(跨两个周期)划分工作,应该提高时钟速度吗?
生成的 Verilog 代码的其余部分很好,尽管它很神秘,我宁愿坚持使用 C 而不是尝试修改生成的 HDL。关于如何并行化它或它是否可行的任何建议?