|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
30.04.2017, 03:16 | #11 | |
Форумчанин
Регистрация: 12.04.2017
Сообщений: 889
|
Цитата:
Но еще раз, для расчетов - openmp. Только, сам расчет нужно переделать так, чтоб паралельные его куски не зависили от других кусков. Т.о. можете увеличить расход памяти, например std::transfer позволяет эффективно посчитать подзадачи, но на результат подзадач - расход памяти, т.к. количество результатов = кол-ву входных данных (что не всегда так, и потом лишнее уже нада убирать на 1 процессоре). Если расчеты в пределах школьной алгебры по сути, то их вообще можно на GPU сбросить. Т.о. программа на процессоре параллельно формирует блоки расчетов, которые скидываются на GPU(видеокарту), а там мат. процессоров сотни и тыщи. Кстати, параллельные расчеты всяких синусов и косинусов будут не эффективны на центральном процессоре в параллельности (только целые вычисления), т.к. мат. блок всего 1. Он будет делится на все потоки. Для дробной математики нужно смотреть GPU, а CPU будет дирижером. https://developer.nvidia.com/opencl Последний раз редактировалось alexzk; 30.04.2017 в 03:21. |
|
30.04.2017, 12:06 | #12 |
Форумчанин
Регистрация: 03.03.2013
Сообщений: 102
|
Доказательство:
Код:
Как видно, числа очень неслучайные. Я мог бы попробовать написать линейный конгруэнтный генератор из двух итераций, с отбросом младших битов (где-то читал про это), лучше будет, но всё равно, не уверен я... Вихрь Мерсенна, конечно, хорош, но жертва тому - производительность Последний раз редактировалось Haric_110; 30.04.2017 в 12:28. |
01.05.2017, 02:56 | #13 |
Форумчанин
Регистрация: 03.03.2013
Сообщений: 102
|
В общем, насчёт проверки клавиатуры на чтение, я решил поступить следующим образом: я засёк, сколько итераций происходит за 1 с, разделил это число на 10 (получилось около 6,5 миллионов), затем добавил в вычислительный цикл условие:
Код:
Кажется, с1 намного больше с2... Последний раз редактировалось Haric_110; 01.05.2017 в 11:12. |
05.05.2017, 15:31 | #14 | |
Форумчанин
Регистрация: 12.04.2017
Сообщений: 889
|
Цитата:
Код:
Код:
Вообще забрасывайте к черту этот С стиль. Я тут ардуин прикупил, накачал библиотек....ну бред школьный...некоторые переписал на С++/шаблонах, сразу выиграл 1Кб (из 32Кб) размер. Так что, все мифы о вреде С++. Конкретно, в С++ размер дает stdlib, но, предполагается, что ее будет делать разработчик девайса (т.е. оптимизировать). А без нее, язык намного более эффективен. Последний раз редактировалось alexzk; 05.05.2017 в 15:37. |
|
05.05.2017, 18:02 | #15 |
Форумчанин
Регистрация: 03.03.2013
Сообщений: 102
|
isElipced будет выполнять что-то, вроде
Код:
Насчёт С-стиля... возможно, позже я перепишу программу в более объектно ориентированном стиле, но пока в этом нет необходимости. Производительность программы определяют операции в большом цикле... в нём из библиотечных функций - проверка клавы и генерация случайных чисел, а остальное - инкременты и декременты. |
06.05.2017, 09:08 | #16 |
мальчик-помогай =)
Форумчанин
Регистрация: 16.09.2010
Сообщений: 522
|
Если стоит задача тупо генерировать много чиселок, то можно упороться с всякими там потоками, CUDA и т.п.
Если же это нужно для моделирования какого-то процесса, то стоит его реализовать, а потом оптимизировать. Может мне гугл не то выдал, но, как я понял, этот ваш вихрь весьма шустрый и тормозить будет сама модель или что-то др. (память, работа с файлами, др.... в код не вникал, может вы там каждое число сохраняете в файл по одному байтику, в обратном порядке, ещё и переводя в строки, поэтому оно безбожно тормозит) Всякие хаки с потоками и кол-вом итераций в секунду - верная дорога к лютым багам, даже если всего один, главный, поток. Если же их два, то это точно огребёте проблем и, что самое печальное, не сразу, а когда на 80% решите задачу свою и придётся всё переделывать. Хотите потоки? - Будьте добры, изучить и использовать объекты синхронизации (крит. секции и events тут самое оно). Если задача корректна и всё правильно разбито на потоки, с адекватной сихронизацией, то потоки могут существенно ускорить работу. Впрочем, бегло просмотрел тему и сейчас не советовал бы пытаться писать многопоточный вариант. |
06.05.2017, 09:48 | #17 |
Форумчанин
Регистрация: 03.03.2013
Сообщений: 102
|
GreenWizard, хорошо, учту Ваши предостережения насчёт потоков. Я ещё не умею ими пользоваться, планирую изучить в будущем.
Насчёт случайных чисел, они нужны для моделирования случайных процессов. Вероятности процессов меняются линейно от n (число итераций). Модель я старался писать максимально эффективно, сократив вычислительные операции до необходимого минимума, в файл, разумеется, ничего не записывается, на консоль не выводится, только во время остановки программы можно что-то вывести или сохранить в файл и принудительно сохраняется примерно раз в час. Это необходимо, потому что однажды я огрёб от того, что случайно нажал в винде "Выход из системы" и потерял результат 28-часового расчёта. Теперь у меня есть возможность сохранять промежуточные результаты в файл и восстанавливать расчёт. Долго программа работает из-за того, что число итераций может быть порядка 1e16, например, может 1e22. кстати, это число которое 64-х битный целочисленный тип данных не вмещает в себя, необходимо использовать число двойной точности, но, помню я, есть проблемы с инкрементом double-переменных... Там, вроде, флаг округления изменять нужно... как-то на низком уровне решается. Перед тем, как писать на с++ и использовать вихрь Мерсена, я писал на с# и использовал тот стандартный генератор, который там был (не знаю, что там за алгоритм). Так вот, после того, как я перевёл всё на с++ и поменял только функцию генерации псевдослучайных чисел, программа стала работать значительно медленнее. Я думал, с++ больше подходит для этой задачи... но думаю, дело в том, что метод генерации СЧ значительно сложнее того, что в с#. Надо бы посмотреть по-подробнее. Последний раз редактировалось Haric_110; 06.05.2017 в 10:36. |
06.05.2017, 19:51 | #18 |
мальчик-помогай =)
Форумчанин
Регистрация: 16.09.2010
Сообщений: 522
|
скинь код на шарпе и на с++... подозреваю, что где-то ошибка
с точностью тоже много нюансов и от задачи многое зависит. Может понадобится и длинная арифметика и различные ухищрения, если прям всё так серьёзно и часами работает. |
07.05.2017, 12:29 | #19 |
Форумчанин
Регистрация: 03.03.2013
Сообщений: 102
|
92-95 часов по расчётам... сегодня завершится должно через несколько часов, буду отмечать это событие)
Код скину вечером. Я изменил код на с++ с тех пор, как сравнил с кодом с#, добавил проверку на ввод с клавиатуры, возможность останавливать программу, выводить результаты, сохранение в файл промежуточных результатов и восстановление из файла. Это, конечно, немного уменьшило производительность, но именно немного (где-то на 2-3%, я сравнивал скорости вычислений, как число итераций в час) |
08.05.2017, 00:04 | #20 |
Форумчанин
Регистрация: 03.03.2013
Сообщений: 102
|
В файле с программой на с# есть некоторые пояснения к модели
Может, логичнее было бы создать структуру или класс Isotope, с характеристиками своими и функциями-членами, но ускорит ли это вычисления... если вызывать функцию в цикле - это дополнительные затраты времени на вызов функции, сохранение параметров в стёк, возвращение из стёка и т.д. ... но если сделать все поля открытыми и выполнять аналогичные действия... может, лучше будет, но можно ли будет поместить эти значения в регистры? Если нет, то только ухудшится всё... Последний раз редактировалось Haric_110; 08.05.2017 в 00:49. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
WriteFile в циклах | _PROGRAMM_ | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 3 | 11.02.2012 23:00 |
Нужно на циклах реализовать. | renat1501 | Помощь студентам | 5 | 18.09.2011 21:28 |
RANDOM в циклах | Stakhoff | Общие вопросы C/C++ | 5 | 05.04.2011 12:52 |
глюк в циклах | Rio309 | Общие вопросы Delphi | 4 | 05.10.2009 15:44 |
вопрос о циклах | alexsamurai | Microsoft Office Excel | 9 | 10.01.2009 13:25 |