LINUX.ORG.RU

Быстрый (некачественный) рандом


0

2

Нужна функция для быстрого получения рандомных чисел от (0 - 256). Нужно для создания шума на изображении.

qrand() работает долго, rand() вроде по быстрее будет, но все равно хотелось бы быстрее.

UPD. Ссылки на математическое объяснение генерации случайных чисел и последующее самостоятельное написание функции тоже подходит.



Последнее исправление: knotri (всего исправлений: 1)
Ответ на: комментарий от emulek

конечно. Это тебе не L1 и не регистры.

Упоротая, обоссанная макака. Какая же ты нулёвая. Что ты знаешь об l1d и регистрах? Обсосок.

Выбрать 32бита из памяти это максимум такт, а л1д, регистры - это уже <такта. И то нет смысла в l1d на 32битных мувах, ибо ничем от llc отличатся не будет. throughput у мува из памяти(адреса) в районе <такта.

Посчитай, сколько можно прочитать 32битными мувами, при T мува 1такт. Посчитал обсосок? throughput памяти в районе 10-12+гигов на канал на дефолтном 1333+говне, штеуд снимает максимум в районе 150-160% 2-х каналов на ведро. Амд в районе 100%. Везде минимум 2канала.

Яж за тебя обсосока посчитаю: 3ггц - это <3*4G 12гигов - это меньше throughput"а канала.

Осиль уже 2 понятия: latency и throughput.

Ну и повторюсь — только мой убогий атом делает умножение на LEA

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

любой современный процессор одним ядром может за такт 8 чисел помножить сразу, за 1 такт.

Чего чисел, какой такт - ты просто так кукарекаешь, ссань?

anonymous
()
Ответ на: комментарий от I-Love-Microsoft

Мне вот интересно - зачем ты эту ссань слушаешь?

Вам голова для чего дана? Шапку носить?

Вот подумай - 16тактов на 32битный мув - это 4такта на байт, когда как частота сейчас в среднем 3.5. Это где-то 0.8ГБ/с - тебе не кажется это бредовым? Если взять 16байтные мувы(avx2) - это байт на такт - это 3.5гига на ведро, либо 15гигов на 4ре.

Пацаны какие-то 10+каналов ставят, чтобы снимать по 100гигов, о каких-то ддр4 кукарекают, а тут у пацанов 3.5гига на ведро. Вам реально не смешно?

anonymous
()
Ответ на: комментарий от anonymous

Упоротая, обоссанная макака. Какая же ты нулёвая. Что ты знаешь об l1d и регистрах? Обсосок.

ваша аргументация убедительна, сударь.

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

мудило, вот код

Посчитал обсосок?

осиль LEA, придурок. Код выше. Потом займёмся памятью.

emulek
()
Ответ на: комментарий от emulek

а теперь посмотри, как оно выглядит на картинке.

Предлагаю тебе сделать то-же самое.

Вот твой вариант: http://postimg.org/image/kl5qh5k1l/

Вот 32-бит LFSR с параллельной выборкой (в 1.15 раза медленней твоего алгоритма): http://postimg.org/image/3kz4yupeb/

А вот 32-бит LFSR с оптимизированной выборкой (в 10 раз медленней твоего): http://postimg.org/image/m1if5brqv/

Предлагаю тебе самому решить, что больше похоже на шум, который нужет ТСу.

PS: Последний вариант выдает чуть больше 300 млн байт в сек. на мобильном core i5 @ 2.5GGz

Puzan ★★★★★
()
Последнее исправление: Puzan (всего исправлений: 1)
Ответ на: комментарий от Puzan

Предлагаю тебе сделать то-же самое.

да, спасибо. Я и говорил, что пилить нужно.

кстати вторая картинка не открывается, там только тёлки с сиськами. Зачем ты такие здоровые кидал-то?

По третей картинке ничего так. И какой «мой»? Пробовал мою идею с XOR'ом?

emulek
()
Ответ на: комментарий от emulek

как можно считать априорную вероятность известной величины? Давай-как ты азы подучишь...

А она _не_ известна.

Waterlaz ★★★★★
()
Ответ на: комментарий от emulek

Первый раз пользуюсь хостингом картинок.

Залил вторую сюда: http://imgur.com/RfV4r5O

Твой первый, где полоски поперек картинки.

Идею с XOR-ом не пробовал. Если ты напишешь код, попробую и выложу картинку.

--

Твой код, это который

static inline uint32_t rand32()
{
	static uint32_t seed = 1;
	seed *= 1664525u;
	seed += 1013904223u;
	return seed;
}
Puzan ★★★★★
()
Последнее исправление: Puzan (всего исправлений: 1)
Ответ на: комментарий от emulek

ваша аргументация убедительна, сударь.

В очередной раз обосралась.

мудило, вот код

Это не код - это говно. Обоссанная маздайская макака. Что конкретно сказать-то хотел?

16 тактов add + imul на атоме - инфа сотка. Выкинь свой мозг и конпелятор.

осиль LEA, придурок. Код выше. Потом займёмся памятью.

Что я должен осилить? Обсосок не отличает сдвиг от умножения? Кулстори питушок. Это не умножение на леа идиот - это умножение через сдвиги и сумматор, а леа там непричем.

Если ты обсосок увидел lea и решил «налеа»? Хотя по твоим скудным мыслительным способностям это реально так.

Для питуха поясню add+imul - это не 16тактов на этоме. Иди тести, питушок. Авось чему-то научишься.

Потом займёмся памятью.

Ты уже обосрался.

anonymous
()
Ответ на: комментарий от Puzan

Твой первый, где полоски поперек картинки.

полоски потому, что не нужно брать первые и последние байты.

Идею с XOR-ом не пробовал. Если ты напишешь код, попробую и выложу картинку.

мне лень. Просто потому, что до нас это уже сделали Over9000 раз. Пересказывать второй том Кнута мне лень.

Твой код, это который

это PoC. Там две беды:

1. первые и последние биты не случайны(полоски)

2. след. число зависит от предыдущего (на второй твоей картинке такая же беда).

Первая проблема устраняется отбрасыванием плохих бит, а вторая — взятием практически любой функции от нескольких значений. Я взял XOR потому что

1. быстро

2. эта функция не уменьшает энтропию, т.е. после неё бит не становится более предсказуем. После AND например становится, ибо он в ¾ равен 0.

3. функция взаимообратная, а значит не нужно каждый раз считать «сумму» от нескольких значений. Достаточно убавить лишнее значение и добавить новое.

emulek
()
Ответ на: комментарий от anonymous

Что я должен осилить? Обсосок не отличает сдвиг от умножения? Кулстори питушок. Это не умножение на леа идиот - это умножение через сдвиги и сумматор, а леа там непричем. Если ты обсосок увидел lea и решил «налеа»? Хотя по твоим скудным мыслительным способностям это реально так. Для питуха поясню add+imul - это не 16тактов на этоме. Иди тести, питушок. Авось чему-то научишься.

мудило, где ты увидел imul? Лососни тунца, выдра, и признайся, что ты — мудак.

emulek
()
Ответ на: комментарий от emulek

тебе может и неизвестна. А я код вижу, и в отличие от тебя понимаю, как он работает.

Тогда скажи, чему равен пятый элемент последовательности, генерируемой последовательным вызовом rand()

Waterlaz ★★★★★
()
Ответ на: комментарий от Waterlaz

Тогда скажи, чему равен пятый элемент последовательности, генерируемой последовательным вызовом rand()

0, 1804289383
1, 846930886
2, 1681692777
3, 1714636915
4, 1957747793
emulek
()
Ответ на: комментарий от emulek

Тупое животное - я скзаал, что на imul будет быстрее. Лососни тунца, выдра обоссанная и признайся, что ты - питух.

Ах да, тыж с памятью там уже обосрался?

anonymous
()
Ответ на: комментарий от Waterlaz

ответ правильный. УМВР. Проблема на вашей стороне.

emulek
()
Ответ на: комментарий от emulek

Вот результаты с XOR-ом.

Твой вариант: http://imgur.com/hGdDb03

Мой: http://imgur.com/3aIQK5V

Твой выполняется за 2.08сек, мой за 1.96сек. Однако, мой дает 32 бита за раз, а твой 16, т.к. крайние байты выбрасываются. Т.е. мой вариант примерно в два раза быстрее (около 2 млрд байт в сек).

Идея с XOR мне понравилась.

Puzan ★★★★★
()
Ответ на: комментарий от emulek

ты в лужу пукнула. Где код, который это доказывает?

Ты уже обосралась и с памятью, и с леа. Я не собираюсь писать код под твоё 32битное говно с ущербанским callabi.

Ты кукарекушка идёшь и берёшь штеудмануал + спуид своего куска говна и считаешь latency у твой функции и функции на imul+add. Хотя твоих мыслительных способностей и скилла на это не хватит, но всё же попытайся, обсосок.

Нищая макака. Атом + 32битное говно + кукаретинг про «sse и amd64» + маздайская нотация. Ты животное прежде чем кукарекать хоть что-то об этой жизни узнай. Какие «такт» какие-то «8чисел». Нулёвая обсосинка.

anonymous
()
Ответ на: комментарий от Puzan

Твой вариант: http://imgur.com/hGdDb03

Мой: http://imgur.com/3aIQK5V

спасибо. Вроде годно и то и то.

Твой выполняется за 2.08сек, мой за 1.96сек. Однако, мой дает 32 бита за раз, а твой 16, т.к. крайние байты выбрасываются. Т.е. мой вариант примерно в два раза быстрее (около 2 млрд байт в сек).

ИМХО такая скорость не нужна. Всё равно надо что-то делать с этими числами. Даже просто тупо сохранить у тебя не получится...

Идея с XOR мне понравилась.

увы, не я придумал. Не знаю кто.

emulek
()
Ответ на: комментарий от emulek

Судя по твоему выхлопу ты нахватался какого-то говно из желтухи, а т.к. ты тотальный ущербан, тебе даже не интересно какую же херню ты несёшь и какое она имеет отношение к реальному миру.

Обосрался - обосрался. Прийми тот факт, что ты ничто и не пытайся о чем-то кукарекать, кроме тома кнута. Чтож ты по кнуту не захреначил rand() на div"ах? Атом выдаёт 100чисел в секунду?

anonymous
()
Ответ на: комментарий от anonymous

Ты уже обосралась и с памятью, и с леа. Я не собираюсь писать код под твоё 32битное говно с ущербанским callabi.

дебил, это выхлоп компилятора gcc (GCC) 4.8.2.

Код C чуть выше, даун. Я повторю для дебила:

inline uint32_t rand32()
{
	static uint32_t seed = 1;
	seed *= 1664525u;
	seed += 1013904223u;
	return seed;
}

Нищая макака.

нет, ты точно тупорылый... Это просто нетбук, который у меня всегда при себе.

маздайская нотация.

детка, эта нотация существовала задолго не только до тебя, но и до маздая. Ещё когда твой папа пешком под стол ходил.

emulek
()
Ответ на: комментарий от anonymous

Чтож ты по кнуту не захреначил rand() на div"ах?

ты тупой? Где ты видел у Кнута div'ы? У него, кстати, есть генератор рандома на одном сложении. Но твоего скудного умишка не хватит даже на то, что-бы понять, как он работает.

emulek
()
Ответ на: комментарий от emulek

дебил, это выхлоп компилятора gcc (GCC) 4.8.2.

Выхлоп у говна. Ктож виноват, что ты не умеешь юзать.

inline uint32_t mul(uint32_t a, uint32_t b) {
  uint32_t ret;
  __asm__ volatile (
    "imul %1, %0" : "=r" (ret) : "r" (a), "0" (b) 
  );
  return ret;
}

static inline uint32_t rand32(void) {
  static uint32_t seed = 1;
  seed = mul(seed, 1664525u);
  seed += 1013904223u;
  return seed;
}

Бенчи, питушок.

нет, ты точно тупорылый... Это просто нетбук, который у меня всегда при себе.

Нет, ты нищая макака. Только ущербан будет кукарекать что-то про эту пародию на камень.

Ты просто обсосок. Яж тебе сказал животное - иди гугли про latency и throughput, чтобы херню ты мне больше тут не нёс.

детка, эта нотация существовала задолго не только до тебя, но и до маздая. Ещё когда твой папа пешком под стол ходил.

Нет, питушок. Это говно нигде, кроме детсада не существовало. А это говно юзают только нулёвые ущербаны типа тебя.

anonymous
()
Ответ на: комментарий от emulek

ты тупой? Где ты видел у Кнута div'ы?

На 95% состоит из div"ов.

У него, кстати, есть генератор рандома на одном сложении.

Генератор говна.

Но твоего скудного умишка не хватит даже на то, что-бы понять, как он работает.

В том и суть, что только такой скудный умишка, как твой - будет упоминать это бесполезное говно. Твой жалкий умишка ниначто не способен - тебе покласть что и для чего, как и почему. Поэтому ты патешься спрятаться за какого-то питуха-кнута, постоянно копипастя какое-то говно из его жалкой книженки.

Это говно протухло ещё до того, как появилось на свет. Так же как и твоё представление о мире, так же как и ты сам.

Примеры выше показательны - примитивный сектант, о чем вообще с тобой можно говорить?

anonymous
()
Ответ на: комментарий от anonymous

мудило: у Кнута хоть что-то есть полезное и интересное. А от тебя только вонь. Даже Дениска Попов за свою жизнь больше кода написал, чем ты.

emulek
()
Ответ на: комментарий от emulek

у Кнута хоть что-то есть полезное и интересное

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

Даже Дениска Попов за свою жизнь больше кода написал, чем ты.

Ты мне свой код так и не показал, заедушная нищая макака. Больше - это какраз таки для таких ущербанов типа тебя, ибо высрать тысячи говна ничего не стоит.

В этом и заключается примитивная «логика» обсосока, вернее её отсутвие как таковой.

anonymous
()
Ответ на: комментарий от anonymous

Кнут бесполезен в реальном мире, ибо это животное знает матчасть на уровне тебя

you make my day! Спасибо за комплимент.

PS: кстати спасибо тебе, мудилка. ВНЕЗАПНО оказалось, что на говноатоме IMUL работает немного быстрее LEA. Я в недоумении, начиная с i8086 и до iPentium4 LEA было быстрее...

emulek
()
Ответ на: комментарий от emulek

you make my day! Спасибо за комплимент.

Это комплиментом считают только адепты секты кнута и прочие нулёвые питухи.

Не не немного, а раза в 2. imul+add - это в районе 6тактов latency судя по мануалу. Хоть у тебя я насчтал ~10, но ты кукарекаешь про 16.

Выше пацан уже сказал почему ты идиот.

anonymous
()
Ответ на: комментарий от mix_mix

Одно lea да, но у тебя их там штук 5 было, так imul быстрее, конечно.

не уподобляйся: одна imul делает тоже самое, что 16 LEA.

emulek
()
Ответ на: комментарий от emulek

не уподобляйся: одна imul делает тоже самое, что 16 LEA

С чего ты взял? Она два такта в среднем выполняется на атоме (плюс три такта задержка) http://www.agner.org/optimize/instruction_tables.pdf

mix_mix ★★★★★
()
Последнее исправление: mix_mix (всего исправлений: 1)
Ответ на: комментарий от mix_mix

не уподобляйся: одна imul делает тоже самое, что 16 LEA

С чего ты взял?

читай выделенное. С подключённым органом, который у царя отбит друзьями.

Она два такта в среднем выполняется на атоме (плюс три такта задержка)

я-то откуда знал? Я думал там полного аппаратного умножителя нет. Я вообще никогда не заморачивался скоростью выполнения на этом говне. Зачем оно мне?

emulek
()
Ответ на: комментарий от emulek

читай выделенное. С подключённым органом, который у царя отбит друзьями.

Обосрался и тут же съехал.

я-то откуда знал? Я думал там полного аппаратного умножителя нет. Я вообще никогда не заморачивался скоростью выполнения на этом говне. Зачем оно мне?

В этом и суть - ты кукарекал не знаючи. Ты всегда кукарекаешь нихрена в этой жизни не зная, почему ты не загуглил пред тем, как кукарекать? Да и что там знать?

Ахахах, аппаратного умножителя нет, а какой есть? Много ты думал.

anonymous
()
Ответ на: комментарий от anonymous

В этом и суть - ты кукарекал не знаючи.

я не кукарекал, а говорил. Кукарекал как раз ты, причём на тему, на которую мне насрать — а именно скорость работы imul в говноатоме. Если ты, мудило, думаешь, что код я написал, то ты сильно ошибаешься, это gcc так считает, что надо LEA.

аппаратного умножителя нет, а какой есть? Много ты думал.

дурачок...

emulek
()
Ответ на: комментарий от emulek

я не кукарекал, а говорил.

Именно кукарекал.

Кукарекал как раз ты, причём на тему, на которую мне насрать — а именно скорость работы imul в говноатоме.

Скорость работы imul'а в говноатоме - отговорка, а говном ты начал его называть, ибо я тебя обоссал на «нищей макаке». Так же, как ты говоришь «говно hdd» и прочее.

Скорость работы imul на говноатоме ничем не отличается от скорости работы imul не на говноатоме, в твоём случае. Ты балабол.

Если ты, мудило, думаешь, что код я написал, то ты сильно ошибаешься, это gcc так считает, что надо LEA.

Гцц ничего не может считать - это признак твоей анскильности. Только идиот думаешь, что конпелятор что-то там считает - у тебя 32битное говно, осиль -march и прочее.

Ты животное даже -S не осилил, зачем ты выкатываешь objdump, если ты в нём нихрена не понимаешь, кукарекаешь про какую-то леа, такты и прочее. Память, 16тактов и прочее? Темболее неактуального 32битного говна?

Просто покукарекать? Похоже на то. Запомни - ты нихрена не знаешь о матчасти, поэтому будь добр не спорь, если ноль и не неси херню. Если ты пытаешься спорить - ты должен что-то выносить из спора, ты же тотальный олень и просто клал на всё, ибо скудные возможности межушного наполнителя не дают возможностей понять что-то сложнее абстрактной примитивщины.

дурачок...

Ну да, ну да. Умножение крайне популярная операция, которая была реализована лет 20назад и вдруг интел не запилит «аппаратного умножения» ну так-то да - инфа сотка. Ещё идиот не отличается latency и throughput. Я тебе уже 10раз повторял - это основы текущих реалий.

Твоё место в луже говна, которое из тебя высеряется. Ты неспособен ниначто, твой выхлоп бесполезен и даже вреден пацанам. Сходи на винфак|dos - так почти все такие же как ты.

anonymous
()
Ответ на: комментарий от anonymous

а говном ты начал его называть, ибо я тебя обоссал на «нищей макаке».

ты просто завидуешь, со своим помоечным гробиком.

Так же, как ты говоришь «говно hdd»

а вот это тебя уже жутко бесит, ибо у тебя нет 2т.р. на самый дешёвый SSD.

Скорость работы imul на говноатоме ничем не отличается от скорости работы imul не на говноатоме, в твоём случае. Ты балабол.

ты сказал чушь.

Ты животное даже -S не осилил, зачем ты выкатываешь objdump, если ты в нём нихрена не понимаешь, кукарекаешь про какую-то леа, такты и прочее. Память, 16тактов и прочее? Темболее неактуального 32битного говна?

может тебя это удивит, но objdump там тоже с -S. А ещё с -M intel

emulek
()
Ответ на: комментарий от emulek

ты просто завидуешь, со своим помоечным гробиком.

Чему завидую?

а вот это тебя уже жутко бесит, ибо у тебя нет 2т.р. на самый дешёвый SSD.

Зачем мне это говно? Темболее оно у меня есть, только это не отменяет того факта, что это ненужное говно. Яж тебе рассказывал историю про брелочек.

ты сказал чушь.

Вот о5 питушара спорит абсалютно не зная матчасти, ну давай, обсосок, чем «чушь»?

может тебя это удивит, но objdump там тоже с -S. А ещё с -M intel

Мне твой -M маздай не интересен. Ты тупорылая обсосина дизасемблишь бинарь, когда как гцц сам транслирует в асм. Скорее всего ты обсосинка юзаешь этот кастыль, ибо ты маздайская курица, но чтож с тебя взять - man gcc.

anonymous
()
Ответ на: комментарий от anonymous

Чему завидую?

да хоть говноатому.

Зачем мне это говно? Темболее оно у меня есть, только это не отменяет того факта, что это ненужное говно. Яж тебе рассказывал историю про брелочек.

я что, думаешь запоминаю все те помои, которые ты в свои посты вливаешь?

Вот о5 питушара спорит абсалютно не зная матчасти, ну давай, обсосок, чем «чушь»?

ну вот, опять — столько слов, а из информации — только 6 бит, которые "?".

Мне твой -M маздай не интересен. Ты тупорылая обсосина дизасемблишь бинарь, когда как гцц сам транслирует в асм. Скорее всего ты обсосинка юзаешь этот кастыль, ибо ты маздайская курица, но чтож с тебя взять - man gcc.

придурок. Я и без тебя знаю про опцию S, в objdump она же юзается. А при чём тут маздай — ведомо только твоим друзьям.

emulek
()
Ответ на: комментарий от emulek

да хоть говноатому.

Инфа сотка - завидую камню за 300рублей.

я что, думаешь запоминаю все те помои, которые ты в свои посты вливаешь?

Отсутвие мозга и памяти детектед.

ну вот, опять — столько слов, а из информации — только 6 бит, которые "?".

Обоссался о5, ибо сказать нечего. Для идиота повторю - ты не скажешь мне почему «чушь», хотя ты написал «чушь». Ты её написал форфан, а когда обосрался и сел в лужу, то начал юлить.

придурок. Я и без тебя знаю про опцию S, в objdump она же юзается. А при чём тут маздай — ведомо только твоим друзьям.

Это опция не objdump"а опция, а гцц, идиот. Только ты её не юзаешь, а кукарекаешь, что юзаешь, ибо даже не знаешь, что она делает и на твоей портянке тупо -d.

А кукарекать, что юзаешь - начал лишь потому, что я о ней сказал, хотя не юзаешь. Обоссан.

Ещё раз идиоту повторю - gcc file.c -S.

anonymous
()
Ответ на: комментарий от anonymous

некоторым достаточно возраста и пары сообщений на форуме, чтобы составить мнение о человеке. такой способ хоть как-то оправдать для себя свой слив.

crowbar
()
Ответ на: комментарий от Deathstalker

Сколько вам лет?

если больше пяти, то это уже неизлечимо (:

emulek
()
Ответ на: комментарий от anonymous

Ещё раз идиоту повторю - gcc file.c -S.

у меня было gcc -Wall -O2 file.c && objdump -S -M intel

но в твой маленький моск наверно столько букв за раз не влезает, да?

emulek
()
Ответ на: комментарий от crowbar

некоторым достаточно возраста и пары сообщений на форуме, чтобы составить мнение о человеке. такой способ хоть как-то оправдать для себя свой слив.

ты разве не заметил, что спрашивал человек, который в СО не участвует?

emulek
()
Ответ на: комментарий от crowbar

я — контекстно-свободный человек.

альтернативно одарённые теперь так называются?

emulek
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.