2014-09-01 2 views
0

Я работаю с Freescale i.Mx51 и хочу заменить функцию memcpy Windows CE 6.0 на функцию memcpy на основе NEON.Windows CE 6.0 заменить memcpy Cortex A8

Я нашел на домашней странице ARM (http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/ka13544.html) некоторый код, как он должен работать.

Моя первая проблема: Где я могу найти код memcpy в моем проекте Platformbuilder и как я могу изменить код? Я нашел учебное пособие (http://blogs.msdn.com/b/ce_base/archive/2007/01/15/replacing-a-coredll-component-in-yamazaki.aspx), чтобы заменить ливень в coredll, но Страница старая, и скриншотов больше нет.

Я попытался сделать то же самое с memcpy, но я застрял без всех скриншотов.

Вторая проблема: Сделал я должен сделать некоторые вещи, чтобы скопировать некоторые данные или их ассемблерный код достаточно:

NEONCopyPLD 
     PLD [r1, #0xC0] 
     VLDM r1!,{d0-d7} 
     VSTM r0!,{d0-d7} 
     SUBS r2,r2,#0x40 
     BGE NEONCopyPLD 

Может быть, кто-то сделал то же самое, прежде чем или знает, как изменить код тетсру ,

С наилучшими пожеланиями Jens

+0

В последнем случае попробуйте использовать этот код для 'memcpy' 17 байт в буфер в стеке и посмотреть, что произойдет ...;) – Notlikethat

+0

мой NEON memcpy длиной 344 строки :) –

ответ

0

Ваш код будет, скорее всего, сбой из-за ошибок выравнивания.

Вместо этого избегайте использования vld1.8 и vst1.8.

Кроме того, вы должны проверить размер и условия выравнивания в начале и разделить на разделы, оптимизированные по отдельности.

И наконец, выровняйте пункт назначения до 64 байтов и скопируйте 64 байта на итерацию для максимальной пропускной способности.

Это не NEON, что вам нужны знания, но поток управления через ARM и поведение кэша.

0

Возможно, вы сможете заменить его, восстановив собственную версию coredll, но это сложно и требует хорошего знания системы сборки. Вы также должны учитывать, что CE 6 не сохраняет регистры NEON по контекстным переключателям по умолчанию, это потребует некоторой дополнительной поддержки в BSP. Возможно, объяснение, почему вы хотите оптимизировать ipc-оптимизацию memcpy в Windows CE, может привести к тому, что кто-то предложит лучшее решение.

+0

Да, я застрял на этом учебник http://blogs.msdn.com/b/ce_base/archive/2007/01/15/replacing-a-coredll-component-in-yamazaki.aspx в точке «Команды, которые мы хотим выполнить, просты - мы хотите настроить локальную среду, перейдите в каталог, где наш новый источник библиотеки «showerr», и выполните чистую сборку. Эти шаги выполняются с помощью команд, которые мы помещаем в наш командный файл: «потому что нет скриншота с информация. Мы били много материала и надеемся, что это ускорит нашу систему. –

+1

Чтобы ускорить блиты в вашей системе, вам нужно оптимизировать драйвер дисплея, а не memcpy. Не допускается, чтобы драйвер дисплея использовал memcpy. Если это ваш собственный код, который использует memcpy для реализации blitting, тогда будет легче изменить его там. Изменение поведения этой функции может повлиять на другую часть системы с проблемами выравнивания и т. Д. И, как я уже говорил в своем предыдущем сообщении, CE6 не сохраняет регистры NEON при переключении контекста. –