powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Генератор простых чисел (до 10^9 за 5 сек)
25 сообщений из 402, страница 13 из 17
Генератор простых чисел (до 10^9 за 5 сек)
    #38932204
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Итоги не очень. Слил все идеи воедино, скорость особо не выросла, получилось только память поэкономить.
Переименовал немного, теперь:
next_prime() это последняя x64 версия
next_prime32() это старый next_prime()
next_prime64() тот же какой был, прототип текущего next_prime()

Что получилось оптимизировать:
1. Память: под решето 64кб и от 16 кб под кэш для инициализации. 16 кб хватает до ~10^10, максимум 196 Мб для 10^19
2. Пропуск кратных 2,3 немного ускорил, дальше наращивать - бесполезно, тормоза только возрастают.
3. Возможна многопоточность, только надо изначально инициализировать кэш next_prime(MAX) (позже попробую обогнать Аткина на 4 ядрах)
Результаты на линукс x64 (g++ nextprime.cpp -O2)Test(0M...1000M): next_prime32()
count 50847534 primes. time 1974 msec speed 25758K/sec OK

Test(0M...1000M): next_prime64()
count 50847534 primes. time 2045 msec speed 24864K/sec OK

Test(0M...1000M): next_prime()
count 50847534 primes. time 1741 msec speed 29205K/sec OK

Test(4000M...6000M): next_prime()
count 89583557 primes. time 3540 msec speed 25306K/sec OK

Test(4000M...6000M): next_prime64()
count 89583557 primes. time 4314 msec speed 20765K/sec OK
При компиляции под x32 тормоза в 1,5 раза для x64тоже самое MSVC2008 x32Test(0M...1000M): next_prime32()
count 50847534 primes. time 2143 msec speed 23727K/sec OK

Test(0M...1000M): next_prime64()
count 50847534 primes. time 2764 msec speed 18396K/sec OK

Test(0M...1000M): next_prime()
count 50847534 primes. time 2804 msec speed 18133K/sec OK

Test(4000M...6000M): next_prime()
count 89583557 primes. time 5768 msec speed 15531K/sec OK

Test(4000M...6000M): next_prime64()
count 89583557 primes. time 5778 msec speed 15504K/sec OK


Максимума разрядности x64 достигнуть не удалось. Чуть раньше останавливается из-за превышения разрядности во время заполнения решета.
Максимум получил 18 446 744 030 759 878 627 до 2^64 не дошел на 42 949 750 784.

Исходники next_prime.h зафиксировал. Там же nextprime.cpp тесты

PS Потестил корректность сколько смог, рандомно результаты между собой посравнивал. Работает. Но primesieve говорит что в диапазоне 4...6 млрд. на одно число меньше. Поразбираюсь позже.
...
Рейтинг: 0 / 0
Генератор простых чисел (до 10^9 за 5 сек)
    #38932223
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Tprimesieve говорит что в диапазоне 4...6 млрд. на одно число меньше. Поразбираюсь позже.
Нашел причину. Ошибка в тестах была. Поправил. Проверил до 10^10 количество совпадает.
...
Рейтинг: 0 / 0
Генератор простых чисел (до 10^9 за 5 сек)
    #38932312
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А тут кастинг обязательно указывать?

Код: plaintext
1.
if (x > (uint64_t)18000000000000000000) {... 
...
Рейтинг: 0 / 0
Генератор простых чисел (до 10^9 за 5 сек)
    #38932337
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonА тут кастинг обязательно указывать?

Код: plaintext
1.
if (x > (uint64_t)18000000000000000000) {... 


Не знаю как правильно написать. MSVC нормально понимает без (uint64_t).
g++ варнинги писал, добавил (uint64_t) - ничего не поменялось, затестил - понимает правильно, оставил так.
...
Рейтинг: 0 / 0
Генератор простых чисел (до 10^9 за 5 сек)
    #38932813
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделал пример многопоточного использования multi_prime.cpp

В 4 потока на 4 ядрах посчитал до 10^9 за <0,5 сек :)
Код: plaintext
1.
2.
Test(0M...1000M): next_prime() multithread
count 50847534 primes. time 472 msec speed 107727K/sec OK



PS Сделал потоки на WinAPI, под линуксом не соберется.
...
Рейтинг: 0 / 0
Генератор простых чисел (до 10^9 за 5 сек)
    #38932829
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TВ 4 потока на 4 ядрах посчитал до 10^9 за <0,5 сек :)
Код: plaintext
1.
2.
Test(0M...1000M): next_prime() multithread
count 50847534 primes. time 472 msec speed 107727K/sec OK

Поздравляю!
Какие ближайшие планы?
...
Рейтинг: 0 / 0
Генератор простых чисел (до 10^9 за 5 сек)
    #38932852
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TСделал пример многопоточного использования multi_prime.cpp

В 4 потока на 4 ядрах посчитал до 10^9 за <0,5 сек :)
Код: plaintext
1.
2.
Test(0M...1000M): next_prime() multithread
count 50847534 primes. time 472 msec speed 107727K/sec OK



PS Сделал потоки на WinAPI, под линуксом не соберется.
Макрос есть. __WIN32 или что-то в этом роде.
...
Рейтинг: 0 / 0
Генератор простых чисел (до 10^9 за 5 сек)
    #38933731
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Навел порядок, причесал исходники.
Сделал два файла с x32 и x64 версиями next_prime() внутри:
next_prime32.h
next_prime64.h

От x64 в реальности польза сомнительная, все равно тормозит на больших числах, и на малых при x32 компиляторе, поэтому сделал отдельно x32 вариант, для практических задач ее хватит (по крайней мере мне).
Настроил x32 на минимальный расход памяти 22.5 кб на расчет любого до 2^32.

Исходники тут

PS mayton, исправь, пожалуйста, ссылку в первом посте на действительно последний вариант.
PPS egorych, ты был прав 17466144 :)
...
Рейтинг: 0 / 0
Генератор простых чисел (до 10^9 за 5 сек)
    #38933809
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пощупал gmp. Интересно а как проверить некорректную конверсию строка-число? Пока не понял.

Код: 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.
36.
37.
38.
39.
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
#include <time.h>
#include <math.h>

#include "gmp.h"

using namespace std;


int main(int argc, char* argv[], char* env[]) {

	if (argc == 1) {
		printf("\nGreathest Common Divisor 1.0 (gcd) (c) sql.ru\n");
		printf("Usage:\n\n");
		printf(" gcd [n1 [n2]]\n\n");
		return 0;
	} else {
		mpz_t n1;
		mpz_t n2;
		if (argc == 3) {
			mpz_init(n1);
			mpz_init(n2);
			

			mpz_set_str (n1, argv[1], 10);
			gmp_printf ("n1 = %Zd\n", n1);

			mpz_set_str (n2, argv[2], 10);
			gmp_printf ("n2 = %Zd\n", n2);

			mpz_clear(n1);
			mpz_clear(n2);

		}
	}

}



В доке пишут. https://gmplib.org/manual/Assigning-Integers.html
— Function: int mpz_set_str (mpz_t rop, const char *str, int base)

Set the value of rop from str, a null-terminated C string in base base. White space is allowed in the string, and is simply ignored.

The base may vary from 2 to 62, or if base is 0, then the leading characters are used: 0x and 0X for hexadecimal, 0b and 0B for binary, 0 for octal, or decimal otherwise.

For bases up to 36, case is ignored; upper-case and lower-case letters have the same value. For bases 37 to 62, upper-case letter represent the usual 10..35 while lower-case letter represent 36..61.

This function returns 0 if the entire string is a valid number in base base. Otherwise it returns -1.

Получается что я не могу различать присвоение "0" и неуспех.
...
Рейтинг: 0 / 0
Генератор простых чисел (до 10^9 за 5 сек)
    #38933811
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TPS mayton, исправь, пожалуйста, ссылку в первом посте на действительно последний вариант.

Ну... я не совсем понял что на что я должен исправить.
...
Рейтинг: 0 / 0
Генератор простых чисел (до 10^9 за 5 сек)
    #38933838
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПолучается что я не могу различать присвоение "0" и неуспех.
Затести
Код: plaintext
1.
2.
3.
	printf("%d ", mpz_set_str(x,"mayton",10));
	printf("%d ", mpz_set_str(x,"0",10));
	printf("%d ", mpz_set_str(x,"1",10));


результат-1 0 0
Там есть mpz_init_set_str() - это совмещенные mpz_init() и mpz_set_str()


maytonНу... я не совсем понял что на что я должен исправить.
так поправьэту ссылку убрать, т.к. версия в итоге оказалась хоть и рабочей, но промежуточной, да и в sourceforge она тоже есть.
Dima T http://www.sql.ru/forum/1149455/generator-prostyh-chisel-do-10-9-za-5-sek?mid=17451792#17451792

а так написать
next_prime32.h
next_prime64.h
Тесты и примеры использования
...
Рейтинг: 0 / 0
Генератор простых чисел (до 10^9 за 5 сек)
    #38933984
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вобщем я решил взять некую паузу и вернуться к истокам. С Эвклиду. Этот старый бородач
создал алгоритм которому нет аналогов в мире в соотношении простоты и полезного эффекта.
Я имею в виду НОД (в англоязычном варианте GCD - Greatest Common Divisor).

Описывать шаги не буду. Вики описала много. Добавлю свои наблюдения + разный
материал из разных источников.

Некоторые свойства.

Если

Код: plaintext
1.
gcd(a,b) = 1

то числа a и b называются взаимно простые. Например 3 и 5.
Взаимно простые образуют несократимую дробь a/b.

Для трех аргументов утверждение взаимной простоты не влечёт попарную простоту.

Если gcd(a,b,c) = 1 то вовсе не факт что gcd(a,b).... e.t.c. должно быть равно 1.

Далее

Код: plaintext
1.
gcd(a,a)=a

- число является делителем по отношению к группе таких-же

И наконец свёртка:

Код: plaintext
1.
gcd(a,b,c,d) = gcd(gcd(gcd(a,b),c),d)



Последний метод возможно имеет элегантное функциональное описание.

Почему я взялся за Эвклида? Ответ - простота. И фундаментальные отсылки которые ведут к
постоянной оценке кратности. Без этого алгоритма не упрощаются рациональные дроби.
gcd упрощает дроби не привлекая primes в явном виде. И эта особенность - привлекает.
Существуют также связи Эвклида с непрерывными дробями и с функцией Эйлера.
(Из книги Виноградова.)

Книгу пока неосилил но всё будет постепенно.
...
Рейтинг: 0 / 0
Генератор простых чисел (до 10^9 за 5 сек)
    #38934097
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonВобщем я решил взять некую паузу и вернуться к истокам. С Эвклиду. Этот старый бородач
создал алгоритм которому нет аналогов в мире в соотношении простоты и полезного эффекта.
Я имею в виду НОД (в англоязычном варианте GCD - Greatest Common Divisor).
На отличную мысль натолкнул, давно ломал голову над заменой GUID`у в ограниченной распределенной системе.

Задача: имеем N несвязанных БД, документы из которых в итоге сливаются в одну. Например клиенты банка в оффлайне готовят платежки, затем пересылают в банк, каждой платежке надо присвоить уникальный id. Пример надуманный, для общего понимания задачи.
При ожидаемом общем количестве записей менее 1 млрд. обычного int с запасом хватает, но т.к. распределенная система невозможно гарантировать уникальность, поэтому счетчики не подходят.
GUID задачу решает, но тормоза из-за размера, 16 байт на id: база быстро пухнет от хранения и выборки в разы замедяляются.

Решение: выдаем каждой БД уникальное простое число (шаг счетчика) не меньше заданного (это константа, минимум), далее счетчиком генерим последовательность с этим шагом. Остатается только пропустить те значения где при разложении на множители есть простые больше минимума.
Т.е. задаем какой-то минимум для всей системы, например 1000, и дальше выдаем простые последовательно каждой базе (1009,1013,1019... тысячной базе 9433) по сути это ID базы. Например база с ID 1013 генерит последовательность 1013, 2026, 3039 ... пропуская пересечения с другими последовательностями (например 1022117 = 1009*1013). Остается сделать проверку что нет простого делителя больше заданного минимума.
В итоге получаем боле-мене равномерное использование всего диапазона 2^32 Побочный эффект по конкретному значению можно вычислить ID базы которая его сгенерила.

Только придумал, не тестил, но вроде должно взлететь. Надо еще над выбором минимума подумать.

PS была мысль раздавать диапазоны id (например 1000-1999, 2000-2999, 3000-3999 ...) и по мере использования выдавать следующий, оно более линейно, но тоже не идеально, диапазон кончился, связи с раздающим нет, все встало.
...
Рейтинг: 0 / 0
Генератор простых чисел (до 10^9 за 5 сек)
    #38934116
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T Решение: выдаем каждой БД уникальное простое число
Чего уж там мелочиться.
Сделай вэб сервис, который выдаем уникальный ID для зарегитрировавшегося на нем.
И все!
Осталось за малым, то чтобы этот стандарт приняли все разработчики.
Собственно по такому принципу и MAC адреса распределяются.
Так как после разработки device, фирма должна обратиться к некой организации, которая отвечает
за распределение MAC ... и получить лицензию на допустимый диапазон MAC для производимых device.

PS: Далее выдержка из https://ru.wikipedia.org/wiki/GUID
Алгоритм, который Microsoft использовала для генерации GUID, был широко раскритикован.
В частности, в качестве основы для генерации части цифр GUID использовался MAC-адрес сетевого
адаптера, что означало, например, что по данному документу MS Word
(также получающему при создании свой уникальный GUID) можно было определить компьютер, на
котором он был создан. Позже Microsoft изменила алгоритм таким образом, чтобы
он не включал в себя MAC-адрес.
...
Рейтинг: 0 / 0
Генератор простых чисел (до 10^9 за 5 сек)
    #38934140
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012, чтобы флудить не в тему есть отдельный форум .
...
Рейтинг: 0 / 0
Генератор простых чисел (до 10^9 за 5 сек)
    #38934208
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потестил. Не взлетело. Слишком много пропускать надо, 50-70% пропусков. Дорогая плата за расширяемость. Если дополнительно максимальное простое ограничить, то пропусков значительно меньше, но с фиксированным максимумом проще классическое решение: задаем уникальное исходное значение <max и увеличиваем счетчик шагом max.
...
Рейтинг: 0 / 0
Генератор простых чисел (до 10^9 за 5 сек)
    #38934253
?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
?
Гость
[quot Dima T
Задача: имеем N несвязанных БД, документы из которых в итоге сливаются в одну. Например клиенты банка в оффлайне готовят платежки, затем пересылают в банк, каждой платежке надо присвоить уникальный id. Пример надуманный, для общего понимания задачи.
При ожидаемом общем количестве записей менее 1 млрд. обычного int с запасом хватает, но т.к. распределенная система невозможно гарантировать уникальность, поэтому счетчики не подходят.
GUID задачу решает, но тормоза из-за размера, 16 байт на id: база быстро пухнет от хранения и выборки в разы замедяляются.

Решение: выдаем каждой БД уникальное простое число (шаг счетчика) не меньше заданного (это константа, минимум), далее счетчиком генерим последовательность с этим шагом. Остатается только пропустить те значения где при разложении на множители есть простые больше минимума.
....
[/quot]
Что ж так сложно то...
В первой базе генерим id вида k*N+0, во второй - k*N+1, в третьей k*N+2, ..., в N-ной базе - k*N+(N-1).
...
Рейтинг: 0 / 0
Генератор простых чисел (до 10^9 за 5 сек)
    #38934308
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
?Что ж так сложно то...
В первой базе генерим id вида k*N+0, во второй - k*N+1, в третьей k*N+2, ..., в N-ной базе - k*N+(N-1).
Уже написал что к этому все приходит 17505147
Тут жесткое ограничение по N, т.е. с появлением N+1 базы будет большая проблема.
Хотел избавиться от ограничения по N, получается непрактично.
...
Рейтинг: 0 / 0
Генератор простых чисел (до 10^9 за 5 сек)
    #38934312
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TТ.е. задаем какой-то минимум для всей системы, например 1000, и дальше выдаем простые последовательно каждой базе (1009,1013,1019... тысячной базе 9433) по сути это ID базы. Например база с ID 1013 генерит последовательность 1013, 2026, 3039 ... пропуская пересечения с другими последовательностями (например 1022117 = 1009*1013). Остается сделать проверку что нет простого делителя больше заданного минимума.
В итоге получаем боле-мене равномерное использование всего диапазона 2^32 Побочный эффект по конкретному значению можно вычислить ID базы которая его сгенерила.

Только придумал, не тестил, но вроде должно взлететь. Надо еще над выбором минимума подумать.

PS была мысль раздавать диапазоны id (например 1000-1999, 2000-2999, 3000-3999 ...) и по мере использования выдавать следующий, оно более линейно, но тоже не идеально, диапазон кончился, связи с раздающим нет, все встало.
Данную задачу можно решить 1000 способами. Но самое главное - дать точный ответ на вопрос
какие требования ты выставляешь к последовательности.

Самый последний вариант (диапазоны id) - вполне себе рабочий. Используй его. А для линейной гистограммы
можно сделать расширение разрядной сетки до 128 бит. Потом shuffle всех битов по одной постоянной схеме
или еще сделать несколько раундов различных операций с полученным целым.

Данная схема вполне рабочая но не криптостойкая.
...
Рейтинг: 0 / 0
Генератор простых чисел (до 10^9 за 5 сек)
    #38934320
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012 Чего уж там мелочиться.
Сделай вэб сервис, который выдаем уникальный ID для зарегитрировавшегося на нем.
И все!
Осталось за малым, то чтобы этот стандарт приняли все разработчики.
Собственно по такому принципу и MAC адреса распределяются.

Это неверно. Дима-ж пишет что сеть БД несвязная. Тоесть должен сущестовать децентрализованный
но раздельный механизм генерации GUID.

Никаких веб-сервисов.

Тоесть это 3-й тип систем по теореме Брюера. У нее есть только availability + partition tolerance (AP).

А отсылка к МАС-вообщем-то не по сути. Есть много способов перепрограммировать механизм
генерации GUID и МАС/sysdate/IP это просто один из множества способов получить начальное состояние.

P.S. Кстати поведение протокола с МАС+GUID совершенно недетрминированно в случае если на сервере
мы меняем местами две сетевушки в слотах.
...
Рейтинг: 0 / 0
Генератор простых чисел (до 10^9 за 5 сек)
    #38934342
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonДанную задачу можно решить 1000 способами. Но самое главное - дать точный ответ на вопрос
какие требования ты выставляешь к последовательности.
Логи надо писать в моей распределенной системе сообщений: кто-кому-когда-чего. В идеале должно фоном копиться и на сервер скидываться по мере возможности, лог надо вести за 1-2 последних месяца, в этом промежутке времени желательно чтобы сообщение имело уникальный ID, чтобы просто сводить логи отправителя и получателя. Сейчас каждый сам генерит ID сообщений, для передачи хватает т.к. срок жизни в кэше получателя = время доставки + минута, если совпало в этом промежутке - есть механизм смены ID, можно конечно извратиться и их использовать, но копаться в таких логах неудобно будет.

Сообщений между всеми меньше миллиона в месяц. Т.е. в идеале ID должно быть 7-8 разрядное число.

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

PS: mayton.
Знаешь я далеко не льстец /и тем более не грубиян/.
Но +5 за твой последний ответ.
Таким бы таким тоном и конструктивом шли обсуждения, то было бы просто здорово ...
/однозначно буду перенимать такой подход/
...
Рейтинг: 0 / 0
Генератор простых чисел (до 10^9 за 5 сек)
    #38934439
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012GUID привел в пример потому, что на форумах не встречал ни каких других подходов к получению
уникального кода.
Выше 17505369 классический подход генерации ID для распределенных БД.
По большому счету все подходы (в т.ч. GUID) сводятся к тому чтобы выдать каждому генератору какую-то уникальную константу, к которой генератор добавляет свое уникальное число по заданному алгоритму. Т.е. константа определяет диапазон в котором работает генератор. А дальше конкретные реализации, связанные с оптимизацией ради уменьшения размера ID. Все оптимизации сводятся к ограничению количества констант и диапазона в котором может работать конкретный генератор.

Разрядности 128 бит GUID`а достаточно чтобы не заморачиваться что в один прекрасный день кончатся ID или невозможно будет выдать очередную константу новой базе, но во-первых базы раздуваются в разы по сравнению с int, как следствие в разы замедляются выборки. И во-вторых банальное желание покопаться руками в базе (в поисках какого-нибудь косяка) превращается в кошмар: запомнить/записать 7-8 цифр обычного ID элементарно, а 36 знаков GUID`a - уже проблема.

Как-то решал эту проблему двумя ID: int для внутреннего использования в рамках одной базы, GUID для репликации с другими. Не скажу что решение идеальное, один из компромиссов между скоростью выборки и свободой от ограничений по разрядности.

По поводу анонимности: она нужна далеко не всегда, но нынешнее маниакальное желание всяких вэб-сервисов собрать максимум инфы о пользователях немного напрягает и заставляет задумываться.
...
Рейтинг: 0 / 0
Генератор простых чисел (до 10^9 за 5 сек)
    #38934447
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TРазрядности 128 бит GUID`а достаточно чтобы не заморачиваться что в один прекрасный день кончатся ID или невозможно будет выдать очередную константу новой базе
А что если UNIQ /наш аналог GUID/ будет переменной длины.
Т.е. в нем скажем 0-й бит 1-го байта имеет значение:
== 0 - UNIQ фиксированной длины;
== 1 - UNIQ переменной длины;

/даже пока не рассматриваю проблемы SQL баз у которых обычно нет эффективного механизма с
манипуляциями и хранением данных переменной длины/.

Почему так.
Возьмем скажем Microsoft. У них GUID в применении скажем к COM это не просто уникальный ключ,
но и ссылка к одной или нескольким веткам реестра /в котором хранятся дополнительные данные об
UNIQ/.
Подход /как по мне/ - правильный.
Так вот сделать архитектуру нашего UNIQ гибкую и расширяемую
/может быть даже завязанную с некой базой UNIQs (но ни как не привязанной к реестру)/.

PS: Конечно сказанное мной немножко сумбурно и не связанно.
Просто вот как бы рассказал немного о том чего бы хотелось иметь.
Если удастся решить этот вопрос, то думаю он вполне потянет на новый документ в RFC ...
...
Рейтинг: 0 / 0
Генератор простых чисел (до 10^9 за 5 сек)
    #38934510
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TСделал пример многопоточного использования multi_prime.cpp

В 4 потока на 4 ядрах посчитал до 10^9 за <0,5 сек :)
Код: plaintext
1.
2.
Test(0M...1000M): next_prime() multithread
count 50847534 primes. time 472 msec speed 107727K/sec OK



PS Сделал потоки на WinAPI, под линуксом не соберется.

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


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