барьер рабочей группы не работает

0

как простой тест, чтобы увидеть, работают ли функции OpenCL 2.0 для меня, я написал небольшое ядро, которое вызывает work_group_barrier. Однако для жизни, если я, я не могу понять, почему ядро становится недействительным.
Учитывая, что ядро будет действовать, если используется "барьер", а work_group_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 возвращает OpenCL 2.0. Я работаю с AMD Radeon R9 290X 4GB GDDR5, работая с Ubuntu 14.04, с последними драйверами и бета-версией AMD-APP-SDK 3.0.

Любая помощь приветствуется.

  • 0
    Что вы подразумеваете под недействительным - он не компилируется или не запускается?
  • 0
    Вся программа компилируется, но при выполнении программа возвращает ошибку состояния OpenCL. Я проверяю целочисленные индикаторы состояния на каждом шаге программы хоста. Всякий раз, когда что-то не так с ядром, индикаторы состояния OpenCL будут отображать сообщение. В этом случае сообщение об ошибке начинается в clBuildProgram, возвращая «CL_BUILD_PROGRAM_ERROR», когда work_group_barrier не закомментирован.
Теги:
gpu
opencl

1 ответ

1

Я нашел решение своей проблемы.

clBuildProgram по умолчанию будет использовать самую высокую версию компилятора OpenCL C. 1. Если опция "-cl-std = CL2.0" не указана в части параметров вызова API clBuildProgram.

Компилятор OpenCL C предназначен для кода ядра на стороне устройства и отдельно от компиляции Host-side. Необходимо указать вручную OpenCL 2.0, если они захотят его использовать.

  • 0
    единственная проблема сейчас заключается в том, что при добавлении опции возникает ошибка.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню