ожидаемая ошибка выражения при компиляции ядра GPU на GPU NVIDIA - PullRequest
1 голос
/ 24 января 2020

У меня возникает следующая проблема, если я пытаюсь запустить свое ядро ​​OpenCL на сервере с графическим процессором NDIVA, на моей машине c проблем нет. Проблема заключается именно в этой строке кода:

float largest_0 = max(float (sin_i_angle), float (cos_i_angle));

Вот сообщение об ошибке.

  File "threed_dp.py", line 918, in gpu_calculate_segment_costs_orig
    bld = prg.build()
  File "/work/mrdrygal/.local/lib/python3.6/site-packages/pyopencl/__init__.py", line 510, in build
    options_bytes=options_bytes, source=self._source)
  File "/work/mrdrygal/.local/lib/python3.6/site-packages/pyopencl/__init__.py", line 554, in _build_and_catch_errors
    raise err
pyopencl._cl.RuntimeError: clBuildProgram failed: BUILD_PROGRAM_FAILURE - clBuildProgram failed: BUILD_PROGRAM_FAILURE - clBuildProgram failed: BUILD_PROGRAM_FAILURE

Build on <pyopencl.Device 'Tesla P100-PCIE-16GB' on 'NVIDIA CUDA' at 0x3767e50>:

<kernel>:82:33: error: expected expression
          float largest_0 = max(float (sin_i_angle), float (cos_i_angle));

1 Ответ

2 голосов
/ 24 января 2020
float (sin_i_angle)

Не является допустимым выражением в C. Это допустимо в C ++ (явно вызывая инструктора в float()), поэтому, возможно, именно поэтому компилятор OpenCL от Apple это разрешает. Вы должны изменить строку на:

float largest_0 = max((float)sin_i_angle, (float)cos_i_angle);
...