Nano Hash - криптовалюты, майнинг, программирование

Ошибка сегментации в clCreateFromGLBuffer

Я использую С++. Я использую OpenCL 2.1, gcc версии 6.3.0 20170516 (Debian 6.3.0-18). Я изучаю OpenCL по этой книге "Руководство по программированию OpenCL". Я пытаюсь взаимодействовать с OpenCl/OpenGL.

GLuint initVBO(int vbolen)
{
    GLint bsize;
    GLuint vbo_buffer;
    glGenBuffers(1, &vbo_buffer);
    glBindBuffer(GL_ARRAY_BUFFER, vbo_buffer);
    glBufferData(GL_ARRAY_BUFFER, vbolen*sizeof(float)* 4, NULL, GL_STREAM_DRAW);
    glGetBufferParameteriv(GL_ARRAY_BUFFER, GL_BUFFER_SIZE, &bsize);
    glBindBuffer(GL_ARRAY_BUFFER, 0);
    return vbo_buffer;
}

cl_context CreateContext()
{
    cl_uint numPlatforms;
    cl_platform_id firstPlatformId;
    cl_context context = NULL;
    clGetPlatformIDs(1, &firstPlatformId, &numPlatforms);
    cl_context_properties contextProperties[] =
    {
        CL_CONTEXT_PLATFORM, (cl_context_properties)firstPlatformId,
        CL_GL_CONTEXT_KHR, (cl_context_properties)glXGetCurrentContext(),
        CL_GLX_DISPLAY_KHR, (cl_context_properties)glXGetCurrentDisplay(),
        0
    };
    cl_uint uiDevCount;
    cl_device_id* cdDevices;
    clGetDeviceIDs(firstPlatformId, CL_DEVICE_TYPE_GPU, 0, NULL, &uiDevCount);
    cdDevices = new cl_device_id[uiDevCount];
    clGetDeviceIDs(firstPlatformId, CL_DEVICE_TYPE_GPU, uiDevCount, cdDevices, NULL);
    auto clDev = &cdDevices[0];
    context = clCreateContextFromType(contextProperties, CL_DEVICE_TYPE_GPU,
                                      NULL, NULL, &errNum);
    return context;
}

void CreateMemObjects(cl_context& context, GLuint texture, GLuint vbo, cl_mem *p_cl_vbo_mem, cl_mem *p_cl_tex_mem)
{
    cl_int errNum;
    cl_vbo_mem = clCreateFromGLBuffer(context, CL_MEM_READ_WRITE, vbo, &errNum);
    return true;
}

int main()
{
    vbo = initVBO(vbolen);
.......
    // Create an OpenCL context on first available platform
    context = CreateContext();
......
    CreateMemObjects(context, tex, vbo, &cl_vbo_mem, &cl_tex_mem);
......
}

У меня ошибка сегментации, когда я достигаю создания объектов памяти. Ошибка сегментации находится в функции CreateMemObjects() в этом API clCreateFromGLBuffer. Любые идеи, почему у меня есть эта ошибка.

29.11.2018

  • Проверяете ли вы, что расширение cl_khr_gl_sharing поддерживается вашим устройством? 29.11.2018
  • Как следует из связанной страницы, вам нужно вызвать clGetDeviceInfo() с CL_DEVICE_EXTENSIONS и большим строковым буфером, а затем проверьте, является ли "cl_khr_gl_sharing" одним из возвращаемых расширений. См. также этот ответ для соответствующего размера буфера. 29.11.2018

Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..