ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
23 апреля
706489 Топик полностью
Ксения (18.10.2016 00:42, просмотров: 157) ответил fk0 на Смотри:
Так не годится, т.к. исходные массивы должны быть типа double. Т.е. каждый элемент в них - число, а вовсе не пакет из 4-х чисел. Правильно - копировать числа четверками из double-массивов в регистры ymm, а потом использовать параллельную пакетную арифметику на этих регистрах. Недостаток у вашего предыдущего кода был только один - он использовал вместо AVX-регистров ymm (в которые помещается 4 штуки double) SSE2-регистры xmm (в которые помещается только 2 штуки double). Из-за этого производительность упала почти вдвое. В будущей системе AVX512 появятся регистры zmm, еще более длинные - в них помещаются сразу 8 штук чисел типа double. Тогда будет нужно паковать эти регистры из массивов по 8 штук подряд, чтобы арифметику считать сразу над восьмерками чисел. Переопределение типа double на __m256 в принципе может работать, но это нечестно :), т.к. компилятор обязан был сам догадаться про упаковку, как он догадался в предыдущем случае, когда решил использовать xmm. Странно лишь то, что он не догадался использовать ymm.