трубы во вложенных циклах (OpenCL2.0) - PullRequest
0 голосов
/ 28 февраля 2020

Я пытаюсь реализовать 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)» введите описание изображения здесь

Так что эта проблема может быть связана с компилятором. (Лязг / передача параметра в блоках)? Есть ли обходной путь для этого?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...