2013-06-20 3 views
1

Когда я создаю буфер и позже освобождаю буфер функцией clReleaseMemObject, всегда есть что-то странное, например, если я задаю размер буфера как 128 КБ + 8В, тогда всегда возникает исключение (часто, но не каждый раз, это всегда происходит после нескольких обычных исполнений), но если я задаю размер как 128 КБ или 256 КБ или какой-то другой размер как интегральная мощность 2, то clReleaseMemObject всегда может работать хорошо. Я не совсем уверен, есть ли ограничение в размере буфера в OpenCL, кто-нибудь знает какие-либо последствия для этой проблемы? Благодаря!clReleaseMemObject в OpenCL

+0

* "тогда исключение всегда происходит" * - Что * "исключение" *? Сбой программы? Вызывает ли это фактическое исключение C++? В результате возникает код ошибки OpenCL (и, если да, каков этот код ошибки)? Или вы используете C++ API и получаете исключение, возникшее в результате кода ошибки OpenCL (в этом случае опять-таки, какой именно код ошибки)? Если это нечасто, это может быть связано с чем-то более или менее несвязанным, например, с кучевым повреждением в коде процессора или что-то еще. Или, может быть, вы его сопоставляете и записываете в пределах 128 КБ + 8В. Или, возможно, это проблема выравнивания. –

+0

Во всяком случае, для решения этой проблемы потребуется немного больше информации. –

ответ

0

Есть некоторые ограничения, связанные с выравниванием суббуферов, но они должны влиять на предыдущие вызовы, а не на тот, который освобождает объект mem. Другим является, например, CL_DEVICE_MAX_MEM_ALLOC_SIZE, но действительная реализация не позволит создавать буферы/изображения, если эти правила не соблюдаются.

Ваша проблема связана с некоторыми переполнениями буфера.

Смежные вопросы