Гость
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Порядок компиляции - каковы причины компиляции "соседей"? / 25 сообщений из 31, страница 1 из 2
19.03.2010, 13:11
    #36530689
kolesov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Порядок компиляции - каковы причины компиляции "соседей"?
Никто не знает, где найти информацию о том, как устроены алгоритмы Каше, отвечающие за принудительную компиляцию "соседей" при компиляции класса?
Дело в том, что даже с минимальными опциями (я не прошу компилять зависимые или используемые классы), при компиляции некоторых классов происходит перекомпиляция множества других, порой совсем с виду невиноватых классов.
Интересует информация в духе:
- стороны отношения всегда компилируются вместе;
- при изменении типа свойства компилируются все классы, методы которых используют это свойство;
- и т.д. и т.п.
Как я понял, эта ситуация зависит, чуть-ли, не от фазы луны - бывало такое, что класс компилится 1 секунду, а через 2 минуты, после добавления описания свойства он же начинает цеплять множество других классов...
...
Рейтинг: 0 / 0
19.03.2010, 13:22
    #36530731
DAiMor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Порядок компиляции - каковы причины компиляции "соседей"?
можно поставить нужные флаги
в студии когда редактируется класс, Ctrl+Shift+F7, можно задать нужные флаги и сохранить их по умолчанию

USER>d $system.OBJ.ShowFlags()
a - Include application classes. This flag is set by default.
b - Include sub classes.
c - Compile. Use this flag while loading a CDL file will cause the classes
loaded to be compiled as well.
d - Display. This flag is set by default.
e - Delete extent.
f - Force. Force a compilation even when classes instances are in use.
Existing objects are invalid after compilation.
h - Generate help.
i - Validate XML export format against schema on Load.
k - Keep source. When this flag is set, source code of
generated routines will be kept.
l - Use lock while compilation classes. This flag is set by default.
p - Include percent classes.
q - SQL-only compilation.
r - Recursive. It means include all the classes that are
dependency predecessors.
s - Include system classes.
u - Update only. It means do not compile classes that are up-to-date.
v - Keep valid. When combined with "f" flag (which forces recompilation),
also keeps the objects valid after compilation finishes.
y - Include classes that are related to the current class in the way that
they either reference to or are referenced by the current class in SQL usage.
4 - Export CDL compatible with version 4 from later version.
o1- Optimize ..Property to i%Property where possible.
o2- Optimize calls within this class, no incremental compile support.
o3- Optimize calls within this class and to system classes.
o4- Optimize calls to all classes, only works from CompileAll entry point.

Default flags for this namespace =adflo1u
You may change the default flags with the SetFlags(flags,system) call
_________________________________
Cache for Windows NT (AMD64) 5.0.21 (Build 6408) Tue Jan 3 2006 13:37:41 EST
...
Рейтинг: 0 / 0
19.03.2010, 13:54
    #36530854
kolesov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Порядок компиляции - каковы причины компиляции "соседей"?
DAiMor,

Это-то понятно...
И вовсе без флагов, и с различными их вариантами (вплоть до "-a-l-ru-y-o") в некоторых случаях все же цепляются "соседи".
Вот и интересно, от чего это зависит?
...
Рейтинг: 0 / 0
19.03.2010, 20:27
    #36531940
neznau
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Порядок компиляции - каковы причины компиляции "соседей"?
kolesov,

киньте примером, если есть
...
Рейтинг: 0 / 0
20.03.2010, 03:39
    #36532172
kolesov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Порядок компиляции - каковы причины компиляции "соседей"?
neznau,

К сожалению, не получится. Собственно, если бы я смог этот пример сделать, и спрашивать не понадобилось бы...

Думал, может кто сталкивался уже...
...
Рейтинг: 0 / 0
20.03.2010, 04:15
    #36532178
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Порядок компиляции - каковы причины компиляции "соседей"?
kolesov
Есть такая проблема.
По моему, самая сильная причина "зацепления" - это использование Embedded SQL, потому что он обязан меняться, если вы хоть что-то делаете со свойствами или как-то хоть косвенно меняете хранение. Ну еще наследование, использование свойст и методов.

Связи классов либо динамически вычисляются при анализе содержимого класса (прямое обращение), либо берется из класса oddDEP (обратные ссылки на этот класс). Мне кажется, основная причина ветвистых компиляций - как раз oddDEP.
Доходило до того, что у меня кроме CompileAll ничего не работало или компилило все подряд, при компиляции одиночного класса А говорило что устарел класс Б, при компиляции класса Б говори про класс С, при компиляции класса С говорило, что устарел А.

Обращался в саппорт, но смоделировать проблему не смог, а на передачу всех классов не получил разрешения. Плюнул и стал удалять oddDEP. Не знаю, cуществует ли проблема на поздних версиях каше, т.к. по привычке удаляю oddDEP

На разных версиях каше классы цепляет по разному, вроде поздние чуть получше.
...
Рейтинг: 0 / 0
20.03.2010, 04:26
    #36532180
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Порядок компиляции - каковы причины компиляции "соседей"?
Попробуйте запустить

d $system.OBJ.GetDependencies
d $system.OBJ.IsUpToDate(myclass,1,1)
...
Рейтинг: 0 / 0
30.03.2010, 07:57
    #36549618
kolesov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Порядок компиляции - каковы причины компиляции "соседей"?
Блок А.Н.,

Спасибо огромное!
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
>m ^oddDEPtemp = ^oddDEP
 
>k ^oddDEP

После этого компилируем.
После компиляции возвращаем зависимости (вдруг они на что-то еще кроме
компиляции влияют)

>m ^oddDEP = ^oddDEPtemp
 
>k ^oddDEPtemp
В таком виде начал использовать. Очень нравится...
Конечно, для небольших изменений (что как раз и нужно - баги после сборки теперь не ждут неделю для закрытия)
Попробую стараться это делать пореже, конечно ;)
...
Рейтинг: 0 / 0
30.03.2010, 08:00
    #36549621
kolesov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Порядок компиляции - каковы причины компиляции "соседей"?
Блок А.Н.Попробуйте запустить

d $system.OBJ.GetDependencies
d $system.OBJ.IsUpToDate(myclass,1,1)
Да, похоже можно и так:
w $system.OBJ.GetDependencies("*")
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
06.08.2012, 15:06
    #37905800
D_De1mos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Порядок компиляции - каковы причины компиляции "соседей"?
Тема конечно старая, но я думаю здесь будет уместно спросить.
Переходим на Cache 2011.1, там появилась многопоточная компиляция, но для ее правильной работы необходимо во всех классах прописать CompileAfter или DependsOn. В нашем проекте более 2тыс классов, руками все зависимости проставлять не реально, пробовал смотреть ^oddDEP, но что-то не совсем понял, какие данные оттуда нужно брать.
Может кто-то уже занимался задачей построения дерева зависимостей?
...
Рейтинг: 0 / 0
06.08.2012, 17:05
    #37906049
Блок А.Н.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Порядок компиляции - каковы причины компиляции "соседей"?
Само разберется.
Мне наоборот, приходилось удалять oddDEP, так как слишком много цепляло каждый раз.
...
Рейтинг: 0 / 0
06.08.2012, 17:23
    #37906095
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Порядок компиляции - каковы причины компиляции "соседей"?
Блок А.Н.Само разберется.Caché 2011.1 Upgrade ChecklistUse of parallel compilation assumes that all relevant dependencies between classes are expressed in the class declaration.
...
If two classes did not specify a dependency, the order in which they are done cannot be predicted; this could potentially cause a problem if two classes were dependent on each other but no dependency had been specified and the sequential compilation order just happened to work correctly. If this occurs, add a CompileAfter or DependsOn dependency between the classes to specify their relation .
Источник
...
Рейтинг: 0 / 0
07.08.2012, 07:37
    #37906656
D_De1mos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Порядок компиляции - каковы причины компиляции "соседей"?
Блок А.Н.Само разберется.

Попробовал так - у меня все в дедлоки упало и пришлось ребутить каше.
А ускорения компиляции охота, т.к. компиляция съедает половину времени сборки (порядка 12-15 минут)
...
Рейтинг: 0 / 0
08.08.2012, 10:53
    #37908314
D_De1mos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Порядок компиляции - каковы причины компиляции "соседей"?
В общем я так понимаю InterSystems заявили очередную бесполезную фичу, т.к. для маленьких проектов многопоточной компиляции и не требуется, а для больших нет функциональности автоматического построения правильных зависимостей.
...
Рейтинг: 0 / 0
08.08.2012, 11:12
    #37908368
Шваров Евгений
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Порядок компиляции - каковы причины компиляции "соседей"?
D_De1mosВ общем я так понимаю InterSystems заявили очередную бесполезную фичу, т.к. для маленьких проектов многопоточной компиляции и не требуется, а для больших нет функциональности автоматического построения правильных зависимостей.
На самом деле вопрос в наличии утилиты, которая выстраивала бы правильные зависимости для классов большого проекта. Правильно? Считаем задачу полезной и интересной. Если не трудно - пришлите нам проект (мне в личку), можно сильно прошлую версию - решим задачу для вашего случая и в общем виде. У нас сейчас есть выделен ресурс для реализации полезных для сообщества задач.
...
Рейтинг: 0 / 0
08.08.2012, 11:20
    #37908395
Шваров Евгений
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Порядок компиляции - каковы причины компиляции "соседей"?
D_De1mosВ общем я так понимаю InterSystems заявили очередную бесполезную фичу, т.к. для маленьких проектов многопоточной компиляции и не требуется, а для больших нет функциональности автоматического построения правильных зависимостей.
На самом деле вопрос в наличии утилиты, которая выстраивала бы правильные зависимости для классов большого проекта. Правильно? Считаем задачу полезной и интересной. Если не трудно - пришлите нам проект (в личку), можно сильно прошлую версию - решим задачу для вашего случая и в общем виде.
...
Рейтинг: 0 / 0
08.08.2012, 11:37
    #37908450
D_De1mos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Порядок компиляции - каковы причины компиляции "соседей"?
Да, правильно. Смысл параллельной компиляции будет только при наличии утилиты.
Проект к сожалению скинуть не могу, т.к. система закрытая. И в любом случае решать надо общую задачу.
Если есть возможность - можете предоставить документацию по глобалу ^oddDEP, в нем под разными индексами хранятся разные зависимости, нужно понять, какие из них необходимы для многопоточной компиляции.
...
Рейтинг: 0 / 0
08.08.2012, 15:05
    #37909018
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Порядок компиляции - каковы причины компиляции "соседей"?
D_De1mosПопробовал так - у меня все в дедлоки упало и пришлось ребутить каше.Наверное, потому, что флаг компиляции l (Lock classes while compiling) по умолчанию включён.
D_De1mosВ общем я так понимаю InterSystems заявили очередную бесполезную фичу, т.к. для маленьких проектов многопоточной компиляции и не требуется, а для больших нет функциональности автоматического построения правильных зависимостей.Скорость многопоточной компиляции существенна и на маленьких проектах.
D_De1mosЕсли есть возможность - можете предоставить документацию по глобалу ^oddDEP, в нем под разными индексами хранятся разные зависимости, нужно понять, какие из них необходимы для многопоточной компиляции.Кое-что можно почерпнуть из %occDepend.inc , но не рекомендую использовать системный недокументированный глобал.

Метод $system.OBJ.GetDependencies() формирует в oddDEP не все зависимости, а только статические - те, которые может выявить до компиляции.
Но есть ещё динамические зависимости: методы-генераторы, встроенный sql и т.д.
Все зависимости попадут в глобал oddDEP в процессе компиляции всех классов области.
Примечание:Ошибку при отсутствии явно заданных CompileAfter / DependsOn можно получить и при однопоточной компиляции.
Вы можете поступить проще.

В Caché-терминале в нужной области (для начала в безопасном окружении) запустите

Код: plaintext
ABC>do $system.OBJ.DisplayError($system.OBJ.CompileAll("c-u-l/multicompile",.errorlog))

Все найденные ошибки, в том числе связанные с отсутствующими зависимостями, попадут в errorlog , которые затем Вы легко сможете исправить вручную.
...
Рейтинг: 0 / 0
08.08.2012, 17:51
    #37909360
ser_shu
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Порядок компиляции - каковы причины компиляции "соседей"?
servitВы можете поступить проще.
В Caché-терминале в нужной области (для начала в безопасном окружении) запустите
Код: plaintext
ABC>do $system.OBJ.DisplayError($system.OBJ.CompileAll("c-u-l/multicompile",.errorlog))
Все найденные ошибки, в том числе связанные с отсутствующими зависимостями, попадут в errorlog , которые затем Вы легко сможете исправить вручную.
Для начала это поможет, но не гарантирует устойчивый результат, так как количество потоков может меняться, добавляться или удаляться классы...
Скорее всего придется прописать все зависимости в существующих и обязательно во вновь создаваемых классах (где имеются эти зависимости).
...
Рейтинг: 0 / 0
08.08.2012, 19:54
    #37909537
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Порядок компиляции - каковы причины компиляции "соседей"?
ser_shu ,

Проблема во многом зависит от архитектуры системы (сложности/запутанности классов).

В моём случае (~400 классов без CompileAfter/DependsOn)

Код: plaintext
ABC>do $system.OBJ.DisplayError($system.OBJ.CompileAll("c-u-l",.errorlog)) один поток
и
Код: plaintext
ABC>do $system.OBJ.DisplayError($system.OBJ.CompileAll("c-u-l/multicompile",.errorlog)) четыре потока

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

PS: при компиляции именно проекта или тем более одного (любого) класса ошибок никогда не наблюдалось.
...
Рейтинг: 0 / 0
09.08.2012, 03:15
    #37909811
ser_shu
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Порядок компиляции - каковы причины компиляции "соседей"?
servit,
да, у меня тоже ~800 классов и проблем больше полугода при компиляции не замечал в 2012.1.
Все зависимости простые, которые, видимо, сразу определяются компилятором, sql в основном динамический.
Скорее всего проблемы возникнут на встроенном sql в методах, где компилятор не сможет сразу определить зависимость.
Вообще то не заметил этого примечания к многопоточности, спасибо, надо бы осознать, когда необходимо указывать в классах последовательность компиляции, чтобы не нарваться.
...
Рейтинг: 0 / 0
09.08.2012, 09:45
    #37909976
D_De1mos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Порядок компиляции - каковы причины компиляции "соседей"?
servitВы можете поступить проще.

В Caché-терминале в нужной области (для начала в безопасном окружении) запустите

Код: plaintext
ABC>do $system.OBJ.DisplayError($system.OBJ.CompileAll("c-u-l/multicompile",.errorlog))

Все найденные ошибки, в том числе связанные с отсутствующими зависимостями, попадут в errorlog , которые затем Вы легко сможете исправить вручную.

Спасибо, как-то пропустил этот флаг, с -l все компилится без ошибок .
А чем это потенциальном может грозить? возможностью редактировать+компилировать класс во время компиляции?
...
Рейтинг: 0 / 0
09.08.2012, 11:12
    #37910177
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Порядок компиляции - каковы причины компиляции "соседей"?
D_De1mosА чем это потенциальном может грозить? возможностью редактировать+компилировать класс во время компиляции? Да .
...
Рейтинг: 0 / 0
10.08.2012, 15:06
    #37912349
D_De1mos
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Порядок компиляции - каковы причины компиляции "соседей"?
В общем многопоточная компиляция оказалась хорошей фичей, время компиляции уменьшилось с ~16мин до 7,5 на 4-х ядерном i7
...
Рейтинг: 0 / 0
15.09.2012, 21:26
    #37958975
doublefint
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Порядок компиляции - каковы причины компиляции "соседей"?
SQL проекция на oddDEP
...
Рейтинг: 0 / 0
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Порядок компиляции - каковы причины компиляции "соседей"? / 25 сообщений из 31, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]