ARM Cortex-A8: сколько байтов извлечено за одно чтение памяти? - PullRequest
4 голосов
/ 26 ноября 2010

Я пытаюсь улучшить свой проект обработки изображений, работающий на процессоре ARM cortex-a8.

Я получал доступ к данным 8-битного изображения в градациях серого из памяти. В моей функции прямо сейчас я получаю доступ к значению отдельного пикселя, побайтово.

Я подумал, что, используя NEON, я могу улучшить это, получив 128/8 = 16 байт за один снимок из памяти, а затем использовать их в своей функции. Но после запуска измененной версии я вижу, что на самом деле это занимает БОЛЬШЕ времени, чем побайтовый доступ. Я думаю, что мое извлечение с использованием NEON становится узким местом, занимая больше времени, чем мое вычисление.

Каков размер шины данных ARM Cortex-A8? Сколько байт доступно из памяти в одной выборке из памяти?

Ответы [ 2 ]

3 голосов
/ 27 ноября 2010

Из Cortex A8 TRM:

"Вы можете сконфигурировать процессор для подключения к 64-битному или 128-битному межсоединению AXI, которое обеспечивает гибкость системным проектам"

Is NEONнеобходимо, может быть, вы сравниваете яблоки с апельсинами?Вместо ldrb / strb вы можете использовать ldrd / strd или ldm / stm для получения 64-битных передач.ARM / AXI может быть достаточно умным, чтобы смотреть в будущее и группировать меньшие передачи в большие передачи, скажем, две 32-битные передачи в одну 64-битную.Но я бы на это не рассчитывал.Я упоминаю об этом только в том случае, если вы обнаружите, что, изменив ldr / str или ldrd / strd, вы не добьетесь прироста производительности.

Вы изолировали (без обработки данных) цикл чтения или записи и пробовали байты противслова против двойных слов?Может случиться так, что код для извлечения байтов из слов сокрушает экономию на шине.

Какой это тип памяти?Это на чипе или на чипе, что-то в этом роде, какая скорость памяти относительно тактовой частоты AXI (ARM)?

У вас включен кеш данных для этого региона?Если это так, то это может быть точка отключения звука, при первом чтении байта будет выполнено заполнение строки кэша с использованием оптимального размера шины данных, а последующие чтения в этой строке кэша не достигнут шины AXI намного меньше целевой памяти.Точно так же записи должны доходить только до кеша и выходить к цели с более широким размером шины, оптимизированным позже.Зависит от того, как настроен буфер кеша / записи.

0 голосов
/ 27 ноября 2010

Может случиться так, что вы столкнетесь с трубопроводами.Если вы хотите прочитать через Neon, будет некоторое время ожидания, прежде чем вы сможете использовать эти данные в ядре процессора.

...