Там нет необходимости создавать дополнительные три версии изображения, просто обратиться к ним по-разному или использовать что-то вроде класса я создал here. Еще лучше, просто продублируйте матрицу 5x5 и поверните их. Затем вы можете линейно сканировать изображение для всех поворотов (что хорошо).
Эта проблема не будет хорошо масштабироваться для параллельной обработки, поскольку узкое место, безусловно, обращается к данным изображения. Наличие нескольких потоков, обращающихся к тем же данным, замедлит их, особенно если потоки будут «не синхронизированы», т. Е. Один поток будет проходить через изображение, чем другие потоки, чтобы другие потоки завершили перезагрузку данных, которые первый поток отбросил ,
Итак, решение, которое, я думаю, будет наиболее эффективным, - это создать четыре потока, которые сканируют 5 строк изображения, по одному потоку на оборот. Пятый поток загружает данные изображения по одной строке за раз и передает линию каждому из четырех потоков сканирования, ожидая завершения всех четырех потоков, т.е. загружает одну строку изображения, добавляет к пяти строковым буферам, запускает четыре потока сканирования , дождитесь окончания потоков и повторите их до тех пор, пока все строки изображений не будут прочитаны.
Я имел в виду поворот памяти, потому что различное индексирование для разных потоков с использованием того же кода станет немного беспорядочным ... –
Я тоже ссылался на вращение в памяти. Использование класса в ссылке в сообщении сделает код намного проще, просто параметр вращения для каждого экземпляра потока обработки. Сказав это, вращение матрицы 5 × 5 будет еще более эффективным. – Skizz