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

Найти самую длинную возрастающую цепочку простых чисел - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Чем отличается С++ от Visual С++? http://www.cyberforum.ru/cpp-beginners/thread350822.html
Здравствуете товарищи программисты! Только начал изучать язык программирования С++ и возникло пару вопросов. Чем отличается С++ от Visual С++? И еще посаветуйте какую-нибудь литературу на русском языке, для понятия основ языка.(В Универе дают только на английском) В поисковике искать не хотел, т.к. у бывалых программистов спросить лучше.Спасибо.
C++ как кодить на с в Microsoft visual studio 2010 первый раз встречаюсь с вижлой.как кодить на с в Microsoft visual studio 2010?обьясните поподробнее как что где создавать и как компилировать http://www.cyberforum.ru/cpp-beginners/thread350801.html
Solutions manual по книге c++ how to programm C++
Апну темку и заодно мб, кто-нибудь имеет еще 1 книжку. Нужен solutions manual по книге c++ how to programm (5 издания). Заранее спс.
Описать класс, реализующий бинарное дерево C++
Здравствуйте! Возникли проблемы с реализацией одной программы ....Описать класс, реализующий бинарное дерево, обладающее возможностью добавления новых элементов, удаления существующих, поиска элемента по ключу, а также последовательного доступа ко всем элементам. Написать программу, использующую этот класс для представления англо-русского словаря. Программа должна содержать меню, позволяющее...
C++ Не получаеться решить http://www.cyberforum.ru/cpp-beginners/thread350749.html
Дана функция y(x)=Ax2+Bx+C, где A – количество букв в фамилии студента, B количество букв в имени студента, C количество букв в отчестве студента. Для функции y(x) составить программу построения таблицы значений функции при изменении аргумента от L до R с шагом T. В каждой строке выводить значения аргумента и соответствующее ему значение функции. Кроме того, в конце таблицы напечатать...
C++ как удалить все елементы с очереди queue Есть очередь queue и в ней элементы, как удалить их все чтобы очередь осталась пустой? подробнее

Показать сообщение отдельно
Vladimir.
155 / 155 / 10
Регистрация: 24.11.2009
Сообщений: 375
15.09.2011, 16:14     Найти самую длинную возрастающую цепочку простых чисел
в продолжение моего поста:
Смысл распараллеливания вычислений на нескольких процессорах в первую очередь в получении выгоды по времени.
первое: в приведённом выше примере данные сначала считываются а потом обрабатываются. Значит, если время чтения 50 секунд, и время вычислений 50 секунд, то распределив вычисления по 4 потокам в результате имеем 40% профита ( 50+50/4 = 62 секунды вместо 100 секунд в случае однопоточных вычислений.)
второе:, если одному из потоков попадётся набор больших и, следовательно, сложных для проверки чисел, то остальные потоки справившись со своими задачами будут вынуждены ждать "неудачника". Что еще уменьшит профит (причем уменьшать будет довольно быстро)
третье: то, чего не делали - нужно еще найти наибольшую подпоследовательность, что тоже потребует времени.
четвертое: выбран не самый удачный тест простоты.

первые три пункта исправляются так:
в начале программы создаётся нужное количество вычислительных потоков (далее пул), они переводятся в режим ожидания, так же создаётся поток для чтения данных из фаила и поток для поиска наибольшей подпоследовательности который тоже ждёт своего часа. Поток ввода работает с двумя буферами. Сначала данные из фаила помещаются в буфер1, буфер1 отправляется пулу (вернее пул получает разрешение работать с буфером). Поток ввода не останавливаясь заполняет буфер2. Когда буфер2 заполнен, ввод приостанавливается. В это время пул потоков обрабатывает буфер1 : Каждый вычислительный поток берёт число из буфера, выполняет для него тест простоты и отправляет результат потоку поиска, после чего берёт новое число из буфера. И так пока буфер не опустеет. После того как пул обработает весь буфер, потоки переводятся в режим ожидания.
Если буфер2 полон, а буфер1 пуст - они меняются местами, поток ввода снова начинает считывать данные из фаила, а пул обрабатывать числа из полного буфера.
А параллельно этому всему работает поток поиска, выявляя в переданных ему пулом данных максимальную подпоследовательность.
После окончания фаила и завершения вычислений во всех потоках, происходит вывод результата, освобождение ресурсов и т.п.
 
Текущее время: 07:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru