Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
Владимир2012, Из математических пакетов как по мне лучший - Mathematica http://rutracker.org/forum/viewtopic.php?t=4337743 Это целая вселенная ... /попасть в нее легко .../ PS: Кроме того на просторах inet имеется несколько несколько математических пакетов с исходниками /десятки тысяч математических алгоритмов .../. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2015, 19:39 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
Вывихнул мозг асинхронностью очередной раз. Пытаюсь шаги цикла к next_prime() приделать. Пока результаты от 1 до 10^9 такие Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 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 сек Аткина как-то обогнать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2015, 19:49 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
Владимир2012 Dima T не обижайся. То чего ты хочешь достичь - "Лично мне охота Аткина обогнать, посчитать за <0,5 сек диапазон до 10^9." Как по мне, то лучше "ляг поспи и все пройдет" /хотя тебе виднее .../ Не обижаюсь, обгоню :) У того же автора Эратосфен в три раза быстрее моего (0,6 сек). Он, как ты пишешь, 15 лет занимался проблемой, а я всего вторую неделю. Все еще впереди. PS Туда специально не заглядываю, не люблю списывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2015, 19:58 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
Dima TОн, как ты пишешь, 15 лет занимался проблемой, а я всего вторую неделю. Все еще впереди. Да не я это писал ... Всего лишь после ссылки привел выдержку из комментов к статье ... PS: Ну тогда подключаем thread, SSE / http://en.wikipedia.org/wiki/Streaming_SIMD_Extensions /, ... ... С Богом /удачи ни когда не желаю - для не верующих/. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2015, 20:12 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
Владимир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, но проще в реализации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2015, 20:55 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
maytonБарлон. Я выпал в осадок. Ты мне сначала лекции прочитай по кольцам вычетов а потом уж факторизация....Вычеты по простому модулю... Ну можно немножко упрощенно считать, что это остатки от деления на это простое число. Их можно складывать и умножать, так же беря остаток от деления результата. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2015, 06:07 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
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, и последовательно возводя его в степени 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2015, 07:05 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
Так всё-таки задача обсуждения обогнать реализацию предложенную соавтором Аткина ? PS кстати, кто-нибудь узнал как тот сайт факторизует 60значные числа в течении одной секунды ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2015, 08:01 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
Почитал вышеупомянутый сайт 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 сек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2015, 09:44 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
Дима. Меня интересует продолжение расчёта за границей Эратосфена. У тебя есть рабочий макет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2015, 10:29 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
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 считалась (+-*/%). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2015, 10:49 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
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. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2015, 12:09 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
SerValExec time : 24.6 seconds. Всего лишь в 100 раз медленнее одного ядра моего проца :) Код: plaintext 1. 2. 3. Можешь затестить у себя Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Остальное тут https://sourceforge.net/p/primegen/code/HEAD/tree/trunk/DimaT/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2015, 12:37 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
SerValFirst prime : 4214924369 Last prime : 4294924289 ============= Exec time : 24.6 seconds. Лажа какая-то! Он что 24 секунды расчитывал 4 294 924 289 - 4 214 924 369 = интервал 79 999 920 ? Или мы здесь все присутствующие неверно истолковали этот отчётик? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2015, 12:53 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
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 раз быстрее чем на ЦПУ. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2015, 13:19 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
maytonИли мы здесь все присутствующие неверно истолковали этот отчётик? Всё верно. Что программа выдала, то я сюда и вставил. Смысл программы в проверке и сравнении скорости выполнения одного и того же на различных видеокартах: Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2015, 13:31 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
SerValА поскольку "качество" программирования у меня одинаковое и для CPU и для ГПУ, то видно, что на ГПУ всё выполняется в 20 раз быстрее чем на ЦПУ. :) Мне-то это что дает? Я качество алгоритма улучшаю. Количество (время выполнения) это просто мера сравнения на одном и том же железе. И не факт что мой код взлетит на твоем ГПУ, там нужно сильное распараллеливание алгоритма, а у меня однопоточный. Можешь затестить действительно ли всё в 20 раз быстрее на ГПУ :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2015, 13:43 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
SerVal, тема CUDA/NVidia очень интересна и многогранна. Но я прошу обсудить эти нюансы отдельным топиком. У нас уже сформировалось комьюнити вокруг C/C++ для классической архитектуры, и распыляться на видеокарты нет особого смысла. Тем более что векторы интересов у нас идут намного дальше чем просто хардварная оптимизация. Мы еще не исчерпали алгоритмы и проверки гипотез математики. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2015, 14:02 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
Dima TМне-то это что дает? Я качество алгоритма улучшаю. Это какбэ даёт понимание, что сколько не улучшай качество алгоритма на одном процессоре, 2048 процессоров Вам не обогнать. Разумеется, если эти процессоры не у такого "программиста" как я :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2015, 14:11 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
SerValDima TМне-то это что дает? Я качество алгоритма улучшаю. Это какбэ даёт понимание, что сколько не улучшай качество алгоритма на одном процессоре, 2048 процессоров Вам не обогнать. Разумеется, если эти процессоры не у такого "программиста" как я :) Эта оценка должна быть пересмотрена с учётом возможности параллелизма и закона Амадала. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2015, 14:15 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
SerValЭто какбэ даёт понимание, что сколько не улучшай качество алгоритма на одном процессоре, 2048 процессоров Вам не обогнать. Разумеется, если эти процессоры не у такого "программиста" как я :) Наивный. Если бы все алгоритмы легко паралеллились, то в ЦПУ давно было бы по несколько тысяч ядер, интел давно предлагал 800 ядерный проц выпустить, прототипы показывал, только он нафиг не нужен, т.к. 4 ядра занять нечем. Почитай про Закон Амдала , поймешь что сначала надо мозг сломать об распараллеливание алгоритма, а потом уже его в ГПУ отправлять ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2015, 14:21 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
Dima TНаивный. Если бы все алгоритмы легко паралеллились, то в ЦПУ давно было бы по несколько тысяч ядер, интел давно предлагал 800 ядерный проц выпустить, прототипы показывал, только он нафиг не нужен, т.к. 4 ядра занять нечем. Ничей мозг ломать не надо. Всё распараллелено до нас. Ещё на Cray и IBM. Да и у нас в России(в институте Стеклова) давно есть параллельные библиотеки для ГПУ.. но нам они их не дадут... чтобы врагам не достались. :) Intel обещал 80 ядерный проц. И не выпустил потому, что скорость доступа к памяти как была 20 лет назад, так и осталась. Поэтому и добавляет в процессоры немыслимые кэши 2-го, 3-го, 4-го уровня. * про Амдала я слышал. ** за прошедший год появилась хорошая бесплатная библиотека параллельных алгоритмов для С++ AMP. намедни ParallelRadixSort на массиве в 400 MB. Зверь! Глазом не успеваешь моргнуть. ***** А Ваша программа шустренько работает... впечатляет. :) (может в выходные и свою маленько оптимизирую). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2015, 14:59 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
SerValНичей мозг ломать не надо. Всё распараллелено до нас. Ещё на Cray и IBM. * про Амдала я слышал . SerVal. Я читаю в твоём посту два взаимоисключающих параграфа и думаю что тебе еще многому надо научиться и много чудесных чудес предстоит узнать. Классик О сколько нам открытий чудных Готовят просвещенья дух И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель... Good luck! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2015, 15:45 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
maytonSerVal, тема CUDA/NVidia очень интересна и многогранна. Но я прошу обсудить эти нюансы отдельным топиком. У нас уже сформировалось комьюнити вокруг C/C++ ... Ну, как скажете.. сформировалось так сформировалось. Через годик загляну. Всем привет и успехов в решении научных проблем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2015, 15:48 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
Заглох топик пока. Я понял что у меня - пробелы в области Теории Чисел. Читаю в бумажном варианте. И.М. Виноградова. Подытоживая. Сама идея хранения длинных простых чисел для меня уже не особо интересна. Попробую изучить те алгоритмы которые были приведены в топике или хотя-бы понимать проблематику и терминологию которая уже звучала. Пишите и коммитьте если что. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2015, 11:50 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38929831&tid=2017971]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
194ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 13ms |
| total: | 296ms |

| 0 / 0 |
