В настоящее время у меня есть следующий код:
float a[4] = { 10, 20, 30, 40 };
float b[4] = { 0.1, 0.1, 0.1, 0.1 };
asm volatile("movups (%0), %%xmm0\n\t"
"mulps (%1), %%xmm0\n\t"
"movups %%xmm0, (%1)"
:: "r" (a), "r" (b));
У меня прежде всего несколько вопросов:
(1) если бы я БЫЛ выровнять массивы по 16-байтовым границам, сработало бы это? Поскольку массивы размещены в стеке, правда ли, что их выравнивание практически невозможно?
см. выбранный ответ для этого сообщения: Выровнены ли переменные стека с помощью GCC __attribute__((aligned(x)))?< /а>
(2) Можно ли вообще переработать код, чтобы сделать его более эффективным? Что, если я помещу в регистры оба массива с плавающей запятой, а не только один?
Спасибо