gpt4 book ai didi

java - opencl 屏障不工作

转载 作者:行者123 更新时间:2023-11-30 05:04:03 24 4
gpt4 key购买 nike

为什么这个屏障不起作用。这应该在输出数组中生成长度为 1 的数字,其总和位于输出[0] 中。如果我降低循环比例,则可以正常工作。对于高规模,线程应该在屏障处等待,但实际上却没有,从而产生不正确的输出。

__kernel void b_test1( __global int* a, int length) {
int id = get_global_id(0);
const int scale = 100;
for (int i=0; i< id*scale; i++) a[id]=0; /* useless loops scaled up by id, just to waste time. note more time is wasted with bigger id */
a[id]=id;

barrier(CLK_GLOBAL_MEM_FENCE);

if (id==0){
int sum=0;
for (int i=0; i < length; i++){
sum+=a[i];
}
a[0]=sum;
}
}

我的java代码

    CLContext context = JavaCL.createBestContext();
CLQueue queue = context.createDefaultQueue();

CLProgram program = context.createProgram(ReadText.readText(new File("src/kernel1.c")));
CLKernel kernel = program.createKernel("b_test1");

int length=10;
CLIntBuffer input = context.createIntBuffer(CLMem.Usage.InputOutput, length);

kernel.setArgs(input, length);
CLEvent event = kernel.enqueueNDRange(queue, new int[]{length}, new int[]{1});
queue.finish();

IntBuffer output = input.read(queue, event);
String out="";
for (int i=0; i< length; i++){
out+=output.get()+"\t";
}
System.out.println(out);

谢谢。

编辑:我已在 win7 nvidia gtx 275 v270.61 opencl1.0 和 Ubuntu nvidia 8600M GS 上运行此程序

最佳答案

同步函数在单个工作组内的所有线程上运行。。工作组以未指定的顺序独立执行。

要同步不同的工作组,您必须运行不同的内核,并指定它们之间的依赖关系(通过事件或屏障)。

关于java - opencl 屏障不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5711516/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com