Я нажимаю на время, чтобы оптимизировать большую часть кода C для скорости, и я ищу алгоритм --- в лучшем случае фрагмент C "- -Вот переставляет прямоугольные Source матрицуu[r][c]
произвольного размера (r
количества строк, c
числа столбцов) в целевой матрицу v[s][d]
(s = c
количество строк, d = r
число столбцов) в «cache- friendly " i. е. подход к данным. Типичный размер u
составляет около 5000 ... 15000 строк на 50-500 столбцов, и ясно, что доступ к элементам по ряду причин очень неэффективен в кэше.Эффективная перестановка времени прямоугольной матрицы произвольного размера
Существует много дискуссий по этой теме в Интернете (рядом с этим thread), но, насколько я вижу, все они обсуждают пространственные случаи, такие как квадратные матрицы, u[r][r]
или определение on-мерного массива, e. г. u[r * c]
, а не вышеупомянутый «массив массивов» (равной длины), используемый в моем контексте Численные рецепты (фон см. here).
Я бы очень благодарен за любой намек, который помогает избавить меня от «переосмысления колеса».
Martin
Если два элемента источника близки друг к другу, соответствующие целевые элементы будут далеко друг от друга, и наоборот. Как можно надеяться на удобство переноса? Мне действительно интересно. –
Найдено [это] (http://stackoverflow.com/questions/5200338/a-cache-efficient-matrix-transpose-program). Я не совсем понимаю, как это работает ... –
Этот * вопрос * - это спрос на ресурсы или информацию. Это не место для этого. Попробуйте академическое Q & A: Computer Science или так, например. – Elyasin