Всем привет. Я тут некоторое время назад ковырялся с simd,

и вот теперь пытаюсь применить немного другой подход. Теперь я группирую батчи по 8 векторов, чтобы уменьшить число бесполезных операций. Написал вот такой dot product для 8 vec2, но он почти в два раза медленнее работает чем без использования simd вообще. Я по сути гружу 8 векторов по отдельности в два __m256, чтобы сделать умножение и потом разделяю его на два __m128, чтобы сделать сложение x + y и не делать лишних операций, как если бы я делал это с _mm256_add_ps. Неужели _mm256_extractf128_ps так сильно влияет на это дело? Я понимаю, что там перенос из avx регистров в sse идёт, но чёт всё равно как то сильно сажается.
inline parallel_result_v2<float> parallel_dot_product(const parallel_batch_v2<float>& batch) noexcept
{
__m256 v0246 = _mm256_setr_ps(batch.v0.x, batch.v2.x, batch.v4.x, batch.v6.x, batch.v0.y, batch.v2.y, batch.v4.y, batch.v6.y);
__m256 v1357 = _mm256_setr_ps(batch.v1.x, batch.v3.x, batch.v5.x, batch.v7.x, batch.v1.y, batch.v3.y, batch.v5.y, batch.v7.y);

__m256 product = _mm256_mul_ps(v0246, v1357);

__m128 vx = _mm256_extractf128_ps(product, 0);
__m128 vy = _mm256_extractf128_ps(product, 1);

float r0[4ull];
_mm_store_ps(r0, _mm_add_ps(vx, vy));

parallel_result_v2<float> result;
result[0ull] = r0[0ull];
result[1ull] = r0[1ull];
result[2ull] = r0[2ull];
result[3ull] = r0[3ull];

return result;
}

9 ответов

19 просмотров

Сколько циклов у тебя по эти 8 векторов? И какой процессор? Тредриперы, например, встают колом на переключении режимов, пожтому если твой цикл меньше 1000 итераций по 8 векторов - выкидывай.

Посмотри через дизассемблер что там

Я же тебе уже говорил о проблеме. Ты начал предпринимать какие-то потуги по увеличению уровня параллелизма больше нуля, но какой он должен быть оптимальной работы выше объяснялось

adamfull- Автор вопроса
adamfull- Автор вопроса
adamfull- Автор вопроса
Roy Mustang
Посмотри через дизассемблер что там

Ну чёт такое там https://godbolt.org/#z:OYLghAFBqd5QCxAYwPYBMCmBRdBLAF1QCcAaPECAMzwBtMA7AQwFtMQByARg9KtQYEAysib0QXACx8BBAKoBnTAAUAHpwAMvAFYTStJg1DIApACYAQuYukl9ZATwDKjdAGFUtAK4sGISdKuADJ4DJgAcj4ARpjE/gAcAKykAA6oCoRODB7evv7SaRmOAiFhkSwxcZJJtpj2xQxCBEzEBDk%2BfgG19VlNLQSlEdGxCckKza3teV3j/YPllaMAlLaoXsTI7BzmAMyhyN5YANQmO26qLCyhBMShAHQIp9gmGgCCu/uHmCdnmJfXtwYDyeL3eZj2DAOXmOpzcLWITAAniC3h9IV8fm4AG6YBwkFFgiFQmFnZDjdC0PBRAmggh/FIGOmwg5MBQKI4AfQAKojSEcMgAvTAcgicoR4IU0jQATjQDHGmFUKWIR1ClLCRyiqE8nJxeOIHMwAEcvGIIHLxpyeRBzAA2WgIBRLEyJCwc8WSxIAET5FtF3MRNrMtuIjudrvdEswLq9SyODFQis2KQIoJe0pMAHYrKiZen%2BCqIILhaK8OhVD8vUcNF5aLRThZVeXMWKow2TpZrGXVM7cxm89m03nh9K8FQjhAwGBjabaBAHQoXRZuzG%2BaHF66V96lr33iP0%2BniJgCOsGEcqGIlA2h/2M5mvUO97ejyfiGebl5ozsc0%2Bsw/c0%2BdIsAyTBMqSBhslavL8lGIqtpKOzPH2fqKsqqoMOq3xajqHJ6kQBrAEeoEILEhommafpQUG9phkukaej6RyUQG1HruGboetG27xomqjJqmfZZj%2BB4ygWE7FnB3aVtWtb1t%2BTYVrC8Ffo21hduWu4iXewn7jKY4TlOhGYMRpEzmaC5LlujHrpZ5YxjuN5aYex6nuel4qY5A7/nuv4yi%2Brkfh5gn3o%2B6ZASBYFuCykEBnyEn%2BpxUqygICpKiqaqhFh2q0LquL4Ry9BsmRs7mil/rWnaC7sfRXGMcxFXBmxdGJdxCZJpgKaOYOgmiSQ4mwaWzanFWNZ1u2UlKTV7ZqZY3aafu3W%2Bbe%2BmTmAhUKMV5mOrZqirkcNmbnZ27zbeWn%2BW%2Bbm0Fe36eXe3m3ed77EJ%2B17BfdfYAPQfUcABqeV9Uw6DoEcqApLEoFZIufbhYyX5RRB7KxTBQpwVNiE3ihaXoZhRxYqgZa5fqHKA%2BgpXyuVgaVbREYtXVZVUXaTU0223p8ixjOYE6zUs7GPHtZ1wU6beYlFgNCnSaNcmNhNZzKdNnazRpt3ORuy5HVWw1HBZh27d6HaNgdau6w%2BN1vaFMow6BcPRYjPJxWLaNIU%2BmNoRlGp4wTuH/QaJNk5a7PBlV3MMb69MBna%2B2OmzDUhpz1W03GbV8R1Am/otWki/F4ua5L41DbLaOqQrRsnWdnM7TG0na0blfWJHi6m2n72AfSsPMgjUH2yjCVtujyFlah6UYZluP48DXtE779XIsGWtR0xYcx0zHE89HlONXHwe1YnvH8V1Qv5n1ovd9nOwjbJeeKQXiXyTNJfK355c67XZ9z%2BydeG1Zr1N%2Bb0qW5FNtO7IxLHLPuzsB5Yzdt8D2488IkGJkDCAAdY5c2ZiHBe5MGaB2pivBiO9%2BapwPOnEcmcxYy3PmNeSMs3CgKLlYRWPYH7SiPKrKy%2BtNbVy/o3Ihzcwqtytu3VkttoJZ0dhjCBrth7uzHoTfKvtkEsPjqvDB/seQRyqnzZOAs04H16oWLO5CZKUOlvnGhhd2EMNLiOFhFc9ZqVfhZbhXlzZPi%2Br9b2/IvBRBBmDBEDQoYt2Am3cCQigGiJvk7dMLsh44xgbI%2BBCgvF%2BwptRIOaDaqh0wQonBU1WZYJQUovBmi96C1uqQk%2Bhjc5UNMbQix98erPifjXOxDjtrPz1gAWnrrYk2B8QoAT4UEgRISYp22AajCJ4jyaD2xiPOJE98qJKiMk/JaTcEZJURTCO6416sU3uk%2ByxSU77zKUfAx%2BcKFS1PmYm%2BdD1KMIaSrHpVc2nNKrF0myTi7q/3/tbDuSNwm90iTKaJszpGezgQaJZKzw6zwXJk1R68Qw5NprsjmqD1mHKTiUnRpz9FkIuUYq51Dal3zmkwmx7SNatPZB815XC%2Bm8ItvwgB/yxmAoQsC5K0zIFSOgTIhZCSkkKP2ZivJ09Ukop5vgrRhCBy6OlOUkBlSL7VKvjc3udzLEUqaWwjpHD6Xq2/jwn5LK/mhIBQ7SZ/ceWSNiQKyFHJoUioxbkumWS1FwrDEc7RRCFVKskoSqpJj1WkuLuSx5j9WHqyOPqmlxrnEDM%2Bt9P6%2BojgsFrD48G/iby/MEaMkRVqgVTNSnauZDrvYcgzXOCVVNXWos2fk5ebq0Ub3rdKn1crtJ4v6hUoNqqQ0tnMWSpWkbmG6pjQa6NxsjgACpulUoTd8pNf8zX5uEV3EBYibWlpieWiFlbq0wpjmsltjbYW2nrq2gpW8sW72OaUhpAbBpX0uZfIdty6kRqWk8qlLzp2V3nZ8xlpqhmsoteyotnKS10l5fag9RMj3T3UfPWtjUpXoJdYU7enaTlPrOQS19RL32TU/SOh5P6o3PKnXOhdbyl1/lAxFc1BbN0TOLTu2DZbwWwMPbWJBS9RVnrQzRdtRTsUPtxfh/FfaiPBuuWG%2Bh9TKPjoA3rWdU6ekMf6T5QZzH11hKg1%2BLloKoGjwQ/lI9WHb3isXjPS9GiJO%2BvlT24%2Byr%2B3GIU8O8No6VOUreXOzTXzGNJtcSmjx%2BAsRZr8ZDXNa6RkbvGT3aDnGZlmfmY6yLx6kWnobSJ5tDbrMHO3Hhpaz7T5vrVR%2BzVX7fNOSo3%2BzTf7vqfyNcFnTcWwMscSxy4zMG0t8vM7xomWWRO5eUch2eOym1CYTqVjOBHZMSwHV5sjPmKP1dU9R%2BNzXuntaZaurrBnLUn23eA21e6ePxINKNuzKGFAIpSYzDDGyititjPNkhi33NyZWyS7zSnv2bf82wmjLXDXG20wdvNCXDOneted3dYL%2BUWfgVlt7wm7OSrE9vT7wtvuBt%2B55/7a3Ad1d0lt5rTX6P7aY8E%2BGEHC3w444jrjl2UfDfyujwTOO9qTYc7RR9ZWCcvuW8TmpAP7lWMaWpqsH0gsgYAjDhnBakrjGeg4XGuIzB4/THqMwEA4wgCOLtbM/JmiOGQByUQ4xYTh0QhADQcY/x8mRGb2YlvreslTGce32BHfO/vCcQcHWRz64E4iXGRuTdCVxsHxibvGxRb/MHqwofbzh4DJyVQa9OSImj6bxsHJFL3ld7HjkkeU9CRC7psP2uI6g2zfiTsZ8Vn64bwQEixAZV72CzKdvs9G9%2BJIHGr0bf6%2BD877EHvxy%2B/SgH5eofoESAadb5RBfIMp/d9w3PjfS/8Ly7X/TPfW/nROKWnv3xy/iD2LH/zzfXeZ%2BdV3xPxfV/8Kj%2Byx3x/O%2BFWX6b8QKvnfndpPj/k5j7n/q/tFtfofsAR6vZg/tPgmhftrtAR/obr/r/FEiAW/gAUuDGG5pJAwFgD2JssrMQqdI/K%2BGeOgKBEwJZMQYqDGAxomrXreBemgfiK6AQQYowRtgtAqs5NQUcLQc0AwSQcwXPjXrdF4AwFkOQYITKOrl4JruXjyDHvJFnsiLfCFFIUoR%2BKoWblnl4O2FnliNNLoTpCplnqIfQa6GYBfN6Cwd8rTufp1vprDn7v1nBiPNhDlPvviGfMNOPsgDrr7moujF6g9o2u3uEdoc8FNt6uAbrlQa5IKgaGZHJG4EjA4ZQv7guHcLYWuI6IUXQWformwcroAl4alj4RqH4ZwcQFOMEevvXnESCFEY9lrqEXbhEQkZemxLhkLmXMIVOAETfkEa3vCvXOUV1NDvFirsIklKZoNg0eMbCC0cfm0dkX0fdl0bETsfEdskkfes5t2g0o9NdgVJzBtJkb0dBLkXJPkSUUUfXKUc0LMWbCulUWykcbUdxllDqOsejEfpggc

adamfull- Автор вопроса
Roy Mustang
Посмотри через дизассемблер что там

Ну чёт такое там. _mm256_setr_ps чисто 27 инструкций. Но при этом сложение которое так же грузится работает куда быстрее чем скалярный вариант https://godbolt.org/z/W1svcTbbM

adamfull
Ну чёт такое там. _mm256_setr_ps чисто 27 инструк...

Тебе уже сказали и про обвязку в которой проблема и про то, что никаких "скалярных вариантов" симдов не существует. А ну и собирать что-то маздайским дерьмом надеясь на какие-то маня-оптимизации

Похожие вопросы

Обсуждают сегодня

что насчет пагинга? на осдеве непонятно(
Vi Chapmann 🪙
26
Продолжая диалог про свифт в проде – сейчас возник вопрос в активном наборе бекендеров. В основном в нашей компании мы фанаты Java Spring и полностью ей довольны. Однако найм ...
Guseyn
27
Читаю сейчас [нет, уже больше не читаю!] курсовую о Булгакове, написанную, похоже, с помощью ChatGPT. Это удивительный психоделический опыт. Текст в основном написан в стиле б...
✨ Uni [🌊 В отпуске]
1
Всем привет! поделитесь, пож-та, как кто дебажил / решал проблему с 504 Time out ошибкой от nginx, когда стучишься на свой vapor сервер? в логах /var/log/nginx/error.log е...
Paul
24
если загрузчик efi? если сама PML4 PDPT PDT PT лежит в неудобном для меня месте?
Vi Chapmann 🪙
8
А я же правильно понимаю, что инструкция AT в ld только сохраняет метаинформации о том, куда загрузить сегмент, которую далее из эльфика читает grub(ну если граб)? Но я тогда ...
Evg Resh
2
Господа, импользую кастомный загрузчик, ядро запускается сразу в длинном режиме, хочу узнать, сколько всего физической ОЗУ есть у машины. И, может, знаете какие-то подводные к...
Vi Chapmann 🪙
6
а причем тут линкер скрипты? UEFI где-то расположила PML4 и прочее, а мне надо переложить её в другое физическое место. как?
Vi Chapmann 🪙
6
Ну вот мы празднуем День Рождение, а пожелания то какие будут!? Я вот желаю чтобы Apple закрылась и больше ничего не выпускала, а мы спокойно работали на том что есть, и нахер...
Евгений Данилов
2
Это фейк @cruppto_newbot?
Antskup
13
Карта сайта