Сложен или несложен алгоритм - давайте сначала уберем скрытые циклы!



Posted by Аркадий Водяник (195.206.226.8) on February 06, 2001 at 02:09:05:

In Reply to: Теория.. FIFO posted by Валентин, Донецк on February 05, 2001 at 11:47:20:

Валентин пишет:

>Не хочу утверждать, но причина, как мне кажется, в сложности алгоритма,
>т.е. так, как ответил А.Анимица...

Ну хорошо, будем считать Ваш алгоритм сложным. И вот Вы говорите:

>1. Или модернизировать данный алгоритм
>2. Или применить принципиально новый алгоритм.
>Правда, к сожалению, на принципиально новый алгоритм у меня сейчас нет
>ни одного предложения.
>Еще раз хочу сказать:
> 1. Замена erase на nerase не дала принципиального выигрыша в скорости...

Что же, буду навязчивым, раз Валентин заставляет:)
Вы, Валентин, опцию "Быстрые факты" на своем сервере включали?
Конечно нет. Вот и хорошо, что "не хотите утверждать".

А сейчас приступим к конкретным подсчетам.
Вы опубликовали профиль своего файла-коэффициента. Что же там видно?


########## 59.4% 8251¦0023 erase part TV post ?? k_vo ?? cena ?? nomer NP
# 7.0% 974¦0031 erase part TV post ?? k_vo ?PI cena ?? nomer NP
0.6% 88¦0037 nerase part TV post ?Z k_vo ?? cena ?SP nomer NP
## 14.3% 1982¦0049 select part TV post ?? k_vo ?? cena ?? nomer ?NP
1.7% 239¦0058 nerase part TV post AA k_vo A1 cena A2 nomer NP

В эту выборку я не включил search - по причинам, которые об'ясню ниже.
И даже без search:

59.4% + 7.0% + 0.6% + 14.3% + 1.7% = 83%

83% времени Ваш файл-коэффициент всего лишь сканирует ленту фактов -
то есть выполняет вот тот скрытый внутренний цикл, о котором я
и написал в заголовке.

Сканирует! Вместо того, чтобы делать Прыжки по ленте фактов в
соответствии с индексом "Быстрых фактов"!

Простой подсчет показывает, что если бы "Быстрые факты" ускорили
работу выборки всего в 10 раз (на практике - много больше), она
(работа) потребовала бы не

8251ms + 974ms + 88ms + 1982ms + 239ms = 11534ms, a 1153ms,

а общее время Вашего теста составило бы:

13895ms (число из заголовка профиля) - 11534мс + 1153ms = 3513ms.

Без учета ускорения search и некоторого замедления fact
это дало бы ускорение в 4 раза. И весьма вероятно, что больше.

Примечания:
*) Опция "Быстрые факты" включается, если ФБП:Сервер заметит
при старте в каталоге данных файл FASTFACT
*) search ускоряется при "Быстрых фактах", но это ускорение
труднее прогнозируется.
*) nerase при вЫключенных "Быстрых фактах" "путешествует"
по ленте фактов на неопределенную глубину - пока найдет, что надо.
Вероятно, в Вашем случае, "что надо" лежит глубоко, так что и
выходило, что почти все равно, чем исследовать ленту.
*) Опция "Быстрые факты" требует повышенного расхода RAM для хранения
фактов - примерно в 2 раза.
*) Информацию о том, как лучше использовать индексирование
"Быстрых фактов" можно найти в 552.htm



Пpишедшие ответы: