mantech 34 8 августа, 2019 Опубликовано 8 августа, 2019 · Жалоба Приветствую. Что-то упустил при переходе с Кортекса А8 на А7, что скорость несколько упала, особо пока не замечал, но начал тестирование производительности и понял, что она упала в несколько раз. Вопрос, насколько сильны различия в инициализации? Читал книжку "английских ученых" и , честно говоря, разницы не заметил, может туплю? Если есть мнение буду рад услышать... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Integro 0 9 августа, 2019 Опубликовано 9 августа, 2019 · Жалоба 12 hours ago, mantech said: что скорость несколько упала Скорость чего упала? Что и как тестируете? Такие параметры как: частота ядра и тип\частота DDR одинаковы для обоих проектов? По-этому сразу подумали что cache не работает? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 9 августа, 2019 Опубликовано 9 августа, 2019 · Жалоба В Cortex-A9 и ARM9 data cache работал только если MMU включено Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 34 9 августа, 2019 Опубликовано 9 августа, 2019 · Жалоба 10 минут назад, Integro сказал: Такие параметры как: частота ядра и тип\частота DDR одинаковы для обоих проектов? По-этому сразу подумали что cache не работает? Да, частота одинаковая, счетчик производительности то же, при полном отключении ММУ и кэшей показывает примерно одинаковый результат, у А7 чуть повыше. Как показал анализ не работает кэш данных, включение и отключение кэша инструкций показывают практически одинаковые результаты на обоих платформах, включение кэша данных не приводит ни к какому либо увеличению производительности на А7, но на экране появляются артефакты. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Integro 0 9 августа, 2019 Опубликовано 9 августа, 2019 · Жалоба 53 minutes ago, mantech said: включение кэша данных не приводит ни к какому либо увеличению производительности на А7 Для А7, bit ACTLT.SMP должен быть в единице перед включением cashe, есть такое? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 34 9 августа, 2019 Опубликовано 9 августа, 2019 (изменено) · Жалоба 1 час назад, Integro сказал: есть такое? Если это в регистре включения ММУ, то биты С и I в единице, а если это другой регистр, то его б название?? Нашел, но этот бит уже установлен "до меня". Читаю MRC p15, 0, , c1, c0, 1 ; Получаю - 0x00006040 странно... Вот код инициализации ММУ и кэша. void mmu_system_init(__u32 dram_base, __u32 dram_size, __u32 mmu_base) { __s32 *mmu_tlb_address = (__s32 *)mmu_base; __u32 i; for(i = 0; i < 4 * 1024; i++) { mmu_tlb_address[i] = ((i << 20)) | (0 << 19) | (0 << 18) | (0 << 17) | (0 << 16) | (0 << 15) | (0 << 12) | (3 << 10) | (0 << 9) | (15 << 5) | (0 << 4) | (0 << 3) | (0 << 2) | (2 << 0); } //cache sram mmu_tlb_address[0] = (0 << 20) | // (0 << 19) | // (0 << 18) | //1Mpage (0 << 17) | //not global (0 << 16) | //not shared (0 << 15) | // (0 << 12) | // (3 << 10) | // (0 << 9) | // (15 << 5) | // (0 << 4) | // (1 << 3) | //cache (0 << 2) | //buffer (2 << 0); // //cache dram for(i = 0; i < dram_size; i++) { mmu_tlb_address[i + (dram_base>>20)] = (dram_base + (i << 20)) | (0 << 19) | (0 << 18) | (0 << 17) | (0 << 16) | (0 << 15) | (0 << 12) | (3 << 10) | (0 << 9) | (15 << 5) | (0 << 4) | (1 << 3) | (0 << 2) | (2 << 0); } //set ttb mmu_flush_TLB(); mmu_base |= (1 << 0) | (1 << 1) | (2 << 3); __asm("mcr p15,0,%0,c2,c0,0"::"r"(mmu_base)); __asm("mcr p15,0,%0,c2,c0,1"::"r"(mmu_base)); //clean i/d cache flush_icache(); flush_dcache(); //set domain controller mmu_set_domain_access(); return ; } void mmu_enable( void ) { __u32 c1format = 0; //__u32 c1format1 = 0; __asm("mrc p15,0,%0,c1,c0,0":"=r"(c1format)); //c1format1=c1format; c1format &= ~ 0x1007; c1format |= 0x1005; __asm("mcr p15,0,%0,c1,c0,0"::"r"(c1format)); //printf("MMU-%08x,<%08x>\n",c1format1,c1format); //enable_icache(); //enable_dcache(); //enable_prediction(); } Изменено 9 августа, 2019 пользователем mantech Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Integro 0 9 августа, 2019 Опубликовано 9 августа, 2019 (изменено) · Жалоба Так а где установка ACTLR.SMP? Его нужно включать самым мервым до mmu Вот что еше пишут: стр 141 Quote All Write-Back memory can be cached when ACTLR.SMP is set to 1, the MMU is enabled, and SCTLR.C is set to 1. Quote To access the ACTLR, read or write the CP15 register with: MRC p15, 0, <Rt>, c1, c0, 1 ; Read Auxiliary Control Register MCR p15, 0, <Rt>, c1, c0, 1 ; Write Auxiliary Control Register To access the SCTLR, read or write the CP15 register with:MRC p15, 0, <Rt>, c10, c2, 0 ; Read Primary Region Remap Register MCR p15, 0, <Rt>, c10, c2, 0 ; Write Primary Region Remap RegisterMRC p15, 0, <Rt>, c1, c0, 0 ; Read System Control RegisterMCR p15, 0, <Rt>, c1, c0, 0 ; Write System Control Register Изменено 9 августа, 2019 пользователем Integro Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 9 августа, 2019 Опубликовано 9 августа, 2019 (изменено) · Жалоба У Вас тут magic numbers... лень интерпретировать для проверки. в дескрипторах страниц для ОЗУ тоже надо ставить про cache & write back Изменено 9 августа, 2019 пользователем GenaSPB Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 34 9 августа, 2019 Опубликовано 9 августа, 2019 (изменено) · Жалоба 1 час назад, Integro сказал: Так а где установка ACTLR.SMP? Его нужно включать самым мервым до mmu Так вроде писал, что этот бит уже установлен либо по умолчанию, или бутлоадером. Его надо снова переустановить или сбросить и установить заново? Хотя устанавливал, в самом начале функции mmi_system_init , но ничего это положительного не дало, что не удивительно, в связи с вышеописанным... 1 час назад, GenaSPB сказал: У Вас тут magic numbers... лень интерпретировать для проверки. в дескрипторах страниц для ОЗУ тоже надо ставить про cache & write back В смысле? Таблица на А8 исправно работает. Хотя, буду рад, если кинете ссылочку на нормально описанные поля этой таблицы... 1 час назад, Integro сказал: MRC p15, 0, <Rt>, c10, c2, 0 ; Read Primary Region Remap Register MCR p15, 0, <Rt>, c10, c2, 0 ; Write Primary Region Remap Register про с10 не помню, надо посмотреть.. Можно-ли по этой комнде чуть по-подробнее, я чего-то раньше с таким ужОсом не встречался никогда... ЗЫ. Виртуальных адресов не использую, только реальные физические адреса. По логике, по умолчанию должнен быть один физический регион 4ГБ, доступный для кеширования, согласно таблице, но .... Это же английское поделье, поэтому может логики тут нет... Изменено 9 августа, 2019 пользователем mantech Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 9 августа, 2019 Опубликовано 9 августа, 2019 · Жалоба ARM DDI 0464F - Table 5-1 (страница 141) например. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 34 9 августа, 2019 Опубликовано 9 августа, 2019 (изменено) · Жалоба 12 минут назад, GenaSPB сказал: ARM DDI 0464F - Table 5-1 (страница 141) например. Вот или туплю или просто не могу понять эту обратную английскую запись. По моему в моем исходнике и то понятнее написано, но не все поля правда... Например, что означают первые 2 бита, 3-разрешение буферизации, 4- режим кэширования и т.д. Вот что-то такое бы заиметь... ЗЫ, что означает global, shared и т.д.... Изменено 9 августа, 2019 пользователем mantech Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Integro 0 9 августа, 2019 Опубликовано 9 августа, 2019 · Жалоба 43 minutes ago, mantech said: про с10 не помню, надо посмотреть.. Да, это нето. Тупанул, поиском быстро нашел SCTRL, но там должен быть с1. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 34 9 августа, 2019 Опубликовано 9 августа, 2019 (изменено) · Жалоба 3 минуты назад, Integro сказал: но там должен быть с1. Так вроде с с1 там все норм... включаются I(12 бит) и D(2) кэши и ММУ (0й бит). все в единицах... __asm("mrc p15,0,%0,c1,c0,0":"=r"(c1format)); //c1format1=c1format; c1format &= ~ 0x1007; c1format |= 0x1005; __asm("mcr p15,0,%0,c1,c0,0"::"r"(c1format)); Изменено 9 августа, 2019 пользователем mantech Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 9 августа, 2019 Опубликовано 9 августа, 2019 · Жалоба Нас интересует write back - которую они как buffer назвали. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Integro 0 9 августа, 2019 Опубликовано 9 августа, 2019 · Жалоба 3 minutes ago, mantech said: Так вроде с с1 там все норм... Если все три бита стоят, значит кеш должен работать, нужно регионы проверять Ну и артифакты на экране вроде как косвенный признак. Кстати они должны быть? В коде еще нет соответвующего менежмента? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться