:: Visual Foxpro, Foxpro for DOS
Re: Удаление лишних пробелов
_vit
Автор

Сообщений: 5175
Дата регистрации: 29.07.2002
spinz

Дальше пятой страницы читать не стал.

Человек, у которого каша в голове из-за непонимания хотя бы состояний ACPI и как они коррелируют с работой процессора, ничего дельного не напишет

Давай по пунктам, что не так с ACPI у него.
Ну хотя бы один для начала.
Ratings: 0 negative/0 positive
Re: Удаление лишних пробелов
_vit
Автор

Сообщений: 5175
Дата регистрации: 29.07.2002
spinz
Вот начет сериализации вопрос не понял.

Intel® 64 and IA-32 Architectures Software Developer’s Manual
17.15 TIME-STAMP COUNTER

Цитата:
...
The RDTSC instruction is not serializing or ordered with other instructions. It does not necessarily wait until all
previous instructions have been executed before reading the counter. Similarly, subsequent instructions may begin
execution before the RDTSC instruction operation is performed.


www.intel.com
Ratings: 0 negative/0 positive
Re: Удаление лишних пробелов
spinz

Сообщений: 5263
Дата регистрации: 21.01.2016
_vit
Давай по пунктам, что не так с ACPI у него.
Да у него все с ACPI не так.

Цитата:
Счетчик работает (увеличивается) даже если процессор остановлен командой HLT (состояние ACPI C1) или по сигналу STPCLK# (состояние ACPI C2)

Начнем с того,что STPCLK# - это всегда ACPI S1, проц без тактирования молча спит
И TSC не увеличивается. Про Deep Sleep это вообше какая-то сказка - это уровень между S4 и S5, когда спит вообще вся система
Ratings: 0 negative/0 positive
Re: Удаление лишних пробелов
spinz

Сообщений: 5263
Дата регистрации: 21.01.2016
_vit
The RDTSC instruction is not serializing or ordered with other instructions.

Поверь мне, я знаю что такое сериализация на x86. Я не могу понять к чему ты это здесь
Ratings: 0 negative/0 positive
Re: Удаление лишних пробелов
_vit
Автор

Сообщений: 5175
Дата регистрации: 29.07.2002
spinz
_vit
The RDTSC instruction is not serializing or ordered with other instructions.

Поверь мне, я знаю что такое сериализация на x86. Я не могу понять к чему ты это здесь

Я о использовании CPUID, LFENCE, MFENCE перед RDTSC или использовании других методов для предотвращения "Out of Order Execution"
Ratings: 0 negative/0 positive
Re: Удаление лишних пробелов
_vit
Автор

Сообщений: 5175
Дата регистрации: 29.07.2002
spinz
_vit
Давай по пунктам, что не так с ACPI у него.
Да у него все с ACPI не так.

Цитата:
Счетчик работает (увеличивается) даже если процессор остановлен командой HLT (состояние ACPI C1) или по сигналу STPCLK# (состояние ACPI C2)

Начнем с того,что STPCLK# - это всегда ACPI S1, проц без тактирования молча спит
И TSC не увеличивается. Про Deep Sleep это вообше какая-то сказка - это уровень между S4 и S5, когда спит вообще вся система

Про общие состояния системы S у него вообще ни слова. Он говорит о состояниях процессора - С.
Я вчера не поленился и проверил по документации этот пятый пункт и косяков не обнаружил.
Так что можно читать дальше.;)
Ratings: 0 negative/0 positive
Re: Удаление лишних пробелов
spinz

Сообщений: 5263
Дата регистрации: 21.01.2016
_vit
Я о использовании CPUID, LFENCE, MFENCE перед RDTSC или использовании других методов для предотвращения "Out of Order Execution"

В каких-то случаях да, это имеет смысл.Но не когда мы считаем миллионы тактов.
Ratings: 0 negative/0 positive
Re: Удаление лишних пробелов
spinz

Сообщений: 5263
Дата регистрации: 21.01.2016
_vit
Про общие состояния системы S у него вообще ни слова. Он говорит о состояниях процессора - С.

Хм, нашел старые доки интела по ICH7. На том железе действительно была поддержка С2 и С3, причем только для мобильных платформ
Цитата:

G0/S0/C2
(Mobile/Ultra
Mobile Only)
Stop-Grant: The STPCLK# signal goes active to the processor. The processor
performs a Stop-Grant cycle, halts its instruction stream, and remains in that
state until the STPCLK# signal goes inactive.

G0/S0/C3
(Mobile/Ultra
Mobile Only)
Stop-Clock: The STPCLK# signal goes active to the processor. The processor
performs a Stop-Grant cycle, halts its instruction stream. ICH7 then asserts
DPSLP# followed by STP_CPU#, which forces the clock generator to stop the
processor clock.

На более поздних чипсетах этого уже нет

Цитата:
Puts Processor Core in S1 state.

Цитата:
All of the
legacy C-state related pins (STPCLK#, STP_CPU#, DPRSLP#, DPRSLPVR#, and so on)
do not exist on the PCH.
Ratings: 0 negative/0 positive
Re: Удаление лишних пробелов
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
leonid
Здесь как раз pop без push.
А как же call? Он и есть push Хотя с точки зрения медсТраха замена push на call должно быть каким-то особого рода извращением "покричать и вынуть"


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Удаление лишних пробелов
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
Igor Korolyov
должно быть каким-то особого рода извращением "покричать и вынуть"

Новая категория прона? [sm128]
Ratings: 0 negative/0 positive
Re: Удаление лишних пробелов
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
spinz
В каких-то случаях да, это имеет смысл.Но не когда мы считаем миллионы тактов.
Речь лишь про то что TSC весьма ненадёжный метод измерения чего либо. Особенно "миллионнотактного". От "времени" прямой зависимости нет, и даже от собственно "нагрузки алгоритма" тоже не будет, т.к. сколько переключений контекста произойдёт за эти самые прошедшие миллионы тактов?


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Удаление лишних пробелов
spinz

Сообщений: 5263
Дата регистрации: 21.01.2016
Igor Korolyov
т.к. сколько переключений контекста произойдёт за эти самые прошедшие миллионы тактов?
Ну примерно столько, сколько и при выполнении кода занимающего на десяток млн тактов больше.

Поэтому для сравнения производительности именно ассемблерного кода в рассматриваемом - не в общем - случае испльзование RDTSC вполне допустимо.

В тех случаях когда надо замерить время выполнения действительно точно, я использую код, стартующий из реалмода с отключенными ядрами, кроме одного, - чтобы исключить влияние ОС и других ядер. В идеале, конечно, надо еще блочить SMI#, но учитывая, что на реальных системах оно никогда не блочится, на это можно и забить.
Ratings: 0 negative/0 positive
Re: Удаление лишних пробелов
spinz

Сообщений: 5263
Дата регистрации: 21.01.2016
Igor Korolyov
А как же call? Он и есть push Хотя с точки зрения медсТраха замена push на call должно быть каким-то особого рода извращением "покричать и вынуть"

Не, ну проникновение в стек, конечно имеет место и при call, но другим способом, значит это уже нестандартные вагинальные практики
Ratings: 0 negative/0 positive
Re: Удаление лишних пробелов
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
leonid
Вот так будет быстрей всего

Нарисовал таки fll, и не смотря на более чем неоптимальный машинный код созданный для моего не менее неоптимального сишного кода древней VS, оно таки работает раза в 2 быстрее ASM вставки.
Я думаю что всё дело в лишних копированиях.
К сожалению, даже для fll фокс делает кучу "ненужных" копирований содержимого строки (в т.ч. и выделение памяти под все эти "копии", если строка массивная) - я ошибался полагая что FoxAPI даст "прямой" доступ к переменным. Он вообще через TLS работает, и саму fll нужно компилить как "многопоточную" - видимо сделали сразу с "защитой от дурака", т.к. кто то же может и под vfp*t.dll подключить такую библиотеку. Да и последствия от ошибки при работе с собственно фоксовой памятью, видимо, сказали разрабам что пусть лучше fll со своими отдельными "кучами" работают - там и exception можно иногда перехватить - т.е. хоть как-то снизить риск краха всего фокса при подключении "кривоватой" fll В общем от массивных memmove (как минимум две операции) мне избавиться не удалось - НО их число таки меньше чем для приведенного ASM варианта - там же ещё и LEFT "обязательный", который опять таки гоняет байтики туда-сюда.
На той неделе выложу код и всё что надо для тестов. Хотелось бы чтобы "участники забега" подправили свои варианты - у варианта leonid-а печаль-беда с пустой строкой (таки крах фокса - "не туды" залазит код), и мой грубый фикс в виде
IF EMPTY(m.st)
RETURN ""
ENDIF
Всё же слишком груб

Плюс к тому тут ТЗ по ходу дела поменяли , и хотят уже и ALLTRIM() заодно делать, конечно же это будет совсем неэффективно делать фоксовой функцией - ещё одно ненужное копирование строк...
Ну и да, использование конкатенации плюс REPLICATE() для подготовки данных тоже "не фонтан" - во-первых это опять тормоза, во-вторых не позволяют потестить эту функцию на мега-строках (у меня работает и с 400Мб-ной строкой взятой из файла). Если очень грубо подправить приведенный код (убрать + " " и сделать возврат данных в ту же самую переменную/строку, то этот код вполне справляется с 200Мб-ной строкой состоящей на 99.999% из пробелов. Но он, конечно же, будет падать из-за записи нескольких лишних байт куда не надо (для чего эти +4 символа и были введены) - т.е. приходится тупо отсекать обработку 4 последних символов в точке вызова.

"Быстрый" вариант spinz-а имеет гораздо больше проблем, начав с того что он не возвращает размер готовой строки, некорректно обрабатывает строки не кратные 4-м символам, да и собственно саму строку без дублей пробелов не формирует и не возвращает из функции (конечно же это будет быстрее - если убрать необходимый LEFT, и не перекачивать данные лишний раз).


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Удаление лишних пробелов
spinz

Сообщений: 5263
Дата регистрации: 21.01.2016
Igor Korolyov
"Быстрый" вариант spinz-а имеет гораздо больше проблем, начав с того что он не возвращает размер готовой строки, некорректно обрабатывает строки не кратные 4-м символам, да и собственно саму строку без дублей пробелов не формирует и не возвращает из функции (конечно же это будет быстрее - если убрать необходимый LEFT, и не перекачивать данные лишний раз).

Размер не возвращается из-за необходимости вернуть TSC - для тестирования. Это был самый простой путь для возврата значения
Ratings: 0 negative/0 positive
Re: Удаление лишних пробелов
of63

Сообщений: 25254
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
(это уже не писатели ))) которые спорят о командах проца, разрабы микропрграммы это команды все заложили, только "вникнуть".. че они там вложили, обчные серийные операции, кроме копирований нет там ничего.)
Ratings: 0 negative/0 positive
Re: Удаление лишних пробелов
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
Igor Korolyov
Нарисовал таки fll

Народ полон чаяний и на предмет plb :bi:
Ratings: 0 negative/0 positive
Re: Удаление лишних пробелов
of63

Сообщений: 25254
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
plb... хз... ты написал хоть ОДНУ!? (я ни одной, если че, и не умею)
Ratings: 0 negative/0 positive
Re: Удаление лишних пробелов
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
of63
plb... хз... ты написал хоть ОДНУ!? (я ни одной, если че, и не умею)

"У меня тоже иномарка". [sm128]
Ratings: 0 negative/0 positive
Re: Удаление лишних пробелов
of63

Сообщений: 25254
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
дочка сказала (они сменили дрендроид с советикус на несоветикус), она изменила степень бесовщинын. Я ведь тоже читал всю эту херню, "Бесы""...
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 10 (Гостей: 10)

© 2000-2024 Fox Club 
Яндекс.Метрика