OpenCL segmentation fault when execute tvm.cl or tvm.build OpenCL program using Intel Device
See original GitHub issueEnv.
- My laptop, Ubuntu 16.04 64bit
- I set
USE_OPENCL=1
inconfig.mk
Note: my opencl device isIntel(R) HD Graphics IvyBridge M GT2
- Target: x86_64-linux-gnu
- clinfo cmd is okay as below and my laptop can make OpenCL program successfully using
gcc abc.cc -o abc -lOpenCL
cmd:
Number of platforms 1
Platform Name Intel Gen OCL Driver
Platform Vendor Intel
Platform Version OpenCL 1.2 beignet 1.1.1
Platform Profile FULL_PROFILE
Platform Extensions cl_khr_global_int32_base_atomics cl_khr_global_int32_extended_atomics cl_khr_local_int32_base_atomics cl_khr_local_int32_extended_atomics cl_khr_byte_addressable_store cl_khr_spir cl_khr_icd
Platform Extensions function suffix Intel
Platform Name Intel Gen OCL Driver
Number of devices 1
Device Name Intel(R) HD Graphics IvyBridge M GT2
Device Vendor Intel
Device Vendor ID 0x8086
Device Version OpenCL 1.2 beignet 1.1.1
Driver Version 1.1.1
Device OpenCL C Version OpenCL C 1.2 beignet 1.1.1
Device Type GPU
Device Profile FULL_PROFILE
Max compute units 16
Max clock frequency 1000MHz
Device Partition (core)
Max number of sub-devices 1
Supported partition types None, None, None
Max work item dimensions 3
Max work item sizes 512x512x512
Max work group size 512
Preferred work group size multiple 16
Preferred / native vector sizes
char 16 / 8
short 8 / 8
int 4 / 4
long 2 / 2
half 0 / 8 (n/a)
float 4 / 4
double 0 / 2 (n/a)
Half-precision Floating-point support (n/a)
Single-precision Floating-point support (core)
Denormals No
Infinity and NANs Yes
Round to nearest Yes
Round to zero No
Round to infinity No
IEEE754-2008 fused multiply-add No
Support is emulated in software No
Correctly-rounded divide and sqrt operations No
Double-precision Floating-point support (n/a)
Address bits 32, Little-Endian
Global memory size 2147483648 (2GiB)
Error Correction support No
Max memory allocation 1073741824 (1024MiB)
Unified memory for Host and Device Yes
Minimum alignment for any data type 128 bytes
Alignment of base address 1024 bits (128 bytes)
Global Memory cache type Read/Write
Global Memory cache size 8192
Global Memory cache line 64 bytes
Image support Yes
Max number of samplers per kernel 16
Max size for 1D images from buffer 65536 pixels
Max 1D or 2D image array size 2048 images
Max 2D image size 8192x8192 pixels
Max 3D image size 8192x8192x2048 pixels
Max number of read image args 128
Max number of write image args 8
Local memory type Global
Local memory size 65536 (64KiB)
Max constant buffer size 134217728 (128MiB)
Max number of constant args 8
Max size of kernel argument 1024
Queue properties
Out-of-order execution No
Profiling Yes
Prefer user sync for interop Yes
Profiling timer resolution 80ns
Execution capabilities
Run OpenCL kernels Yes
Run native kernels Yes
SPIR versions <printDeviceInfo:138: get SPIR versions size : error -30>
printf() buffer size 1048576 (1024KiB)
Built-in kernels __cl_copy_region_align4;__cl_copy_region_align16;__cl_cpy_region_unalign_same_offset;__cl_copy_region_unalign_dst_offset;__cl_copy_region_unalign_src_offset;__cl_copy_buffer_rect;__cl_copy_image_1d_to_1d;__cl_copy_image_2d_to_2d;__cl_copy_image_3d_to_2d;__cl_copy_image
_2d_to_3d;__cl_copy_image_3d_to_3d;__cl_copy_image_2d_to_buffer;__cl_copy_image_3d_to_buffer;__cl_copy_buffer_to_image_2d;__cl_copy_buffer_to_image_3d;__cl_fill_region_unalign;__cl_fill_region_align2;__cl_fill_region_align4;__cl_fill_region_align8_2;__cl_fill_region_align8_4;__cl_fill_region_align8_8;__cl_fill_region_
align8_16;__cl_fill_region_align128;__cl_fill_image_1d;__cl_fill_image_1d_array;__cl_fill_image_2d;__cl_fill_image_2d_array;__cl_fill_image_3d;
Device Available Yes
Compiler Available Yes
Linker Available Yes
Device Extensions cl_khr_global_int32_base_atomics cl_khr_global_int32_extended_atomics cl_khr_local_int32_base_atomics cl_khr_local_int32_extended_atomics cl_khr_byte_addressable_store cl_khr_spir cl_khr_icd
NULL platform behavior
clGetPlatformInfo(NULL, CL_PLATFORM_NAME, ...) Intel Gen OCL Driver
clGetDeviceIDs(NULL, CL_DEVICE_TYPE_ALL, ...) Success [Intel]
clCreateContext(NULL, ...) [default] Success [Intel]
clCreateContextFromType(NULL, CL_DEVICE_TYPE_CPU) No devices found in platform
clCreateContextFromType(NULL, CL_DEVICE_TYPE_GPU) Success (1)
Platform Name Intel Gen OCL Driver
Device Name Intel(R) HD Graphics IvyBridge M GT2
clCreateContextFromType(NULL, CL_DEVICE_TYPE_ACCELERATOR) No devices found in platform
clCreateContextFromType(NULL, CL_DEVICE_TYPE_CUSTOM) No devices found in platform
clCreateContextFromType(NULL, CL_DEVICE_TYPE_ALL) Success (1)
Platform Name Intel Gen OCL Driver
Device Name Intel(R) HD Graphics IvyBridge M GT2
ICD loader properties
ICD loader Name OpenCL ICD Loader
ICD loader Vendor OCL Icd free software
ICD loader Version 2.2.8
ICD loader Profile OpenCL 1.2
NOTE: your OpenCL library declares to support OpenCL 1.2,
but it seems to support up to OpenCL 2.1 too.
Code
import tvm
import numpy as np
debug = True
target = "llvm -target=x86_64-linux-gnu"
def test_add(n=1024):
n = tvm.var("n")
A = tvm.placeholder((n,), name="A")
B = tvm.placeholder((n,), name="B")
C = tvm.compute(A.shape, lambda i: A[i]+B[i], name="C")
print(type(C))
s = tvm.create_schedule(C.op)
if debug:
print(tvm.lower(s, [A, B, C], simple_mode=True))
bx, tx = s[C].split(C.op.axis[0], factor=32)
s[C].bind(bx, tvm.thread_axis("blockIdx.x"))
s[C].bind(tx, tvm.thread_axis((0, n), "threadIdx.x"))
print("bind success")
if debug:
print(tvm.lower(s, [A, B, C], simple_mode=True))
add_func = tvm.build(s, [A, B, C], "opencl", name="myadd")
print("build success")
ctx = tvm.cl(0)
a = tvm.nd.array(np.random.uniform(size=n).astype(A.dtype), ctx)
b = tvm.nd.array(np.random.uniform(size=n).astype(B.dtype), ctx)
c = tvm.nd.array(np.zeros(n, dtype=C.dtye), ctx)
add_func(a, b, c)
print("run success")
np.testing.assert_allclose(c.asnumpy(), a.asnumpy() + b.asnumpy())
print("check success")
dev_module = add_func.imported_module[0]
print("----- opencl code ------")
print(dev_module.get_source())
test_add()
Error Log
$ python vecadd_opencl_local.py
<class 'tvm.tensor.Tensor'>
produce C {
for (i, 0, n) {
C[i] = (A[i] + B[i])
}
}
bind success
produce C {
// attr [iter_var(blockIdx.x, , blockIdx.x)] thread_extent = ((n + 31)/32)
// attr [iter_var(threadIdx.x, Range(min=0, extent=n), threadIdx.x)] thread_extent = 32
if (likely(((blockIdx.x*32) < (n - threadIdx.x)))) {
C[((blockIdx.x*32) + threadIdx.x)] = (A[((blockIdx.x*32) + threadIdx.x)] + B[((blockIdx.x*32) + threadIdx.x)])
}
}
Segmentation fault (core dumped)
Some friends said it’s strange to use Intel(R) HD Graphics IvyBridge M GT2
as OpenCL device. So I changed ctx = tvm.cl(0)
to ctx = tvm.cpu(0)
and ctx = tvm.gpu(0)
. However, these situation got same errors as above.
Issue Analytics
- State:
- Created 6 years ago
- Comments:5 (5 by maintainers)
Top Results From Across the Web
OpenCL Runtime error - Apache TVM Discuss
I am trying to run this code with opencl target, but I get the following error (it runs with llvm target without a...
Read more >OpenCL build failure with error code -1073741511
Solved: I'm trying my first OpenCL program. I installed "OpenCL™ Tools for Visual Studio" From . Then, I created a project in VS2019,...
Read more >(PDF) Cross-vendor programming abstraction for diverse ...
The user program defines the application in standard OpenVX and TVM library calls, which internally share the OpenCL context with each other ...
Read more >MIOpen: An Open Source Library For Deep Learning Primitives
MIOpen device-code consists of kernels written in OpenCL® , HIP [30] and GCN assembly [31], which may be compiled using clang [32].
Read more >accelerating science with directive-based programming on
(OneAPI [38], OpenARC [39], TVM [40], etc.) The OpenCL programming model is a critical component of this dissertation, and is.
Read more >Top Related Medium Post
No results found
Top Related StackOverflow Question
No results found
Troubleshoot Live Code
Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start FreeTop Related Reddit Thread
No results found
Top Related Hackernoon Post
No results found
Top Related Tweet
No results found
Top Related Dev.to Post
No results found
Top Related Hashnode Post
No results found
Top GitHub Comments
One quick thing to confirm is to check tvm.cl(0).exist
please do more debugs, for example, use gdb to get back trace on where does the failure happens, also you can try print out the code of ocl and see if you can directly compile and run it on the local machine.