какой размер выравнивания членов структуры в VC приносит выигрыш в производительности? - PullRequest
0 голосов
/ 15 июля 2010

приносит ли выравнивание членов структуры в VC производительность? если это то, что является лучшим показателем производительности при использовании этого и , какой размер лучше всего подходит для текущей архитектуры процессора (x86_64, SSE2 +, ..)

Ответы [ 2 ]

1 голос
/ 15 июля 2010

Perf совершает пикирование на ядрах x86 и x64, когда член пересекает границу строки кэша.Стандартное компиляторное значение по умолчанию - 8-байтовая упаковка, которая гарантирует, что вы в порядке с длинным длинным, двойным и 64-битным членами указателя.

Инструкции SSE2 требуют выравнивания 16, код будет бомбить, если он выключен.Вы не можете получить это из прагмы упаковки, например, распределитель кучи обеспечит только 8-байтовую гарантию выравнивания.Узнайте, что поддерживает ваш компилятор и CRT.Что-то вроде __declspec (align (16)) и пользовательский распределитель, такой как _aligned_malloc ().Или перераспределить память и настроить указатель самостоятельно.

0 голосов
/ 15 июля 2010

Выравнивание по умолчанию, используемое компилятором, должно соответствовать целевой платформе (32- или 64-разрядная Intel / AMD) для общих данных.Чтобы воспользоваться SIMD, вам, возможно, придется использовать более ограничительное выравнивание этих массивов, но обычно это делается с #pragma или специальным типом данных, который применяется только к данным, которые вы будете использовать в инструкциях SIMD.

...