在 OpenCL(英特尔 FPGA)中声明 LUT 的最佳方式
Best Way to declare a LUT in OpenCL (Intel FPGA)
我需要在 OpenCL 内核中声明三个 LUT,因此:
在英特尔 OpenCL FPGA 中声明 LUT 的最佳方式是什么?
我看过这方面的例子,但在例子中他们使用了 switch/case
结构。我认为最好的方法是为每个 LUT 声明一个数组,如下例所示(示例取自:how to declare a constant array of float2 vectors?):
__constant float2 foo[2] = {1.0f, 0.0f};
如果您不能直接寻址 LUT 数组中的元素,即如果您的查找位置不遵循 0,1,2,...,N
,则只需要 switch/case
。将 LUT 实现为数组并使用 lut[position];
直接寻址会更优雅。
如果 LUT 足够小并且你只需要它在一个地方,你可以将它放在内核中的 private
内存 space 中。如果LUT较大(超过几百个条目),则需要转移到constant
内存space;元素访问保持不变。
我需要在 OpenCL 内核中声明三个 LUT,因此:
在英特尔 OpenCL FPGA 中声明 LUT 的最佳方式是什么?
我看过这方面的例子,但在例子中他们使用了 switch/case
结构。我认为最好的方法是为每个 LUT 声明一个数组,如下例所示(示例取自:how to declare a constant array of float2 vectors?):
__constant float2 foo[2] = {1.0f, 0.0f};
如果您不能直接寻址 LUT 数组中的元素,即如果您的查找位置不遵循 0,1,2,...,N
,则只需要 switch/case
。将 LUT 实现为数组并使用 lut[position];
直接寻址会更优雅。
如果 LUT 足够小并且你只需要它在一个地方,你可以将它放在内核中的 private
内存 space 中。如果LUT较大(超过几百个条目),则需要转移到constant
内存space;元素访问保持不变。