Я рассматриваю возможность использования SSE для ускорения кода в моем проекте.Это обычно требует 16-байтового выравнивания данных, над которыми я работаю.Для статического размещения я полагаю, что __declspec(align(16))
решает проблему, но моя проблема заключается в следующем: каков наилучший способ убедиться в этом при динамическом распределении?Особенно в тех случаях, когда выделенный объект не требует непосредственного выравнивания, а использует объекты с требованием выравнивания в качестве элементов (таким образом, намного проще забыть о том, что он правильно выровнен).Я предложил следующие решения:
Всегда предполагайте, что любые потенциально не статически размещенные данные не выровнены, и используйте инструкции по выровненной загрузке.Из того, что я прочитал, это медленно, и, возможно, в этом случае вообще не стоит беспокоиться о SSE.Я могу реализовать это и проверить, как он работает, но я бы лучше спросил о лучших решениях, прежде чем вкладывать в него столько работы, чтобы просто выяснить, что оно того не стоит или что есть другое решение.
Будьте очень осторожны и используйте только _aligned_malloc
/ _aligned_free
для выделения любого объекта, который требует выравнивания, и любого объекта, который использует их в качестве членов.Это, вероятно, очень легко забыть и, следовательно, подвержено ошибкам.
Перегрузка new
/ delete
глобально и / или создание пользовательских функций malloc
/ free
, которые выравнивают память изатем используйте их для всего.Однако, вероятно, не самая лучшая идея - выровнять буквально все , которое выделяется динамически.
Создать базовый класс с перегруженными операторами new
/ delete
, а затем выполнитьубедитесь, что любой класс, который требует выравнивания, и любой класс, который использует их как члены, наследуют его.Затем просто используйте new
/ delete
для большинства / всех динамических распределений.Вероятно, менее подвержен ошибкам, чем 2.
Каким-то другим способом, о котором я не думал или не знаю?
Параметры 1.-3.вероятно, не самые лучшие идеи.Как насчет 4.?Я ошибаюсь в чем-то, что упомянул?Предложения, мнения, полезные ссылки по этой теме?
Заранее спасибо:)