powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Генератор простых чисел (до 10^9 за 5 сек)
25 сообщений из 402, страница 12 из 17
Генератор простых чисел (до 10^9 за 5 сек)
    #38929775
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012,
Из математических пакетов как по мне лучший -
Mathematica http://rutracker.org/forum/viewtopic.php?t=4337743
Это целая вселенная ... /попасть в нее легко .../

PS: Кроме того на просторах inet имеется несколько несколько математических пакетов с
исходниками /десятки тысяч математических алгоритмов .../.
...
Рейтинг: 0 / 0
Генератор простых чисел (до 10^9 за 5 сек)
    #38929781
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вывихнул мозг асинхронностью очередной раз. Пытаюсь шаги цикла к next_prime() приделать. Пока результаты от 1 до 10^9 такие
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Test(0M...1000M): next_prime() skip 2
count 50847534 primes. time 2253 msec speed 22568K/sec OK

Test(0M...1000M): next_prime2() skip 2
count 50847534 primes. time 2874 msec speed 17692K/sec OK

Test(0M...1000M): next_prime3() skip 2,3
count 50847534 primes. time 2123 msec speed 23950K/sec OK


next_prime() - достраивает решето с 1, пропускает четные, эталонный показатель.
next_prime2() - не тратит лишнюю память, только заполняет кусок решета (64 кб), это вышеупомянутый next_prime64() без оптимизации, только в x32 варианте. Тормозит из-за высчитывания смещений перед началом заполнения решета.
next_prime3() - тоже самое что и 2, только с пропуском кратных 2 и 3. Причем в обоих циклах (вычеркивания и чтения). Чуть быстрее первого. Надеялся на большее.

Цикл вычеркивания дальше не оптимизировать, т.к. там будет куча умножений и из-за них тормозит больше чем без них. Вычеркивание без 2,3 сделал сдвигами. Остается оптимизировать только цикл считывания результатов.
С ним все плохо, таблица шагов не ложится сюда один-в-один из моего синхронного Эратосфена. Запутался в смещениях. Доделаю, но не думаю что по времени ниже 1,5 сек. опущусь. Надо еще какие-то идеи по оптимизации алгоритма.

PS После из самого быстрого next_primeX() сделаю next_prime64() и найдем MAX(next_prime64()), а пока надо 0.5 сек Аткина как-то обогнать.
...
Рейтинг: 0 / 0
Генератор простых чисел (до 10^9 за 5 сек)
    #38929791
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012 Dima T не обижайся.
То чего ты хочешь достичь - "Лично мне охота Аткина обогнать, посчитать за <0,5 сек диапазон до 10^9."
Как по мне, то лучше "ляг поспи и все пройдет" /хотя тебе виднее .../
Не обижаюсь, обгоню :) У того же автора Эратосфен в три раза быстрее моего (0,6 сек). Он, как ты пишешь, 15 лет занимался проблемой, а я всего вторую неделю. Все еще впереди.

PS Туда специально не заглядываю, не люблю списывать.
...
Рейтинг: 0 / 0
Генератор простых чисел (до 10^9 за 5 сек)
    #38929806
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TОн, как ты пишешь, 15 лет занимался проблемой, а я всего вторую неделю. Все еще впереди. Да не я это писал ...
Всего лишь после ссылки привел выдержку из комментов к статье ...

PS: Ну тогда подключаем thread, SSE / http://en.wikipedia.org/wiki/Streaming_SIMD_Extensions /, ... ...
С Богом /удачи ни когда не желаю - для не верующих/.
...
Рейтинг: 0 / 0
Генератор простых чисел (до 10^9 за 5 сек)
    #38929831
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012...
...
Реализация этого метода на C++
http://gforge.inria.fr/projects/ecm/
svn checkout svn://scm.gforge.inria.fr/svnroot/ecm/trunk

Посмотрел, почитал readme. Ну да, есть там и ecm, и P-1, и P+1. Но у меня оригинальный алгоритм, в группе решений уравнения Пелля. По крайней мере я его описания раньше нигде не встречал. Перекрывает P-1 и P+1. Понятно, что на практике малоинтересен по сравнению с ECM, но проще в реализации.
...
Рейтинг: 0 / 0
Генератор простых чисел (до 10^9 за 5 сек)
    #38929964
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonБарлон. Я выпал в осадок. Ты мне сначала лекции прочитай по кольцам вычетов а потом
уж факторизация....Вычеты по простому модулю... Ну можно немножко упрощенно считать, что это остатки от деления на это простое число. Их можно складывать и умножать, так же беря остаток от деления результата.
...
Рейтинг: 0 / 0
Генератор простых чисел (до 10^9 за 5 сек)
    #38929967
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P-1 метод основывается на том, что при операциях умножения остатков по составному модулю эквивалентны параллельным операциям по соответствующим простым модулям
(например, 7*8%15 = 11, при этом (7%3)*(8%3)%3=2 и (7%5)*(8%5)%5=1 ну и 11%3=2 и 11%5=1), это кажется следствие китайской теоремы об остатках .
А также на малой теореме Ферма :
Код: plaintext
Если p — простое число и a — целое число, не делящееся на p, то a^(p-1) % p = 1
Если (p-1) произведение q1*q2, то a^(p-1) = (a^q1)^q2. А единица в любой степени остается единицей.
Так что взяв произвольное не кратное p число a, и последовательно возводя его в степени 2,3,4,5,6... по модулю p то есть ((a^2 % p)^3 %p)^4 % p... рано или поздно получим 1.
Если теперь взять составное число N = p*q и a: gcd(a,N)=1, и начать a возводить в степени по модулю N, то есть большая вероятность, что в какой-то момент результат окажется равным единице по модулю одного из сомножителей и неравным единице по модулю другого сомножителя. Тогда gcd(a^K %N - 1, N) - один из делителей N. Вот например gcd(3^4 % 35 - 1, 35) = 5.
...
Рейтинг: 0 / 0
Генератор простых чисел (до 10^9 за 5 сек)
    #38929979
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так всё-таки задача обсуждения обогнать реализацию предложенную соавтором Аткина ?

PS
кстати, кто-нибудь узнал как тот сайт факторизует 60значные числа в течении одной секунды ?
...
Рейтинг: 0 / 0
Генератор простых чисел (до 10^9 за 5 сек)
    #38930043
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почитал вышеупомянутый сайт http://primesieve.org/ там форсированный Эратосфен в основе. Причем форсировали его капитально.
Затестил до 10^9: 0,06 сек. (4 ядра), 0,12 сек. (1 ядро)
Можно смело заявлять: Эратосфен победил Аткина.

Optimizations used in primesieve Uses a bit array with 8 flags each 30 numbers for sieving
Pre-sieves multiples of small primes <= 19
Compresses the sieving primes in order to improve cache efficiency [5]
Starts crossing off multiples at the square
Uses a modolo 210 wheel that skips multiples of 2, 3, 5 and 7
Uses specialized algorithms for small, medium and big sieving primes
Uses a custom memory pool (for big sieving primes)
Processes two sieving primes per loop iteration to increase instruction-level parallelism
Parallelized (multi-threaded) using OpenMP

По существу направления оптимизации такие:
- обсчет окнами
- биткарта без кратных 2,3,5 (30 чисел на байт)
- оптимизация шагов цикла с пропуском кратных до 19
- оптимизация умножений и корней
- распараллеливание расчета

У меня все те же направления (два последних обдумываю), осталось суметь нормально реализовать их в коде.

А моя поделка выше не взлетает :(
Добавил пропуски кратных 2,3,5,7,11,13 - стало чуть медленнее работать. Итераций меньше, но доп.вычисления съедают всю экономию. Вариант с пропуском 2,3 пока самый быстрый. Буду его дотачивать. После распараллеливания на 4 ядра разгоню до <0,5 сек.
...
Рейтинг: 0 / 0
Генератор простых чисел (до 10^9 за 5 сек)
    #38930089
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дима. Меня интересует продолжение расчёта за границей Эратосфена.
У тебя есть рабочий макет?
...
Рейтинг: 0 / 0
Генератор простых чисел (до 10^9 за 5 сек)
    #38930121
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonДима. Меня интересует продолжение расчёта за границей Эратосфена.
У тебя есть рабочий макет?
Понятней напиши что хочешь получить.
Для x64 мой next_prime64() считает почти до 2^64. Споткнется из-за разрядности в самом конце интервала, точнее после квадрата максимального простого 2^32, т.к. там там надо будет next_prime(2^32) посчитать, а это x32 пока. Как это вылечу посчитаю next_prime64(2^64 - 10000).

Он немного неоптимизирован по скорости и расходу памяти, но как оказалось скорость особо некуда разгонять, а памяти ему надо максимум 256 мб.

По сути сейчас его и ускоряю, только в виде x32 версии. А x32 только потому что компилятор у меня такой, x64 просто тормозит из-за эмуляции работы с x64

Теоретически дальше можно в x128 переделать. Надо только чтобы арифметика x128 считалась (+-*/%).
...
Рейтинг: 0 / 0
Генератор простых чисел (до 10^9 за 5 сек)
    #38930255
SerVal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T ,
Не совсем понимаю, какой смысл вычислять простые числа на процессоре, если это замечательно делает видеокарта?
Запускаем:

D:\aProjects\PrimeSearch\x64\Release>PrimeSearch.exe -nvidia

Prime search: 4214924346 .. 4294924346
Accelerator: NVIDIA GeForce GTX 980
Found : 3608107
First prime : 4214924369
Last prime : 4294924289
=============
Exec time : 24.6 seconds.

:)
...
Рейтинг: 0 / 0
Генератор простых чисел (до 10^9 за 5 сек)
    #38930305
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SerValExec time : 24.6 seconds.
Всего лишь в 100 раз медленнее одного ядра моего проца :)
Код: plaintext
1.
2.
3.
Test(4214M...4294M): next_prime64() 4214924346 .. 4294924346
count 3608107 primes. time 220 msec speed 16400K/sec 
first 4214924369 last 4294924289


Можешь затестить у себя
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
#include "next_prime.h" 

		test_start("next_prime64() 4214924346 .. 4294924346", 4214924346, 4294924346);
		uint64_t first = next_prime64(4214924346);
		uint64_t last; 
		uint64_t x = first;
		while(x < 4294924346) {
			store_count(x);
			last = x;
			x = next_prime64(x);
		}
		test_end();
		printf("first %llu last %llu\n", first, last);


Остальное тут https://sourceforge.net/p/primegen/code/HEAD/tree/trunk/DimaT/
...
Рейтинг: 0 / 0
Генератор простых чисел (до 10^9 за 5 сек)
    #38930352
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SerValFirst prime : 4214924369
Last prime : 4294924289
=============
Exec time : 24.6 seconds.

Лажа какая-то!

Он что 24 секунды расчитывал 4 294 924 289 - 4 214 924 369 = интервал 79 999 920 ?

Или мы здесь все присутствующие неверно истолковали этот отчётик?
...
Рейтинг: 0 / 0
Генератор простых чисел (до 10^9 за 5 сек)
    #38930398
SerVal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T, так я ничего не оптимизировал. Тупо подсунул видеокарте все нечётные значения из этого диапазона.
Эта программулина для проверки видеоадаптеров. И оптимизировать её не буду, потому как мелкие простые числа меня не интересуют.
Интересуют где-то начиная с последнего числа Мерсена, поскольку у многих товарищей есть желание найти следующее. :)

Ну и о качестве моего "программирования":

D:\aProjects\PrimeSearch\x64\Release>PrimeSearch.exe -cpu

Prime search: 4214924346 .. 4294924346
Accelerator: CPU
Found : 3608107
First prime : 4214924369
Last prime : 4294924289
=============
Exec time : 466 seconds.

А поскольку "качество" программирования у меня одинаковое и для CPU и для ГПУ, то видно, что на ГПУ всё выполняется в 20 раз быстрее чем на ЦПУ. :)
...
Рейтинг: 0 / 0
Генератор простых чисел (до 10^9 за 5 сек)
    #38930418
SerVal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonИли мы здесь все присутствующие неверно истолковали этот отчётик?

Всё верно. Что программа выдала, то я сюда и вставил. Смысл программы в проверке и сравнении скорости выполнения одного и того же на различных видеокартах:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
D:\aProjects\PrimeSearch\x64\Release>PrimeSearch.exe
Usage:
PrimeSearch.exe -cpu
PrimeSearch.exe -ati
PrimeSearch.exe -nvidia
PrimeSearch.exe -intel
PrimeSearch.exe -show_devices
...
Рейтинг: 0 / 0
Генератор простых чисел (до 10^9 за 5 сек)
    #38930444
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SerValА поскольку "качество" программирования у меня одинаковое и для CPU и для ГПУ, то видно, что на ГПУ всё выполняется в 20 раз быстрее чем на ЦПУ. :)
Мне-то это что дает? Я качество алгоритма улучшаю. Количество (время выполнения) это просто мера сравнения на одном и том же железе.

И не факт что мой код взлетит на твоем ГПУ, там нужно сильное распараллеливание алгоритма, а у меня однопоточный. Можешь затестить действительно ли всё в 20 раз быстрее на ГПУ :)
...
Рейтинг: 0 / 0
Генератор простых чисел (до 10^9 за 5 сек)
    #38930488
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SerVal, тема CUDA/NVidia очень интересна и многогранна.

Но я прошу обсудить эти нюансы отдельным топиком.
У нас уже сформировалось комьюнити вокруг C/C++
для классической архитектуры, и распыляться на видеокарты нет
особого смысла.

Тем более что векторы интересов у нас идут намного дальше
чем просто хардварная оптимизация. Мы еще не исчерпали
алгоритмы и проверки гипотез математики.
...
Рейтинг: 0 / 0
Генератор простых чисел (до 10^9 за 5 сек)
    #38930509
SerVal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TМне-то это что дает? Я качество алгоритма улучшаю.
Это какбэ даёт понимание, что сколько не улучшай качество алгоритма на одном процессоре, 2048 процессоров Вам не обогнать.
Разумеется, если эти процессоры не у такого "программиста" как я :)
...
Рейтинг: 0 / 0
Генератор простых чисел (до 10^9 за 5 сек)
    #38930516
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SerValDima TМне-то это что дает? Я качество алгоритма улучшаю.
Это какбэ даёт понимание, что сколько не улучшай качество алгоритма на одном процессоре, 2048 процессоров Вам не обогнать.
Разумеется, если эти процессоры не у такого "программиста" как я :)
Эта оценка должна быть пересмотрена с учётом возможности параллелизма и закона Амадала.
...
Рейтинг: 0 / 0
Генератор простых чисел (до 10^9 за 5 сек)
    #38930530
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SerValЭто какбэ даёт понимание, что сколько не улучшай качество алгоритма на одном процессоре, 2048 процессоров Вам не обогнать.
Разумеется, если эти процессоры не у такого "программиста" как я :)
Наивный. Если бы все алгоритмы легко паралеллились, то в ЦПУ давно было бы по несколько тысяч ядер, интел давно предлагал 800 ядерный проц выпустить, прототипы показывал, только он нафиг не нужен, т.к. 4 ядра занять нечем.
Почитай про Закон Амдала , поймешь что сначала надо мозг сломать об распараллеливание алгоритма, а потом уже его в ГПУ отправлять
...
Рейтинг: 0 / 0
Генератор простых чисел (до 10^9 за 5 сек)
    #38930610
SerVal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TНаивный. Если бы все алгоритмы легко паралеллились, то в ЦПУ давно было бы по несколько тысяч ядер, интел давно предлагал 800 ядерный проц выпустить, прототипы показывал, только он нафиг не нужен, т.к. 4 ядра занять нечем.

Ничей мозг ломать не надо. Всё распараллелено до нас. Ещё на Cray и IBM.
Да и у нас в России(в институте Стеклова) давно есть параллельные библиотеки для ГПУ.. но нам они их не дадут... чтобы врагам не достались. :)

Intel обещал 80 ядерный проц. И не выпустил потому, что скорость доступа к памяти как была 20 лет назад, так и осталась.
Поэтому и добавляет в процессоры немыслимые кэши 2-го, 3-го, 4-го уровня.
* про Амдала я слышал.
** за прошедший год появилась хорошая бесплатная библиотека параллельных алгоритмов для С++ AMP.
намедни ParallelRadixSort на массиве в 400 MB. Зверь! Глазом не успеваешь моргнуть.
*****
А Ваша программа шустренько работает... впечатляет. :) (может в выходные и свою маленько оптимизирую).
...
Рейтинг: 0 / 0
Генератор простых чисел (до 10^9 за 5 сек)
    #38930679
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SerValНичей мозг ломать не надо. Всё распараллелено до нас. Ещё на Cray и IBM.

* про Амдала я слышал .

SerVal. Я читаю в твоём посту два взаимоисключающих параграфа и думаю
что тебе еще многому надо научиться и много чудесных чудес предстоит узнать.


Классик
О сколько нам открытий чудных
Готовят просвещенья дух
И опыт, сын ошибок трудных,
И гений, парадоксов друг,
И случай, бог изобретатель...


Good luck!
...
Рейтинг: 0 / 0
Генератор простых чисел (до 10^9 за 5 сек)
    #38930689
SerVal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonSerVal, тема CUDA/NVidia очень интересна и многогранна.
Но я прошу обсудить эти нюансы отдельным топиком.
У нас уже сформировалось комьюнити вокруг C/C++ ...

Ну, как скажете.. сформировалось так сформировалось. Через годик загляну.
Всем привет и успехов в решении научных проблем.
...
Рейтинг: 0 / 0
Генератор простых чисел (до 10^9 за 5 сек)
    #38931675
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Заглох топик пока. Я понял что у меня - пробелы в области Теории Чисел.
Читаю в бумажном варианте. И.М. Виноградова.

Подытоживая.

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

Пишите и коммитьте если что.
...
Рейтинг: 0 / 0
25 сообщений из 402, страница 12 из 17
Форумы / C++ [игнор отключен] [закрыт для гостей] / Генератор простых чисел (до 10^9 за 5 сек)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]