Re: OpenCL OpenCLFractalRender3D invalid binary error
- To: mathgroup at smc.vnet.net
- Subject: [mg125644] Re: OpenCL OpenCLFractalRender3D invalid binary error
- From: Bert RAM Aerts <bert.ram.aerts at gmail.com>
- Date: Sat, 24 Mar 2012 02:04:00 -0500 (EST)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- References: <jj7dtg$2e4$1@smc.vnet.net>
Problem solved itself :-)
By installing the latest nVIDIA driver 295.33.
Now both CUDA and OpenCL work just fine for all examples I tried.
Op woensdag 7 maart 2012 11:39:44 UTC+1 schreef Bert RAM Aerts het volgende:
> I have a Dell Inspiron 1720 with
> Core 2 Duo 7300
> Linux Mageia 1 x86_64
> nVIDIA GeForce 8600M GT with latest driver NVIDIA-Linux-x86_64-295.20.run
> Mathematica 8.0.4.0 Home Edition x86_64
> ~/.Mathematica/Paclets/Repository/CUDAResources-Lin64-8.0.4.1
>
> Following commands all work fine:
> ---------------------------------
>
> Needs["OpenCLLink`"]
> OpenCLQ[]
> True
> OpenCLInformation[]
> {1 -> {"Version" -> "OpenCL 1.1 CUDA 4.2.1", "Name" -> "NVIDIA CUDA",
> "Vendor" -> "NVIDIA Corporation",
> "Extensions" -> {"cl_khr_byte_addressable_store", "cl_khr_icd",
> "cl_khr_gl_sharing", "cl_nv_compiler_options",
> "cl_nv_device_attribute_query", "cl_nv_pragma_unroll"},
> 1 -> {"Type" -> "GPU", "Name" -> "GeForce 8600M GT",
> "Version" -> "OpenCL 1.0 CUDA",
> "Extensions" -> {"cl_khr_byte_addressable_store", "cl_khr_icd",
> "cl_khr_gl_sharing", "cl_nv_compiler_options",
> "cl_nv_device_attribute_query", "cl_nv_pragma_unroll",
> "cl_khr_global_int32_base_atomics",
> "cl_khr_global_int32_extended_atomics"},
> "Driver Version" -> "295.20", "Vendor" -> "NVIDIA Corporation",
> "Profile" -> "FULL_PROFILE", "Vendor ID" -> 4318,
> "Compute Units" -> 4, "Core Count" -> 32,
> "Maximum Work Item Dimensions" -> 3,
> "Maximum Work Item Sizes" -> {512, 512, 64},
> "Maximum Work Group Size" -> 512,
> "Preferred Vector Width Character" -> 1,
> "Preferred Vector Width Short" -> 1,
> "Preferred Vector Width Integer" -> 1,
> "Preferred Vector Width Long" -> 1,
> "Preferred Vector Width Float" -> 1,
> "Preferred Vector Width Double" -> 0,
> "Maximum Clock Frequency" -> 950, "Address Bits" -> 32,
> "Maximum Memory Allocation Size" -> 134217728,
> "Image Support" -> True, "Maximum Read Image Arguments" -> 128,
> "Maximum Write Image Arguments" -> 8,
> "Maximum Image2D Width" -> 4096,
> "Maximum Image2D Height" -> 16383,
> "Maximum Image3D Width" -> 2048,
> "Maximum Image3D Height" -> 2048,
> "Maximum Image3D Depth" -> 2048, "Maximum Samplers" -> 16,
> "Maximum Parameter Size" -> 4352,
> "Memory Base Address Align" -> 2048,
> "Memory Data Type Align Size" -> 128,
> "Floating Point Precision Configuration" -> {"Infinity", "NaNs",
> "Round to Nearest", "Round to Infinity", "Round to Zero",
> "IEEE754-2008 Fused MAD"},
> "Global Memory Cache Type" -> "None",
> "Global Memory Cache Line Size" -> 0,
> "Global Memory Cache Size" -> 0,
> "Global Memory Size" -> 268107776,
> "Maximum Constant Buffer Size" -> 65536,
> "Maximum Constant Arguments" -> 9,
> "Local Memory Type" -> "Local", "Local Memory Size" -> 16384,
> "Error Correction Support" -> False,
> "Profiling Timer Resolution" -> 1000, "Endian Little" -> True,
> "Available" -> True, "Compiler Available" -> True,
> "Execution Capabilities" -> {"Kernel Execution"},
> "Command Queue Properties" -> {"Out of Order Execution",
> "Profiling Enabled"}}}}
>
> doubleFun = OpenCLFunctionLoad["
> __kernel void doubleVec(__global mint * in, mint length) {
> int index = get_global_id(0);
>
> if (index < length)
> in[index] = 2*in[index];
> }", "doubleVec", {{_Integer}, _Integer}, 256]
> vec = Range[20];
> doubleFun[vec, 20]
>
> OpenCLMersenneTwister[100]
>
> srcf = FileNameJoin[{$OpenCLLinkPath, "SupportFiles",
> "FFT_Kernels.cl"}]
> in = RandomReal[1.0, 1024];
> out = ConstantArray[0.0, 1024];
> MapThread[Complex, fft[in, out, 64]][[;; 50]]
>
> But following command returns an error:
> ---------------------------------------
>
> OpenCLFractalRender3D[]
> OpenCLFunctionLoad::invbin: OpenCLLink encountered an invalid binary.
>
> Please note that the nVIDIA driver already contains CUDA 4.2.1 OpenCL
> 1.1 as shown in OpenCLInformation[], while Mathematica CUDA is still at
> version 4 and not the latest 4.1. Second note: GeForce 8600M GT does
> not support doubles, only floats.
>
> How can I obtain an error message that tells me more?
>
> My installation should be fine as CUDA is OK:
> ---------------------------------------------
>
> All examples from CUDA that I tried out, work fine like e.g. Mandelbulb
>
> Needs["CUDALink`"]
> CUDAQ[]
> width = 640;
> height = 480;
> iconfig = {width, height, 1, 0, 1, 6};
> config = {0.001, 0.0, 0.0, 0.0, 8.0, 15.0, 10.0, 5.0};
> camera = {{2.0, 2.0, 2.0}, {0.0, 0.0, 0.0}};
> AppendTo[camera, Normalize[camera[[2]] - camera[[1]]]];
> AppendTo[camera,
> 0.75*Normalize[Cross[camera[[3]], {0.0, 1.0, 0.0}]]];
> AppendTo[camera, 0.75*Normalize[Cross[camera[[4]], camera[[3]]]]];
> config = Join[{config, Flatten[camera]}];
> pixelsMem = CUDAMemoryAllocate["Float", {height, width, 3}]
> srcf = FileNameJoin[{$CUDALinkPath, "SupportFiles", "mandelbulb.cu"}]
> mandelbulb =
> CUDAFunctionLoad[{srcf},
> "MandelbulbGPU", {{"Float", _, "Output"}, {"Float", _,
> "Input"}, {"Integer32", _, "Input"}, "Integer32", "Float",
> "Float"}, {16}, "UnmangleCode" -> False]
> mandelbulb[pixelsMem, Flatten[config], iconfig, 0, 0.0,
> 0.0, {width*height*3}];
> pixels = CUDAMemoryGet[pixelsMem];
> Image[pixels]
Op woensdag 7 maart 2012 11:39:44 UTC+1 schreef Bert RAM Aerts het volgende:
> I have a Dell Inspiron 1720 with
> Core 2 Duo 7300
> Linux Mageia 1 x86_64
> nVIDIA GeForce 8600M GT with latest driver NVIDIA-Linux-x86_64-295.20.run
> Mathematica 8.0.4.0 Home Edition x86_64
> ~/.Mathematica/Paclets/Repository/CUDAResources-Lin64-8.0.4.1
>
> Following commands all work fine:
> ---------------------------------
>
> Needs["OpenCLLink`"]
> OpenCLQ[]
> True
> OpenCLInformation[]
> {1 -> {"Version" -> "OpenCL 1.1 CUDA 4.2.1", "Name" -> "NVIDIA CUDA",
> "Vendor" -> "NVIDIA Corporation",
> "Extensions" -> {"cl_khr_byte_addressable_store", "cl_khr_icd",
> "cl_khr_gl_sharing", "cl_nv_compiler_options",
> "cl_nv_device_attribute_query", "cl_nv_pragma_unroll"},
> 1 -> {"Type" -> "GPU", "Name" -> "GeForce 8600M GT",
> "Version" -> "OpenCL 1.0 CUDA",
> "Extensions" -> {"cl_khr_byte_addressable_store", "cl_khr_icd",
> "cl_khr_gl_sharing", "cl_nv_compiler_options",
> "cl_nv_device_attribute_query", "cl_nv_pragma_unroll",
> "cl_khr_global_int32_base_atomics",
> "cl_khr_global_int32_extended_atomics"},
> "Driver Version" -> "295.20", "Vendor" -> "NVIDIA Corporation",
> "Profile" -> "FULL_PROFILE", "Vendor ID" -> 4318,
> "Compute Units" -> 4, "Core Count" -> 32,
> "Maximum Work Item Dimensions" -> 3,
> "Maximum Work Item Sizes" -> {512, 512, 64},
> "Maximum Work Group Size" -> 512,
> "Preferred Vector Width Character" -> 1,
> "Preferred Vector Width Short" -> 1,
> "Preferred Vector Width Integer" -> 1,
> "Preferred Vector Width Long" -> 1,
> "Preferred Vector Width Float" -> 1,
> "Preferred Vector Width Double" -> 0,
> "Maximum Clock Frequency" -> 950, "Address Bits" -> 32,
> "Maximum Memory Allocation Size" -> 134217728,
> "Image Support" -> True, "Maximum Read Image Arguments" -> 128,
> "Maximum Write Image Arguments" -> 8,
> "Maximum Image2D Width" -> 4096,
> "Maximum Image2D Height" -> 16383,
> "Maximum Image3D Width" -> 2048,
> "Maximum Image3D Height" -> 2048,
> "Maximum Image3D Depth" -> 2048, "Maximum Samplers" -> 16,
> "Maximum Parameter Size" -> 4352,
> "Memory Base Address Align" -> 2048,
> "Memory Data Type Align Size" -> 128,
> "Floating Point Precision Configuration" -> {"Infinity", "NaNs",
> "Round to Nearest", "Round to Infinity", "Round to Zero",
> "IEEE754-2008 Fused MAD"},
> "Global Memory Cache Type" -> "None",
> "Global Memory Cache Line Size" -> 0,
> "Global Memory Cache Size" -> 0,
> "Global Memory Size" -> 268107776,
> "Maximum Constant Buffer Size" -> 65536,
> "Maximum Constant Arguments" -> 9,
> "Local Memory Type" -> "Local", "Local Memory Size" -> 16384,
> "Error Correction Support" -> False,
> "Profiling Timer Resolution" -> 1000, "Endian Little" -> True,
> "Available" -> True, "Compiler Available" -> True,
> "Execution Capabilities" -> {"Kernel Execution"},
> "Command Queue Properties" -> {"Out of Order Execution",
> "Profiling Enabled"}}}}
>
> doubleFun = OpenCLFunctionLoad["
> __kernel void doubleVec(__global mint * in, mint length) {
> int index = get_global_id(0);
>
> if (index < length)
> in[index] = 2*in[index];
> }", "doubleVec", {{_Integer}, _Integer}, 256]
> vec = Range[20];
> doubleFun[vec, 20]
>
> OpenCLMersenneTwister[100]
>
> srcf = FileNameJoin[{$OpenCLLinkPath, "SupportFiles",
> "FFT_Kernels.cl"}]
> in = RandomReal[1.0, 1024];
> out = ConstantArray[0.0, 1024];
> MapThread[Complex, fft[in, out, 64]][[;; 50]]
>
> But following command returns an error:
> ---------------------------------------
>
> OpenCLFractalRender3D[]
> OpenCLFunctionLoad::invbin: OpenCLLink encountered an invalid binary.
>
> Please note that the nVIDIA driver already contains CUDA 4.2.1 OpenCL
> 1.1 as shown in OpenCLInformation[], while Mathematica CUDA is still at
> version 4 and not the latest 4.1. Second note: GeForce 8600M GT does
> not support doubles, only floats.
>
> How can I obtain an error message that tells me more?
>
> My installation should be fine as CUDA is OK:
> ---------------------------------------------
>
> All examples from CUDA that I tried out, work fine like e.g. Mandelbulb
>
> Needs["CUDALink`"]
> CUDAQ[]
> width = 640;
> height = 480;
> iconfig = {width, height, 1, 0, 1, 6};
> config = {0.001, 0.0, 0.0, 0.0, 8.0, 15.0, 10.0, 5.0};
> camera = {{2.0, 2.0, 2.0}, {0.0, 0.0, 0.0}};
> AppendTo[camera, Normalize[camera[[2]] - camera[[1]]]];
> AppendTo[camera,
> 0.75*Normalize[Cross[camera[[3]], {0.0, 1.0, 0.0}]]];
> AppendTo[camera, 0.75*Normalize[Cross[camera[[4]], camera[[3]]]]];
> config = Join[{config, Flatten[camera]}];
> pixelsMem = CUDAMemoryAllocate["Float", {height, width, 3}]
> srcf = FileNameJoin[{$CUDALinkPath, "SupportFiles", "mandelbulb.cu"}]
> mandelbulb =
> CUDAFunctionLoad[{srcf},
> "MandelbulbGPU", {{"Float", _, "Output"}, {"Float", _,
> "Input"}, {"Integer32", _, "Input"}, "Integer32", "Float",
> "Float"}, {16}, "UnmangleCode" -> False]
> mandelbulb[pixelsMem, Flatten[config], iconfig, 0, 0.0,
> 0.0, {width*height*3}];
> pixels = CUDAMemoryGet[pixelsMem];
> Image[pixels]