gpt4 book ai didi

c++ - 工作组障碍不起作用

转载 作者:行者123 更新时间:2023-11-28 06:23:59 25 4
gpt4 key购买 nike

作为查看 OpenCL 2.0 函数是否适合我的简单测试,我编写了一个调用 work_group_barrier 的小内核。但是,对于我来说,我无法弄清楚为什么内核会变得无效。
考虑到如果使用“barrier”内核将有效,而 work_group_barrier 只是 barrier 的重命名版本,这没有意义。

有问题的内核:

#pragma OPENCL EXTENSION cl_amd_printf : enable
#pragma OPENCL EXTENSION cl_khr_subgroups : enable

//pragmas go here
#define TRUE 1
#define FALSE 0

__kernel void my_dumb_test(

__global float *in0,
__global float *in1,
__global float *out
){

int global_num = get_global_id(0);
int local_num = get_local_id(0);
int local_size = get_local_size(0);
int global_size = get_global_size(0);
int group_id = get_group_id(0);
int group_num = get_num_groups(0);
local int a;
int b = 2;
//a = work_group_broadcast(b, local_num);
//uint sub_group_size = get_sub_group_size();
//printf("in0[%d]: %f\n", global_num, in0[global_num]);
//printf("max sub group size: %d\n", sub_group_size);
//work_group_barrier(CLK_GLOBAL_MEM_FENCE);
//barrier(CLK_GLOBAL_MEM_FENCE);
printf("global id: %d local id: %d group id: %d num groups %d\n", global_num, local_num, group_id, group_num);
}

有趣的是,主机端 OpenCL 2.0 函数可以正常工作。使用 clCreateCommandQueueWithProperties 返回成功。在旧版本的 OpenCL 中,此函数作为 clCreateCommandQueue 存在。 CL_DEVICE_VERSION ping 回 OpenCL 2.0。我运行的是 AMD Radeon R9 290X 4GB GDDR5,运行 Ubuntu 14.04,带有最新的驱动程序和 AMD-APP-SDK 3.0 beta。

感谢任何帮助。

最佳答案

我找到了解决问题的方法。

如果在 clBuildProgram API 调用的选项部分未指定选项“-cl-std=CL2.0”,clBuildProgram 将默认使用最高版本的 OpenCL C 编译器 1.X。

OpenCL C 编译器用于设备端内核代码,独立于主机端编译。如果他们选择使用它,则必须手动指定 OpenCL 2.0。

关于c++ - 工作组障碍不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28843144/

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