Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.03.2013, 13:14   #1
Brabus
Пользователь
 
Регистрация: 25.09.2009
Сообщений: 81
По умолчанию OpenMP и while на С++

Всем привет. Не подскажете как можно распараллелить с помощью OpenMP вот такой кусочек кода?
Код:
__int64 genPrivate(__int64 e, __int64 n) 
{
	__int64 d = 0;

	while ((d * e) % n != 1)
		d += 1;

	return d;
}
Brabus вне форума Ответить с цитированием
Старый 13.03.2013, 14:05   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Следующий шаг зависит от предыдущего. Вначале надо изменить алгоритм. Скажем, можно одновременно начинать в нескольких точках - тогда один поток считает начиная от d=1, другой от d=1+(n/16), третий от d=1+2*(n/16) и т.д. Разумеется, каждый поток должен заканчивать своё выполнение по достижении начальной точки другого потока.
Конкретные конструкции OpenMP на память не подскажу, увы.

И, разумеется, реальный RSA таким способом взломать невозможно.
Abstraction вне форума Ответить с цитированием
Старый 13.03.2013, 14:28   #3
Brabus
Пользователь
 
Регистрация: 25.09.2009
Сообщений: 81
По умолчанию

Код:
__int64 genPrivate(__int64 e, __int64 n) 
{
	__int64 d = 0, i;
	#pragma omp parallel shared(d, e, n) private(i)
	{
	#pragma omp for
		for(i = 0; i < n; i++)

			d++;
	}
	return d;
}
Вот этот код полностью нагружает процессор, но не проверки
Код:
((d * e) % n != 1)
. Помогите пожалуйста вставить в код проверку.
Brabus вне форума Ответить с цитированием
Старый 13.03.2013, 14:47   #4
Brabus
Пользователь
 
Регистрация: 25.09.2009
Сообщений: 81
По умолчанию

Код:
__int64 genPrivate(__int64 e, __int64 n) 
{
	__int64 d = 0, i, ans;
	#pragma omp parallel shared(d, e, n) private(i)
	{
	#pragma omp for
		for(i = 0; i < n; i++)
			if((d * e) % n != 1)
				d++;
			else
			{
				ans = d;
				exit(0);
			}
	}

	return ans;
}
Коряво, но надеюсь что хотя-бы в режиме отладки у меня получится поймать ans
Brabus вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
openmp hunter03 Общие вопросы C/C++ 0 02.10.2012 17:54
OpenMP Timur1 Visual C++ 1 16.06.2012 15:40
Глобальные переменные и OpenMP AndrewMT Общие вопросы C/C++ 0 31.05.2012 14:54
Qt, глобальные переменные и OpenMP AndrewMT Qt и кроссплатформенное программирование С/С++ 0 31.05.2012 14:45
OpenMP Алек Помощь студентам 2 14.10.2011 11:52