首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Aparapi添加样本

Aparapi添加样本
EN

Stack Overflow用户
提问于 2013-04-18 19:54:11
回答 1查看 1.3K关注 0票数 1

我正在研究Aparapi (https://code.google.com/p/aparapi/),其中一个样本有一个奇怪的行为。示例是第一个"add“。构建并执行它,这是可以的。我还放了下面的代码来测试GPU是否真的被使用了

代码语言:javascript
复制
if(!kernel.getExecutionMode().equals(Kernel.EXECUTION_MODE.GPU)){
    System.out.println("Kernel did not execute on the GPU!");
}

它工作得很好。但是,如果我尝试将数组的大小从512更改为大于999的数字(例如1000),则会得到以下输出:

代码语言:javascript
复制
!!!!!!! clEnqueueNDRangeKernel() failed invalid work group size
after clEnqueueNDRangeKernel, globalSize[0] = 1000, localSize[0] = 128
Apr 18, 2013 1:31:01 PM com.amd.aparapi.KernelRunner executeOpenCL
WARNING: ### CL exec seems to have failed. Trying to revert to Java ###
JTP

Kernel did not execute on the GPU!

下面是我的代码:

代码语言:javascript
复制
  final int size = 1000;

  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[] sum = new float[size];

  Kernel kernel = new Kernel(){
     @Override public void run() {
        int gid = getGlobalId();
        sum[gid] = a[gid] + b[gid];
     }
  };

  Range range = Range.create(size);
  kernel.execute(range);

  System.out.println(kernel.getExecutionMode());
  if (!kernel.getExecutionMode().equals(Kernel.EXECUTION_MODE.GPU)){
     System.out.println("Kernel did not execute on the GPU!");
  }

  kernel.dispose();

}

我尝试使用以下命令指定大小

代码语言:javascript
复制
Range range = Range.create(size, 128);

就像谷歌小组建议的那样,但什么都没有改变。

我目前运行的是MacOSX10.8和Java 1.6.0_43。Aparapi版本是最新版本(2012-01-23)。

我是不是遗漏了什么?有什么想法吗?

提前感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-20 21:23:32

Aparapi从OpenCL继承了“网格风格”的实现。当你指定一个执行范围(比如1024)时,OpenCL会将这个“范围”分成大小相等的组。可能是4组256或8组128。

组大小必须是范围的因子(因此assert(range%groupSize==0))。

默认情况下,Aparapi在内部选择组大小。

但您选择完全指定要使用的范围和组大小

Range r= Range.range(n,128)

您有责任确保n%128==0。

从错误中,看起来您选择了Range.range(1000,128)。

遗憾的是,1000%128 != 0,因此此范围将失败。

如果您指定

范围r= Range.range(n)

Aparapi将通过找到n的最大公因子来选择有效的组大小。

试着把128作为第二个参数。

加里

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16082235

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档