有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Aparabi getGlobalId是如何工作的?

我是Aparabi的初学者。我对getGlobalId有问题。我的代码非常简单。我只想添加两个数组,但结果是错误的。我调试了程序,发现getGlobalId没有使用正确的值

    My code is:
int size = 3;

    final float[] A = new float[size];

    final float[] B = new float[size];

    for (int i=0; i<size; i++) {

        A[i] = (float) Math.random()*100;

        B[i] = (float) Math.random()*100;
    }

    final float[] result = new float[size];

    Kernel kernel = new Kernel() {
        @Override
        public void run() {
            int i = getGlobalId();
            result[i] = A[i] + B[i];
        }
    };      

    Range range = Range.create(result.length);
    kernel.execute(range);

结果是:

28.15+85.24=0.00

74.07+80.04=0.00

15.51+98.64=0.00

控制台中的错误是:

com。阿帕拉比。内部的opencl。OpenCLLoader:检查您的环境。未能加载codegen本机库,或者可能无法找到opencl本机库(opencl.dll/opencl.so)。确保OpenCL位于您的路径(windows)或LD_LIBRARY_路径(linux)中

我的问题有什么解决办法吗


共 (1) 个答案

  1. # 1 楼答案

    听起来你在问两个问题

    getGlobalId的工作原理:

    getGlobalId()返回代码当前在GPU上运行的线程的索引。如果您有一个大小为3的数组,比如在您的示例中,getGlobalId()将根据当前GPU线程返回0、1或2。通常,您使用这个数字来访问数组中的元素,就像您在示例中所做的那样。您似乎正确使用了getGlobalId()

    错误原因:

    看起来您可能没有正确安装OpenCL,或者根本没有安装。OpenCL驱动程序不附带Aparabi。它们必须从您个人的图形卡供应商网站下载。只有当你有一个具有OpenCL功能的图形卡时,这才有效