LINUX.ORG.RU

[gentoo] подробное описание USE-флагов?

 


0

1

Есть ли такое место, в котором на их описание уделяется больше одной строчки?

В смысле интересуют советы типа
«berkdb и cxx отключите - все-равно они нигде не используются»
«png и jpeg флаги в mplayer позволюят не читать картинки, а создавать их из кадров»
«вот этот флаг применяйте с осторожностью для ~x86»
«для библиотеки А поставьте это флаг (по умолчанию он не поставлен) потому что он очень часто нужен»

Конечно, это все мелочи, почти любой пакет можно меньше чем за 5-10 минут пересобрать, но какое-то внутреннее беспокойство гложет, гугл молчит, а искать информацию для каждого флага по всему инету как-то долго. Например я с большим трудом догадался до примера с mplayer (правильно ли?)


Ответ на: комментарий от madcore

>Размер кеш линий что-то значит, только в очень старых процессорах.

Пруфа опять нет?

у Фогнера к примеру. Самое главное в том, чтобы при обращении к памяти не пересекать эти самые линии. Даже выравнивать данные внутри линий не обязательно. Но так как более-менее вменяемые компиляторы всегда выравнивают данные по их размеру, то пересечений быть не может по определению. И нафига им размер линий понадобился не представляю, да даже на старых процах это ненужно знать.

Booster ★★
()
Ответ на: комментарий от Booster

>компиляторы всегда выравнивают данные по их размеру

уже нет, к тому же Pentium IV и выше не требуют этого

Sylvia ★★★★★
()
Ответ на: комментарий от Sylvia

>уже нет, к тому же Pentium IV и выше не требуют этого
Откуда информация что не выравнивают? Pentium IV точно требует.

Booster ★★
()
Ответ на: комментарий от Booster

Крис Касперски пишет что начиная с P4 не требует, многие другие указывают что _современные_ (не указывая уровень) не требуют

Sylvia ★★★★★
()
Ответ на: комментарий от Sylvia

>Крис Касперски пишет что начиная с P4 не требует, многие другие указывают что _современные_ (не указывая уровень) не требуют
Путаете, он писал о том, что начиная с P4 не требуется выравнивать границы данных по размеру. Но пересечение кэш линий, при доступе к данным это очень медленно на всех процессорах, он тоже об писал. Но так как выравнивание данных по границам их размера автоматически исключает возможность пересечения границ кэш линий, то как раз это компиляторы и делают, по крайней мере вменяемые.

Booster ★★
()
Ответ на: комментарий от Sylvia

>если взять linux kernel, оттуда тоже убрали всякие align-loops и align-jumps
Э, мы сейчас о чём о коде или о данных?

Booster ★★
()
Ответ на: комментарий от Booster

>А что они могут сделать, зная размеры кеша, просто не представляю.

Главное, чтобы разрабы компиляторов представляли.
Лобовой пример:

char a[32];
bla-bla-bla;
...
bla-bla-bla;
char b[32];
bla-bla-bla;

for(i=0;i<32;i++) a[i]&=b[31-i];


В случае, если компилятор разместит a[] на границе строки кэша, а b[] сразу за a[], то цикл отработает всего за одно обращение к памяти(при cacheline=64 на цпу, ес-но). Таких моментов особенно в мультимедиа, кодерах и тп полно и на производительность может повлиять драматически.

madcore ★★★★★
()

Как долго же он собирается вначале :(

Zodd ★★★★★
()
Ответ на: комментарий от madcore

>В случае, если компилятор разместит a[] на границе строки кэша, а b[] сразу за a[], то цикл отработает всего за одно обращение к памяти
Как за одно? Тут же по-байтово. А на запросы к памяти оно не густо повлияет, если размер массива маленький, то сработает перфетч и данные прочитаются за один запрос. Если массив большой, то это вообще не имеет значения.

Booster ★★
()

Вообще говоря, в инфраструктуре Gentoo предусмотрено указание
подробных описаний юзфлагов в metadata.xml, просто многие на это
забивают. Для mplayer он, конечно, заполнен, ты можешь его
посмотреть.

искать информацию для каждого флага по всему инету как-то долго


Почему ты не можешь просто посмотреть в ебилд, если значение
флага неочевидно?

Sphinx ★★☆☆
()
Ответ на: комментарий от Booster

>Как за одно? Тут же по-байтово.

Оба массива попадут в одну строку кэша одним обращением в память(их суммарный размер 64). Это если компилятор сделает все правильно.

madcore ★★★★★
()
Ответ на: комментарий от madcore

>Оба массива попадут в одну строку кэша одним обращением в память(их суммарный размер 64). Это если компилятор сделает все правильно.
Какая разница в одну или две, если они обе будут прочитаны из памяти одновременно. Процессоры не читают по одной линейке.

Booster ★★
()
Ответ на: комментарий от Booster

>А в данном примере скорее-всего данные уже будут в кеше, так как стек, а он кешируется очень хорошо.

Где там сказано, что это локальные переменные в стэке?)
И там есть «bla-bla-bla» между a[] и b[], т.е. в исходнике там могли бы быть описаны другие переменные, и компиллер должен бы додуматься их правильно перегруппировать.

madcore ★★★★★
()
Ответ на: комментарий от madcore

>И там есть «bla-bla-bla» между a[] и b[], т.е. в исходнике там могли бы быть описаны другие переменные, и компиллер должен бы додуматься их правильно перегруппировать.
Для чего их перегруппировывать? А если там много такого пересекающегося кода? Да и вообще бабушка на двое сказала, что компилятор такой умный и сделает всё в лучшем виде.

Booster ★★
()
Ответ на: комментарий от Booster

>Какая разница в одну или две, если они обе будут прочитаны из памяти одновременно. Процессоры не читают по одной линейке.

Ага, их хлебом не корми, дай только почитать.


ЗЫЖ помнится, во времена 486, была демка rotozoom, как наглядная иллюстрация организации данных с учетом кэша. Уверен, он и на современных процах был бы актуален, если собрать.

madcore ★★★★★
()
Ответ на: комментарий от Booster

>Для чего их перегруппировывать? А если там много такого пересекающегося кода? Да и вообще бабушка на двое сказала, что компилятор такой умный и сделает всё в лучшем виде.

Сейчас опровергается тезис о ненужности учета кэша при оптимизации, а не о возможностях конкретного компилятора.

madcore ★★★★★
()
Ответ на: комментарий от madcore

Полагаться в таком на компилятор я бы точно не стал, малейший шаг в сторону и расстрел.

Booster ★★
()
Ответ на: комментарий от madcore

Что мешает сгруппировать что-то самостоятельно и как тут повлияет размер чего-то? А если компилятор нашурует в худшую сторону? Тут уже идёт вторжение в вотчину разума.

Booster ★★
()
Ответ на: комментарий от Sphinx

> Вообще говоря, в инфраструктуре Gentoo предусмотрено указание
подробных описаний юзфлагов в metadata.xml, просто многие на это
забивают.

Спасибо, учту, но я только-что посмотрел несколько - там похоже то же, что в use.local.desc

Почему ты не можешь просто посмотреть в ебилд, если значение

флага неочевидно?

Уже пробовал - не каждый флаг добавляет зависимость, большинство просто меняют флаги компиляции, и тогда надо смотреть еще ниже, в configure или makefile. Впрочем, это тоже вариант

octave
() автор топика

А почему когда появилось предложение поделиться make.conf, поделились именно make.conf, а не emerge --info? Ведь make.conf действует не с пустого места, а с выбранного профиля. Или все пользуются одним профилем?

octave
() автор топика

Только здесь удалось найти больше 2 строчек на некоторые флаги и что-то похожее на советы (но мало). Пожалуй, я все-таки много слишком хочу. Отмечу тему как решенную.

octave
() автор топика
Ответ на: комментарий от megabaks

В смысле «от нескольких»? Можно поставить только один, и у меня самый дефолтный предефолтный - default/linux/x86/10.0. А зачем нужные те, у которых номер больше 6, я даже и не знаю.

octave
() автор топика
Ответ на: комментарий от octave

> а иногда флаги обозначают разные вещи
Приведи пример, если не затруднит.

Lumi ★★★★★
()
Ответ на: комментарий от octave

> use.local.desc

Сегодня собирается из файлов metadata.xml.

Sphinx ★★☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.