首页 > 解决方案 > 在 NVIDIA GPU 上编译 GPU 内核时出现预期表达式错误

问题描述

如果我尝试在带有 NDIVA GPU 的服务器上运行我的 OpenCL 内核,我会遇到以下问题,在我的 Mac 上没有问题。这行代码似乎是问题所在,

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));

标签: openclnvidiapyopencl

解决方案


float (sin_i_angle)

不是 C 中的有效表达式。它在 C++ 中有效(显式调用 上的讲师float()),所以也许这就是 Apple 的 OpenCL 编译器允许它的原因。您应该将行更改为:

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

推荐阅读