使用const global <type> * restrict参数使用OpenCL进行Halide?

时间:2017-03-12 15:34:39

标签: halide

在OpenCL中,当我们将它们指定为const global * restrict时(对于一段手写的OpenCL代码),我们获得了输入参数的高效硬件路径:

__kernel void oclConvolveGlobalMem(const global   float* restrict input,
                                         constant float* restrict filterWeights,
                                         global   float* restrict output)

然而,正如HL_DEBUG_CODEGEN=1所见,Halide会产生:

// Address spaces for kernel_conv_70_s0_y___block_id_y
#define __address_space__conv__70 __global
#define __address_space__input __global
#define __address_space__kernel __global
__kernel void kernel_conv_70_s0_y___block_id_y(
 const int _conv__70_extent_0,
 const int _conv__70_extent_1,
 const int _conv__70_min_0,
 const int _conv__70_min_1,
 const int _conv__70_stride_1,
 const int _input_min_0,
 const int _input_min_1,
 const int _input_stride_1,
 const int _kernel_min_0,
 const int _kernel_min_1,
 const int _kernel_stride_1,
 __address_space__conv__70 float *_conv__70,
 __address_space__input const float *_input,
 __address_space__kernel const float *_kernel,
 __address_space___shared int16* __shared)

其中输入参数未声明为restrict。我希望这能真诚地限制性能。我是否让Halide添加了指针受限制的概念(他们使用的缓冲区不是别名。)

1 个答案:

答案 0 :(得分:2)

你上次什么时候更新Halide? Halide最近(2016年10月)加入了限制缓冲参数:https://github.com/halide/Halide/pull/1550。最新的二进制版本确实发生了这种变化。