diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 0f4a67e87c79bdd5d13d4b007dc8f29d6c2de284..dd9a9332289ac52b739dd9e8a9f3aee18bea4bbb 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -73,6 +73,19 @@ Python 3.5 AMD Fiji: - amd-fiji except: - tags +Python 3.5 POCL CL 1.1: + script: + - export PY_EXE=python3.5 + - export PYOPENCL_TEST=portable + - export EXTRA_INSTALL="numpy mako" + - curl -L -O -k https://gitlab.tiker.net/inducer/ci-support/raw/master/build-and-test-py-project.sh + - ./configure.py --cl-pretend-version=1.1 + - ". ./build-and-test-py-project.sh" + tags: + - python3.5 + - pocl + except: + - tags Python 2.7 POCL: script: - export PY_EXE=python2.7 diff --git a/src/c_wrapper/buffer.cpp b/src/c_wrapper/buffer.cpp index 75480398e72dbe3e24351cee0589a77fb7111769..22d7ec1c66953cbced8c4309535a22e047f6f658 100644 --- a/src/c_wrapper/buffer.cpp +++ b/src/c_wrapper/buffer.cpp @@ -103,13 +103,13 @@ enqueue_copy_buffer(clobj_t *evt, clobj_t _queue, clobj_t _src, clobj_t _dst, }); } -#if PYOPENCL_CL_VERSION >= 0x1020 error* enqueue_fill_buffer(clobj_t *evt, clobj_t _queue, clobj_t _mem, void *pattern, size_t psize, size_t offset, size_t size, const clobj_t *_wait_for, uint32_t num_wait_for) { +#if PYOPENCL_CL_VERSION >= 0x1020 const auto wait_for = buf_from_class(_wait_for, num_wait_for); auto queue = static_cast(_queue); auto mem = static_cast(_mem); @@ -119,11 +119,11 @@ enqueue_fill_buffer(clobj_t *evt, clobj_t _queue, clobj_t _mem, void *pattern, psize, offset, size, wait_for, event_out(evt)); }); -} - +#else + PYOPENCL_UNSUPPORTED(clEnqueueFillBuffer, "CL 1.1 and below") #endif +} -#if PYOPENCL_CL_VERSION >= 0x1010 // {{{ rectangular transfers @@ -137,6 +137,7 @@ enqueue_read_buffer_rect(clobj_t *evt, clobj_t _queue, clobj_t _mem, void *buf, const clobj_t *_wait_for, uint32_t num_wait_for, int block, void *pyobj) { +#if PYOPENCL_CL_VERSION >= 0x1010 const auto wait_for = buf_from_class(_wait_for, num_wait_for); auto queue = static_cast(_queue); auto mem = static_cast(_mem); @@ -151,6 +152,9 @@ enqueue_read_buffer_rect(clobj_t *evt, clobj_t _queue, clobj_t _mem, void *buf, host_orig, reg, buf_pitches[0], buf_pitches[1], host_pitches[0], host_pitches[1], buf, wait_for, nanny_event_out(evt, pyobj)); }); +#else + PYOPENCL_UNSUPPORTED(clEnqueueReadBufferRect, "CL 1.0") +#endif } error* @@ -163,6 +167,7 @@ enqueue_write_buffer_rect(clobj_t *evt, clobj_t _queue, clobj_t _mem, void *buf, const clobj_t *_wait_for, uint32_t num_wait_for, int block, void *pyobj) { +#if PYOPENCL_CL_VERSION >= 0x1010 const auto wait_for = buf_from_class(_wait_for, num_wait_for); auto queue = static_cast(_queue); auto mem = static_cast(_mem); @@ -177,6 +182,9 @@ enqueue_write_buffer_rect(clobj_t *evt, clobj_t _queue, clobj_t _mem, void *buf, host_orig, reg, buf_pitches[0], buf_pitches[1], host_pitches[0], host_pitches[1], buf, wait_for, nanny_event_out(evt, pyobj)); }); +#else + PYOPENCL_UNSUPPORTED(clEnqueueWriteBufferRect, "CL 1.0") +#endif } error* @@ -188,6 +196,7 @@ enqueue_copy_buffer_rect(clobj_t *evt, clobj_t _queue, clobj_t _src, const size_t *_dst_pitches, size_t dst_pitches_l, const clobj_t *_wait_for, uint32_t num_wait_for) { +#if PYOPENCL_CL_VERSION >= 0x1010 const auto wait_for = buf_from_class(_wait_for, num_wait_for); auto queue = static_cast(_queue); auto src = static_cast(_src); @@ -203,6 +212,9 @@ enqueue_copy_buffer_rect(clobj_t *evt, clobj_t _queue, clobj_t _src, reg, src_pitches[0], src_pitches[1], dst_pitches[0], dst_pitches[1], wait_for, event_out(evt)); }); +#else + PYOPENCL_UNSUPPORTED(clEnqueueCopyBufferRect, "CL 1.0") +#endif } // }}} @@ -211,10 +223,12 @@ error* buffer__get_sub_region(clobj_t *_sub_buf, clobj_t _buf, size_t orig, size_t size, cl_mem_flags flags) { +#if PYOPENCL_CL_VERSION >= 0x1010 auto buf = static_cast(_buf); return c_handle_error([&] { *_sub_buf = buf->get_sub_region(orig, size, flags); }); -} - +#else + PYOPENCL_UNSUPPORTED(clCreateSubBuffer, "CL 1.0") #endif +} diff --git a/src/c_wrapper/command_queue.cpp b/src/c_wrapper/command_queue.cpp index a897540adb536ed1d8d4ff45fcf2deb5c038c0eb..c540064fb8dd02dde9f5449fc6b11eaf7a291fcb 100644 --- a/src/c_wrapper/command_queue.cpp +++ b/src/c_wrapper/command_queue.cpp @@ -81,31 +81,37 @@ command_queue__flush(clobj_t queue) }); } -#if PYOPENCL_CL_VERSION >= 0x1020 error* enqueue_marker_with_wait_list(clobj_t *evt, clobj_t _queue, const clobj_t *_wait_for, uint32_t num_wait_for) { +#if PYOPENCL_CL_VERSION >= 0x1020 auto queue = static_cast(_queue); const auto wait_for = buf_from_class(_wait_for, num_wait_for); return c_handle_error([&] { pyopencl_call_guarded(clEnqueueMarkerWithWaitList, queue, wait_for, event_out(evt)); }); +#else + PYOPENCL_UNSUPPORTED(clEnqueueMarkerWithWaitList, "CL 1.1 and below") +#endif } error* enqueue_barrier_with_wait_list(clobj_t *evt, clobj_t _queue, const clobj_t *_wait_for, uint32_t num_wait_for) { +#if PYOPENCL_CL_VERSION >= 0x1020 auto queue = static_cast(_queue); const auto wait_for = buf_from_class(_wait_for, num_wait_for); return c_handle_error([&] { pyopencl_call_guarded(clEnqueueBarrierWithWaitList, queue, wait_for, event_out(evt)); }); -} +#else + PYOPENCL_UNSUPPORTED(clEnqueueBarrierWithWaitList, "CL 1.1 and below") #endif +} error* enqueue_marker(clobj_t *evt, clobj_t _queue) diff --git a/src/c_wrapper/device.cpp b/src/c_wrapper/device.cpp index 39ebfd0f2cbd99e541501d129f82554edcf07e05..a539df84ff4b9fea880ddda6143c53b1f2737d6f 100644 --- a/src/c_wrapper/device.cpp +++ b/src/c_wrapper/device.cpp @@ -288,17 +288,19 @@ device::create_sub_devices(const cl_device_partition_property *props) // c wrapper -#if PYOPENCL_CL_VERSION >= 0x1020 error* device__create_sub_devices(clobj_t _dev, clobj_t **_devs, uint32_t *num_devices, const cl_device_partition_property *props) { +#if PYOPENCL_CL_VERSION >= 0x1020 auto dev = static_cast(_dev); return c_handle_error([&] { auto devs = dev->create_sub_devices(props); *num_devices = (uint32_t)devs.len(); *_devs = devs.release(); }); -} +#else + PYOPENCL_UNSUPPORTED(clCreateImage, "CL 1.1 and below") #endif +} diff --git a/src/c_wrapper/error.h b/src/c_wrapper/error.h index 5730f361c50d0442a735297c83dbbca91406cc22..b635524a1f6d9a97c7e7b57b7bc9cd9582664378 100644 --- a/src/c_wrapper/error.h +++ b/src/c_wrapper/error.h @@ -25,7 +25,7 @@ auto err = (error*)malloc(sizeof(error)); \ err->routine = strdup(#ROUTINE); \ err->msg = strdup("unsupported in " VERSION); \ - err->code = CL_INVALID_VALUE \ + err->code = CL_INVALID_VALUE; \ err->other = 0; \ return err; diff --git a/src/c_wrapper/image.cpp b/src/c_wrapper/image.cpp index 12f0f563e5340e841f14aca3c91bd40ebfb6c1b7..6f571f3208d13f3fd80e22db604458f7a7ca2617 100644 --- a/src/c_wrapper/image.cpp +++ b/src/c_wrapper/image.cpp @@ -174,13 +174,13 @@ enqueue_write_image(clobj_t *evt, clobj_t _queue, clobj_t _mem, }); } -#if PYOPENCL_CL_VERSION >= 0x1020 error* enqueue_fill_image(clobj_t *evt, clobj_t _queue, clobj_t mem, const void *color, const size_t *_orig, size_t orig_l, const size_t *_reg, size_t reg_l, const clobj_t *_wait_for, uint32_t num_wait_for) { +#if PYOPENCL_CL_VERSION >= 0x1020 // TODO debug color auto queue = static_cast(_queue); auto img = static_cast(mem); @@ -191,8 +191,10 @@ enqueue_fill_image(clobj_t *evt, clobj_t _queue, clobj_t mem, pyopencl_call_guarded(clEnqueueFillImage, queue, img, color, orig, reg, wait_for, event_out(evt)); }); -} +#else + PYOPENCL_UNSUPPORTED(clEnqueueFillImage, "CL 1.1 and below") #endif +} // {{{ image transfers diff --git a/src/c_wrapper/kernel.cpp b/src/c_wrapper/kernel.cpp index 9c268ed68cddb86e9e3b9d9a2118e2d45468b700..d01d5950191c50a27d34eec4e659cc7cece1e8b9 100644 --- a/src/c_wrapper/kernel.cpp +++ b/src/c_wrapper/kernel.cpp @@ -155,17 +155,19 @@ kernel__get_work_group_info(clobj_t _knl, cl_kernel_work_group_info param, }); } -#if PYOPENCL_CL_VERSION >= 0x1020 error* kernel__get_arg_info(clobj_t _knl, cl_uint idx, cl_kernel_arg_info param, generic_info *out) { +#if PYOPENCL_CL_VERSION >= 0x1020 auto knl = static_cast(_knl); return c_handle_error([&] { *out = knl->get_arg_info(idx, param); }); -} +#else + PYOPENCL_UNSUPPORTED(clKernelGetArgInfo, "CL 1.1 and below") #endif +} error* enqueue_nd_range_kernel(clobj_t *evt, clobj_t _queue, clobj_t _knl, diff --git a/src/c_wrapper/platform.cpp b/src/c_wrapper/platform.cpp index 13b890f1f8381c038afd18cbd9ca3df9f0616c79..21a896b207b56f0d155f6e730651912a9ea04226 100644 --- a/src/c_wrapper/platform.cpp +++ b/src/c_wrapper/platform.cpp @@ -95,13 +95,15 @@ platform__get_devices(clobj_t _plat, clobj_t **_devices, }); } -#if PYOPENCL_CL_VERSION >= 0x1020 error* platform__unload_compiler(clobj_t plat) { +#if PYOPENCL_CL_VERSION >= 0x1020 return c_handle_error([&] { pyopencl_call_guarded(clUnloadPlatformCompiler, static_cast(plat)); }); -} +#else + PYOPENCL_UNSUPPORTED(clUnloadPlatformCompiler, "CL 1.1 and below") #endif +} diff --git a/src/c_wrapper/program.cpp b/src/c_wrapper/program.cpp index 39bf829b2ca3041ae1a2055b5461f5e171734afd..849eaf101341fe36d95a3fa6c909ff4b6d0901f4 100644 --- a/src/c_wrapper/program.cpp +++ b/src/c_wrapper/program.cpp @@ -189,12 +189,12 @@ program__get_build_info(clobj_t _prog, clobj_t _dev, }); } -#if PYOPENCL_CL_VERSION >= 0x1020 error* program__create_with_builtin_kernels(clobj_t *_prg, clobj_t _ctx, const clobj_t *_devs, uint32_t num_devs, const char *names) { +#if PYOPENCL_CL_VERSION >= 0x1020 const auto devs = buf_from_class(_devs, num_devs); auto ctx = static_cast(_ctx); return c_handle_error([&] { @@ -202,6 +202,9 @@ program__create_with_builtin_kernels(clobj_t *_prg, clobj_t _ctx, ctx, devs, names); *_prg = new_program(prg); }); +#else + PYOPENCL_UNSUPPORTED(clCreateProgramWithBuiltInKernels, "CL 1.1 and below") +#endif } error* @@ -209,10 +212,14 @@ program__compile(clobj_t _prg, const char *opts, const clobj_t *_devs, size_t num_devs, const clobj_t *_prgs, const char *const *names, size_t num_hdrs) { +#if PYOPENCL_CL_VERSION >= 0x1020 auto prg = static_cast(_prg); return c_handle_error([&] { prg->compile(opts, _devs, num_devs, _prgs, names, num_hdrs); }); +#else + PYOPENCL_UNSUPPORTED(clCompileProgram, "CL 1.1 and below") +#endif } error* @@ -220,6 +227,7 @@ program__link(clobj_t *_prg, clobj_t _ctx, const clobj_t *_prgs, size_t num_prgs, const char *opts, const clobj_t *_devs, size_t num_devs) { +#if PYOPENCL_CL_VERSION >= 0x1020 const auto devs = buf_from_class(_devs, num_devs); const auto prgs = buf_from_class(_prgs, num_prgs); auto ctx = static_cast(_ctx); @@ -228,8 +236,10 @@ program__link(clobj_t *_prg, clobj_t _ctx, const clobj_t *_prgs, prgs, nullptr, nullptr); *_prg = new_program(prg); }); -} +#else + PYOPENCL_UNSUPPORTED(clLinkProgram, "CL 1.1 and below") #endif +} error* program__all_kernels(clobj_t _prg, clobj_t **_knl, uint32_t *size)