clCreateContextFromType заканчивается в SEGFAULT во время выполнения

Я пытаюсь создать контекст OpenCL на платформе, содержащей мою видеокарту. Но когда я звоню clCreateContextFromType() SEGFAULT брошен.

int main(int argc, char** argv)
{
/*
...
*/
cl_platform_id* someValidPlatformId;
//creating heap space using malloc to store all platform ids
getCLPlatforms(someValidPlatformId);
//error handling for getCLPLatforms()

//OCLPlatform(cl_platform_id platform)
OCLPLatform platform = OCLPlatform(someValidPlatformId[0]);
//OCLContext::OCL_GPU_DEVICE == CL_DEVICE_TYPE_GPU
OCLContext context = OCLContext(platform,OCLContext::OCL_GPU_DEVICE);

/*
...
*/
}

cl_platform_id* getCLPlatforms(cl_platform_id* platforms)
{
cl_int errNum;
cl_uint numPlatforms;

numPlatforms = (cl_uint) getCLPlatformsCount(); //returns the platform count
//using clGetPlatformIDs()
//as described in the Khronos API
if(numPlatforms == 0)
return NULL;

errNum = clGetPlatformIDs(numPlatforms,platforms,NULL);
if(errNum != CL_SUCCESS)
return NULL;

return platforms;
}

OCLContext::OCLContext(OCLPlatform platform,unsigned int type)
{
this->initialize(platform,type);
}

void OCLContext::initialize(OCLPlatform platform,unsigned int type)
{
cl_int errNum;

cl_context_properties contextProperties[] =
{
CL_CONTEXT_PLATFORM,
(cl_context_properties)platform.getPlatformId(),
0
};

cout << "a" << endl;std::flush(cout);

this->context = clCreateContextFromType(contextProperties,
(cl_device_type)type,
&pfn_notify,
NULL,&errNum);
if(errNum != CL_SUCCESS)
throw OCLContextException();

cout << "b" << endl;std::flush(cout);
/*
...
*/
}

Данный type CL_DEVICE_TYPE_GPU, а также платформа, содержащая cl_context_properties массив действителен.

Для устранения ошибки я реализовал следующее pfn_notify() функция, описанная API Khronos:

static void pfn_notify(const char* errinfo,
const void* private_info,
size_t cb, void* user_data)
{
fprintf(stderr, "OpenCL Error (via pfn_notify): %s\n", errinfo);
flush(cout);
}

Вот результат работы оболочки:

$ ./OpenCLFramework.exe
a
Segmentation fault

Машина, с которой я работаю, имеет следующие свойства:

  • Процессор Intel Core i5 2500
  • Графический процессор NVIDIA Geforce 210
  • ОС: Windows 7
  • AMD APP SDK 3.0, бета-версия
  • IDE: Затмение с GDB

Было бы здорово, если бы кто-то знал ответ на эту проблему.

0

Решение

Кажется, проблема решена сейчас.

Инъекция действительная cl_platform_id через GDB решил SEGFAULT. Поэтому я покопался немного глубже, и проблема с ошибкой заключалась в том, что я сохранил значение как стандартный примитив. Когда я вызвал функцию с этим значением, приведенным к cl_platform_id некоторые функции не справились с этим. Таким образом, похоже, что это смешивание типов, которые приводят к этой ошибке.

Теперь я сохраняю значение как cl_platform_id и приведите его к примитиву, когда это необходимо, а не наоборот.

Я благодарю вас за ваши ответы и прошу прощения за долгое радио молчание с моей стороны.

0

Другие решения


По вопросам рекламы [email protected]