NVIDIA GPU用于矩阵操作的问题

时间:2016-01-02 21:16:57

标签: matrix opencl gpu-programming

我遇到了复杂矩阵乘法的简单内核问题,这里是:

__kernel void myGEMMcomplex(__global double2* A, __global double2* B,__global double2* C, int rowsB, int colsB, int rowsA)
{
    int globalRow = get_global_id(0); 
    int globalCol = get_global_id(1);

    Complex acc;
    acc.x = 0;
    acc.y = 0;

    for (int k=0; k< rowsB; k++) {
         acc += multiply(A[k*rowsA + globalRow],B[globalCol*rowsB + k]);
    }

    C[globalCol*rowsA + globalRow] = acc;
}

当我使用我的Intel HD 4000时,我可以使用这个内核(如7000x7000)计算相当大的矩阵,但是,使用我的NVIDIA GF 720M,它只能计算小的1000x1000矩阵的乘法。对于更大的矩阵,它会抛出异常:

`Exception in thread "main"com.nativelibs4java.opencl.CLException$OutOfResources: OutOfResources (make sure to log all errors with environment variable CL_LOG_ERRORS=stdout)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
at java.lang.Class.newInstance(Class.java:442)
at com.nativelibs4java.opencl.CLException.error(CLException.java:308)
at com.nativelibs4java.opencl.CLBuffer.read(CLBuffer.java:453)
at com.nativelibs4java.opencl.CLBuffer.read(CLBuffer.java:383)
at com.nativelibs4java.opencl.CLBuffer.read(CLBuffer.java:211)
at com.mycompany.mavenproject1.JavaCLTutorial1.main(JavaCLTutorial1.java:91)`

它在我的电脑屏幕上发出警告:“显示驱动程序停止响应并已恢复”。在使用geForce进行计算时,我使用集成GPU进行显示,但我没有注意到这一点的显着优点。更重要的是,我也开发了矩阵求逆内核,虽然我可以在使用intel HD时计算2000x2000和更大矩阵的反演,但我的GPU只能计算200x200矩阵的反演....

也许有人可以解释是什么问题,为什么我的GPU不如集成的英特尔高清稳定,有没有办法解决这个问题?

0 个答案:

没有答案