Наша задача заключалась в том, чтобы ускорить процедуру расчёта матрицы смежности уровней серого тона GLCM (Gray-Level Co-Occurrence Matrix). Профилировка приложения показала, что проблема связана преимущественно с организацией доступа к данным, которые часто не попадали в кэш. Применение оптимизаций, описанных в литературе, не давало ускорения из-за того, что размер наших матриц и битность серого тона были значительно ниже, чем использованные в статьях, поэтому накладные расходы превышали выигрыш, полученный от более последовательного обращения к данным.
Внимательное изучение алгоритма показало, что некоторые циклы можно развернуть и вынести инициализацию, и вместе с выравниванием данных это позволило достичь примерно двукратного ускорения. Оптимизации следующего уровня касались распараллеливания алгоритма на CPU и сокращения количества обращений к выходному массиву при сохранении корректности результатов. Дополнительное ускорение составило 1.8 раза. Анализ результатов показал, что выравнивание массивов, оптимизация работы с памятью и распараллеливание на Intel Core i5 4-го поколения уменьшило Wall Time примерно в 3.3 раза, а CPU Time в 1.6 раза, что является значительным ускорением в достаточно ресурсоёмком приложении заказчика.