Вы должны сначала разбить ваш код на секции выборки / обработки.
Код извлечения должен копироваться в рабочий буфер и иметь случаи для памяти, которая выровнена (где вы должны быть в состоянии копировать с использованием регистров SIMD), и не выровненной памяти, где вам нужно копировать побайтово (если ваш Платформа не может сделать доступ без выравнивания, и ваш источник / назначение имеют разные выравнивания, тогда это лучшее, что вы можете сделать).
Ваш код обработки может быть SIMD с гарантией работы с согласованными данными. Для любой реальной степени обработки процесс копирования + будет определенно быстрее, чем не-SIMD-операции с невыровненными данными.
При условии, что ваш source & dest одинаковы, дальнейшая оптимизация будет заключаться в том, чтобы использовать только рабочий буфер, если источник не выровнен, и выполнять обработку на месте, если память выровнена. Преимущества этого будут зависеть от характеристик ваших данных.
В зависимости от вашей архитектуры вы можете получить дополнительные преимущества, предварительно выбрав данные перед обработкой. Здесь вы можете выдавать инструкции для извлечения областей памяти в кеш до того, как они понадобятся, поэтому вы должны выполнить выборку для следующего блока перед обработкой текущего.