LINUX.ORG.RU

OpenCL использование host memory

 , ,


0

0

https://pastebin.com/ahYUeUcE - вот это мой турбо-код. Значит вот допустим появиться у меня класс(1), который содержит вектор int, ну и в нем еще вектор классов(2) которые тоже содержат в себе вектор int-ов. Ну и вообщем этих классов(1) миллион допустим. И нужно что-нибудь сосчитать. Используя вектор класса(2) и вектор класса(1). Я это к чему,,, к тому что память мне неудобно копировать. Хочу значет просто ссылку на массив из объектов. Тобеш не копировать в память GPU, а чтоби GPU использовала host(RAM(если не ошибаюсь) память. Плохая ли затея? Нету ли у кого примера как это делать, или хотя бы отрывок кода.

Я даже что-то нашел

https://www.khronos.org/registry/OpenCL/sdk/1.0/docs/man/xhtml/clCreateBuffer...

«Yes, use clCreateBuffer with flags containing one of:

CL_MEM_USE_HOST_PTR CL_MEM_ALLOC_HOST_PTR »

НО я поменял как бы на аргумент на CL_MEM_USE_HOST_PTR , ну и там полились ошибки, я даже догадываюсь почему, но исправить и сделать как нужно не понимаю, томушо новичок в OpenCL.

Ну и возможно нужная инфа то , что когда буду считать допустим сумму векторов, это же будет Readonly мемори, на хосте, так что недолжно произойти накладки(состыковки, или как это называется хех) Всем спасибо, если кто поможет.

Если что, копирование из RAM в память GPU у тебя в любом случае будет: контроллер памяти не может дотянуться до RAM.

По поводу того флага: он означает, что устройство может закэшировать буфер в свою память (OpenCL ведь не только для видеокарт). Для GPU это означает копирование. Даже если бы данные не копировались, задержки при чтении данных из RAM были бы просто огромными и занимали бы большую часть времени (собственно, даже глобальная память не очень-то и быстрая). Тебе в любом случае надо будет дать указатель на массив хотя бы потому, что OpenCL — это совсем не С++, и про векторы не знает от слова совсем.

P.S. Почитай очень внимательно про модель памяти, ее типы и их применение. Это крайне важно при разработке под OpenCL.

lu4nik ★★★
()
Ответ на: комментарий от lu4nik

Если что, копирование из RAM в память GPU у тебя в любом случае будет: контроллер памяти не может дотянуться до RAM.

P.S. Почитай очень внимательно про модель памяти, ее типы и их применение.

почитай, не все устройства имеют свою выделенную память, тем более в современном мире где SoC применяются всё ширее

https://software.intel.com/en-us/articles/getting-the-most-from-opencl-12-how...

anonymous
()
Ответ на: комментарий от anonymous

Да, это мой недосмотр, у интегрированных GPU нет своей памяти, конечно. Но это не всегда так: вдруг ТС использует дискретную. Плюс, судя по вопросу, ему точно следует почитать про работу с памятью в OpenCL.

lu4nik ★★★
()
Ответ на: комментарий от anonymous

Что такое апу? ASIC? Про них я не в теме совсем, но предполагаю, что там есть оба варианта, с собственной памятью и без.

lu4nik ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.