vasek |
|
Темы:
47
Сообщения:
11885
Участник с: 17 февраля 2013
|
Если честно, это очень огромные дебри, лучше туда не лезти. Литературу очень трудно найти, а если и находишь, то eng. Я в молодости так и не осилил. Название ARCH_HWEIGHT_CFLAGS от Hamming weight function (весовая функция Хэмминга). Вдобавок все это связано с быстрыми системными вызовами, popcnt, регистрами и прочей ерундой - без обид, но одному без помощи спеца эту тему очень трудно осилить. Ну и что полегче — если заглянешь в файл Linux-xxxxx/arch/x86/Kconfig, то увидишь config ARCH_HWEIGHT_CFLAGS string default "-fcall-saved-ecx -fcall-saved-edx" if X86_32 default "-fcall-saved-rdi -fcall-saved-rsi -fcall-saved-rdx -fcall-saved-rcx -fcall-saved-r8 -fcall-saved-r9 -fcall-saved-r10 -fcall-saved-r11" if X86_64 Поэтому тебе сказали правильно — все ставится по дефолту и лучше ничего не трогать.
Ошибки не исчезают с опытом - они просто умнеют
|
vasek |
|
Темы:
47
Сообщения:
11885
Участник с: 17 февраля 2013
|
castanelНе правильно, наверное, еще и гуглишь - попробуй -fcall-saved-reg (или -fcall-saved-регистр) — в крайнем случае попадешь на описание компилятора и узнаешь, хотя бы немного для чего это. Если не найдешь — пиши, дам перевод этой опции из компилятора — но, но, но — толку от этого определения мало — смысл уловить трудно.
Ошибки не исчезают с опытом - они просто умнеют
|
Perfect_Gentleman |
|
Темы:
55
Сообщения:
1039
Участник с: 29 октября 2012
|
castanel, в xconfig'e он нередакутирумеый. а ну ка, покажи, как ты его можешь подредактировать. |
dartsergius |
|
![]()
Темы:
18
Сообщения:
238
Участник с: 15 декабря 2011
|
vasekна запрос fcall-saved выдало http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Interoperation.html http://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html Из описания сразу же понятно, что это эта функция сохраняет регистрыв неизменном виде( которые ты укажешь ) при вызове API. А надо это для совместимости компиляторов. Ибо кто-то может модифицировать те или иные регистры во время вызовов. И менять что-то там я не думаю что требуеться, Если добавишь "безопасный регистр", то система будет работать медленнее, и требовать больше памяти( стек скорее всего, но все же ). Если уберешь "лишнее" не подумав, и не подготовив систему к этому, то встретишь kernel panic с вероятностью 99,(9) % |
vasek |
|
Темы:
47
Сообщения:
11885
Участник с: 17 февраля 2013
|
dartsergius, мне это все понятно- а если подумать, как знатоки на следствии, то половину можно понять и из названия. Но хотел, чтобы ТС сам дошел до этого - так лучше схватывается на будущее. И еще, я ему дал прямой намек на компилятор - привожу не совсем удачный перевод из описания к нему -fcall-saved-reg Обращается с регистром с именем 'reg' как с регистром, подходящим для распределения, который сохраняется функциями. Он может выделяться даже для временных переменных или обычных переменных, которые переживают вызов функции. Функции, откомпилированные с этой опцией, будут сохранять и восстанавливать регистр 'reg', если они его используют. Использование этого флага для регистра, который имеет фиксированную роль в машинной модели исполнения такую, как указатель стека или указатель фрейма, порождает разрушительный результат. Различные бедствия могут произойти от использования этого флага для регистров, в которых могут возвращаться значения функций. Эта опция не имеет отрицательной формы, потому что она определяет выбор из трех альтернатив. Мне не понятно другое 1. как это сказывается на быстродействии - пишут, что значительно. 2. причем здесь весовая функция Хэмминга.
Ошибки не исчезают с опытом - они просто умнеют
|
dartsergius |
|
![]()
Темы:
18
Сообщения:
238
Участник с: 15 декабря 2011
|
vasekТы знаком с асмом? Если да, то поймешь. 1 У тебя есть некоторый набор функций. Допустим их 100 000. Все они оперируют регистрами. Указывая -fcall-saved мы показываем компилятору какие регистры можно использовать другим функциям совершенно свободно. Таким образом у нас эти все 100 000 функций умеют работать например с ebx, edx, esp. Нам надо сохранить с стеке только 3 значения, чтобы перейти к другой функции. И недостатка памяти у нас не будет. Если мы увеличим коилчество регистров до ebx, ecx, edx, esi, edi, eax. Количество памяти при увеличении стека вызово увеличивается в 2 раза( 6 регистра сохраняем против 3-х ). НО! В функции мы можем использовать в своих нуждах уже 6 регистров! что даст огромный прирост производительности, потому что нам ненадо будет лишний раз обращаться к памяти за переменной( пусть даже к кеш памяти). Ну и соответсвенно хоть малый оверклок уже будет заметен. Но если у нас кончается память, то никто нам не поможет. 2. насчет весовой функции точно не скажу, но думаю связано с потреблением памяти. Ну и эту весовую функцию не изучал пока( неродивый студент, который только собирается восстановиться на матфак). |
vasek |
|
Темы:
47
Сообщения:
11885
Участник с: 17 февраля 2013
|
dartsergiusdartsergius, спасибо за ответ и пояснение. Но, похоже из-за моего возраста и отсталости (давно не занимаюсь всем этим), все это не очень строго укладывается в моей голове — ну не вижу я такого большого увеличения быстродействия на 32 битной системе (всего два регистра - "-fcall-saved-ecx -fcall-saved-edx") — вообщем не робщи на деда, такова уже видно моя участь. Ну а тебе от чистого сердца желаю успешно восстановиться на матфак.
Ошибки не исчезают с опытом - они просто умнеют
|
castanel |
|
Темы:
5
Сообщения:
33
Участник с: 13 января 2013
|
Perfect_Gentlemanкогда на параметр пару раз щёлкаешь, внизу появляется строка редактирования.
Не знаешь, что делать, делай шаг вперёд!..
|
Perfect_Gentleman |
|
Темы:
55
Сообщения:
1039
Участник с: 29 октября 2012
|
скрины покажи: до и после |