Intel® 高层次综合编译器专业版Pro版: 参考手册

ID 683349
日期 12/04/2023
Public
文档目录

13.13. Intel® HLS Compiler Pro版技术性任务系统API

表 49.   Intel® HLS Compiler任务系统总结
函数 描述
ihc::launch 将函数标记为硬件生成的 Intel® HLS Compiler任务,并异步启动任务函数。
ihc::collect 同步组件中指定任务函数的完成。
ihc::stream 允许不同任务函数之间进行流式通信。
ihc::launch_always_run 在组件上电或复位时启动任务函数并连续执行该函数。
Recommendation: ihc_hls_set_component_wait_cycle 与此函数一起使用可以使您的组件和始终运行的任务函数保持协调正确。

ihc::launch函数

句法
ihc::launch<function[, capacity]>(fuction_argument_list)
其中函数参数定义如下:
  • function

    您正在调用的函数的名称,调用该函数用作您组件中的 Intel® HLS Compiler任务。

  • capacity

    可选值,设置后将产生深度为capacity的FIFO缓冲插入启动任务的函数和任务函数之间。

    设置capacity参数,当您观察到停顿模式时,表明由调用的任务函数(function)引入的任何背压之间存在不平衡并且调用程序启动此任务函数的频率。

  • fuction_argument_list

    参数列表传递给任务函数。

    该列表必须与任务函数所需的参数(名称和类型)相匹配。

描述
ihc::launch API函数将函数标识为硬件生成的 Intel® HLS Compiler任务。调用此函数将异步启动任务函数。

如果任务函数无法接受新线程,则ihc::launch函数可以阻止调用ihc::launch函数的函数。

提供ihc::launch API函数的参数列表必须(在名称和类型上)与任务函数所需的参数列表相匹配。

ihc::collect函数

句法
ihc::collect<function[, capacity]>()
其中函数参数定义如下:
  • function

    综合完成的 Intel® HLS Compiler任务参数名称。

    设置capacity参数,当您观察到的停顿模型表明任务函数(function)产生的数据节奏与调用程序的阅读节奏不同时。

  • capacity

    可选值,设置后将产生大小为capacity的FIFO 缓冲被插入到任务函数和收集任务的函数之间。

描述
ihc::collect API函数同步组件中指定的任务函数的完成。

对于非void任务函数,ihc::collect API函数收集指定任务函数的结果。

对于void任务函数, ihc::collect API函数同步任务函数的done信号。

ihc::collect调用任务函数的次数必须与同一任务函数的ihc::launch调用次数相匹配,以便刷新对该任务的所有调用。

Special Case: 如果您完全不使用ihc::collect,则编译器会优化并绑定任务的返回流,使其不会出现停顿,并忽略返回流上的任何数据。其他流接口仍可对任务函数施加背压。此外,调用程序可能会在任务函数之前完成。

ihc::launch_always_run函数

句法
ihc::launch_always_run<function>()
其中函数参数定义如下:
  • <function>

    您正在调用的函数名称,作为组件中持续执行的 Intel® HLS Compiler任务。

描述

使用ihc::launch_always_run API函数来连续执行任务函数,就像使用hls_always_run_component调用接口参数调用一个组件。

该任务在组件上电或重置时启动,而不是在数据路径中的特定点启动。

您向此API提供的任务函数必须与此原型匹配:
void function(void)

您的任务函数必须没有函数参数也没有返回值。您应该通过全局流或使用编译时常量模板参数与您的任务函数进行通信。

使用 ihc_hls_set_component_wait_cycle API函数,使用ihc::launch_always_run API函数时,因为顶层组件可以在所有始终运行的任务函数完成分配给它们的工作之前完成。

实例
如下实例展示了ihc::launch_always_run函数的简单使用方法。
ihc::stream<int> in_stream, out_stream;

template <ihc::stream<int> &inStream,
          ihc::stream<int> &outStream>

void my_task()
{
  int x = inStream.read();
  x *= 2;
  outStream.write(x);
}

component void foo()
{
  ihc::launch_always_run<my_task<in_stream, out_stream>>();
}

Intel® HLS Compiler任务系统代码实例

以下代码实例说明了如何使用任务系统API。
int mul(int a, int b)
{
	return a * b;
}

Template<typename T>
T add(T a, T b)
{
	return a + b;
}

component int foo(int a, int b)
{
	ihc::launch<mul>(a,b);
	ihc::launch<add<int>>(a,b);
	int prod = ihc::collect<mul>();
	int sum = ihc::collect<add<int>>();
	return sum + prod;
}