|
|
|
Оптимизация и рефакторинг кода на fortran'е
|
|||
|---|---|---|---|
|
#18+
Товариши! Свалилось на меня счастье в виде 4,5 тысяч строк кода на фортране, который писался в разное время разными людьми в течение последних 15 лет на одной кафедре. Задача - привести в адекватный вид и оптимизировать (один прогон на реальных данных ест сейчас недели три на core2duo о трех гигагерцах). Уже прикрутил все это дело к make, перевел на fortran95 и вручную перекроил пачку функций. Но времени, как обычно, мало, а дел много. Помогите разрешить два вопроса, пожалуйста: 1) IDE для рефакторинга. Пробовал phortran для eclipse, но он пока мало чего умеет =( Пробовал поднять sun studio на linux, но тоже пока с трудом - автоматический инсталлятор убивается сразу и бесповоротно. Чем еще можно удобно поработать с кодом на фортране? 2) Люто бешено поработал над софтиной профайлером и выяснилось, что 70% времени уходит на вычисление логарифма. Существуют ли реализации алгоритма расчета логарифма или библиотеки с его реализацией? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2009, 11:56:51 |
|
||
|
Оптимизация и рефакторинг кода на fortran'е
|
|||
|---|---|---|---|
|
#18+
Функция вычисления логарифма заложена в процессор. Убедитесь, что вызывается именно она. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2009, 12:08:09 |
|
||
|
Оптимизация и рефакторинг кода на fortran'е
|
|||
|---|---|---|---|
|
#18+
maytonФункция вычисления логарифма заложена в процессор.Есть у меня смутные сомнения по этому счету. Давно это было, но помнится в библиотеке LAPACK были отдельные реализации элементарных функций. Это все имхо, конечно. Скорее всего какой-то "провал" в алгоритме и как следствие - избыточное количество вызовов функции. А еще немаловероятно, что врет профайлер . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2009, 18:03:25 |
|
||
|
Оптимизация и рефакторинг кода на fortran'е
|
|||
|---|---|---|---|
|
#18+
Я к сожалению не знаком с фортраном. Но вполне может быть, что у автора, используется custom- функция вычисления логарифма. Возможно это связано с древностью исходного кода или с какими-то особыми требованиями к типам данных (разрядная сетка вычисляемого результата более 64, или более 80 бит). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2009, 18:14:49 |
|
||
|
Оптимизация и рефакторинг кода на fortran'е
|
|||
|---|---|---|---|
|
#18+
На фортране ВСЕГДА, с самой первой версии все аналитические функции были неотемлемой частью языка. Оптимизировать там нечего, да и невозможно, бо код функции недоступен. Искать надо почему так часто эта функция вызывается и нельзя ли уменьшить количество обращений к ней. Кроме того, фортран по своей природе - процедурный язык, никаких парадигм ООП не поддерживает, поэтому не совсем понятно какой выигрыш ожидается от рефакторинга. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2009, 19:21:45 |
|
||
|
Оптимизация и рефакторинг кода на fortran'е
|
|||
|---|---|---|---|
|
#18+
Полностью согласен насчёт рефакторинга. Но добавлю, что к процедурному коду вполне применимы паттерны типа "Consolidate Duplicate Conditional Fragments", "Parametrize Method" и прочие, имеющие общую (не объектную) природу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2009, 20:20:35 |
|
||
|
Оптимизация и рефакторинг кода на fortran'е
|
|||
|---|---|---|---|
|
#18+
2 mindstream Среди команд сопроцессора есть FYL2X, FYL2XP1 . Это вычисление логарифмов по основанию 2 с умножением на константу. Для произвольного основания, можно воспользоваться формулой замены основания логарифма. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.06.2009, 23:50:53 |
|
||
|
Оптимизация и рефакторинг кода на fortran'е
|
|||
|---|---|---|---|
|
#18+
mikhail_n... фортран по своей природе - процедурный язык, никаких парадигм ООП не поддерживает, поэтому не совсем поня тно какой выигрыш ожидается от рефакторинга.Какая связь между выигрышем от рефакторинга и поддержки языком парадигм ООП? Про рефакторниг: Рефакторинг Рефакторинг или реорганизация . процесс полного или частичного преобразования внутренней структуры програ ммы при сохранении её внешнего поведения. В его основе лежит последовательность небольших эквивалентных ( то есть, сохраняющих поведение) преобразований. ... В программировании термин рефакторинг означает изменение исходного кода программы без изменения его внешн его поведения. ... Он выполняется для улучшения понятности кода или изменения его структуры, для удаления «мёртвого кода» . всё это для того, чтобы в будущем код было легче поддерживать и развиватьА что Вы понимаете под рефакторингом? Если можно, в виде обозримого определения, а не ввиде "тынцев" в толстые "талмуды". maytonПолностью согласен насчёт рефакторинга. Но добавлю, что к процедурному коду вполне применимы паттерны типа "Consolidate Duplicate Conditional Fragments", "Parametrize Method" и прочие, имеющие общу ю (не объектную) природу.А если не применимы? Неужели нельзя с пользой провести рефакторинг(в смыс ле вышеприведенного определения)? Причем, как можно это утверждать вот так - "за глаза", не ознакомившись с программой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2009, 00:47:22 |
|
||
|
Оптимизация и рефакторинг кода на fortran'е
|
|||
|---|---|---|---|
|
#18+
Мой комментарий относился к "процедурному коду вообще", а не к конкретному исходнику автора, которого не я и не вы пока не видели. Давайте на этом пока закончим и подождём свежей информации от топикстартера, с вашего позволения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2009, 00:54:49 |
|
||
|
Оптимизация и рефакторинг кода на fortran'е
|
|||
|---|---|---|---|
|
#18+
maytonМой комментарий относился к "процедурному коду вообще", а не к конкретному исходнику автора, которого не я и не вы пока не видели. Давайте на этом пока закончим и подождём свежей информации от топикстартера, с вашего позволения.А мои вопросы и были "вообще". Работа с конкретным исходником - это уже конкретная работа, за кторою ТС, наверное, платят деньги. Не думаю, что ему удасться здесь "завербовать" добровольцев для добросовестного изучения "4,5 тысяч строк кода на фортране". PS. Никогда не было проблем с логарифмами. Были проблемы с функцией Эйри. Распечатывал значения на бумаге, шел в библиотеку брал книгу Фока (Не нашел в и-нете русскую ссылку. Вот эта книга: V.A. Fok, "Tables of the Airy functions" , Moscow (1946) (In Russian) - отсюда Airy functions ) и проверял, где ошибка. В моей ли программе, использующей написанную другим(на самом деле "написанную другой" , но это и тогда не было важно), или, совсем наоборот. А конкретная работа - это конкретная работа. Кто захватил, тот и делает. Почти как в анекдоте: Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2009, 02:44:25 |
|
||
|
Оптимизация и рефакторинг кода на fortran'е
|
|||
|---|---|---|---|
|
#18+
Спасибо всем ответившим =) Функция log вызывается из библиотеки amdppm (profiler'ом гонял на amd системе), так что похоже, никаких внешних функций для вычисления логарифма не используется. От рефакторинга ожидается выигрыш в виде улучшенной читабельности и поддерживаемости кода: сейчас в нем есть несколько функций, которые уже давно не используются, очень сильно перемешан код вывода на экран/в файл с кодом логики, куча глобальных переменных (спорный вопрос, но мне не нравится =) ), ну и далее в том же духе. mikhail_nНа фортране ВСЕГДА, с самой первой версии все аналитические функции были неотемлемой частью языка. Оптимизировать там нечего, да и невозможно, бо код функции недоступен. Ну все-таки с развитием его компиляторов часть аналитических функций рано или поздно должна была выноситься на процессор, если там появлялась их поддержка, не?) Тот же gcc и intel fortran compiler обновляются достаточно часто. avb1003А мои вопросы и были "вообще". Работа с конкретным исходником - это уже конкретная работа, за кторою ТС, наверное, платят деньги. Не думаю, что ему удасться здесь "завербовать" добровольцев для добросовестного изучения "4,5 тысяч строк кода на фортране". Если бы платили, сидел бы над кодом днями и ночами, ибо всякого рода enterprise и web порядком приелся) Работаю из любви к искусству и за диплом, хотя это достаточно косвенно к его теме относится =) Вербовать никого не хочу, просто хочу спросить, был ли какой-то подобный опыт у людей на форуме. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2009, 11:27:44 |
|
||
|
Оптимизация и рефакторинг кода на fortran'е
|
|||
|---|---|---|---|
|
#18+
mindstreamЕсли бы платили, сидел бы над кодом днями и ночами, ибо всякого рода enterprise и web порядком приелся) Работаю из любви к искусству и за диплом, хотя это достаточно косвенно к его теме относится =) Это очень даже похвально. Вербовать никого не хочу, просто хочу спросить, был ли какой-то подобный опыт у людей на форуме. У меня был опыт оптимизации и рефакторинга больших кусков бизнес-логики, написанных на C# и PL/SQL. Но там математики было мало. В основном - оптимизировал за счёт устранения ненужных каскадных вызовов функций, которые постоянно возвращали константы в контексте вычислений. Кое-где включал пулы объектов. И плюс бесконечные SQL hints... Трассировки... Профилирование, где это можно. Вообще, скучаю без хорошей математики и алгоритмизации. Большинство бизнес-кода - это полный мрак и средневековье. Если читать комментарии к коду то можно понять что "здесь играем... а здесь рыбу заворачивали... а здесь снова играем". Многим исходникам на PL/SQL уже более 10 лет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2009, 11:55:39 |
|
||
|
Оптимизация и рефакторинг кода на fortran'е
|
|||
|---|---|---|---|
|
#18+
Какая связь между выигрышем от рефакторинга и поддержки языком парадигм ООП? Прямая. Вот все те хорошие и умные слова которые Вы написали про рефакторинг реально применимы к ООП (может ещё к чему, например функциональному программированию и т.д. но я этих вещей не знаю, поэтому не стану судить). Я понимаю рефакторинг как изменение логической организации структуры построения классов в ООП языке с целью достижения всего того что Вы написали. А вот каким макаром применять рефакторинг к математике написанной в процедурном стиле я не понимаю. Единстенно что я могу себе вообразить - Вы узнаёте что некий мат метод реализованный в Вашей библиотеке одним способом может быть рализован гораздо эффективнее путём применения более нового алгоритма. Ну вы переписывате свою процедуру, удаляете из библиотеки старую и добавляете новую с тем же именем. Ну да, предётся пересобрать все исполняемые файлы явно или неявно обращаюшиеся к этой процедуре. Но называть это рефакторингом... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2009, 21:05:59 |
|
||
|
Оптимизация и рефакторинг кода на fortran'е
|
|||
|---|---|---|---|
|
#18+
Еще пара мыслей. Думаю, что в нашем случае (фортран) автор должен (одновременно!) решать сразу две задачи. А именно - улучшать дизайн 4.5 тыс. строк кода. И (тоже одновременно!) оптимизировать его. Убеждён что эти две задачи тесно связаны. Тоесть каждый маленький шажок рефакторинга (а по рекомендации Фаулера каждое изменение должно быть минимальным и еще снабжаться постоянными unit tests) теоретически влечёт за собой возможную просадку производительности (ex : "Replace Type With Class", "Extract Interface") и НАОБОРОТ, оптимизация фортрановского кода (напр разввёртывание мелких циклов и введение inline подстановок может ухудшить дизайн. По поводу 70% времени расчёта логарифма - это конечно нехорошо. Но я к сожалению не специалист в фортране. И поэтому ничего не могу предложить, кроме как использовать ассемблер для вызова hardware функции логарифма. Можно, конечно покурить текст на предмет чистой алгоритмизации, но мне почему-то кажется что там с этим всё в порядке. Фортран - язык математиков и мне трудно себе представить чтобы математик избрал алгоритм с плохой оценкой behavior. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2009, 21:33:21 |
|
||
|
Оптимизация и рефакторинг кода на fortran'е
|
|||
|---|---|---|---|
|
#18+
mikhail_nКакая связь между выигрышем от рефакторинга и поддержки языком парадигм ООП? Прямая. Никакой. Хотя сейчас выражусь довольно флеймово. Устал, как собака, может на первоначальный вопрос поотвечаю потом. Значит, по какой-то таинственной причине C++ медленнее Fortan-а в вычислительных задачах. То есть, пропадигма ООП не слишком помогает самому C++, зачем навязывать её фортрану. Всё же ООП в Fortran-е есть, начиная с Fortran 2003. Но популярные компиляторы соответствуют Fortran 95. В них добавляются расширения из Fortran 2003 и 2008, но как раз на ООП (в GCC и Sun Studio). Значит, не очень то нужно. В Fortran-е 90 и 95 можно имитировать классы с помощью модулей. Не уверен, что есть смысл, ознакомиться самостоятельно. Однако поддержка модульности в Fortran-е важна, и программа в 4500 строк уже достаточно большая, чтобы поделить её на модули (не для эффективности, а для дпльнейшего развития). Вообще, частой ошибкой "плюсистов" является попытка перенести свои знания С++ на другие языки. Вот отличается язык от C++ - "значит", он хуже, чем C++. На самом деле значит, что надо знать другой язык. А то бывает: "а почему в Java нет указателей?". Или тяжёлый случай - один участник форума ixbt стал демонстрировать, как он добавил RAII из C++ в Java и Haskell... где они не нужны и невозможны. Это уже кандидат в психушку. Вот, закончил флейм. Подробного рассмотрения задачи сейчас не буду делать, но большое число вычисление логарифма подозрительно. Если считается 3 недели и 70% тратится на логарифмы, то значит - 2 недели вычисления одних логарифмов. Или профилирование неправильное, или логарифмы вычисляются повторно (такие лишние вычисления часто бывают во вложенных циклах). Может перед каждым LOG вызовов, а в программу понадобавлять вывод времени работы каждой функции или сложного участка кода - это поможет увидеть, правильное ли профилирование, да и определить участок программы, наиболее нуждающийся в оптимизации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2009, 21:47:43 |
|
||
|
Оптимизация и рефакторинг кода на fortran'е
|
|||
|---|---|---|---|
|
#18+
авторФортран - язык математиков и мне трудно себе представить чтобы математик избрал алгоритм с плохой оценкой behavior. Если б Вы только знали как Вы заблуждаетесь. Я просто легенды знаю из разряда - "ну да, эта задача вообще некорректно поставлена, но Вы сходите голубчик к вычислителям, они Вам посоветуют как тут можно чего-нибудь подвертеть". авторЗначит, по какой-то таинственной причине C++ медленнее Fortan-а в вычислительных задачах. То есть, пропадигма ООП не слишком помогает самому C++, зачем навязывать её фортрану. Вы по-видимому мне отвечаете, поэтому хотелось бы понять как это вытекает из того что я тут пописывал. Ладно, пусть так - если имеется математика написанная на процедурном языке и применение рефакторинга позволяет существенно чего то там улучшить, то херово всё это было написано с самого начала. Мне в прошлом веке доводилось писать новые процедуры для достаточно приличной отраслевой мат библиотеки на фортране - этот проект успешно развивался около 10 лет и такие слова как рефакторинг тогда воопще только пьяные грузчики употребляли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2009, 00:24:36 |
|
||
|
Оптимизация и рефакторинг кода на fortran'е
|
|||
|---|---|---|---|
|
#18+
mikhail_nКакая связь между выигрышем от рефакторинга и поддержки языком парадигм ООП? Прямая. Вот все те хорошие и умные слова которые Вы написали про рефакторинг реально применимы к ООП (может ещё к чему, например функциональному программированию и т.д. но я этих вещей не знаю, поэтому не стану судить). Я понимаю рефакторинг как изменение логической организации структуры построения классов в ООП языке с целью достижения всего того что Вы написали.Теперь понятно. Но так как остальному миру приходится жить своим умом независимо от вашего понимания...mikhail_n А вот каким макаром применять рефакторинг к математике написанной в процедурном стиле я не понимаю. И это естественно после "изобретения" своего понятия рефакторинг, в отсутствии реального опыта программированияmikhail_n Единстенно что я могу себе вообразить - Вы узнаёте что некий мат метод реализованный в Вашей библиотеке одним способом может быть рализован гораздо эффективнее путём применения более нового алгоритма.Это только говорит о вашем опыте и вашей способности к воображению, но имеет малое отношение к реальной жизни. mikhail_n Ну вы переписывате свою процедуру, удаляете из библиотеки старую и добавляете новую с тем же именем. Ну да, предётся пересобрать все исполняемые файлы явно или неявно обращаюшиеся к этой процедуре. Но называть это рефакторингом...Да, я и никогда не называл. Сам для себя его "изобрел" и применял его без лишних слов. Когда "появилось" слово "рефакторинг" в применении к программированию, сначала догадался, что это такое, исходя из обычного, математического понятия factoring :factorization factorization(also factorisation in British English) or factoring is the decomposition of an object (for example, a number, a polynomial, or a matrix) into a product of other objects, or factors, which when multiplied together give the original. ... The aim of factoring is usually to reduce something to "basic building blocks," ..., а потом справился о его значении в новом смысле. Вы же ознакомившись с каким-то одним конкретным приемом рефакторинга, заменили все понятие этим одним конкретным его примером, ну и, естественно, получили малополезное, не применимое в общем случае, понятие. Заодно попытались "отнять" название у полезной и иногда необходимой деятельности. Так прочитав у ТС, что ему нужен "IDE для рефакторинга", я не зная о таком IDE и не уверенный в его существовании, легко представил, что примерно он хочет сделать. Затем он уточнил характер предполагаемых им изменений. Но это также могло быть простой заменой простых "GO TO" или арифметических "IF"-ов на вызовы подпрограмм или на другие управляющие конструкции, появившиеся в современных версиях языка и отсутствовавшие в старых. И вообще, "простейший пример рефакторинга - изменение идентификатора(например имени переменной) в нечто более осмысленное, такое, например, как с одной букы 'i' на interestRate". ("The simplest example of a refactoring is to change an identifier (such as a variable name) into something more meaningful, such as from a single letter 'i' to 'interestRate'"- отсюда: Refactoring ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2009, 02:31:46 |
|
||
|
Оптимизация и рефакторинг кода на fortran'е
|
|||
|---|---|---|---|
|
#18+
mikhail_n ... и такие слова как рефакторинг тогда воопще только пьяные грузчики употребляли.Ну и что. Г-н Журден до сорока лет не подозревал, что говорит прозой: Мольер. «Мещанин во дворянстве» ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2009, 02:54:44 |
|
||
|
Оптимизация и рефакторинг кода на fortran'е
|
|||
|---|---|---|---|
|
#18+
авторИ вообще, "простейший пример рефакторинга - изменение идентификатора(например имени переменной) в нечто более осмысленное, такое, например, как с одной букы 'i' на interestRate". Нда, я где то так себе и представлял что присутствие авторреального опыта программирования (особенно на Фортране) именно так и проявляется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2009, 05:39:12 |
|
||
|
Оптимизация и рефакторинг кода на fortran'е
|
|||
|---|---|---|---|
|
#18+
mikhail_n. А вот каким макаром применять рефакторинг к математике написанной в процедурном стиле я не понимаю. Единстенно что я могу себе вообразить - Вы узнаёте что некий мат метод реализованный в Вашей библиотеке одним способом может быть рализован гораздо эффективнее путём применения более нового алгоритма. . чтото я Вас не узнаю. есть определение автор Рефакторинг или реорганизация . процесс полного или частичного преобразования внутренней структуры програ ммы при сохранении её внешнего поведения. В его основе лежит последовательность небольших эквивалентных ( то есть, сохраняющих поведение) преобразований. ... В программировании термин рефакторинг означает изменение исходного кода программы без изменения его внешн его поведения. отсюда следует, что любое изменение текста есть рефакторинг. Нет никаких ограничений на то, где она лежит. Может она в библиотеке, а может и нет. Может переделанный код стал более эффективным, а может и менее. Любоая переделка без изменения поведения есть рефакторинг например, условие в if и ветки then else поменяли наоборот. далее, господа, а именно, avb1003 и mikhail_n, прошу покончить с обсуждением друг друга. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2009, 08:24:38 |
|
||
|
Оптимизация и рефакторинг кода на fortran'е
|
|||
|---|---|---|---|
|
#18+
Рефакторинг фортрановского кода происходит так: 1. для каждой строчки, в которой более или менее понятно что происходит, пишется комментарий. 2. попутно составляется словарь переменных. А то названия i,ii,iii,j,jj,jjj,k,kk,kkk,l,ll,lll,n,nn,nnn и т.п. не наглядны совсем. 3. все более или менее независимые куски кода выделяем в отдельные процедуры. 4. теперь когда мы сократили размер процедур до минимума начинаем распутывать и несчадно истреблять все конструкции GOTO. Сворачиваем все 5. повторяем шаг 3. 6. ищем похожие процедуры, пытаемся их универсализировать. ну и потом оптимизация ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2009, 09:16:26 |
|
||
|
Оптимизация и рефакторинг кода на fortran'е
|
|||
|---|---|---|---|
|
#18+
Виталий, мне остаётся встать и поаплодировать. Ты любую науку можешь разложить в десяток тезисов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2009, 09:25:48 |
|
||
|
Оптимизация и рефакторинг кода на fortran'е
|
|||
|---|---|---|---|
|
#18+
mindstream 2) Люто бешено поработал над софтиной профайлером и выяснилось, что 70% времени уходит на вычисление логарифма. Существуют ли реализации алгоритма расчета логарифма или библиотеки с его реализацией? Спасибо. В зависимости от данных и скорости вычисления логарифма, может помочь кеширование каких-то отдельных функций (если часто вызывается с одними и теми же параметрами), но тут я никаких гарантий не дам-надо смотреть данные и пробовать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2009, 10:50:41 |
|
||
|
Оптимизация и рефакторинг кода на fortran'е
|
|||
|---|---|---|---|
|
#18+
Самоловских Виталий aka Kefir4. теперь когда мы сократили размер процедур до минимума начинаем распутывать и несчадно истреблять все конструкции GOTO. Сворачиваем все ... особенно злостные попытки по-простому выйти из трех (и более) вложенных циклов, ведь нефиг жеж!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.07.2009, 15:39:51 |
|
||
|
Оптимизация и рефакторинг кода на fortran'е
|
|||
|---|---|---|---|
|
#18+
Еще раз благодарю всех отписавшихся) Итак, про рефакторинг. Все-таки (по моему не шибко авторитетному мнению бгг =) ) рефакторинг можно проводить для языка с любой парадигмой, бо на sql'ных проектах он тоже как-то делается, а ООП в sql не шибко пахнет =). Поэтому пока засел за повышение читабельности кода (на кафедре любят переменные вида tt, tt1, tt2 итд =) ). К сожалению больше адекватных IDE не нашел, поэтому приходится все делать руками и find&replace. Тестов тоже нету, ибо такой код, да еще и с глобальными переменными тестировать пока нереально =) Единственный вариант тестирования, который смог прикрутить - автоматический прогон небольшого количества тестовых данных и сравнение их с результатами референсного бинарника. Про логарифмы. К сожалению требуемая точность такова (8 байт, да), что закешировать все варианты не представляется возможным. В задаче просчитывается пролет большого количества электронов на большом количестве шагов, поэтому потеря одного знака к концу прогона ведет к совершенно диким ошибкам (пробовали кешировать отдельные значения и между ними экстраполировать, не помогло). Ну и сложность алгоритма при этом получается O(n^3), и это печально. Надеюсь к концу выходных добить вопросы читабельности и вплотную заняться переработкой структуры кода. ЗЫ: у кого-то есть опыт установки Sun studio 12? Никак эту заразу поднять не могу - то netbeans ставиться отказываются, то еще какие-то проблемы =( Пробовал на свежеподнятых дистрибутивах fedora 8 и mandriva 2009.0. К сожалению в линуксах не спец, поэтому адекватно оценить ситуацию не смог по тем ошибкам, которые мне установщики выдавали. Мануалы читал =) Помогите с этим, пожалуйста! Модератор: посетители форума Unix - системы сюда тоже, конечно, захаживают ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2009, 15:51:18 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=36065507&tid=1344387]: |
0ms |
get settings: |
10ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
207ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 228ms |
| total: | 518ms |

| 0 / 0 |
