![]() |
|
![]() ![]() ![]() |
|
turbanoff |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 6.4.2009 Репутация: нет Всего: 1 |
значит так, есть у нас в университете такой предмет "Параллельные алгоритмы".
на зачет программа: "Реализуйте линейный конгруэнтный генератор псевдослучайных чисел, распараллелив его на два процессора методом блочного разбиения. В качестве модуля генератора m сгенерируйте простое трехзначное число. На базе полученного генератора псевдослучайных чисел реализуйте поточное шифрование, путем побитового «ИСКЛЮЧАЮЩЕГО ИЛИ» псевдослучайной последовательности с исходным текстом. Процесс шифрования также необходимо распараллелить на два процессора." главная "оценка" программы состоит в оценке времени её работы на 1-м и 2-х процессорах соответственно. (Нужно показать что на 2-х как-никак быстрее) ну закодил вот я (fasm):
в общем запускаю я её с аргументами "1" или "2". программа правильно определяет ск-ка потоков надо запустить (0 или 1 соответственно), запускает и считает случайные числа и даже шифрует/дешифрует правильно но одна проблема: никакого прироста в скорости при запуске на 2-х потоках не ощущается, даже наоброт. даже не знаю что делать ![]() ка бы так её изменить чтобы и задачу она выполняла правильно и время работы на 2-х было бы хотя на чуток больше чем на 1-м. |
|||
|
||||
airyashov |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 284 Регистрация: 1.7.2008 Репутация: 1 Всего: 6 |
Как вариант написать на Си и проверить, если время будет попробую реализовать
-------------------- icq:3(один)7748666 mail:airyashov( а )inbox.ru |
|||
|
||||
W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 1 Всего: 121 |
Основное время уходит на обращение к памяти и винту(чем больше обращений, тем медленнее работает ессно), поэтому распараллеливание здесь до фени.
-------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
turbanoff |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 6.4.2009 Репутация: нет Всего: 1 |
это я понимаю, задача не в этом, именно распарралелить генератор, и засечь именно это время. на си - не вариант. |
|||
|
||||
airyashov |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 284 Регистрация: 1.7.2008 Репутация: 1 Всего: 6 |
передумал
Это сообщение отредактировал(а) airyashov - 26.5.2009, 23:12 -------------------- icq:3(один)7748666 mail:airyashov( а )inbox.ru |
|||
|
||||
ksili |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: нет Всего: 17 |
Если проц одноядерный и без HyperThreaing, то два потока скорее всего будут работать медленнее. Потестируй на двухядерном компе.
-------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
|||
|
||||
turbanoff |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 6.4.2009 Репутация: нет Всего: 1 |
собственно и тестировал на 2-х ядерном, главна проблема - нахождение зерна для 2-го потока. формула вот такая U(n) = a^n * U(0) + c*(a^n - 1)/(a - 1) mod M M = 2^32; вычисление степени a^n я сделал "эффктивно", осталась проблема с (a^n - 1)/(a - 1) mod M, как по мне именно это вычисление занимает меного времени Это сообщение отредактировал(а) turbanoff - 2.6.2009, 20:45 |
|||
|
||||
ksili |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: нет Всего: 17 |
mod M тоже можно сделать эффективно - с помощью сдвигов, если M - степень двойки
-------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
|||
|
||||
Mikl_ |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 9.11.2007 Репутация: нет Всего: 14 |
![]() |
|||
|
||||
ksili |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: нет Всего: 17 |
точно, чё-то я ещё не проснулся. Хотя сдвигами тоже можно было сделать, но наверно немного менее эффективно:
x mod (2^y) = (x << y) >> y; А вообще если программа 32-битная, то надо ещё посмотреть, есть ли там вообще смысл вычислять остаток от деления на 2^32. -------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
|||
|
||||
Mikl_ |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 9.11.2007 Репутация: нет Всего: 14 |
![]() |
|||
|
||||
turbanoff |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 6.4.2009 Репутация: нет Всего: 1 |
проблема не в вычислении модулю, а в нахождении (a^n - 1)/(a - 1) mod M если пользоваться формулой, которую я использовал (a^n - 1)/(a - 1) = a^0 + a^1 + a^2 + ... + a^(n-2) + a^(n-1) то прироста скорости по сравнению с обычный линейным конгруэнтным генератором почти нет - теже самые N шагов Это сообщение отредактировал(а) turbanoff - 7.6.2009, 13:08 |
|||
|
||||
Mikl_ |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 9.11.2007 Репутация: нет Всего: 14 |
turbanoff,
"Реализуйте линейный конгруэнтный генератор псевдослучайных чисел, распараллелив его на два процессора методом блочного разбиения. В качестве модуля генератора m сгенерируйте простое трехзначное число. На базе полученного генератора псевдослучайных чисел реализуйте поточное шифрование, путем побитового «ИСКЛЮЧАЮЩЕГО ИЛИ» псевдослучайной последовательности с исходным текстом. Процесс шифрования также необходимо распараллелить на два процессора." "проблема не в вычислении модулю, а в нахождении: (a^n - 1)/(a - 1) mod M" "нашел обсуждение этого вопроса и решение в книжке: "Алгоритмические трюки для программистов" Генри Уоррен PS. всем советую" ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Asm для Windows/DOS" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Asm для Windows/Dos | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |