Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток господа. Смотрю так буйно бились и подостыли?) Я какоето время тоже простыми числами интересуюсь, вот появилось пару недель свободных засел.. Бегло пролистал топик, пока мулач Аткина. Домучал его х32 до 6FFFFFFF размерности.. дальше Аут оф мемори.. а вы вроде все х32 значения им считали? упаковывали байты в биты? (типа по памяти в раз экономи) на производительность пофигу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2016, 21:07 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
VodoleYka, Битовая карта всех 32-битных чисел занимает 4Г/8бит=512 МБ (без упаковки). Такое помещается обычно в памяти, если конечно не совсем древний комп. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2016, 23:54 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, да не древний.. один 7ая корка,16ГБ . 2ой 2ух процессорный ксенон 8гб.. та реализация Аткина что у меня попалась 1 бит занимает 1 байт.(с вики стянул потом допиливал..) т.е в моем случае как раз 4ГБ памяти и надо. и на переполнение 4*x*x+y*y наступил.. пол часа в отладке сидел, не мог понять почему таблицы портятся.. Но это скорее мои личные проблемы. я незнаю может комуто будет интересно, страдал фигней, оптимизировал тривиальный брут простых чисел. Кину сюда на всяк случай, может комуто сгодится. Вроде оптимальней некуда Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2016, 07:18 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
и да.. 1. таблица с праймами.. должна быть 0-терминейт... вобщем по хорошему сразу файл с нулями. 2. и чтоб избегать 2ой проверки при каждом вызове isPrime_asm на предмет prime mod 5.. при старте таблу заполняю сраз до 5ки включительно. Производительность даже в таком виде конечно удручает.. на Коре и7.. гдето 70-80 дней 32бит праймы собираются.. но это скорее для эксперементов, а не для работы ЗЫ. сори за дабл пост, но чет не вижу.. тут свои посты править можно после публикации? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2016, 07:26 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
VodoleYka, Посты здесь править нельзя, к сожалению. Никакой оптимизацией у тебя и не пахнет, причем алгоритм - перебора по таблице, причем до конца таблицы тоже вряд ли эффективен. И конечно, чтобы проверить на простоту N - эту таблицу надо сначала всю заполнить, хотя бы до sqrt(N) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2016, 10:58 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
Siemargl, оптимизация как бы по скорости.. все в регистрах. это раз. как бы профилировка по скорости. перебор до конца таблицы и вычисления sqrt тоже спорный вопрос, если кому надо добавляем ще 1 параметр, и еще одну проверку после loasd .. ток в так как простые числа идут 1 к 10. и множитель в 90 проц случаев находится быстрее чем + еще одна проверка.. и на каждом этапе вычислять корень. можно конечно его вычислять типа раз в 1000 итераций.. вобщем это на любителя. Допилил Аткина.. судя по всему Done save primes 203 280 221 09:12:20.. верный результат.. ибо сошелся с primesieve-5.7.0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2016, 11:12 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
VodoleYkaDone save primes 203 280 221 09:12:20 Если это 9 часов, то это многовато. Все должно быть в пределах нескольких минут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2016, 11:57 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
VodoleYkaSiemargl, оптимизация как бы по скорости.. все в регистрах. это раз. как бы профилировка по скорости. перебор до конца таблицы и вычисления sqrt тоже спорный вопрос, если кому надо добавляем ще 1 параметр, и еще одну проверку после loasd .. ток в так как простые числа идут 1 к 10. и множитель в 90 проц случаев находится быстрее чем + еще одна проверка.. и на каждом этапе вычислять корень. можно конечно его вычислять типа раз в 1000 итераций.. вобщем это на любителя. Допилил Аткина.. судя по всему Done save primes 203 280 221 09:12:20.. верный результат.. ибо сошелся с primesieve-5.7.0 Какие однако познания в оптимизации от дельфиста =) Открываем сайт http://primesieve.org/#implementation и читаем, что сделали грамотные люди. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2016, 12:26 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyVodoleYkaDone save primes 203 280 221 09:12:20 Если это 9 часов, то это многовато. Все должно быть в пределах нескольких минут. 9мин 12 сек 20 милисек. то я криво формат указал при выводе.. сори. касательно быстрого извлечения корня и возведения в квадрат , а также умнжоения и деления.. простите.. но я вкурсе. я на асме с 94го года.. я вобщемто не спорю.. не нравится.. не берите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2016, 13:38 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
VodoleYkaи на каждом этапе вычислять корень. можно конечно его вычислять типа раз в 1000 итераций.. вобщем это на любителя. Корень можно заменить на возведение в квадрат. Суть корня в том что проверку по таблице нужно останавливать когда p i > sqrt(N) или по другому p i *p i > N где p i очередное простое, N проверяемое. Для 32бит таблицу простых надо всего до 65536. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2016, 13:40 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
Dima TVodoleYkaи на каждом этапе вычислять корень. можно конечно его вычислять типа раз в 1000 итераций.. вобщем это на любителя. Корень можно заменить на возведение в квадрат. Суть корня в том что проверку по таблице нужно останавливать когда p i > sqrt(N) или по другому p i *p i > N где p i очередное простое, N проверяемое. Для 32бит таблицу простых надо всего до 65536. ок @loop: lodsd //load prime from tlb ---------- cmp eax,FFFF ja @prime ---------- test eax,eax jz @prime так легче? без корня. потеря в скорости не существенная. вместо FFFF sroot можно если хотите считать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2016, 13:53 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
типа при самом фиговом варианте обработается 6488+54 праймов.. 1..2^8 = 54 2^8..2^16 =6488 2^16..2^24=1 071 329 2^24..2^32=202 202 350 total 2^32 =203 280 221 вы лучше подскажите, кто знает сколько праймов в диапазоне 2^32..2^64. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2016, 13:57 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
VodoleYkaтак легче? Не знаю. По времени расчета какие изменения? Можно квадраты не считать каждый раз, а добавить таблицу квадратов и сравниваться с ней. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2016, 14:00 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
VodoleYkaвы лучше подскажите, кто знает сколько праймов в диапазоне 2^32..2^64. в 2^64 примерно 415 828 534 307 635 091 простых (тут прикидывали 17471253 ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2016, 14:05 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
Dima T, cmp eax, $FFFF //0:00:37 vs 0:00:03 ja @prime считай в 40 раз. при одинаковых условиях при расчете 1го 1кк чисел.. (не праймов.. просчет чисел от 0 до 1кк) и по идее дальше должна еще увеличиваться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2016, 14:18 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
Еще можно ускорить перебирая не все подряд, а пропуская кратные первым простым 2,3,5,7..., т.е. построить таблицу смещений. Например для 2,3,5 таблица 4,2,4,2,4,6,2,6. т.е. проверять значения 5,7,11,13,17,19... Тут генератор 17479728 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2016, 14:26 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
Dima T, это видел. я собственно этот код для себя писал. он все равно сильно много не насчитает. поэтому вылизывать его можно конечно, для перфекционизма, но как рабочий инструмент он почти бесполезен. не ну можно переползти на BigMath и считать дальше.. но смысл. я тут кстати.. ввиде маразма запустил тест 1024 RSA modulus на праймах х32.. чуть позже сообщу время.. на глаз.. гдето 22ч либу там скрещивал сам.. там половина асм кода.. но там еще оптимизировать и оптимизировать.. но по крайней мере бОльшая часть кода там по уму сделана. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2016, 14:33 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
Можно по минимуму, четные пропускать. Уже в два раза меньше проверять. В том коде главная проблема в div. Деление достаточно тяжелая операция. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2016, 14:41 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
Dima T, ну совсем меня за лоха то не держи? и 5 пропускается в том числе.. четные просто inc 2 числам.. а 5 ща mod но можно еще ускорить, но повторюсь.. сильно не вижу смысла. я просто кинул кусок кода на асме, который в плане скорости и размера очень мал. поверь.. я в своей жизни на говнокода насмотрелся. я собственно последние лет 10 ток кейгены и пишу.. поэтому и гремучая смесь делфи+асм ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2016, 14:51 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
Dima T, я тебе скажу по секрету.. там самая тяжелая операция это lodsd ... а регистровый div он еще на конвеере полу обрабатывается.. а вот работа с памятью.. в частности использования переменных... вот это самые большие тормоза. но никуда без таблицы праймов не дется. когдато у меня была табла про такты которые тратит проц на обработку комманды.. гдето пол года назад пытался найти свежую, уже не публикуют вроде ибо стало все сложно. ибо CISCO RISC процы уже отсутсвуют.. ща они все гибридные ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2016, 14:55 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
VodoleYkaработа с памятью.. в частности использования переменных... вот это самые большие тормоза. но никуда без таблицы праймов не дется. для расчета 2^32 надо всего 6500 чисел или ~26 Кб под таблицу. Она целиком в кэш проца влезет и не будет никаких обращений в память. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2016, 15:42 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
VodoleYkaDima T, cmp eax, $FFFF //0:00:37 vs 0:00:03 ja @prime считай в 40 раз. при одинаковых условиях при расчете 1го 1кк чисел.. (не праймов.. просчет чисел от 0 до 1кк) и по идее дальше должна еще увеличиваться. Затестил, таблица квадратов дает ускорение еще на порядок. Диапазон 2^16..2^24 ФункцияВремяis_prime()14.4 сек.is_prime2()1.2 сек. Исходник Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2016, 16:50 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
Dima T, кстати.. о таблице праймов.. там на хабре статейка была.. на предмет того чтоб не хранить прайм, а хранить шаг между соседом. там получается что всего около 10ка праймов находятся на расстоянии больше 256 байт.. т.е можно просто хранить не 2 3 5 7 а 2 2 2 и т.д.. для тех, где расстояние больше тратить 3 байта типа 0 хх хх, так базу можно на 25 проц ужать, вобщемто без потери скорости работы.. все равно праймы друг за другом перебираются ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2016, 17:02 |
|
||
|
Генератор простых чисел (до 10^9 за 5 сек)
|
|||
|---|---|---|---|
|
#18+
В 4 раза ужимается. Где-то в топике выше обсуждали. Одного байта достаточно до 2^64. Максимум разницу 300 с небольшим находил. Дополнительно еще на 2 делил, т.к. разница всегда четная. Так в 1 байт шаг до 512 влазит. Таблица квадратов не нужна, с умножением время точно такое же Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2016, 17:15 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39348443&tid=2017971]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
157ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 276ms |
| total: | 531ms |

| 0 / 0 |
