opencl - 在 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));
解决方案
float (sin_i_angle)
不是 C 中的有效表达式。它在 C++ 中有效(显式调用 上的讲师float()
),所以也许这就是 Apple 的 OpenCL 编译器允许它的原因。您应该将行更改为:
float largest_0 = max((float)sin_i_angle, (float)cos_i_angle);
推荐阅读
- elasticsearch - 使用 fluentd 创建字段
- java - 如何将 maven 插件从 maven 迁移到 gradle
- rust - 用于测试的抽象操作系统环境变量
- java - 合并对象内的地图java 8
- python - 当我在 python 中有 8 个逻辑核心时,将我的程序分成 8 个单独的进程是最好的方法(性能方面)吗?
- typescript - 将嵌套接口映射到以路径为键的单一类型,同时保留类型
- python - python imagedownloader,不能作为类在其他文件中工作
- reactjs - 试图在反应中使用从 const 到类的东西
- java - 使用 Optional.ofNullable() 简化条件
- haskell - 如何对具有重复键的元组的键/值列表中的值求和?