Я имею дело с 2D-массивом со следующими характеристиками:
const int cols = 500;
const int rows = 100;
int arr[rows][cols];
Чтобы получить некоторую работу, я обращаюсь к массиву arr следующим образом:
for(int k = 0; k < T; ++k) { // for each trainee
myscore[k] = 0;
for(int i = 0; i < cols; ++i) { // for each sample
for(int j = 0; j < rows; ++j) { // for each expert
myscore[k] += delta(i, anotherArray[k][i], arr[j][i]);
}
}
}
Так что я беспокоюсь о массиве 'arr', а не о другом. Мне нужно сделать это более удобным для кэша, а также повысить скорость. Я думал, возможно, перенести массив, но я не был уверен, как это сделать. Моя реализация работает только для квадратных матриц. Как бы я сделал это для неквадратных матриц?
Кроме того, повысит ли производительность отображение двумерного массива в одномерный массив? Если так, то как бы я это сделал? Наконец, любой другой совет о том, как еще я могу оптимизировать это ... У меня закончились идеи, но я знаю, что arr [j] [i] - это место, где мне нужно вносить изменения, потому что я получаю доступ к столбцам с помощью столбцы, а не строки за строками, так что кеш совсем не подходит.
Спасибо,
Христо