Форум программистов, компьютерный форум CyberForum.ru

Непонятная разница в производительности - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Странная ошибка при сборке nasm http://www.cyberforum.ru/cpp/thread356140.html
всем привет. нужно собрать nasm для вендус. использую MSYS+MinGW. configure прошел успешно. при сборке получаю такое: nasm.h:476:5: error: expected identifier before numeric constant nasm.h:882:26: error: 'PREFIX_ENUM_LIMIT' undeclared here (not in a function)
C++ Модификация AST дерева GCC всем привет. есть задумка реализовать для GCC плагин расширяющий/добавляющий некоторые возможности С++ языку. проблемы со сбором информации из AST нет. могу получить любую необходимую мне информацию о единице трансляции. но проблема в модификации AST. вопрос в том, может ли кто-то подсказать ссылки/доки/исходники по теме? спасибо. http://www.cyberforum.ru/cpp/thread355055.html
C++ Работа с const
Объясните пожалуйста разницу между вызовами двух функций: int func(const char *name) и int func(char *name) Я плохо понимаю - что дает этот спецификатор const? Что может произойти если его не указать?
Новый стандарт принят! C++
Barry Hedquist wrote: Just received word from ANSI that the C++ FDIS has officially been approved by ISO in a unanimous vote. 21 of 21 National Bodies voted to APPROVE. Под FDIS подразумевается N3290 (отличия которого от N3291 незначительны — см. comp.std.c++ — difference between documents n3290 and n3291->...
C++ mpl проход по элементам http://www.cyberforum.ru/cpp/thread327906.html
Пытался написать вывод элементов vector_c не через for_each. Не вышло. Кто подскажет как сие сделать наиболее удобно? Пример вектора. typedef boost::mpl::vector_c<char, 'h', 'e', 'l', 'l', 'o'>::type vector; Спасибо.
C++ Compile-time алгоритмы. сборник всем привет. предлагаю в этой теме обсуждать/реализовывать/выкладывать compile-time алгоритмы. под CUT'ом. подсчет FNV1a-хеш суммы строк: #include <iostream> template<size_t N, size_t I=0> подробнее

Показать сообщение отдельно
ValeryLaptev
Эксперт С++
1017 / 796 / 48
Регистрация: 30.04.2011
Сообщений: 1,617
27.12.2011, 21:56  [ТС]     Непонятная разница в производительности
Цитата Сообщение от niXman Посмотреть сообщение
ValeryLaptev, теперь еще расскажи, что нужно сделать чтоб это дело скомпилить и выполнить?
Вот тебе постановка...
В лаборатории математического моделирования Астраханского государственного университета давно и успешно занимаются исследованиями влияния беспорядка на фи-зические свойства частично неупорядоченных конденсированных сред. С использова-нием методов теории перколяции изучены системы неупорядоченных, частично и пол-ностью упорядоченных линейных k-меров на квадратной решетке, в частности получе-ны зависимости порога перколяции и порога джамминга от степени упорядочения k-меров на решетке.

Для моделирования системы линейных k-меров на квадратной решетке была реали-зована программа на языке программирования С. Для сбора статистических данных и расчета разнообразных средних требуется выполнять программу примерно 1000 раз для одного набора исходных данных, поэтому время выполнения одного прогона весьма критично. Однако при всей своей полезности программа оказалась недостаточно эф-фективна по времени выполнения для решеток большого размера и длинных k-меров. Поэтому возникла потребность в более эффективной реализации.

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

Имеется дискретная квадратная решетка с линейным размером L узлов, L > 1000. На решетке случайным образом по горизонтали или вертикали размещаются линейные объекты размером k узлов – k-меры, k ≈ L/100. Относительная доля горизонтальных и вертикальных k-меров задается параметром S (степень анизотропии):
S = (ng – nv)/(ng + nv),
где ng — количество горизонтальных k-меров, nv — количество вертикальных k-меров.
При |S| = 1 все k-меры размещаются либо по горизонтали, либо по вертикали. Если |S| ≠ 1, то одно из направлений по соглашению считается доминирующим. Условимся, что при S < 1 доминирующей является горизонтальная ориентация k-меров, соответст-венно при S > 1 доминирует вертикальное направление. Степень анизотропии S = 0 соответствует изотропному заполнению решетки — оба направления равновероятны.

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

Таким образом, основная часть алгоритма — цикл размещения k-меров на решетке. На каждом шаге цикла с помощью датчика случайных чисел генерируются текущая ориентация k-мера и координаты узла решетки, используемые для размещения. Эти ко-ординаты могут интерпретироваться двумя способами:
• текущий узел считается начальным или конечным узлом k-мера;
• текущий узел считается внутренним узлом k-мера.

Отметим, что димеры (k = 2) не имеют внутренних узлов, поэтому для общности выби-рается первый вариант интерпретации координат. В существующей версии программы текущий узел считается начальным узлом: при горизонтальной ориентации k-меров размещается вправо, при вертикальной ориентации — вниз (начало отсчета — в левом верхнем углу решетки, узел с координатами (0,0)). При размещении используются пе-риодические граничные условия, то есть k-меры могут пересекать границы решетки. При программировании это означает, что вычисления координат выполняются по мо-дулю L.

Схема алгоритма в существующей С-реализации выглядит так:
Пока возможно размещение в доминантной ориентации
Генерировать текущую ориентацию
Если возможно размещение в текущей ориентации
Генерировать координаты узла
Пока НЕ возможно разместить к_мер в текущей ориентации
Генерировать координаты узла
Конец_цикла
Разместить к_мер
Увеличить счетчики
Конец_если
Конец_цикла
В данной версии программы решетка преобразована в граф, каждая вершина которого имеет 4 соседей: левый, верхний, правый, нижний.
Заполнение решетки выполняется сразу на графе.
Надо выяснить, при каком S появляется опоясывающий кластер. То есть компонента связности, вершины которой присутствуют в каждой строке-столбце или в обоих направлениях.

Чтобы это работало, надо написать прогу которая считает некую конфигурацию занятых узлов из текстового файла (берем размер, например, 10*10. И по ней - отлаживать.
А для больших L = 1000-30000 надо заполнять в соответствии с алгоритмом.
Тут еще и датчик случайных чисел используется - Вихрь Мерсенна.

Поэтому создание минимального примера после того, как проблема решена - не вижу смысла.
А если интересны задачи по перколяции - aspu.ru и там найти ссылку на Лабораторию математического моделирования. Тарасевич Юрий Юрьевич руководитель.
 
Текущее время: 18:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru