【问题标题】:Error CL_DEVICE_NOT_AVAILABLE in JOCL sampelsJOCL 样本中的错误 CL_DEVICE_NOT_AVAILABLE
【发布时间】:2016-09-18 23:41:20
【问题描述】:

我需要在java中使用OpenCl所以我选择了JOCL 当我想尝试 jocl 示例 (http://www.jocl.org/samples/samples.html) 时,我总是在编译示例时发现此错误。

例如示例 (JOCLSample_1_2_KernelArgs.java) 显示此错误:

**Exception in thread "main" org.jocl.CLException: CL_DEVICE_NOT_AVAILABLE
at org.jocl.CL.checkResult(CL.java:686)
at org.jocl.CL.clCreateContext(CL.java:3803)
at org.jocl.JOCLSample_1_2_KernelArgs.defaultInitialization(JOCLSample_1_2_KernelArgs.java:177)
at org.jocl.JOCLSample_1_2_KernelArgs.main(JOCLSample_1_2_KernelArgs.java:42)**

我确信我的驱动程序运行良好。

当我编译示例 JOCLDeviceQuery.java(显示查询并打印有关所有可用设备的信息)时。

这是结果:

Number of platforms: 4
Number of devices in platform Intel(R) OpenCL: 2
Number of devices in platform NVIDIA CUDA: 1
Number of devices in platform Experimental OpenCL 2.0 CPU Only Platform: 1
Number of devices in platform AMD Accelerated Parallel Processing: 1
--- Info for device        Intel(R) Core(TM) i3-3217U CPU @ 1.80GHz: ---
CL_DEVICE_NAME:                    Intel(R) Core(TM) i3-3217U CPU @ 1.80GHz
CL_DEVICE_VENDOR:           Intel(R) Corporation
CL_DRIVER_VERSION:          5.0.0.57
CL_DEVICE_TYPE:             CL_DEVICE_TYPE_CPU
CL_DEVICE_MAX_COMPUTE_UNITS:        4
CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS: 3
CL_DEVICE_MAX_WORK_ITEM_SIZES:      8192 / 8192 / 8192 
CL_DEVICE_MAX_WORK_GROUP_SIZE:      8192
CL_DEVICE_MAX_CLOCK_FREQUENCY:      1800 MHz
CL_DEVICE_ADDRESS_BITS:         64
CL_DEVICE_MAX_MEM_ALLOC_SIZE:       998 MByte
CL_DEVICE_GLOBAL_MEM_SIZE:      3995 MByte
CL_DEVICE_ERROR_CORRECTION_SUPPORT: no
CL_DEVICE_LOCAL_MEM_TYPE:       global
CL_DEVICE_LOCAL_MEM_SIZE:       32 KByte
CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE: 128 KByte
CL_DEVICE_QUEUE_PROPERTIES:     CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE
CL_DEVICE_QUEUE_PROPERTIES:     CL_QUEUE_PROFILING_ENABLE
CL_DEVICE_IMAGE_SUPPORT:        1
CL_DEVICE_MAX_READ_IMAGE_ARGS:      480
CL_DEVICE_MAX_WRITE_IMAGE_ARGS:     480
CL_DEVICE_SINGLE_FP_CONFIG:     CL_FP_DENORM CL_FP_INF_NAN CL_FP_ROUND_TO_NEAREST 
CL_DEVICE_2D_MAX_WIDTH          16384
CL_DEVICE_2D_MAX_HEIGHT         16384
CL_DEVICE_3D_MAX_WIDTH          2048
CL_DEVICE_3D_MAX_HEIGHT         2048
CL_DEVICE_3D_MAX_DEPTH          2048
CL_DEVICE_PREFERRED_VECTOR_WIDTH_<t>    CHAR 1, SHORT 1, INT 1, LONG 1, FLOAT 1, DOUBLE 1


--- Info for device Intel(R) HD Graphics 4000: ---
CL_DEVICE_NAME:             Intel(R) HD Graphics 4000
CL_DEVICE_VENDOR:           Intel(R) Corporation
CL_DRIVER_VERSION:          9.17.10.2828
CL_DEVICE_TYPE:             CL_DEVICE_TYPE_GPU
CL_DEVICE_MAX_COMPUTE_UNITS:        16
CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS: 3
CL_DEVICE_MAX_WORK_ITEM_SIZES:      512 / 512 / 512 
CL_DEVICE_MAX_WORK_GROUP_SIZE:      512
CL_DEVICE_MAX_CLOCK_FREQUENCY:      350 MHz
CL_DEVICE_ADDRESS_BITS:         64
CL_DEVICE_MAX_MEM_ALLOC_SIZE:       406 MByte
CL_DEVICE_GLOBAL_MEM_SIZE:      1624 MByte
CL_DEVICE_ERROR_CORRECTION_SUPPORT: no
CL_DEVICE_LOCAL_MEM_TYPE:       local
CL_DEVICE_LOCAL_MEM_SIZE:       64 KByte
CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE: 64 KByte
CL_DEVICE_QUEUE_PROPERTIES:     CL_QUEUE_PROFILING_ENABLE
CL_DEVICE_IMAGE_SUPPORT:        1
CL_DEVICE_MAX_READ_IMAGE_ARGS:      128
CL_DEVICE_MAX_WRITE_IMAGE_ARGS:     8
CL_DEVICE_SINGLE_FP_CONFIG:     CL_FP_INF_NAN CL_FP_ROUND_TO_NEAREST CL_FP_ROUND_TO_ZERO CL_FP_ROUND_TO_INF 
CL_DEVICE_2D_MAX_WIDTH          16384
CL_DEVICE_2D_MAX_HEIGHT         16384
CL_DEVICE_3D_MAX_WIDTH          2048
CL_DEVICE_3D_MAX_HEIGHT         2048
CL_DEVICE_3D_MAX_DEPTH          2048
CL_DEVICE_PREFERRED_VECTOR_WIDTH_<t>    CHAR 1, SHORT 1, INT 1, LONG 1, FLOAT 1, DOUBLE 0


--- Info for device GeForce GT 630M: ---
CL_DEVICE_NAME:             GeForce GT 630M
CL_DEVICE_VENDOR:           NVIDIA Corporation
CL_DRIVER_VERSION:          352.86
CL_DEVICE_TYPE:             CL_DEVICE_TYPE_GPU
CL_DEVICE_MAX_COMPUTE_UNITS:        2
CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS: 3
CL_DEVICE_MAX_WORK_ITEM_SIZES:      1024 / 1024 / 64 
CL_DEVICE_MAX_WORK_GROUP_SIZE:      1024
CL_DEVICE_MAX_CLOCK_FREQUENCY:      1600 MHz
CL_DEVICE_ADDRESS_BITS:         64
CL_DEVICE_MAX_MEM_ALLOC_SIZE:       256 MByte
CL_DEVICE_GLOBAL_MEM_SIZE:      1024 MByte
CL_DEVICE_ERROR_CORRECTION_SUPPORT: no
CL_DEVICE_LOCAL_MEM_TYPE:       local
CL_DEVICE_LOCAL_MEM_SIZE:       48 KByte
CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE: 64 KByte
CL_DEVICE_QUEUE_PROPERTIES:     CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE
CL_DEVICE_QUEUE_PROPERTIES:     CL_QUEUE_PROFILING_ENABLE
CL_DEVICE_IMAGE_SUPPORT:        1
CL_DEVICE_MAX_READ_IMAGE_ARGS:      128
CL_DEVICE_MAX_WRITE_IMAGE_ARGS:     8
CL_DEVICE_SINGLE_FP_CONFIG:     CL_FP_DENORM CL_FP_INF_NAN CL_FP_ROUND_TO_NEAREST CL_FP_ROUND_TO_ZERO CL_FP_ROUND_TO_INF CL_FP_FMA CL_FP_CORRECTLY_ROUNDED_DIVIDE_SQRT 
CL_DEVICE_2D_MAX_WIDTH          16384
CL_DEVICE_2D_MAX_HEIGHT         16384
CL_DEVICE_3D_MAX_WIDTH          2048
CL_DEVICE_3D_MAX_HEIGHT         2048
CL_DEVICE_3D_MAX_DEPTH          2048
CL_DEVICE_PREFERRED_VECTOR_WIDTH_<t>    CHAR 1, SHORT 1, INT 1, LONG 1, FLOAT 1, DOUBLE 1


--- Info for device        Intel(R) Core(TM) i3-3217U CPU @ 1.80GHz: ---
CL_DEVICE_NAME:                    Intel(R) Core(TM) i3-3217U CPU @ 1.80GHz
CL_DEVICE_VENDOR:           Intel(R) Corporation
CL_DRIVER_VERSION:          6.0.0.1049
CL_DEVICE_TYPE:             CL_DEVICE_TYPE_CPU
CL_DEVICE_MAX_COMPUTE_UNITS:        4
CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS: 3
CL_DEVICE_MAX_WORK_ITEM_SIZES:      8192 / 8192 / 8192 
CL_DEVICE_MAX_WORK_GROUP_SIZE:      8192
CL_DEVICE_MAX_CLOCK_FREQUENCY:      1800 MHz
CL_DEVICE_ADDRESS_BITS:         64
CL_DEVICE_MAX_MEM_ALLOC_SIZE:       998 MByte
CL_DEVICE_GLOBAL_MEM_SIZE:      3995 MByte
CL_DEVICE_ERROR_CORRECTION_SUPPORT: no
CL_DEVICE_LOCAL_MEM_TYPE:       global
CL_DEVICE_LOCAL_MEM_SIZE:       32 KByte
CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE: 128 KByte
CL_DEVICE_QUEUE_PROPERTIES:     CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE
CL_DEVICE_QUEUE_PROPERTIES:     CL_QUEUE_PROFILING_ENABLE
CL_DEVICE_IMAGE_SUPPORT:        1
CL_DEVICE_MAX_READ_IMAGE_ARGS:      480
CL_DEVICE_MAX_WRITE_IMAGE_ARGS:     480
CL_DEVICE_SINGLE_FP_CONFIG:     CL_FP_DENORM CL_FP_INF_NAN CL_FP_ROUND_TO_NEAREST 
CL_DEVICE_2D_MAX_WIDTH          16384
CL_DEVICE_2D_MAX_HEIGHT         16384
CL_DEVICE_3D_MAX_WIDTH          2048
CL_DEVICE_3D_MAX_HEIGHT         2048
CL_DEVICE_3D_MAX_DEPTH          2048
CL_DEVICE_PREFERRED_VECTOR_WIDTH_<t>    CHAR 1, SHORT 1, INT 1, LONG 1, FLOAT 1, DOUBLE 1


--- Info for device        Intel(R) Core(TM) i3-3217U CPU @ 1.80GHz

我的问题的解决方案是什么???????如何编译 jocl 示例???

【问题讨论】:

  • 最基本的示例 jocl.org/samples/JOCLSample.java 是否适合您?请注意,其他可能需要相应设备不支持的 OpenCL 版本或功能。实际上,您想使用哪种设备?
  • 我想使用 GPU 和 CPU,但现在它只有在我将全部更改为 GPU 时才有效(最终 long deviceType = CL_DEVICE_TYPE_GPU;)
  • 那么错误可能(作为有根据的猜测)可以总结为:它基本上可以工作,但是编译标志"-cl-kernel-arg-info"(使用OpenCL 1.2功能)是某些 CPU 设备不支持。 (例如,某些 CPU 设备可能只有 OpenCL 1.1 或更低版本)
  • 那有什么解决办法????我想知道我是否可以使用与 OpenCL1.1 兼容的 jocl 函数???有没有可能这样做
  • 是的,当然。当您拥有支持 OpenCL 1.1 的设备时,您可以将 OpenCL 1.1 功能与 JOCL 一起使用。如果您有支持 OpenCL 1.2 的设备,则可以将 OpenCL 1.2 功能与 JOCL 一起使用。示例中的错误(很可能)只是因为您尝试在仅支持 OpenCL 1.1 的设备上使用 OpenCL 1.2 功能而出现。

标签: java opencl gpu jocl


【解决方案1】:

尝试从 CL_DEVICE_TYPE_ALL 更改设备类型

到 CL_DEVICE_TYPE_CPU 或 CL_DEVICE_TYPE_GPU

在 OpenCL 中,最好不要混合设备类型

见example code

public class JOCLSample_1_2_KernelArgs
{
    // The platform, device type and device number that will be used
    private static final int platformIndex = 0;
    private static final long deviceType = CL_DEVICE_TYPE_ALL;
    ...

【讨论】:

  • 我试过了,deviceType = CL_DEVICE_TYPE_GPU;结果是:平台版本:线程“主”org.jocl.CLException 中的 OpenCL 1.2 异常:org.jocl.CL.clBuildProgram(CL.java:9364) 处的 CL_INVALID_BUILD_OPTIONS org.jocl.JOCLSample_1_2_KernelArgs.main(JOCLSample_1_2_KernelArgs.java: 51)
  • 第 51 行:clBuildProgram(program, 0, null, "-cl-kernel-arg-info", null, null);
  • 这是一个新问题。代码已成功创建设备。它现在在构建内核时遇到了问题。
  • 更改 CL_DEVICE_TYPE_GPU 时有效;但只是在某些课程中
  • 现在已经足够了,谢谢 Tim chils
猜你喜欢
  • 2013-03-08
  • 2015-04-06
  • 2015-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-14
  • 2017-07-01
相关资源
最近更新 更多