Есть массив uint8_t 1024x1024
Надо его транспонировать как можно быстрее. Хотелось бы узнать, есть ли готовые библиотеки, а так же то, как они работают.
Для этого хотелось бы пояснее разобраться, как работает кэш CPU. Как я понял, при обращении к некоторому элементу массива (a[1], например), в кэш загружаетс сразу некоторый участок памяти, содержащий этот элемент. Программы для транспонирования матриц и подобных операций делают это по маленьким блокам, чтобы весь он влез в кэш, и операции типа m[i,j] = m[j,i] не приводили к загрузки в кеш чего-либо ещё.
Вопросы такие: какой размер блока имеет смысл брать (т.е. сколько кеш обычно сможет вместить в себя)? Как именно происходит деление на блоки? Копированием в отдельный массив, чтобы информация была в нем неразрывна?
Форум —
Development




