[Ответить в тред] Ответить в тред

09/07/16 - Новое API для капчи - внимание разработчикам приложений
03/04/16 - Набор в модераторы 03.04 по 8.04
26/03/16 - Конкурс: Помоги гомункулу обрести семью!



[Назад][Обновить тред][Вниз][Каталог] [ Автообновление ] 39 | 6 | 19
Назад Вниз Каталог Обновить

Помогите Стасику (задачка для программистов) Аноним 17/06/16 Птн 00:58:11  771610  
14661142912570.png (90Кб, 960x1055)
Стасик написал бинарный десериализатор на высокоуровневом языке и Стасику надо оцентить его эффективность. Для этого Стасик написал бэнчмарк, в котором он читает своим десериализатором 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?
Аноним 17/06/16 Птн 01:33:16  771630
14661163963290.png (42Кб, 1209x364)
Посоны, у меня одного гугл сейчас сломался?
Стасик ту не причем
Аноним 17/06/16 Птн 01:35:11  771632
14661165113540.png (27Кб, 1016x177)
Обрабатывает сосач в режиме реального времени
Аноним 17/06/16 Птн 01:45:21  771634
>>771610 (OP)
Как сделал такую картиночку с регрессиями и графиками?
Аноним 17/06/16 Птн 01:52:22  771639
>>771634
Criterion делает. Я не ебу, что на картинке, много цифр, но вот mean - это вроде и есть среднее время выполнения программы.
Аноним 17/06/16 Птн 01:57:51  771641
>>771610 (OP)
>бинарный десериализатор на высокоуровневом языке
Стасик пидарасик? Это еще что за хуйня?
Аноним 17/06/16 Птн 02:04:51  771643
>>771641
Это аналог binary, но на стрелках и с фиксированным буфером. Ты не рефлексируй, ты тряси скажи, на какой скорости dual channel PC3-12800 работает и подкинь тесты, которые разгоняют её до этой скорости.
Аноним 17/06/16 Птн 02:08:52  771644
>>771643
подкинул стасику защеку, на самой высокой скорости, дуал ченал в анал р2п2
Аноним 17/06/16 Птн 02:14:34  771646
я что то съел и меня десериализнуло
Аноним 17/06/16 Птн 02:23:00  771648
>>771639
>Criterion делает
Что за критерион. Нашел только такой, но не похож:
https://github.com/Snaipe/Criterion
Аноним 17/06/16 Птн 02:27:12  771650
>>771643
http://www.memorybenchmark.net/read_uncached_ddr3_intel.html
Аноним 17/06/16 Птн 02:43:00  771654
>>771632
Дурак, ты же сам гуглу о сайте доложил
Аноним 17/06/16 Птн 02:48:25  771656
>>771654
А то он без меня о нем не знал лол.
Аноним 17/06/16 Птн 11:53:01  771878
>>771650
И что это за хуйня? Это двухканальный режим или одноканальный, чтение, запись, что за хуйня?
Аноним 18/06/16 Суб 01:21:56  772733
14662021161570.png (88Кб, 992x1030)
Ну охуеть вообще, день прошел, ни одного овета ни про то, как просчитать bandwidth, ни одной программы, как её померять.

Знаете, господа, я не русофоб, я не украинофоб, но я живу в этих краях, я провожу собеседования, и я вижу вас, славскам. И вы вообще пиздец. Серьезно. Меняйтесь, иначе пиздарики.
(Автор этого поста был предупрежден.)
Аноним 18/06/16 Суб 01:25:09  772736
>>772733
Я вообще не понял, о чём написано в ОП-посте.
Что не мешает мне работать мидлом и получать неплохие деньги азаза.
Аноним 18/06/16 Суб 02:10:40  772749
Нашел в чем он эти графики рисует:
http://www.serpentine.com/criterion/tutorial.html
Аноним 18/06/16 Суб 07:07:47  772778
> Помогите Стасику (задачка для программистов)
Помог статику у него за щекой.

Теперь-то я не славскам и пройду собеседование?
Аноним 18/06/16 Суб 22:37:01  773570
>>771641
нюфаня не палица
Аноним 19/06/16 Вск 00:49:51  773770
>>772733
Байтоёб порвался.
Аноним 19/06/16 Вск 01:44:58  773811
>>772749
Ясно. Тред можно закрывать.
Аноним 19/06/16 Вск 12:54:18  774088
>>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
Аноним 19/06/16 Вск 12:54:46  774090
>>774088
> In its tests, dual channel gave at best a 5% speed increase in memory-intensive tasks.
Аноним 19/06/16 Вск 13:00:32  774099
>>774090
Там тесты на скорость запуска Фотошопа.
Сатурейтить шину памяти там никто не пытался.
Аноним 21/06/16 Втр 02:20:18  775694
>>774088
60ms на гиг - это понятно, это чуть больше заявленных 12.8GB в секунду, ибо двухканал, хуё-мое. Но 26ms на гиг - это уже очень странно, это 38GB в секунду и не подходит ни под какие спеки. Может тесты кривые?
>>773770
Тут нет байтоёбов. Байтоёб бы написал тест на Си, но тут только пехапе-макаки, которые на это не спосбны.
Аноним 21/06/16 Втр 11:05:23  775822
>>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 раз) в случае если чтение происходит по случайным адресам.
Аноним 21/06/16 Втр 16:36:56  776048
>>775822
Надо же. Не думал опубликовать своё открытие? Пейпер, там, написать? Думаю, твои исследования были бы полезны миру.
Аноним 21/06/16 Втр 17:01:32  776070
>>776048
Всем было похуй. Хотя я показывал это на /hw, я там тестил процессоры когда выбирал какой себе купить. Я думаю те люди которым это было бы реально интересно и так это знают. Хотя хз, может действительно следовало опубликовать и посмотреть комменты, может кто-то добавил бы что.
Аноним 21/06/16 Втр 18:49:26  776154
>>776070
Я думаю он это сказал с сарказмом.
Аноним 22/06/16 Срд 19:54:18  777360
Стасик, ты до сих пор двачуешь и быдлокодишь в люксофте? Нахуй так жить.
Аноним 23/06/16 Чтв 02:51:16  777690
>>775822
А случайные адреса ты как генерил?
Аноним 23/06/16 Чтв 09:18:45  777754
>>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];
            ...
            //(и т.д., очень развернутый цикл)
    }

В ней в цикле (развернутом) читается из массива число, которое является индексом для следующего чтения.
Аноним 23/06/16 Чтв 09:19:46  777755
>>777754
Лол блядь, вакаба "для удобства" уничтожила запись вида [ i ].
Аноним 24/06/16 Птн 22:59:04  779127
>>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. И я тестирую на высокоуровневом языке, там боксинг, сборка мусора, хуйня-молофья. Поэтому интересуют чистые результаты байтоёбов, чтобы было на что ориентироваться в заточке либы.
Аноним 25/06/16 Суб 00:27:46  779173
14668036668390.png (17Кб, 915x260)
>>779127
Пожалуй, обновлю картинки. 1,2 - байтоёбство (насколько оно возможно на Хаскелле), 3,4 - автоматика + проверка выхода за диапазон буфера + избегание байтоёбства на низком уровне, но жесткое "байтоёбство" на высоком уровне (а именно, развёрка "естественного" стиля в codensity: https://www.cs.ox.ac.uk/ralf.hinze/Kan.pdf). Радует стабильность картинки, так и должно работать декларативное программирование: или ты байтики руками переклал, или DSL заюзал, одна и та же программа должна работать одинаково быстро, без переплаты за абстракции. Не радует ручная дефорестация, какого хуя я должен анроллить монаду? Ну и всё это надо бейзланить по Си-коду, если это медленнее Си, то это нам ноу сьютс https://www.youtube.com/watch?v=3v4nHYPOFUk
Аноним 25/06/16 Суб 00:28:32  779174
Пиздеж и провокация. Ты с sata последнего поколения вытащишь дай бог 6гб/c с очень хорошего диска, с двухканальной памятью 15gb/s это приличный результат. Лучше не будет. А вообще бери vtune и тестируй. Аналитики с двоча дадут куда меньше инфы чем репорт.
Аноним 25/06/16 Суб 00:34:14  779178
>>771634
Берешь генеришь csv, загоняешь в R, делаешь графики. Профит.
Аноним 25/06/16 Суб 01:58:23  779217
>>779174
Ты тред вообще читал? Причем тут sata, мы тут все сидим на кластерах, в оперативу которых стримит hdfs, и нам глубоко похуй, как именно данные в оперативу были застримлены. Нам нужно понять, можно ли использовать для разбора данных нормальные языки, либо нужно писать всё на сишке. Для этого и тестируем на домашних машинках, ведь домашняя машинка - это почти кластрная нода, она от ней отличается только количеством ядер и памяти, по сути архитектура та же.
Аноним 25/06/16 Суб 02:22:16  779229
>>779217
> в оперативу которых стримит
Тормоза.
Стримить надо во-первых, с CPU кэш, во-вторых мимо ОС. Берите сишечку и pf-ring или DPDK.
Аноним 25/06/16 Суб 10:26:45  779327
14668396054560.jpg (331Кб, 1000x833)
14668396054631.png (122Кб, 1217x812)
>>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.
При последовательном чтении в однопоточном варианте - да.

>Поэтому интересуют чистые результаты байтоёбов
Я не чистый байтоёб (байтоёб я в прошлом), я шарпоблядь. Я специально изучал скорость шарпа, т.к. пишу на нём.

[Назад][Обновить тред][Вверх][Каталог] [Реквест разбана] [Подписаться на тред] [ ] 39 | 6 | 19
Назад Вверх Каталог Обновить

Топ тредов