java - aparapi getGlobalId 如何工作?

标签 java eclipse secondary-indexes aparapi

我是 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 native 库或可能无法找到 opencl native 库 (opencl.dll/opencl.so)。确保 OpenCL 位于您的 PATH (windows) 或 LD_LIBRARY_PATH (linux) 中。

我的问题有解决办法吗?

最佳答案

听起来你在问两个问题。

getGlobalId 的工作原理:

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

错误原因:

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

关于java - aparapi getGlobalId 如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57835321/

相关文章:

java - 无法从 double 转换为类

java - 将参数从 java 程序传递到 bash 脚本,该脚本使用参数调用另一个 java 程序

c++ - main() 首先在这里定义

java - 使用 Maven 从现有插件构建 Eclipse 功能

c++ - 具有从命名空间继承的类的 Eclipse 相对缩进

solr - Cassandra 的二级索引 VS DSE solr 索引

erlang - 如何在 Erlang Mnesia 中创建和使用(或模拟)多列索引

amazon-dynamodb - DynamoDBSaveExpression 对 GSI 进行条件检查

java - 准备好的语句中的异常

java - 如何在不使用选择器的情况下实现阻塞 DatagramChannel 的超时处理