[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Перекомпиляция основных программ



В сообщении от Суббота 16 октября 2010 18:20:39 автор Н. Артём написал:
> > >  Затем, что они используются в скриптах инициализации, в правилах udev,
> > >  во всех остальных скриптах. И т.д. Т.е., если с каждого будет
> > >  небольшой, незаметный прирост, в сумме, теоретически, может кое-что
> > >  набраться.
> > 
> > Не должно.
> 
> Почему?
> 
> > > > >   Они используются в скриптах. Повсеместно.
> > > >  
> > > >  Используются. А при чём тут использование процессорной мощности?
> > >  
> > >  См. выше. "Скорость работы", по-идее, может увеличиться?
> > 
> > Пересобирать каждую новую версию придётся сильно дольше, чем выигранные
> > миллисекунды.
> 
> Ну не так часто они и обновляются. А насчёт миллисекунд - вовсе не факт. В
> i386 нет даже MMX. Я не знаю как оптимизирует gcc, но множество операций,
> которые к мультимедиа никаким боком, гораздо быстрее исполняются, если их
> код генерируется с использованием команд MMX расширения. А уж если
> говорить о более новых расширениях... По-моему, тут нельзя без замеров
> однозначно сказать...
Вам не мерить всякую фигню надо, а почитать про векторные расширения. 
Основной смысл этих расширений.
 В процессор добавлены большие регистры (128бит и более) куда можно кинуть 
много небольших переменных и за раз что-то с ними сделать. Допустим вы 
складываете в цикле n-e кол-во 16битных целых. Программист может написать код, 
который использует эту возможность. Этим он сделает вычисление быстрее,  а 
программу сложнее. Для числодробилок это усложнение необходимо и оправданно. 
Ежели программист просто напишет плюсик, то в дело вступает компилятор. Ежели 
компилятору скажут, что можно использовать mmx, sse и прочие векторные 
расширения, то из программного кода он попытается вычленить те, куски, которые 
можно векторизировать. Даже в простейшем случае, приведенном выше, компилятор 
не будет знать что делать. А вдруг под кол-вом итераций (n) скрывается малое 
число (1-15)? Компилятор, если возьмется векторизировать, должен отсечь кол-во 
итераций меньше 8 и досчитывать их без расширений(или добивать нулями). Будет 
работать этот код быстрее или медленнее - неизвестно. В реальном же коде если 
программист не подстраивался под компилятор, то компилятор вообще почти ничего 
не поймет. Запихнет эти инструкции в десятке-другом мест, причем с неизвестным 
результатом. 
Про зачатки векторизации в компиляторе gcc можно почитать сдесь 
http://gcc.gnu.org/projects/tree-ssa/vectorization.html


Reply to: