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!
Hi,
I am getting the following error when running my code:
My code is the following: