tigerneil / aparapi

Automatically exported from code.google.com/p/aparapi
Other
1 stars 0 forks source link

KernelRunner fallBackToNextDevice #167

Open gml81 opened 7 years ago

gml81 commented 7 years ago

Hi,

I am getting the following error when running my code:

Apr 13, 2017 4:47:46 PM com.amd.aparapi.internal.kernel.KernelRunner fallBackToNextDevice WARNING: Device failed for Worker, devices={NVIDIA|Intel|Intel|Java Alternative Algorithm|Java Thread Pool}: OpenCL compile failed com.amd.aparapi.internal.exception.AparapiException: OpenCL compile failed at com.amd.aparapi.internal.kernel.KernelRunner.fallBackToNextDevice(KernelRunner.java:1098) at com.amd.aparapi.internal.kernel.KernelRunner.executeInternalInner(KernelRunner.java:1364) at com.amd.aparapi.internal.kernel.KernelRunner.executeInternalOuter(KernelRunner.java:1165) at com.amd.aparapi.internal.kernel.KernelRunner.execute(KernelRunner.java:1155) at com.amd.aparapi.Kernel.execute(Kernel.java:2110) at com.amd.aparapi.Kernel.execute(Kernel.java:2067) at com.amd.aparapi.Kernel.execute(Kernel.java:2009) at core.gpu.MatrixMultiplication.execute(MatrixMultiplication.java:33) at com.maths.Matrix.matrixMultiply(Matrix.java:209) at core.ann.mlp.Classifier.calculateForwardPass(Classifier.java:91) at core.ann.GradientDescent.run(GradientDescent.java:175) at core.ann.AnnTrainer.Network.fit(Network.java:61) at core.ann.AnnTrainer.AnnTrainer.train(AnnTrainer.java:66) at core.dataSynthesizer.MNIST.main(MNIST.java:103) Apr 13, 2017 4:47:46 PM com.amd.aparapi.internal.kernel.KernelRunner fallBackToNextDevice WARNING: Trying next device: Intel Apr 13, 2017 4:47:46 PM com.amd.aparapi.internal.kernel.KernelRunner fallBackToNextDevice WARNING: Device failed for Worker, devices={Intel|Intel|Java Alternative Algorithm|Java Thread Pool}: OpenCL compile failed com.amd.aparapi.internal.exception.AparapiException: OpenCL compile failed at com.amd.aparapi.internal.kernel.KernelRunner.fallBackToNextDevice(KernelRunner.java:1098) at com.amd.aparapi.internal.kernel.KernelRunner.executeInternalInner(KernelRunner.java:1364) at com.amd.aparapi.internal.kernel.KernelRunner.executeInternalOuter(KernelRunner.java:1165) at com.amd.aparapi.internal.kernel.KernelRunner.execute(KernelRunner.java:1155) at com.amd.aparapi.Kernel.execute(Kernel.java:2110) at com.amd.aparapi.Kernel.execute(Kernel.java:2067) at com.amd.aparapi.Kernel.execute(Kernel.java:2009) at core.gpu.MatrixMultiplication.execute(MatrixMultiplication.java:33) at com.maths.Matrix.matrixMultiply(Matrix.java:209) at core.ann.mlp.Classifier.calculateForwardPass(Classifier.java:55) at core.ann.GradientDescent.run(GradientDescent.java:184) at core.ann.AnnTrainer.Network.fit(Network.java:61) at core.ann.AnnTrainer.AnnTrainer.train(AnnTrainer.java:66) at core.dataSynthesizer.MNIST.main(MNIST.java:103) Apr 13, 2017 4:47:46 PM com.amd.aparapi.internal.kernel.KernelRunner fallBackToNextDevice WARNING: Trying next device: Intel Apr 13, 2017 4:47:46 PM com.amd.aparapi.internal.kernel.KernelRunner fallBackToNextDevice WARNING: Device failed for Worker, devices={Intel|Java Alternative Algorithm|Java Thread Pool}: OpenCL compile failed com.amd.aparapi.internal.exception.AparapiException: OpenCL compile failed at com.amd.aparapi.internal.kernel.KernelRunner.fallBackToNextDevice(KernelRunner.java:1098) at com.amd.aparapi.internal.kernel.KernelRunner.executeInternalInner(KernelRunner.java:1364) at com.amd.aparapi.internal.kernel.KernelRunner.executeInternalOuter(KernelRunner.java:1165) at com.amd.aparapi.internal.kernel.KernelRunner.execute(KernelRunner.java:1155) at com.amd.aparapi.Kernel.execute(Kernel.java:2110) at com.amd.aparapi.Kernel.execute(Kernel.java:2067) at com.amd.aparapi.Kernel.execute(Kernel.java:2009) at core.gpu.MatrixMultiplication.execute(MatrixMultiplication.java:33) at com.maths.Matrix.matrixMultiply(Matrix.java:209) at core.ann.mlp.Classifier.calculateForwardPass(Classifier.java:91) at core.ann.GradientDescent.run(GradientDescent.java:184) at core.ann.AnnTrainer.Network.fit(Network.java:61) at core.ann.AnnTrainer.AnnTrainer.train(AnnTrainer.java:66) at core.dataSynthesizer.MNIST.main(MNIST.java:103) Apr 13, 2017 4:47:46 PM com.amd.aparapi.internal.kernel.KernelRunner fallBackToNextDevice WARNING: Trying next device: Java Alternative Algorithm !!!!!!! clCreateKernel() failed invalid kernel name !!!!!!! clCreateKernel() failed invalid program executable !!!!!!! clCreateKernel() failed invalid kernel name

My code is the following:


package core.gpu;

import java.util.logging.Level;
import com.amd.aparapi.Kernel;
import com.amd.aparapi.Range;
import com.maths.Matrix;
import core.utils.ODebug;
import core.utils.OTimer;

/**************************************************************************************************************************************
 * 
 * GPU Matrix Multiplication
 * 
 **************************************************************************************************************************************/
public class MatrixMultiplication
{
    @SuppressWarnings("deprecation")
    public static Matrix execute(Matrix A, Matrix B, String msg)
    {
        if (A.dimCol != B.dimRow)
            throw new RuntimeException("Matrices dims must agree for multiplication! " + A.getDims() + " <> " + B.getDims());

        OTimer t = new OTimer();

        Matrix C = new Matrix(A.dimRow, B.dimCol, 0, "C");

        try
        {
            Worker gpuW = new Worker(A, B);

            t.start();

            gpuW.execute(Range.create2D(A.dimRow, B.dimCol));
            C.copy(gpuW.matC);

            t.stop();

            ODebug.Write(Level.INFO, "GPUMU-0033: " + msg + " Time consumed in " + gpuW.getExecutionMode() + " mode is :" + t.getElapsedTime());
        }
        catch (Exception e)
        {
            ODebug.Write(Level.SEVERE, "GPUMU-0037: Exception!", e);
        }

        return C;
    }
}

/*===============================================================================================================================
 * 
 * Kernel
 * 
 *===============================================================================================================================*/
class Worker extends Kernel
{
    float matA[];
    float matB[];
    float matC[];

    int r;
    int c1;
    int c2;

    @Override
    public void run()
    {
        int i = getGlobalId(0);
        int j = getGlobalId(1);

        float value = 0;

        for (int k = 0; k < c1; k++)
        {
            value += matA[k + i * c1] * matB[k * c2 + j];
        }

        matC[i * c2 + j] = value;
    }

    public Worker(Matrix A, Matrix B)
    {
        r = A.dimRow;
        c1 = A.dimCol;
        c2 = B.dimCol;

        matA = new float[r * c1];
        matB = new float[c1 * c2];
        matC = new float[r * c2];

        // matC should be initialized with zeros
        for (int i = 0; i < r; i++)
        {
            for (int j = 0; j < c2; j++)
            {
                matC[i * c2 + j] = 0;
            }
        }

        // Here matrix A is initialized with random numbers
        for (int i = 0; i < r; i++)
        {
            for (int j = 0; j < c1; j++)
            {
                matA[i * c1 + j] = (float) A.get(i, j);
            }
        }
        // Here matrix B is initialized with random numbers
        for (int i = 0; i < c1; i++)
        {
            for (int j = 0; j < c2; j++)
            {
                matB[i * c2 + j] = (float) B.get(i, j);
            }
        }
    }
}

Many thanks for your help!