
Сообщение от
NEO SPECTRUMAN
ну байты идут пачкой если есть кеш
ну или хотябы префетч инструкций
Кеш инструкций это самое первое что требуется, потому что без него половина всех обращений будет в память за кодом. А после того как он появляется, плотность кода уже не играет особой роли. Внутренняя разрядность кеша может быть хоть в 2, хоть в 4 раза больше шины. Большую часть времени программа всё равно проводит в небольших циклах и если они в кеш влезают, проблем с производительностью почти не будет. За исключением ситуации когда весь код это обёртка завернутая в обёртку, тогда кеш может не справиться. Вообще, если раньше было модно:
Код:
for(int i=0;i<N;++i) {
double sum=0;
for(int j=0;j<M;++j)
sum+=A[i][j]*X[j];
Y[i]+=sum;
}
Теперь матрицу транспонируют и делают:
Код:
for(int j=0;j<M;++j)
double k=X[j];
for(int i=0;i<N;++i)
Y[i]+=A[j][i]*k;
}
Потому, лишнее последовательное обращение к памяти для векторного процессора фигня по сравнению с зависимостью по данным в первом варианте.