Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:3
Поисковых ботовПоисковых ботов:2
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:6
Форум » starterkit.ru » Процессорные модули » SK-iMX6S/D-SODIMM
Объём видеопамяти в IMX6S
elsid
Добавлено 26.11.2015 13:13
0
Сообщение: 1
elsid
5

Пункты: 929
Регистрация: 28.05.2015
Суть проекта - спрайтовые игры. Отрисовка проводится с помощью g2d_blit, в связи с чем для получения физического адреса, ресурсы в памяти размещаются с помощью g2d_alloc.
При попытке выделить память для более "тяжёлых" игр g2d_alloc возвращает ошибку, и как свойственно libg2d никакой диагностической информации не даётся.
Прогоняю под отладчиком, дохожу до выделения памяти под "проблемную" картинку, вывожу top в консоли linux - оставшейся памяти заметно больше, чем необходимо для выделения.

Отсюда догадка - скорее всего "видеопамять", то есть память, которую может выделить g2d_alloc ограничена каким-то значением. Прав ли я и можно ли в таком случае расширить допустимое количество памяти для выделения?
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 26.11.2015 13:41 Сообщение: 2
sasamy
4.71

Пункты: 83542
Регистрация: 14.08.2009
1) Для всех аппаратных ускорителей используется аалокатор CMA, размер зарезервированной памяти можно изменить в конфиге ядра

make ARCH=arm menuconfig

Device Drivers --->
Generic Driver Options --->
*** Default contiguous memory area size: ***
(320) Size in Mega Bytes

или через параметр передаваемый ядру при загрузке

cma=320M

2) Есть еще такой момент как фрагментация - вполне может быть причиной отказа "При попытке выделить память для более "тяжёлых" игр" - память есть но непрерывного куска большого размера аллокатор выделить не может после множественных аллокаций более мелких кусков.
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 02.12.2015 20:58 Редактировалось 02.12.2015 21:00 Сообщение: 3
sasamy
4.71

Пункты: 83542
Регистрация: 14.08.2009
Цитата

Отсюда догадка - скорее всего "видеопамять", то есть память, которую может выделить g2d_alloc ограничена каким-то значением.


https://community.freescale.com/thread/380975

Цитата

g2d_alloc has the 32MB limit.


Оказывается в мануале про это написано

i.MX 6 Graphics User’s Guide

Chapter 8 GPU Memory Introduction

Цитата

Reserved memory
In the Linux 3.10.y kernel, the memory is reserved from CMA implemented in the GPU kernel driver, the size can be changed through U-boot args with “galcore.contiguoussize =xxx”
The memory allocation and lock very fast, but cannot support cacheable attribute.
Спуститься к концу Подняться к началу
Персональная информация
elsid
Добавлено 03.12.2015 13:43 Сообщение: 4
elsid
5

Пункты: 929
Регистрация: 28.05.2015
Спасибо за помощь!

Вариант с определением cma что в настройках ядра, что в cmdline результата не давал.
Вариант с galcore.contiguoussize в строке ядра дал нужный эффект. Теперь самая тяжелая игра загружается нормально, правда я проделал ещё некоторые оптимизации, в том числе при выделении памяти под ресурсы начинаю выделять сначала под самые большие текстуры, затем по степени уменьшения. Это по идее должно уменьшить фрагментацию выделяемой памяти, хотя только с этой оптимизацией всё равно "не взлетало".
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Процессорные модули » SK-iMX6S/D-SODIMM