【问题标题】:How does aparapi getGlobalId works?aparapi getGlobalId 是如何工作的?
【发布时间】:2019-09-07 15:56:50
【问题描述】:

我是 aparapi 的初学者。我对 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.aparapi.internal.opencl.OpenCLLoader 严重:检查您的环境。无法加载 codegen 本机库或可能无法找到 opencl 本机库 (opencl.dll/opencl.so)。确保 OpenCL 在您的 PATH (windows) 或 LD_LIBRARY_PATH (linux) 中。

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

【问题讨论】:

    标签: java eclipse secondary-indexes aparapi


    【解决方案1】:

    听起来你在问两个问题。

    getGlobalId 的工作原理:

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

    错误原因:

    您可能没有正确安装 OpenCL,或者根本没有安装。 OpenCL 驱动程序不随 Aparapi 提供。它们必须从您的个人显卡供应商的网站下载。这只有在您拥有具有 OpenCL 功能的显卡时才有效。

    【讨论】:

    • 感谢您的回答。我在哪里可以下载 OpenCL。我正在使用 ubuntu。我想通过控制台安装它。
    • 我建议您访问显卡供应商的网站并为您的特定硬件搜索 OpenCL 驱动程序。或者,我在另一个论坛上找到了这个:sudo apt-get install nvidia-opencl-dev,但这仅适用于 NVIDIA GPU。
    猜你喜欢
    • 1970-01-01
    • 2017-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 2017-07-24
    • 2016-11-13
    相关资源
    最近更新 更多