2018年3月5日月曜日

Intel FPGAのOpenCLのオフラインコンパイル時にrestrictに関するエラーが出る

Intel FPGAでOpenCLを動かすためにゴニョゴニョいじっていたらこんなエラーに遭遇した.
aoc moving_average_many.cl -o bin/moving_average_many.aocx --board a10pl4_dd4gb_gx115 --report
aoc: Selected target board a10pl4_dd4gb_gx115
/home/ubuntu/opencl_program/moving_average2/moving_average_many.cl:1:51: warning: declaring kernel argument with no 'restrict' may lead to low kernel performance
__kernel void moving_average_many(__global int4 *values,
^
/home/ubuntu/opencl_program/moving_average2/moving_average_many.cl:2:52: warning: declaring kernel argument with no 'restrict' may lead to low kernel performance
__global float4 *average,
^
2 warnings generated.
とりあえず下記のように何も考えずにrestricを前につければ出なくなる.

__kernel void moving_average_many(__global int4 * restrict values,
__global float4 * restrict average,
int length,
int name_num,
int width)
(意味的には,引数にとってるポインタちゃんたちが同じ領域を示したりしないよっていう制約だった気がする.)

restrictを付ける付けないで,実行速度は1msecほど変化した.

付けない場合 -> 1.83933 [ms]
付けた場合 -> 0.95214 [ms]

※余談
カーネルの実行時間の計測に,clGetEventProfilingInfo()を使ってstart, endを計測.
しかし,計測してみると18446233763891.16797[ms] とか出てて,
なんじゃこりゃとか思ってendの中身を見ると,endに何も入ってないやないかーい😇
カーネルのキューイングは非同期なので,キューイング直後にevent時間取得したい場合は, clWaitForEvents()`が必要だったよ,という余談でした.

0 件のコメント:

コメントを投稿