Re: Что будет работать быстрее???
Потому что это одно и то же.
for (i=0;i<500;i++) for(j=0;j<500;j++) a[i*n+j]=... ?
for (i=0;i<500;i++) for(j=0;j<500;j++, p++)
{
*p=...
}
Заодно точно проверить, что для вычисления "..." тебе нужны i и j, если нет, то оставить один цикл.
это фигня какая-то получается
товарищ походу просто опечатался
Говорю по собственному опыту, разницы в скорости практически нет. Лучше подумать об эффективном кешировании и конвейризации. Без них всё обычно упирается в память.
ещё может помочь перестройка массивов данных таким образом чтоб обработка наиболее последовательно по адресам - по строками а не по хитрым диагональкам (это я перевёл фразу об эффективном кэшировании на простое практическое применение)
А я почти уверен, что не разрулит, при всём моём уважении к gcc. По крайней мере, gcc 3.x.
Не разрулит. Недавно знакомый чувак писал метод гаусса. Всё тип-топом, кеширование есть, но не стал циклы развёртывать, понадеялся на gcc - в итоге на П4 2.4 метод работал быстрее чем на А64 3000+ Винчестер. Развернул циклы - на Атлоне метод ускорился в 5 раз. Т.е. у gcc плохо с разруливанием циклов.
Насколько я помню, по -O... развёртывание циклов в gcc не включается (по крайней мере для -O2 и ниже).
Оставить комментарий
zamorin31
for (i=0;i<500;i++) for(j=0;j<500;j++) a[i*n+j]=...или
for (i=0;i<500;i++) for(j=0;j<500;j++) *(a+m*i+j)=...
и почему?