Стасик написал бинарный десериализатор на высокоуровневом языке и Стасику надо оцентить его эффективность. Для этого Стасик написал бэнчмарк, в котором он читает своим десериализатором 1 гигабайт говна, а также десериализатор, в котором он читает 1 гигабайт того же говна, но в ручном режиме (т.е. складывая указатели). Стасик получил следующие результаты:- 63.1ms для чтения 1GB в ручном режиме, т.е. 15.8GB в секунду.- 77.2ms для чтения 1GB десериализатором, т.е. 12.9GB в секунду.Практическим потолком для десериализатора на больших объёмах данных является пропускная способность памяти, которая, конечно же, ниже способности процессора обрабатывать байтики из локального кеша (у Стасика топовый процессор). Поэтому критерием качества десериализора для Стасика является тот факт, что десериализор упрётся в пропускную способность памяти. Для этого и был написан "ручной" тест, по мнению Стасика он должен был показать этот самый предел. Но Стасик бух (внимание, алкоголь вреден вреден для организма в количествах и ведет к импотенции, социальной деградации и чувству впустую проёбанной жизни!)В итоге мы имеем:- Пропускная способность DDR3 PC3-12800 по документации: 12.8GB/sec - это почти равно скорости работы его десериализатора. Однако у Стасика память работает в двухканальном режиме!- Stream Copy multi-core из Geekbench: 16.4 GB/sec, это почти равно скорости "ручного" теста, явно выше пропускной способности одной планки памяти, но явно ниже удвоенной пропускной способности, если исходить из того предположения, что dual-channel = в два раза больше байтиков в секунду.Помогите Стасику разобрться. Сколько байтиков в секунду должна пропускать PC3-12800 в dual channel?
Посоны, у меня одного гугл сейчас сломался?Стасик ту не причем
Обрабатывает сосач в режиме реального времени
>>771610 (OP)Как сделал такую картиночку с регрессиями и графиками?
>>771634Criterion делает. Я не ебу, что на картинке, много цифр, но вот mean - это вроде и есть среднее время выполнения программы.
>>771610 (OP)>бинарный десериализатор на высокоуровневом языкеСтасик пидарасик? Это еще что за хуйня?
>>771641Это аналог binary, но на стрелках и с фиксированным буфером. Ты не рефлексируй, ты тряси скажи, на какой скорости dual channel PC3-12800 работает и подкинь тесты, которые разгоняют её до этой скорости.
>>771643подкинул стасику защеку, на самой высокой скорости, дуал ченал в анал р2п2
я что то съел и меня десериализнуло
>>771639>Criterion делаетЧто за критерион. Нашел только такой, но не похож:https://github.com/Snaipe/Criterion
>>771643http://www.memorybenchmark.net/read_uncached_ddr3_intel.html
>>771632Дурак, ты же сам гуглу о сайте доложил
>>771654А то он без меня о нем не знал лол.
>>771650И что это за хуйня? Это двухканальный режим или одноканальный, чтение, запись, что за хуйня?
Ну охуеть вообще, день прошел, ни одного овета ни про то, как просчитать bandwidth, ни одной программы, как её померять.Знаете, господа, я не русофоб, я не украинофоб, но я живу в этих краях, я провожу собеседования, и я вижу вас, славскам. И вы вообще пиздец. Серьезно. Меняйтесь, иначе пиздарики. (Автор этого поста был предупрежден.)
>>772733Я вообще не понял, о чём написано в ОП-посте.Что не мешает мне работать мидлом и получать неплохие деньги азаза.
Нашел в чем он эти графики рисует:http://www.serpentine.com/criterion/tutorial.html
> Помогите Стасику (задачка для программистов)Помог статику у него за щекой. Теперь-то я не славскам и пройду собеседование?
>>771641нюфаня не палица
>>772733Байтоёб порвался.
>>772749Ясно. Тред можно закрывать.
>>771610 (OP)https://en.wikipedia.org/wiki/Multi-channel_memory_architecture#cite_ref-7>Tom's Hardware found little significant difference between single-channel and dual-channel configurations in synthetic and gaming benchmarks (using a "modern (2007)" system setup). In its tests, dual channel
>>774088> In its tests, dual channel gave at best a 5% speed increase in memory-intensive tasks.
>>774090Там тесты на скорость запуска Фотошопа.Сатурейтить шину памяти там никто не пытался.
>>77408860ms на гиг - это понятно, это чуть больше заявленных 12.8GB в секунду, ибо двухканал, хуё-мое. Но 26ms на гиг - это уже очень странно, это 38GB в секунду и не подходит ни под какие спеки. Может тесты кривые?>>773770Тут нет байтоёбов. Байтоёб бы написал тест на Си, но тут только пехапе-макаки, которые на это не спосбны.
>>771610 (OP)>Сколько байтиков в секунду должна пропускать PC3-12800 в dual channel?Не знаю ОП, здесь ли ты еще, но когда я делал тестирование памяти, то обнаружил что её скорость сильно зависит от порядка доступа. Конкретный тест на Core i7 950 я получил в своё время такой:Последовательное чтение по 8 байт. Время=1841. Прочитано байт: 18237080000 (17392.23 МБ)Скорость: 9447.17 МБ/с. Частота чтения: 1238.26 MHzШаг: 1024 байта. Время=2059. Прочитано байт: 2005347200 (1912.45 МБ)Скорость: 928.82 МБ/с. Частота чтения: 121.74 MHzШаг: 65536 байт. Время=2012. Прочитано байт: 1636656400 (1560.84 МБ)Скорость: 775.76 МБ/с. Частота чтения: 101.68 MHzСлучайное чтение по 4 байта. Время=1918. Прочитано байт: 102951000 (98.18 МБ)Скорость: 51.19 МБ/с. Частота чтения: 13.42 MHzПоследовательная запись по 8 байт. Время=2168. Записано байт: 17474876800 (16665.34 МБ)Скорость: 7686.97 МБ/с. Частота записи: 1007.55 MHzПараллельное чтение из 10 массивов (4 байта, шаг 8 байт). Время=2231. Прочитано байт: 5161289600 (4922.19 МБ)Скорость: 2206.27 МБ/с. Частота чтения: 578.36 MHzПараллельное чтение из 100 массивов (4 байта, шаг 8 байт). Время=2012. Прочитано байт: 682669400 (651.04 МБ)Скорость: 323.58 МБ/с. Частота чтения: 84.82 MHzПараллельное чтение из 1000 массивов (4 байта, шаг 8 байт). Время=2074. Прочитано байт: 457560200 (436.36 МБ)Скорость: 210.40 МБ/с. Частота чтения: 55.15 MHzВсё что выше это однопоточный тест.И многопоточные:Кэш===Последовательное чтение по 8 байт. Потоков: 8Поток 0. Время=3619. Прочитано байт: 47719020400 (45508.40 МБ)Скорость: 12574.86 МБ/с. Частота чтения: 1648.21 MHzПоток 1. Время=3588. Прочитано байт: 47719020400 (45508.40 МБ)Скорость: 12683.50 МБ/с. Частота чтения: 1662.45 MHzПоток 2. Время=3729. Прочитано байт: 47719020400 (45508.40 МБ)Скорость: 12203.92 МБ/с. Частота чтения: 1599.59 MHzПоток 3. Время=3728. Прочитано байт: 47719020400 (45508.40 МБ)Скорость: 12207.19 МБ/с. Частота чтения: 1600.02 MHzПоток 4. Время=3682. Прочитано байт: 47719020400 (45508.40 МБ)Скорость: 12359.70 МБ/с. Частота чтения: 1620.01 MHzПоток 5. Время=3728. Прочитано байт: 47719020400 (45508.40 МБ)Скорость: 12207.19 МБ/с. Частота чтения: 1600.02 MHzПоток 6. Время=3634. Прочитано байт: 47719020400 (45508.40 МБ)Скорость: 12522.95 МБ/с. Частота чтения: 1641.41 MHzПоток 7. Время=3682. Прочитано байт: 47719020400 (45508.40 МБ)Скорость: 12359.70 МБ/с. Частота чтения: 1620.01 MHzОбщее время: 4119. Суммарная частота: 12991.73 MHz. Отношение к однопотоковому варианту: 4.32Случайное чтение по 4 байта. Потоков: 8Поток 0. Время=2122. Прочитано байт: 5494502800 (5239.97 МБ)Скорость: 2469.35 МБ/с. Частота чтения: 647.33 MHzПоток 1. Время=2122. Прочитано байт: 5494502800 (5239.97 МБ)Скорость: 2469.35 МБ/с. Частота чтения: 647.33 MHzПоток 2. Время=2122. Прочитано байт: 5494502800 (5239.97 МБ)Скорость: 2469.35 МБ/с. Частота чтения: 647.33 MHzПоток 3. Время=2122. Прочитано байт: 5494502800 (5239.97 МБ)Скорость: 2469.35 МБ/с. Частота чтения: 647.33 MHzПоток 4. Время=2106. Прочитано байт: 5494502800 (5239.97 МБ)Скорость: 2488.11 МБ/с. Частота чтения: 652.24 MHzПоток 5. Время=2122. Прочитано байт: 5494502800 (5239.97 МБ)Скорость: 2469.35 МБ/с. Частота чтения: 647.33 MHzПоток 6. Время=2106. Прочитано байт: 5494502800 (5239.97 МБ)Скорость: 2488.11 МБ/с. Частота чтения: 652.24 MHzПоток 7. Время=2106. Прочитано байт: 5494502800 (5239.97 МБ)Скорость: 2488.11 МБ/с. Частота чтения: 652.24 MHzОбщее время: 2434. Суммарная частота: 5193.36 MHz. Отношение к однопотоковому варианту: 8.02Оперативная память==================Последовательное чтение по 8 байт. Потоков: 8Поток 0. Время=7768. Прочитано байт: 18237080000 (17392.23 МБ)Скорость: 2238.96 МБ/с. Частота чтения: 293.46 MHzПоток 1. Время=7659. Прочитано байт: 18237080000 (17392.23 МБ)Скорость: 2270.82 МБ/с. Частота чтения: 297.64 MHzПоток 2. Время=7737. Прочитано байт: 18237080000 (17392.23 МБ)Скорость: 2247.93 МБ/с. Частота чтения: 294.64 MHzПоток 3. Время=7800. Прочитано байт: 18237080000 (17392.23 МБ)Скорость: 2229.77 МБ/с. Частота чтения: 292.26 MHzПоток 4. Время=7785. Прочитано байт: 18237080000 (17392.23 МБ)Скорость: 2234.07 МБ/с. Частота чтения: 292.82 MHzПоток 5. Время=7785. Прочитано байт: 18237080000 (17392.23 МБ)Скорость: 2234.07 МБ/с. Частота чтения: 292.82 MHzПоток 6. Время=7785. Прочитано байт: 18237080000 (17392.23 МБ)Скорость: 2234.07 МБ/с. Частота чтения: 292.82 MHzПоток 7. Время=7676. Прочитано байт: 18237080000 (17392.23 МБ)Скорость: 2265.79 МБ/с. Частота чтения: 296.98 MHzОбщее время: 8080. Суммарная частота: 2353.46 MHz. Отношение к однопотоковому варианту: 1.90Случайное чтение по 4 байта. Потоков: 8Поток 0. Время=2184. Прочитано байт: 102951000 (98.18 МБ)Скорость: 44.96 МБ/с. Частота чтения: 11.78 MHzПоток 1. Время=2168. Прочитано байт: 102951000 (98.18 МБ)Скорость: 45.29 МБ/с. Частота чтения: 11.87 MHzПоток 2. Время=2168. Прочитано байт: 102951000 (98.18 МБ)Скорость: 45.29 МБ/с. Частота чтения: 11.87 MHzПоток 3. Время=2169. Прочитано байт: 102951000 (98.18 МБ)Скорость: 45.27 МБ/с. Частота чтения: 11.87 MHzПоток 4. Время=2168. Прочитано байт: 102951000 (98.18 МБ)Скорость: 45.29 МБ/с. Частота чтения: 11.87 MHzПоток 5. Время=2168. Прочитано байт: 102951000 (98.18 МБ)Скорость: 45.29 МБ/с. Частота чтения: 11.87 MHzПоток 6. Время=2169. Прочитано байт: 102951000 (98.18 МБ)Скорость: 45.27 МБ/с. Частота чтения: 11.87 MHzПоток 7. Время=2153. Прочитано байт: 102951000 (98.18 МБ)Скорость: 45.60 МБ/с. Частота чтения: 11.95 MHzОбщее время: 2511. Суммарная частота: 94.96 MHz. Отношение к однопотоковому варианту: 7.08Короче, скорость чтения зависит от порядка доступа и может падать до 12MHz (более чем в 100 раз) в случае если чтение происходит по случайным адресам.
>>775822Надо же. Не думал опубликовать своё открытие? Пейпер, там, написать? Думаю, твои исследования были бы полезны миру.
>>776048Всем было похуй. Хотя я показывал это на /hw, я там тестил процессоры когда выбирал какой себе купить. Я думаю те люди которым это было бы реально интересно и так это знают. Хотя хз, может действительно следовало опубликовать и посмотреть комменты, может кто-то добавил бы что.
>>776070Я думаю он это сказал с сарказмом.
Стасик, ты до сих пор двачуешь и быдлокодишь в люксофте? Нахуй так жить.
>>775822А случайные адреса ты как генерил?
>>777690Брался большой массив из Int32 и читался по случайным индексам.Конкретно функция генерации была такой (массив заполняется числами подряд, после чего числа перетасовываются случайным образом): public unsafe void FillArrayRandom() { fixed (byte b = data) { int d = (int*)b; for (int i = 0; i < ElemCount; i++) { d = i; } Random rnd = new Random(DateTime.Now.Millisecond); for (int i = 0; i < ElemCount; i++) { int val = rnd.Next(ElemCount - 1); int r = d; d = d[val]; d[val] = r; } } }Потом по массиву гналась функция, типа такой: for (long i = 0; i < repeatCount; i++) { j = d[j]; j = d[j]; j = d[j]; ... //(и т.д., очень развернутый цикл) }В ней в цикле (развернутом) читается из массива число, которое является индексом для следующего чтения.
>>777754Лол блядь, вакаба "для удобства" уничтожила запись вида [ i ].
>>775822Вот это я понимаю, вот это байтоёб как байтоёб! Давай читать последовательно для начала по 8 байт. Я читаю ридерами по 8*12+4 байт, просто моя либа- конструктор ридеров, мне удобнее взять 1000000 ридеров по 100 байт; если тебе удобнее читать единым блоком - читай единым блоком, мне интересно ручное чтение с минимальным оверхедом как бейзлан. Еще давай уточним, что гиг - это 1000000000 байт, а не 1073741824 (т.е. gigabyte а не gibibyte), потому что именно в таких гигах пишут производительность памяти. Как я понял, скорость у тебя порядка 9GB/s. Какой тип памяти? Одноканальная или двухканальная? Кеш и многопоточность пока не интересуют.Алсо почистил ошибки в тестах, сейчас 15.9GB/s последовательное чтение на двухканальном DDR-1600 c i4790 4-мя различными способами. Это выше заявленных 12.8GB/s. Но ниже, чем 2x12.8GB/s. И я тестирую на высокоуровневом языке, там боксинг, сборка мусора, хуйня-молофья. Поэтому интересуют чистые результаты байтоёбов, чтобы было на что ориентироваться в заточке либы.
>>779127Пожалуй, обновлю картинки. 1,2 - байтоёбство (насколько оно возможно на Хаскелле), 3,4 - автоматика + проверка выхода за диапазон буфера + избегание байтоёбства на низком уровне, но жесткое "байтоёбство" на высоком уровне (а именно, развёрка "естественного" стиля в codensity: https://www.cs.ox.ac.uk/ralf.hinze/Kan.pdf). Радует стабильность картинки, так и должно работать декларативное программирование: или ты байтики руками переклал, или DSL заюзал, одна и та же программа должна работать одинаково быстро, без переплаты за абстракции. Не радует ручная дефорестация, какого хуя я должен анроллить монаду? Ну и всё это надо бейзланить по Си-коду, если это медленнее Си, то это нам ноу сьютс https://www.youtube.com/watch?v=3v4nHYPOFUk
Пиздеж и провокация. Ты с sata последнего поколения вытащишь дай бог 6гб/c с очень хорошего диска, с двухканальной памятью 15gb/s это приличный результат. Лучше не будет. А вообще бери vtune и тестируй. Аналитики с двоча дадут куда меньше инфы чем репорт.
>>771634Берешь генеришь csv, загоняешь в R, делаешь графики. Профит.
>>779174Ты тред вообще читал? Причем тут sata, мы тут все сидим на кластерах, в оперативу которых стримит hdfs, и нам глубоко похуй, как именно данные в оперативу были застримлены. Нам нужно понять, можно ли использовать для разбора данных нормальные языки, либо нужно писать всё на сишке. Для этого и тестируем на домашних машинках, ведь домашняя машинка - это почти кластрная нода, она от ней отличается только количеством ядер и памяти, по сути архитектура та же.
>>779217> в оперативу которых стримитТормоза.Стримить надо во-первых, с CPU кэш, во-вторых мимо ОС. Берите сишечку и pf-ring или DPDK.
>>779127Я не совсем понимаю твою терминологию.Например:>ридерами >бейзлан> Какой тип памяти?DDR3-1333 DDR3 SDRAM.>Одноканальная или двухканальная?Я думаю что трехканальная. Стоит 3 одинаковых планки в плате таким образом чтобы они включились в трехканальный режим. На пикрилейтеде это получается вставлены в синие слоты.>DDR3 triple-channel architecture is used in the Intel Core i7-900 series (the Intel Core i7-800 series only support up to dual-channel). The LGA 1366 platform (e.g. Intel X58) supports DDR3 triple-channel, normally 1333 and 1600Mhz, but can run at higher clock speeds on certain motherboards. >According to Intel, a Core i7 with DDR3 operating at 1066 MHz will offer peak data transfer rates of 25.6 GB/s when operating in triple-channel interleaved mode. >When operating in triple-channel mode, memory latency is reduced due to interleaving, meaning that each module is accessed sequentially for smaller bits of data rather than completely filling up one module before accessing the next one. Data is spread amongst the modules in an alternating pattern, potentially tripling available memory bandwidth for the same amount of data, as opposed to storing it all on one module.>The architecture can only be used when all three, or a multiple of three, memory modules are identical in capacity and speed, and are placed in three-channel slots. Плата "Supports 3 channel DDR3 2100+ memory". У меня стоит DDR3-1333.Насколько я понимаю, многоканальность не дает почти никакого эффекта.Алсо. Прога у меня на шарпе. Он компилируется в нативный код, но насколько оптимально я не могу судить, т.к. в современном асме я мало что понимаю. >Как я понял, скорость у тебя порядка 9GB/s.При последовательном чтении в однопоточном варианте - да.>Поэтому интересуют чистые результаты байтоёбовЯ не чистый байтоёб (байтоёб я в прошлом), я шарпоблядь. Я специально изучал скорость шарпа, т.к. пишу на нём.