Меню

При компиляции конфигурационной библиотеки возникли ошибки логи содержат дополнительные детали

 Материалы
10 лет назад


Ошибки при компиляции

Перечень возможных ошибок при компиляции и как с ними бороться


        Иногда при компиляции могут возникнуть ошибки, из-за чего карта не скомпилируется. Список ошибок на карте (т.е. ваши ошибки) можно посмотреть, нажав в Хаммере Alt + P. Такие ошибки могут исправляться Хаммером автоматически при загрузке карты. Ошибки, которые Хаммер таким образом не исправил, не являются «опасными» для компиляторов, т.е. карта скомпилируется, даже если данная ошибка присутствует. Логические ошибки (т.е. ошибки, которые проявляются только в процессе компиляции) можно посмотреть в логе компилятора (.log-файл находится в папке с вашей картой и у него то же имя, что и у карты). Если была обнаружена логическая ошибка, карта не может быть скомпилирована или скомпилирована не всеми компиляторами. Вот список возможных ошибок

        1. There is no player start. Ошибка карты

Эту ошибку можно игнорировать

        2. Invalid texture «название текстуры». Ошибка карты

Один из брашей не имеет текстуры. Перейти к брашу можно по кнопке «Go to error» в окне исправления ошибок. Браш, вызвавший ошибку, будет абсолютно белым. Можно игнорировать, если потом добавите текстуру. В игре ошибочная текстура будет отображаться в виде эмо-сетки

        3. Texture axic perpendicular to face. Ошибка карты

Эта ошибка возникает по двум причинам:

        1. Если Вы вращали объект с выключенной опцией «Texture lock», и текстура стала перпендикулярна к стороне объекта;

        2. На карте есть объект неправильной формы, полученный в результате манипуляции с вертексами или при помощи функции Carve.

В обоих случаях проще удалить объект и создать новый.

        4. Invalid solid structure. Ошибка карты

Ошибка означает, что на карте есть браш неправильной формы, полученный в результате манипуляции с вертексами. Попытайтесь исправить данный объект или удалите и создайте новый.

        5. Solid entity «имя объекта» is empty. Ошибка карты

Ошибка означает, что брашевый энтити-объект не имеет формы (что он пустой). Трудно сказать из-за чего возникает данная ошибка, но было замечено, что иногда энтити-объект самостоятельно становится брашем, а редактор по-прежнему считает его энтити-объектом. И вот когда мы повторно превращаем браш в энтити-объект, возникает данная ошибка. Так что, скорее всего, это происходит из-за глюков самого редактора. В любом случае, лучше избавиться от таких ошибок, хоть они никак и не влияют на компиляцию.

А избавиться довольно легко. Нажмите [Alt-P], в появившемся окошке выделите строку «Solid entity … is empty» и нажмите кнопку «Go to error». Посмотрите на размер объекта (в статусной строке), если Вы видите что-то вроде: -1999998w, то нажмите Delete (т.е. просто удалите этот объект). Также поступите и с другими «пустыми» объектами.

Примечание: когда Вы перейдете к «пустому» объекту, то на карте его не будет видно, но редактор все же переходит к нему и позволяет удалить.

        6. Unmatched ‘target’ field «название». Ошибка карты

В параметре «Target» одного из объектов указано имя несуществующего объекта. Для исправления ошибки перейдите к объекту кнопкой «Go to error» и удалите/исправьте запись в параметре «Target», или же создайте объект с указанным там именем. Не влияет на компиляцию, но ошибочный объект может не сработать в игре

        7. Entity «имя объекта» has unused keyvalues. Ошибка карты

Указанная энтити содержит неиспользуемые параметры. Ошибка исправляется кнопкой «Fix». Не влияет на компиляцию, но в игре данный объект может не работать

        8. Entity «имя объекта» contains duplicate keyvalues. Ошибка карты

Указанный объект содержит несколько одинаковых параметров. Ошибка исправляется кнопкой «Fix». Также не влияет на компиляцию.

        10. Solid contains duplicate planes. Ошибка карты

Ошибка означает, что какой-то браш имеет две плоскости, наложенные друг на друга. Для исправления ошибки нажмите кнопку «Go to error», удалите объект и создайте новый.

        Это не весь список ошибок. Ещё есть логические ошибки, некоторые из них являются одновременно и ошибками карты. Но, я надеюсь, вы до них нескоро дойдёте.

        Хотя вам стоит познакомится с ошибкой Leak (утечка), грозой всех новичков. Ваша карта вся должна быть закрыта от чёрной пустоты обычными брашами (не энтити-брашами!). Если вдруг между этими брашами возникает зазор, какая-нибудь энтитя оказывается вне этой закрытой зоны или один из этих брашей является энтити-объектом, то возникает ошибка Leak. При этом компилятор VVIS не запустится, а в папке с картой появится файл «имя карты.lin», указывающий координаты лика (зазора). Карта, в принципе, скомпилируется, но она не будет делиться на листья и отрисовываться полностью, что очень сильно понизит FPS, если карта большая. Также не будет отображаться вода.

        Если вы так и не смогли найти лик, а вам нужно срочно скомпилировать карту VVIS’ом, то закройте всю вашу карту большой коробкой (создайте браш, выберите в контекстовом меню Make Hollow и введите, например, -32). Это разрешит проблему.

Если у вас возникла ошибка при компиляции, которая здесь не описана, и вы не знаете, ка её решить, вам сюда. А если знаете, то поделитесь знаниями — вам в любом случае сюда

Автор: Лорд Беккет Понравилось: 4  Не понравилось: 0 

Комментарии пользователей сайта:


Если Вам понравилась эта страница, Вы можете разместить где-нибудь ссылку на неё:

Народ. подскажите как струю воды вверх сделать, для фонтана надо

Даже экспериментировать необязательно, можно расчитать исходный вид, и от него указать градус

Samdog, поэкперементируй с Texture scale и Texture shift в покраске текстур

Что делать если майнкрафт текстуры в 2 раза больше и некоторые блоки перевернуты
?

задам прямо сюда, можно ли определить скорость игрока в определённой области (тригере)? если да, то как?

где здесь можно задать вопрос по маппингу?

да, инфы дофига, что не может не радовать)

Фига тут инфы куча :mrgreen:

я живой :ugeek:

Пусть остается таким какой он есть, не трогаешь, не ломается

Сайт уже давно на пенсии, тут надо радоваться что хотя бы он все еще работает как таковой! :ugeek:

Реально не хватает возможности редачить материалы, чтобы исправлять свои косяки, столько лет сайту, а до сих пор нет такой возможности

Или даже по возможности ответят

Просто лучший русскоязычный сайт по маппингу который только существует! Если что-то ищешь, всегда находишь находишь то, что нужно!

Можно ли как-нибудь глянуть список всех энтити которые присутствуют на карте?

:ugeek:

Barney, Вот краткий гайд на цикл https://prnt.sc/tw3ed9

Кто знает как сделать сирену(цикл)? :?:

:!:

Скорее всего это и есть туннель, и наверно этот туннель многополигональный, от этого и траблы на карте, плюс утечку желательно закрыть

На этот случай в хаммере есть поисковик по брашам, ты можешь узнать где находится этот браш и удалить его

Я не пользуюсь дискордом, только стим

CobuLight, дай свой дискорд

CobuLight, посмотри мой лог

CobuLight, У меня частая ошибка Trying to create a non-quad displacement! (entity 0, brush 3398) она в основном в брашах туннеля( у меня карта под метро 2033)

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

Попробуй сократить количество брашей в func_detail, а если у тебя сложные браши, то сделай для них отдельные func_detail

у меня funl_detail много брашей на большем растоянии

Могу попробовать помочь, но только визуально, хотя давно не видел у себя этой проблемы…
Если так подумать, проблема может быть в переизбытке func_detail, либо ты слишком много брашей запилил в func_

4)Есть какая-то проблема с ареапорталами, ликами и т.д.

2)На карте слишком много маленьких простых брашей 3)Следует поработать над хинтами, чтобы помочь компилятору разбить карту на vis-листья эффективнее

Сорри,ничего конкретного сказать на эту тему не могу, могу лишь только предположить что 1)карта, пусть и оптимизированная, просто слишком большая и имеет множество зон

SpacetimeJunglist92, мой дискорд loeskee#6984
если сможешь помочь напиши

SpacetimeJunglist92, The map overflows the max portal count (43965 of max 32768)!

SpacetimeJunglist92, в основном нарушение лимитов по брашам, но когда делаю в func_detail,также пишет что привеш лимит.

Есть, кто живой? можете помочь с картой, а точнее с ошибками?

https://steamcommunity.com/sharedfiles/filedetails/?id=2052901697
Вот карта, также болььшиство моделей черные у игроков, хотя в вроде как вшивал их

Через часик попробую загрузить карту в мастерскую (удалил)

Скинь название карты, я гляну, может даже помогу узнать что за проблема. Тут надо уже смотреть, так проблему не понять на словах, да и лично я с такой не сталкивался.

Скинь название карты, я гляну, может даже помогу узнать что за проблема. Тут надо уже смотреть, так проблему не понять на словах, да и лично я с такой не сталкивался.

Такая проблема после компиляции карты, при запуске ее на пк все отражения норм всё как надо, но при загрузке в мастерскую и запуске ее оттуда все отражения на предметах яркие и совсем не те что нужны

Чтобы вращать и изменять размер через Ctrl+M (Rotate, Scale)

Пасаны, кто может подсказать как вращать и увеличивать декали? :?:

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

Name_BY, к Вольво вопросы, нахерна они сломали и не фиксят уже сколько лет.

вопросик по cs:go. почему там не работает env_spritetrail? и можно это исправить?

Маппинг, картостроение, моделлинг в CS:Source и не только

Я дал необходимую переменную среды, которая приведена ниже, и я компилирую ее со следующим кодом:

./configure --prefix="/home/qemu/support_libs/libs/glib"

 export CFLAGS="-I`pwd`/../../support_libs/libs/gettext/include"

    export LIBFFI_CFLAGS="-I`pwd`/../../support_libs/libs/libffi/lib/libffi-3.0.13/include"

    export LIBFFI_LIBS="-L`pwd`/../../support_libs/libs/libffi/lib -lffi"

    export ZLIB_CFLAGS="-I`pwd`/../../support_libs/libs/zlib/include"

    export ZLIB_LIBS="-L`pwd`/../../support_libs/libs/zlib/lib -lz"

   export LD_LIBRARY_PATH="`pwd`/../../support_libs/libs/gettext/lib:`pwd`/../..    
/support_libs/libs/zlib/lib"

    LDFLAGS="-L`pwd`/../../support_libs/libs/gettext/lib"

Я позаботился о необходимой зависимости, но получаю эту ошибку

You must have either have gettext support in your C library, or use the
*** GNU gettext library. (http://www.gnu.org/software/gettext/gettext.htm

2 ответа

Лучший ответ

Все в порядке .. но двоичный файл, который ищет gettext (msgfmt), находится в каталоге bin файла gettext (gettext / bin). поэтому все, что нам нужно сделать, это добавить этот путь к корзине в переменную среды PATH.

После этого все работает нормально.


0

Ajay
31 Мар 2014 в 14:44

15 / 15 / 11

Регистрация: 07.02.2013

Сообщений: 168

1

Размещение библиотек при компиляции

23.08.2017, 13:25. Показов 3939. Ответов 14


Столкнулся с проблемой «срача» в папке debug при компиляции проекта.
В проекте использую библиотеки devexpress а так же свои библиотеки (wDb.dll, CorrectData.dll, Translator.dll). Добавлены они к проекту через references. При компиляции проекта все это добро порядка 30 файлов сваливается в папку debug.
Мне бы хотелось что бы:
мои библиотеки оказывались в папке …debugLibs
а библиотеки devexpress в папке …debugLibsLibDevs

Подскажите как это можно реализовать?

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



OwenGlendower

Администратор

Эксперт .NET

15227 / 12266 / 4902

Регистрация: 17.03.2014

Сообщений: 24,867

Записей в блоге: 1

23.08.2017, 13:55

2

Лучший ответ Сообщение было отмечено decoexire как решение

Решение

decoexire, 1) ставим Copy Local = False для этих зависимостей

2) Пишем post build скрипт создающий нужные подкаталоги и копирующий dll

3) В файл app.config добавляем секцию

XML
1
2
3
4
5
   <runtime>
       <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
          <probing privatePath="Libs; LibsLibDevs"/>
       </assemblyBinding>
   </runtime>



1



Эксперт .NET

11046 / 7603 / 1176

Регистрация: 21.01.2016

Сообщений: 28,600

23.08.2017, 13:57

3

decoexire,
0) Пытаемся понять нафига это надо и чем и кому библиотеки в одной папке мешаются



0



15 / 15 / 11

Регистрация: 07.02.2013

Сообщений: 168

23.08.2017, 14:02

 [ТС]

4

Цитата
Сообщение от OwenGlendower
Посмотреть сообщение

2) Пишем post build скрипт создающий нужные подкаталоги и копирующий dll

библиотеки там лежат зачем их копировать?



0



Администратор

Эксперт .NET

15227 / 12266 / 4902

Регистрация: 17.03.2014

Сообщений: 24,867

Записей в блоге: 1

23.08.2017, 14:11

5

decoexire, в каталоге bin не должно лежать ничего без чего проект не компилируется хотя бы потому что многие системы контроля версий по умолчанию игнорируют каталоги bin, obj. То есть риск потерять их. Поэтому надежнее поместить библиотеки в папку решения (посмотри например как это делает NuGet), ставить ссылки на файлы из этот каталога и копировать файлы из него же. Чтобы не тратить время на копирование при каждой компиляции можно использовать xcopy с ключом /d



0



15 / 15 / 11

Регистрация: 07.02.2013

Сообщений: 168

23.08.2017, 14:22

 [ТС]

6

Цитата
Сообщение от OwenGlendower
Посмотреть сообщение

decoexire, в каталоге bin не должно лежать ничего без чего проект не компилируется хотя бы потому что многие системы контроля версий по умолчанию игнорируют каталоги bin, obj. То есть риск потерять их. Поэтому надежнее поместить библиотеки в папку решения (посмотри например как это делает NuGet), ставить ссылки на файлы из этот каталога и копировать файлы из него же. Чтобы не тратить время на копирование при каждой компиляции можно использовать xcopy с ключом /d

А можно пример?



0



OwenGlendower

Администратор

Эксперт .NET

15227 / 12266 / 4902

Регистрация: 17.03.2014

Сообщений: 24,867

Записей в блоге: 1

23.08.2017, 14:45

7

decoexire,

Windows Batch file
1
2
mkdir "$(TargetDir)Libs"
xcopy /d /s "$(SolutionDir)Libs*.*" "$(TargetDir)Libs"

Скрипт ожидает что в папке с решением есть папка Libs с нужной структурой содержимое которого нужно целиком перенести в каталог Libs. Возможно стоит переносить только dll/pdb файлы, но это уже несложно сделать.



0



15 / 15 / 11

Регистрация: 07.02.2013

Сообщений: 168

23.08.2017, 15:03

 [ТС]

8

а запускать этот батник в program.cs?



0



293 / 233 / 58

Регистрация: 03.02.2011

Сообщений: 1,972

Записей в блоге: 1

23.08.2017, 15:07

9

Цитата
Сообщение от OwenGlendower
Посмотреть сообщение

Пишем post build

а как сама сборка при загрузке поймёт что либы лежат в какой то рядом лежащей папке, а не рядом с самой сборкой?
Через тот самый app.config при билде всё пропишется?



0



LeniumSoft

1452 / 845 / 150

Регистрация: 06.06.2012

Сообщений: 2,370

23.08.2017, 15:28

10

Цитата
Сообщение от skilllab
Посмотреть сообщение

Через тот самый app.config при билде всё пропишется?

XML
1
<probing privatePath="Libs; LibsLibDevs"/>

Вот мы уже написали две папки относительно exe файла.
Сборки будет искать рядом с exe и в этих папках.



0



Администратор

Эксперт .NET

15227 / 12266 / 4902

Регистрация: 17.03.2014

Сообщений: 24,867

Записей в блоге: 1

23.08.2017, 15:29

11

Лучший ответ Сообщение было отмечено decoexire как решение

Решение

Цитата
Сообщение от decoexire
Посмотреть сообщение

а запускать этот батник в program.cs?

Нет. Эти команды для post build скрипта. Их нужно разместить в свойствах проекта, закладка Build Events, поле ввода «post build event command line».

Цитата
Сообщение от skilllab
Посмотреть сообщение

а как сама сборка при загрузке поймёт что либы лежат в какой то рядом лежащей папке, а не рядом с самой сборкой?

Элемент <probing privatePath="..." /> позволяет указать имена подкаталогов для поиска сборок. Если сборка не найдена в каталоге приложения, то поиск будет продолжен в указанных подкаталогах.



0



15 / 15 / 11

Регистрация: 07.02.2013

Сообщений: 168

23.08.2017, 16:06

 [ТС]

12

Цитата
Сообщение от OwenGlendower
Посмотреть сообщение

Нет. Эти команды для post build скрипта. Их нужно разместить в свойствах проекта, закладка Build Events, поле ввода «post build event command line».

Глупый конечно вопрос но, программирую на флешке , буквы разделов на разных ПК разные, как с этим быть? Например (I:Projectdebugliblib1.dll, I:Projectdebugliblib2.dll) а на другом пк это будет (Q:Projectdebugliblib1.dll, Q:Projectdebugliblib2.dll)



0



Администратор

Эксперт .NET

15227 / 12266 / 4902

Регистрация: 17.03.2014

Сообщений: 24,867

Записей в блоге: 1

23.08.2017, 16:15

13

decoexire, это уже учтено благодаря использованию макросов $(TargetDir), $(SolutionDir). VS даст им правильные значения исходя из физического расположения проекта.



0



293 / 233 / 58

Регистрация: 03.02.2011

Сообщений: 1,972

Записей в блоге: 1

23.08.2017, 18:58

14

Интересная затея. А саттелиты так же действуют? Те что Ru-ru En-us

Добавлено через 50 секунд
Ну, типа прожект сам генерит нечто подобное в себе, чтоб потом обращаться как надо.



0



Администратор

Эксперт .NET

15227 / 12266 / 4902

Регистрация: 17.03.2014

Сообщений: 24,867

Записей в блоге: 1

23.08.2017, 22:29

15

skilllab, не проверял, но думаю должны работать.



0



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

Различные другие сайты заставили меня поверить, что это может быть проблемой среды, поскольку я разрабатываю 64-разрядный дистрибутив Ubuntu, и я предполагаю, что версия сервера работает на 32-разрядной версии. Тем не менее, после установки моих переменных окружения:

CFLAGS+=" -m32"
CXXFLAGS+=" -m32"

Я все равно получаю ту же ошибку компиляции:

/usr/bin/ld: skipping incompatible /dvlpmnt/libPI-Http.a when searching for -lPI-Http

Может ли учебник по обучению?

== Edit ==

Это был результат, который я получил после того, как я последовал совету Джонатана:

http.o: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped

По всей видимости, библиотека, о которой идет речь, все равно 32-битная?

У меня огромное количество функций на общую сумму около 2.8 ГБ объектного кода (к сожалению, нет другого пути, научные вычисления …)

Когда я пытаюсь связать их, я получаю (ожидалось) relocation truncated to fit: R_X86_64_32S ошибки, которые я надеялся обойти, указав флаг компилятора -mcmodel=medium. Все библиотеки, которые связаны, кроме того, что я контролирую, скомпилированы с -fpic флаг.

Тем не менее, ошибка сохраняется, и я предполагаю, что некоторые библиотеки, на которые я ссылаюсь, не скомпилированы с помощью PIC.

Вот ошибка:

/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/crt1.o: In function `_start':
(.text+0x12): relocation truncated to fit: R_X86_64_32S against symbol `__libc_csu_fini'     defined in .text section in /usr/lib64/libc_nonshared.a(elf-init.oS)
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/crt1.o: In function `_start':
(.text+0x19): relocation truncated to fit: R_X86_64_32S against symbol `__libc_csu_init'    defined in .text section in /usr/lib64/libc_nonshared.a(elf-init.oS)
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/crti.o: In function    `call_gmon_start':
(.text+0x7): relocation truncated to fit: R_X86_64_GOTPCREL against undefined symbol      `__gmon_start__'
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/crtbegin.o: In function `__do_global_dtors_aux':
crtstuff.c:(.text+0xb): relocation truncated to fit: R_X86_64_PC32 against `.bss' 
crtstuff.c:(.text+0x13): relocation truncated to fit: R_X86_64_32 against symbol `__DTOR_END__' defined in .dtors section in /usr/lib/gcc/x86_64-redhat-linux/4.1.2/crtend.o
crtstuff.c:(.text+0x19): relocation truncated to fit: R_X86_64_32S against `.dtors'
crtstuff.c:(.text+0x28): relocation truncated to fit: R_X86_64_PC32 against `.bss'
crtstuff.c:(.text+0x38): relocation truncated to fit: R_X86_64_PC32 against `.bss'
crtstuff.c:(.text+0x3f): relocation truncated to fit: R_X86_64_32S against `.dtors'
crtstuff.c:(.text+0x46): relocation truncated to fit: R_X86_64_PC32 against `.bss'
crtstuff.c:(.text+0x51): additional relocation overflows omitted from the output
collect2: ld returned 1 exit status
make: *** [testsme] Error 1

И системные библиотеки, с которыми я связываюсь:

-lgfortran -lm -lrt -lpthread

Есть подсказки, где искать проблему?

EDIT:

Прежде всего, спасибо за обсуждение …

Чтобы немного прояснить, у меня есть сотни функций (каждая размером около 1 МБ в отдельных объектных файлах), например:

double func1(std::tr1::unordered_map<int, double> & csc, 
             std::vector<EvaluationNode::Ptr> & ti, 
             ProcessVars & s)
{
    double sum, prefactor, expr;

    prefactor = +s.ds8*s.ds10*ti[0]->value();
    expr =       ( - 5/243.*(s.x14*s.x15*csc[49300] + 9/10.*s.x14*s.x15*csc[49301] +
           1/10.*s.x14*s.x15*csc[49302] - 3/5.*s.x14*s.x15*csc[49303] -
           27/10.*s.x14*s.x15*csc[49304] + 12/5.*s.x14*s.x15*csc[49305] -
           3/10.*s.x14*s.x15*csc[49306] - 4/5.*s.x14*s.x15*csc[49307] +
           21/10.*s.x14*s.x15*csc[49308] + 1/10.*s.x14*s.x15*csc[49309] -
           s.x14*s.x15*csc[51370] - 9/10.*s.x14*s.x15*csc[51371] -
           1/10.*s.x14*s.x15*csc[51372] + 3/5.*s.x14*s.x15*csc[51373] +
           27/10.*s.x14*s.x15*csc[51374] - 12/5.*s.x14*s.x15*csc[51375] +
           3/10.*s.x14*s.x15*csc[51376] + 4/5.*s.x14*s.x15*csc[51377] -
           21/10.*s.x14*s.x15*csc[51378] - 1/10.*s.x14*s.x15*csc[51379] -
           2*s.x14*s.x15*csc[55100] - 9/5.*s.x14*s.x15*csc[55101] -
           1/5.*s.x14*s.x15*csc[55102] + 6/5.*s.x14*s.x15*csc[55103] +
           27/5.*s.x14*s.x15*csc[55104] - 24/5.*s.x14*s.x15*csc[55105] +
           3/5.*s.x14*s.x15*csc[55106] + 8/5.*s.x14*s.x15*csc[55107] -
           21/5.*s.x14*s.x15*csc[55108] - 1/5.*s.x14*s.x15*csc[55109] -
           2*s.x14*s.x15*csc[55170] - 9/5.*s.x14*s.x15*csc[55171] -
           1/5.*s.x14*s.x15*csc[55172] + 6/5.*s.x14*s.x15*csc[55173] +
           27/5.*s.x14*s.x15*csc[55174] - 24/5.*s.x14*s.x15*csc[55175] +
           // ...
           ;

        sum += prefactor*expr;
    // ...
    return sum;
}

Предмет s относительно невелик и сохраняет необходимые константы x14, x15, …, ds0, … и т. д., в то время как ti просто возвращает двойное значение из внешней библиотеки. Как вы видете, csc[] — это предварительно вычисленная карта значений, которая также оценивается в отдельных объектных файлах (опять же, в сотнях, размером около 1 МБ каждый) следующего вида:

void cscs132(std::tr1::unordered_map<int,double> & csc, ProcessVars & s)
{
    {
    double csc19295 =       + s.ds0*s.ds1*s.ds2 * ( -
           32*s.x12pow2*s.x15*s.x34*s.mbpow2*s.mWpowinv2 -
           32*s.x12pow2*s.x15*s.x35*s.mbpow2*s.mWpowinv2 -
           32*s.x12pow2*s.x15*s.x35*s.x45*s.mWpowinv2 -
           32*s.x12pow2*s.x25*s.x34*s.mbpow2*s.mWpowinv2 -
           32*s.x12pow2*s.x25*s.x35*s.mbpow2*s.mWpowinv2 -
           32*s.x12pow2*s.x25*s.x35*s.x45*s.mWpowinv2 +
           32*s.x12pow2*s.x34*s.mbpow4*s.mWpowinv2 +
           32*s.x12pow2*s.x34*s.x35*s.mbpow2*s.mWpowinv2 +
           32*s.x12pow2*s.x34*s.x45*s.mbpow2*s.mWpowinv2 +
           32*s.x12pow2*s.x35*s.mbpow4*s.mWpowinv2 +
           32*s.x12pow2*s.x35pow2*s.mbpow2*s.mWpowinv2 +
           32*s.x12pow2*s.x35pow2*s.x45*s.mWpowinv2 +
           64*s.x12pow2*s.x35*s.x45*s.mbpow2*s.mWpowinv2 +
           32*s.x12pow2*s.x35*s.x45pow2*s.mWpowinv2 -
           64*s.x12*s.p1p3*s.x15*s.mbpow4*s.mWpowinv2 +
           64*s.x12*s.p1p3*s.x15pow2*s.mbpow2*s.mWpowinv2 +
           96*s.x12*s.p1p3*s.x15*s.x25*s.mbpow2*s.mWpowinv2 -
           64*s.x12*s.p1p3*s.x15*s.x35*s.mbpow2*s.mWpowinv2 -
           64*s.x12*s.p1p3*s.x15*s.x45*s.mbpow2*s.mWpowinv2 -
           32*s.x12*s.p1p3*s.x25*s.mbpow4*s.mWpowinv2 +
           32*s.x12*s.p1p3*s.x25pow2*s.mbpow2*s.mWpowinv2 -
           32*s.x12*s.p1p3*s.x25*s.x35*s.mbpow2*s.mWpowinv2 -
           32*s.x12*s.p1p3*s.x25*s.x45*s.mbpow2*s.mWpowinv2 -
           32*s.x12*s.p1p3*s.x45*s.mbpow2 +
           64*s.x12*s.x14*s.x15pow2*s.x35*s.mWpowinv2 +
           96*s.x12*s.x14*s.x15*s.x25*s.x35*s.mWpowinv2 +
           32*s.x12*s.x14*s.x15*s.x34*s.mbpow2*s.mWpowinv2 -
           32*s.x12*s.x14*s.x15*s.x35*s.mbpow2*s.mWpowinv2 -
           64*s.x12*s.x14*s.x15*s.x35pow2*s.mWpowinv2 -
           32*s.x12*s.x14*s.x15*s.x35*s.x45*s.mWpowinv2 +
           32*s.x12*s.x14*s.x25pow2*s.x35*s.mWpowinv2 +
           32*s.x12*s.x14*s.x25*s.x34*s.mbpow2*s.mWpowinv2 -
           32*s.x12*s.x14*s.x25*s.x35pow2*s.mWpowinv2 -
           // ...
    
       csc.insert(cscMap::value_type(192953, csc19295));
    }

    {
       double csc19296 =      // ... ;

       csc.insert(cscMap::value_type(192956, csc19296));
    }

    // ...
}

Вот об этом. Последний шаг состоит в том, чтобы вызвать все эти func[i] и подведение итогов.

Что касается того, что это довольно особенный и необычный случай: да, это так. Это то, с чем приходится сталкиваться людям, пытаясь выполнить высокоточные вычисления для физики элементарных частиц.

EDIT2:

Я также должен добавить, что x12, x13 и т. Д. На самом деле не являются константами. Им присваиваются определенные значения, все эти функции запускаются и возвращается результат, а затем выбирается новый набор x12, x13 и т. Д. Для получения следующего значения. И это нужно сделать 105 в 106 раз …

EDIT3:

Спасибо за предложения и обсуждения до сих пор … Я попытаюсь как-нибудь свернуть циклы при генерации кода, не знаю, как именно это сделать, если честно, но это лучший выбор.

Кстати, я не пытался спрятаться за «это научные вычисления — нет способа оптимизировать».
Просто в основе этого кода лежит что-то, что происходит из «черного ящика», к которому у меня нет реального доступа, и, более того, все это отлично работает с простыми примерами, и я в основном чувствую себя подавленным тем, что происходит в реальной жизни. мировое приложение …

EDIT4:

Итак, мне удалось уменьшить размер кода csc определения примерно на одну четверть путем упрощения выражений в системе компьютерной алгебры (Mathematica). Теперь я также вижу способ уменьшить его на другой порядок или около того, применив некоторые другие уловки перед генерацией кода (что уменьшит размер этой части примерно до 100 МБ), и я надеюсь, что эта идея сработает.

Теперь что касается ваших ответов:

Я пытаюсь снова свернуть петли в funcs, где CAS не сильно поможет, но у меня уже есть некоторые идеи. Например, сортировка выражений по таким переменным, как x12, x13,..., проанализируйте cscs с помощью Python и сгенерируйте таблицы, которые связывают их друг с другом. Тогда я смогу хотя бы сгенерировать эти части в виде петель. Поскольку это пока что кажется лучшим решением, я отмечаю его как лучший ответ.

Однако я хотел бы также отдать должное VJo. GCC 4.6 действительно работает много лучше, производит меньший код и работает быстрее. Использование большой модели работает с кодом как есть. Так что технически это правильный ответ, но изменение всей концепции — гораздо лучший подход.

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

ПРИМЕЧАНИЯ:

Просто несколько замечаний к другим ответам: код, который я пытаюсь запустить, не связан с расширением простых функций / алгоритмов и глупым ненужным развертыванием. На самом деле происходит то, что мы начинаем с довольно сложных математических объектов и приводим их к числовому виду. вычислимая форма генерирует эти выражения. Проблема на самом деле заключается в лежащей в основе физической теории. Сложность промежуточных выражений масштабируется факториально, что хорошо известно, но при объединении всего этого материала с чем-то физически измеримым — наблюдаемым — все сводится лишь к горстке очень маленьких функций, которые составляют основу выражений. (В этом отношении с общим и только доступный Ansatz который называется «теорией возмущений»). Мы пытаемся вывести этот анзац на другой уровень, который больше не реализуется аналитически и где неизвестен базис необходимых функций. Итак, мы пытаемся использовать его таким образом. Не лучший способ, но, надеюсь, тот, который, в конце концов, поможет нам понять физику …

ПОСЛЕДНИЙ РЕДАКТИРОВАНИЕ:

Благодаря всем вашим предложениям мне удалось значительно уменьшить размер кода, используя Mathematica и модификацию генератора кода для funcчто-то вроде верхнего ответа 🙂

Я упростил csc функционирует с Mathematica, уменьшив его до 92 МБ. Это неприводимая часть. Первые попытки заняли много времени, но после некоторой оптимизации теперь они выполняются примерно за 10 минут на одном процессоре.

Влияние на funcs был драматическим: общий размер кода для них уменьшился примерно до 9 МБ, поэтому теперь общий размер кода составляет 100 МБ. Теперь имеет смысл включить оптимизацию, и выполнение происходит довольно быстро.

Еще раз спасибо всем за ваши предложения, я многому научился.

Периодически на одном из тестовых стендов один отчет перестает работать.
При попытке его скомпилировать получаем исключение такого рода

Код: Выделить всё

Время: 2015-07-31 06:32:39.765
Категория: Exceptions
Тип: Error
An exception of type 'System.Exception' occurred and was caught.
----------------------------------------------------------------
Type : System.Exception, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
Message : c:WindowsTempdrbsw1bh.0.cs(1814,20) : error CS0103: Имя "Hour" отсутствует в текущем контексте
Source : Stimulsoft.Report
TargetSite : Void Compile(System.String, System.IO.Stream, Stimulsoft.Base.StiOutputType, Boolean, System.Object)
HResult : -2146233088
Stack Trace :    в Stimulsoft.Report.StiReport.Compile(String path, Stream stream, StiOutputType outputType, Boolean autoCreate, Object standaloneReportType)
   в Stimulsoft.Report.StiReport.Compile(String path, Stream stream, StiOutputType outputType, Boolean autoCreate)
   в Stimulsoft.Report.StiReport.Compile(String path, StiOutputType outputType, Boolean autoCreate)

«Hour» это имя вычисляемого поля (Calculated Column).
Код, вызывающий компиляцию:

Код: Выделить всё

            using (var report = new StiReport())
            {
                LoadFromDb(metadataId, report);
                _log.Write("Compiling report to {0}", fileName);
                var s = new Stopwatch();
                s.Start();
                report.Compile(fileName, StiOutputType.ClassLibrary);
                s.Stop();
                _log.Write("Report {0} compiled in {1} ms", metadataId, s.ElapsedMilliseconds);
            }

Отчеты хранятся в БД, как mrt файл в виде поля

Данный отчет в БД находится вроде бы в исправном состоянии — если подключиться к этой БД с другого компьютера, отчет нормально компилируется.
Прочие отчеты в это же время работают в этом же сайте.
Перезапуск проблемного сайта не помогает.
Помогает редеплоймент отчета в БД и перезапуск сайта, но все же на другой компьютер эта же БД отдает отчет в исправном состоянии.
Используемое ПО Reports.Web. 2015.1.11

Подскажите, куда копать?
Сейчас попробую обернуть вызов компиляции в try…catch, чтобы сбросить в лог текущий вид .mrt файла, как я его получил из БД

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • При обновлении 1с выдает ошибку недостаточно памяти
  • При нарушении принципа предметности возникает ошибка называемая использованием выражений