При чтении сообщения в StackOverflow (http://stackoverflow.com/questions/1502081/im-trying-to-optimize-this-c-code-using-4-way-loop-unrolling), который теперь отмечен как и закрыто, я наткнулся на ответ (на самом деле), в котором говорилось следующее: «Две внутренние петли могли бы получить ускорение скорости, используя UInt64 и смещение бит»Как работают Bitshifting и UInt64?
Вот код, который был int he post :
char rotate8_descr[] = "rotate8: rotate with 8x8 blocking";
void rotate8(int dim, pixel *src, pixel *dst)
{
int i, j, ii, jj;
for(ii = 0; ii < dim; ii += 8)
for(jj = 0; jj < dim; jj += 8)
for (i = ii; i < ii + 8; i++)
for (j = jj; j < jj + 8; j++)
dst[RIDX(dim-1-j, i, dim)] = src[RIDX(i, j, dim)];
}
Не могли бы вы объяснить, как это будет применяться здесь? Мне интересно знать, как применять битрейт на этом коде или аналогичный код, и почему это поможет в производительности. Кроме того, как оптимизировать этот код для использования кеша? Какие-либо предложения?
Предположим, что этот код был двойным черепицей/заблокирован (большая плитка = 32, а внутри него - плитка 16), а также было применено Loop Invariant Code Motion .. было бы еще полезно использовать bithifting и UInt64?
Если нет, то какие другие предложения будут работать?
Спасибо!
Как выглядит макрос RIDX? –
RIDX is ((i) * (n) + (j)) – johnshaddad
Вы имеете в виду: '#define RIDX (i, j, n) ((i) * (n) + (j))'? –