Задать вопрос
@tj57

Assembler: Как найти максимум в массиве, используя mmx?

Есть массив 16-битных чисел со знаком. Количество кратно 4-м. Основная идея - обрабатывать каждые 4 элемента и находить 4 возможных максимума, после обработки всех данных найти сам максимум. . Нужно использовать операции сравнения и логические операции.
Short smax (const short int *p, unsigned int n ) - прототип функции
  • Вопрос задан
  • 597 просмотров
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
@Mirn
1. реализовать алгоритм на Си
2. скомпилировать GCC или иным современным компилятором с включенной векторизацией и всеми оптимизациями.
3. дизассемблировать или включить опцию показа промежуточного результата.
4. посмотреть итог и убедиться что там есть MMX или SSE инструции
5. обратить внимание на обработку краёв которые могут быть не выравнены или не попадать в ровно блок, массивов маленьких размеров меньше 16-4 элементов и прочие мелочи.
6. обратить внимание на вызов этой твоей функции и как организуется стек, временные переменные, как передаются параметры, какие регистры функция нахождения максимума изменяет а какие сохраняет и как.
7. попытаться безуспешно понять почему именно так.
8. попытаться самому повторить результат на асме не глядя в результат компилятора и получить в лучшем случае в 2-3 раза худшее быстродействие если вообще отладить сможешь
9. сделать вывод что страдаешь хернёй и использовать ассемблер для оптимизации столь тривиальной вещи полный дурдом и понять для чего асм всё таки нужен
10. понять что асм нужен для системных вещей, и понимания почему у компилятора торомзит код а не пытаться писать велосипеды не умея оптимизировать под современные процы.

для пункта 2-4 есть https://godbolt.org/#
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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