Cekirdekler icon indicating copy to clipboard operation
Cekirdekler copied to clipboard

Any of the opencl 2 version does not work

Open rajxabc opened this issue 5 years ago • 38 comments

Tried all of the lazy build cekirdekler_dll_v1_4_1_opencl_2_0_updateXX versions. but unable to make them work in .NET4.7 . Throws,"Object reference not set to an instance of an object"

rajxabc avatar Jun 13 '19 02:06 rajxabc

Hi, can you write here the code you are tring to run? Seems like a usage error? Or my documentation error?

tugrul512bit avatar Jun 13 '19 06:06 tugrul512bit

Are you using threading binaries maybe that .net version only uses own threading dlls?

tugrul512bit avatar Jun 13 '19 06:06 tugrul512bit

Lazy builds were built on an FX8150. You may be missing some opportunities too, if you are on a new CPU, on top of some compiled code incompatibilities.

tugrul512bit avatar Jun 13 '19 07:06 tugrul512bit

public int ckmulti()
        {
            ClNumberCruncher gpu = new ClNumberCruncher(AcceleratorType.GPU | AcceleratorType.CPU, @"
    __kernel void test0(__global float * a)
    { 
        int i=get_global_id(0);
        a[i]+=3.1415f;
    }
");
            
        ClArray<float> f = arrayOfPIs;
            f.compute(gpu, 1, "test0", 1024);

            return 777;
        }

rajxabc avatar Jun 13 '19 07:06 rajxabc

it is same code works with "cekirdekler_dll_v1_4_1_opencl_1_2_" . and one more question please. how to pass const int parameter, nextParam allows only arrays . for ex :

__kernel void ScalarProd( __global double * v1, int v2) { int i = get_global_id(0); v1[i] = v1[i] * v2; }

            ");

rajxabc avatar Jun 13 '19 07:06 rajxabc

esxception

rajxabc avatar Jun 13 '19 08:06 rajxabc

Does arrayOfPIs work with older version but not with newer version? Is it something about constructors? Does ckMulti() get used in a constructor of main program?

tugrul512bit avatar Jun 13 '19 08:06 tugrul512bit

yes , it works with older version perfectly.

rajxabc avatar Jun 13 '19 08:06 rajxabc

The thing about "const scalar parameters" were not implemented. Currently only arrays are included. If you have 80 int parameters, single int array of length 80 will do the job although with less readability.

tugrul512bit avatar Jun 13 '19 08:06 tugrul512bit

I'll try that .net version today(or within 1 2 hours) and put results here.

tugrul512bit avatar Jun 13 '19 08:06 tugrul512bit

It could be AcceleratorType.GPU | AcceleratorType.CPU parameter error too.

tugrul512bit avatar Jun 13 '19 08:06 tugrul512bit

alright Tugrul, thank you.

rajxabc avatar Jun 13 '19 08:06 rajxabc

I have .net 4.5 and this works:

using System;
using System.Collections.Generic;
using System.Text;
using Cekirdekler;
using Cekirdekler.ClArrays;

namespace ConsoleApplication6
{
    class Program
    {
        static void Main(string[] args)
        {
            MyTester myTester = new MyTester();
            myTester.ckmulti();
        }
    }

    class MyTester
    {
        float[] arrayOfPIs = new float[1024];
        public int ckmulti()
        {
            ClNumberCruncher gpu = new ClNumberCruncher(AcceleratorType.GPU | AcceleratorType.CPU, @"
    __kernel void test0(__global float * a)
    { 
        int i=get_global_id(0);
        a[i]+=3.1415f;
    }
");

            ClArray<float> f = arrayOfPIs;
            f.compute(gpu, 1, "test0", 1024);
            Console.ReadKey();
            return 777;
        }


    }
}

tugrul512bit avatar Jun 13 '19 08:06 tugrul512bit

4.6.1 works too

tugrul512bit avatar Jun 13 '19 08:06 tugrul512bit

Is that a new update for windows or can it be specifically installed(4.7)? I'm on vs2015 currently.

tugrul512bit avatar Jun 13 '19 08:06 tugrul512bit

Or maybe you are using vs2017+ ?

tugrul512bit avatar Jun 13 '19 08:06 tugrul512bit

Can you check what exists in bottom of quick watch window? Is it a dll or something else?

tugrul512bit avatar Jun 13 '19 08:06 tugrul512bit

Also for the const scalar parameters, you are already creating a string for opencl. This can include global parameters in kernel compilation body instead of kernel header.

const int globalValue=@@@editGlobal1@@@; // replace with constant void kernel .....(){ ... globalValue.. }

And this will not cause bugs when there are 50-60 constant parameters because Nvidia/Amd GPUs have a limit on kernel parameters like 4kB or something. But only 1 array costs only 4-8 bytes for all parameters it includes.

tugrul512bit avatar Jun 13 '19 08:06 tugrul512bit

yes it is vS2017, which version did you use ? from these ? cekirdekler_dll_v1_4_1_opencl_2_0_update2.rar cekirdekler_dll_v1_4_1_opencl_2_0_update3.rar cekirdekler_dll_v1_4_1_opencl_2_0_update5.rar

" Exception thrown: 'System.NullReferenceException' in Cekirdekler.dll An unhandled exception of type 'System.NullReferenceException' occurred in Cekirdekler.dll Object reference not set to an instance of an object.

"

rajxabc avatar Jun 13 '19 08:06 rajxabc

If you add gpu.lastComputePerformanceReport(); before Console.readkey() you can see if it sees your devices like:



Compute-ID: 1  ----- Load Distributions:  [50.0%] - [50.0%] -----------------------------------------------------
Device 0(stream): Quadro K420                      ||| time: 44.86ms, workitems: 512
Device 1(stream): Quadro K420                      ||| time: 44.95ms, workitems: 512
-----------------------------------------------------------------------------------------------------------------

just to make sure that version sees devices.

tugrul512bit avatar Jun 13 '19 08:06 tugrul512bit

I'm using last versionof cekirdekler and vs2015 with .net 4.6.1.

tugrul512bit avatar Jun 13 '19 08:06 tugrul512bit

Did you include system threading . dll into your references?

tugrul512bit avatar Jun 13 '19 08:06 tugrul512bit

What happens if you don't include system threading .dll but include .net 4.7's own threading?

tugrul512bit avatar Jun 13 '19 08:06 tugrul512bit

gpu.lastComputePerformanceReport(); throws .... No OpenCL-capable device was found.

Exception thrown: 'System.NullReferenceException' in Cekirdekler.dll An unhandled exception of type 'System.NullReferenceException' occurred in Cekirdekler.dll Object reference not set to an instance of an object.

rajxabc avatar Jun 13 '19 08:06 rajxabc

ok i will UN- reference the threading dll and check

rajxabc avatar Jun 13 '19 08:06 rajxabc

Seems like opencl 2.0 problem too.

tugrul512bit avatar Jun 13 '19 08:06 tugrul512bit

What you successfully run was only opencl 1.2 right?

tugrul512bit avatar Jun 13 '19 08:06 tugrul512bit

The unworkable error message could be coming from "release" compiled dlls. Those will tell wrong error messages when debugged.

tugrul512bit avatar Jun 13 '19 08:06 tugrul512bit

You should really use the source code to compile for your own machine, on debug if you want debugging and on release if you need performance(with optimizations and unsafe code enabled). (both kutuphane.dll project and cekirdekler.dll project)

tugrul512bit avatar Jun 13 '19 08:06 tugrul512bit

I wrote this project to learn C# actually. There could be some basic errors about C# or its 2017+ versions.

tugrul512bit avatar Jun 13 '19 08:06 tugrul512bit

I tried all these cekirdekler_dll_v1_4_1_opencl_2_0_update2.rar cekirdekler_dll_v1_4_1_opencl_2_0_update3.rar cekirdekler_dll_v1_4_1_opencl_2_0_update5.rar

with reference to threading dll and and without . they don't work . Yes opencl 1.2 works.

I have VS2017 .Net4.7 . Thank you for the effort and suggestions . i will use opencl1.2 version.

Thank you

rajxabc avatar Jun 13 '19 08:06 rajxabc

Do you have opencl 2.0 drivers? What is your device? An intel igpu?

tugrul512bit avatar Jun 13 '19 08:06 tugrul512bit

Project was designed to filter experimental drivers out (for opencl 2.0). If yours have one, this could be that.

tugrul512bit avatar Jun 13 '19 08:06 tugrul512bit

Or maybe if its nvidia, and if its an old gpu, it may not have support for 2.0 without new drivers.

tugrul512bit avatar Jun 13 '19 08:06 tugrul512bit

PC1: intel Core i7 2600 + Geforce GT 710 PC2: AMD Ryzen 7 1800x + Geforce GTX 1060 3GB

all updated driver and Opencl 2.0

Tried to build Kutuphane on my device, "E1696 cannot open source file "CL/cl2.hpp" KutuphaneCL2"

some opencl2 sdk issue.

rajxabc avatar Jun 13 '19 09:06 rajxabc

Thank you Tugurul for your effort and suggestion. i will use opencl 1.2 version for my tests.

rajxabc avatar Jun 13 '19 09:06 rajxabc

Then opencl2.0 directory is different imo. (opencl must have changed a lot since project was built)

When you need to use opencl 2.0, just rename kutuphanecl2.dll to kutuphanecl.dll because cekirdekler.dll uses it. (when opencl 2.0 drivers etc are solved)

I'm very sorry for this issue(You'll be missing only dynamical parallelism). I'll try to solve this when I have a ryzen+ vs2017+ system.

tugrul512bit avatar Jun 13 '19 09:06 tugrul512bit

cl2.hpp here https://github.com/tugrul512bit/CekirdeklerCPP2/tree/master/KutuphaneCL2/KutuphaneCL2/CL

tugrul512bit avatar Jun 13 '19 09:06 tugrul512bit