Я пытаюсь реализовать BFS в OpenCL. Как pipe и device_enqueue представлены в OpenCL2.0. Это оба очень важно в BFS. так вот проблема, которую я только что включил.
deviceEnqueueDummyKernel(read_only pipe int Z, write_only pipe int W)
{
…
void (^bfs_device_enqueue_wrapper_blk)(void) = ^{deviceEnqueueBFSKernel(Z, W);};
enqueue_kernel(…bfs_device_enqueue_wrapper_blk)
}
deviceEnqueueBFSKernel(read_only pipe int X, write_only pipe int Y)
{
…
void (^bfsDummy_device_enqueue_wrapper_blk)(void) = ^{deviceEnqueueDummyKernel(Y, X);};
enqueue_kernel(…bfsDummy_device_enqueue_wrapper_blk)
}
При компиляции на платформе Intel (CPU). компилятор указывает:
error: passing ‘const write_only pipe uint’ to parameter of incompatible type ‘read_only pipe uint’
При компиляции на мобильной платформе Qcom, при компиляции нет ошибок, кроме «Ошибка сегментации» при запуске ядра в программе, вызванное «разыменованием нулевого указателя» при обратной трассировке as «/vendor/lib64/libCB.so (cl_a6x_update_kernel_arguments + 1588)» введите описание изображения здесь
Так что эта проблема может быть связана с компилятором. (Лязг / передача параметра в блоках)? Есть ли обходной путь для этого?