:: Игры Разума
Re: Сравнение циклов
h.i.a.

Сообщений: 4002
Откуда: Мурманск/Спб/Мск
Дата регистрации: 18.11.2005
Я попросил через ЛС Алексея Цингауза прояснить ситуацию.
Первый тест указывает на влияние локальной переменной a на результат.
Получается, важен не только порядок инициализации переменных i и y, но и "внешние" факторы.

Когда вышел VFP 9, я попробовал перевести на него рабочий проект, но по ряду причин так и остался на VFP8. Одой из причин было заметное "на глаз" общее падение скорости (к скорости выборок претензий нет), причину определить так и не удалось.
Сейчас могу предположить, что проблема напрямую связана с результатами тестов. Проект использует свой фрейморк и содержит много вызовов "коротких" методов/функций.
Ratings: 0 negative/0 positive
Re: Сравнение циклов
Aleksey Tsingauz [MSFT]

Сообщений: 407
Дата регистрации: 15.06.2004
h.i.a.
Я попросил через ЛС Алексея Цингауза прояснить ситуацию.
Первый тест указывает на влияние локальной переменной a на результат.
Получается, важен не только порядок инициализации переменных i и y, но и "внешние" факторы.

Профайлер показывает, что разница во времени связана со временем выполнения NEXT. Причем время поиска переменной по имени не оказывает особого влияния, потому что поиск осуществляется только один раз за цикл и результат запоминается до конца цикла. Остальной код довольно простой: сместиться в массиве по индексу на адрес структуры, описывающей переменную, инкрементировать счетчик цикла в ней и проверить граничное условие. Во время моих тестов, обе переменные цикла занимали соседние элементы массива, но когда индекс переменной для вложенного цикла был четный (именно на это влияет порядок декларирования), код работал дольше (как в VFP9, так и в VFP8). Так же влияет насколько далеко от начала массива нужно смещаться. Например, public переменные помещаются в начало массива, а локальные в конец. При работе с public переменными, разницы во времени не наблюдается, то же происходит с локальными если значительно уменьшить MVCOUNT и тем самым укоротить массив.

Разница в скорости между VFP8 и VFP9 действительно есть. Для "быстрой" переменной она не особо существенна. Так как код NEXT между версиями не менялся и все операции просто элементарные операции чтения и записи в память, я думаю, что разница может быть связана с разницей в использованных компиляторах C++ и с увеличением размера структуры, которая описывает переменную. Кстати, увеличение привело к тому, что размер структуры перестал быть кратным 4-м.

Алексей.
Ratings: 0 negative/0 positive
Re: Сравнение циклов
h.i.a.

Сообщений: 4002
Откуда: Мурманск/Спб/Мск
Дата регистрации: 18.11.2005
Спасибо, Алексей.
Буду разбираться со значением MVCOUNT. До настоящего момента было установлено с запасом 60000.
Странно, что в хэлпе не упоминается о влиянии MVCOUNT на производительность


------------------
Ratings: 0 negative/0 positive
Re: Сравнение циклов
Igor Korolyov
Автор

Сообщений: 34580
Дата регистрации: 28.05.2002
Hi Алексей!

Цитата:
Кстати, увеличение привело к тому, что размер структуры перестал быть кратным 4-м.

Мне кажется что это то и могло повлиять более всего... Хотя с другой стороны все данные в такого рода цикле по определению должны попадать в кэш первого уровня - а значит скорость не должна так существенно различаться... Интересно было бы узнать результат теста при перекомпилированном рантайме (с выровненными по границе двойного слова стуктурами/всеми их элементами).

P.S. Чисто академический интерес - практической пользы от этого немного, т.к. "пустых" циклов в программах быть не должно по определению , а ситуаций когда можно безболезненно поменять местами внутренний и внешний циклы - единицы. Если же во внешнем цикле есть ещё свои команды кроме внутреннего цикла, то более чем вероятно что чем "короче" внешний цикл тем выше производительность... Т.е. надо ещё умудрится придумать такие реактивные команды, что их многократное исполнение пройдёт быстрее нежели эта самая банальная задержка в NEXT...


------------------
WBR, Igor
Ratings: 0 negative/0 positive


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

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

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