Язык программирования: C++ Для себя Нужна помощь с лабораторной работой в университете. Задача: Оптимизировать программу, которая выполняет перемножение 2 матриц. То есть за основу берется какой-либо из алгоритмов (пусть даже и самый наивный с 3 циклами), и требуется путем изменения подхода к обработке данных, очередности этой обработки и прочего оптимизировать среднее время выполнения, распараллеливание, попадание по кешу, векторизацию и т.д. Также в задании было сказано, что { Оптимизировать нужно ту составляющую алгоритма, которая отвечает за общение с “железом“ (обращение к ресурсам) - то есть чтобы улучшения достигались за счет того, что запрашиваемые программой данные лежат “рядом“ - ну или как раз в кэше. Ну или за счет того, что сами операции будут более легкими для вычисления - допустим, intrinsics. Также опция -O всегда должна быть на нуле. То есть компилировать нужно примерно так: > CC -c prog.c -o prog.o -O0 Эксперименты проводить на двух компиляторах: clang, gcc } Хотелось бы увидеть несколько разных подходов к оптимизации, которые, вероятно, будут наслаиваться друг на друга. Например: 1) на первом этапе мы меняем алгоритм с обычного на блочный (рекурсивный) 2) на втором этапе мы оптимизируем уже этот блочный алгоритм, делая его каким-либо образом более быстрым (возможно, что-то там с кэшами) 3) на следующем этапе мы пробуем добавить многопоточность Возможно, этот пример может показать некорректным, т.к. я не очень понимаю предмет, но он служит просто для очерчивания плана действий. Если можете предложить хорошие варианты оптимизации, которые не могут “наслоиться“ друг на друга, но тем не менее дают хороший результат, то они тоже интересуют. Имеется пример выполненной работы (которая преподавателя не совсем устроила), если это поможет понять задание лучше, чем с моих слов.