intel

Про i7-7700k и подобные

Читал тесты i7-7700k, особо много не думал:

  1. +300MHz стоковой частоты за те же деньги (на $10 меньше, чем у i7-6700k) - хорошо (но мало)
  2. Аппаратный H.265 и VP9 - отлично, потому что видео в этих форматах будет (постепенно) больше, а смотреть 4k-H.265 без аппаратного декодера невозможно.
    Есть ли уже плейеры с поддержкой H.265 - не вдавался, если нету, то скоро появятся.
  3. Все остальное "не изменилось, или даже хуже" (в том смысле, что рост производительности на некоторых тестах меньше роста
  4. ...

4 года прогресса

Берем одну и ту же FreeBSD11 и делаем

time make -j8 buildworld

Сначала на i3-2120:

А потом на i3-6300T (пересадив диск на другую материнку)

Тактовые частоты одинаковые (3.3Ghz), платформы (материнка, сокет, тип памяти) - понятно что разные, но это как раз нормально т.к. апгрейд процессора "на 4 поколения" всяко сопровождается сменой платформы. Диск - SSD, памяти достаточно, чтобы влезли и исходники и получившийся результат (в сумме...

Intel CPU lineup

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

Мне вот казалось, что от хорошего к прекрасному там такой ряд: Celeron - Pentium - i3 - i5 - i7 - Xeon (ну ладно, Xeon вроде как бывают без HT, поэтому пересекаются с i5/i7).

Однако:

  • Pentium D1508 - содержит на чипе два порта 10G, это как? И AVX2, кстати. Ни в каких других пентиумах нету AVX2 (правда были еще Pentium 1403/05, с AVX, на этом список пней с AVX вроде кончается)
  • i5/i7 не поддерживают ECC, но многие (все современные?) i3 - поддерживают, равно как и все современные Pentium и Celeron

Кто может объяснить - ПАЧЭМУ ТАК?

Ну или более практический вопрос: вот хочу NAS обновить. На Skylake (потому что в простое сильно меньше жрет), ну и с ECC тогда, раз уж есть вменяемые варианты.

Вот с точки зрения ZFS (на FreeBSD) - есть повод ставить побольше ядер, турбо-бусты и прочее? Или тупо Pentium G4500T даст кисть?

Про компьютеры

Есть вот такое мнение, что "компьютеры перестали становиться быстрее". Пару лет назад я его даже развеивал на хайлоаде, но в докладе упирал на SSE/AVX/итп.

Но тут понадобилось попрофайлить кой-чего на Core2 (у котогого aligned/unaligned access резко отличаются). Достал с полки старый свой макбук, 2007-го года, Core2 Duo, ~2.2гигагерца (могу ошибаться, по памяти пишу). Надо теперь собрать Qt. Вот Qt 5.3.2 собиралося у меня почти 7 часов (400 с чем-то минут по time), на двух ядрах.

Ну ладно, думаю, у этого ноутбука была тяжелая судьба, я ему всю систему охлаждения перебирал т.к. он throttle-лся (термопаста повысохла), может опять болеет.

Отобрал у жены ноут. Celeron T3100, то же поколение Сore2, 1.9гигагерца, винды. Вот 2010-я студия собирает, 5 часов уже прошло, до QtDeclarative добрались. Значит еще не меньше часа.

Для сравнения, i7-4770 собирает тот же Qt 5.3, судя по датам создания файлов, 36 минут. В 10 раз быстрее. Да, вдвое больше ядер, ~вдвое больше частота, но еще 2.5 раза просто от большей лучшести.

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

Про Intel и OpenCL

И вторая за сегодня новость про OpenCL.

Вышел интеловский SDK (SDK for OpenCL Applications 2013 Release). А там, кроме всего прочего такое вот:

Support in dual adapter mode on Windows* 8: enables OpenCL workloads to be accelerated on Intel HD Graphics when the device is not directly connected to a display and fully enabled running Intel driver.
Я осуждаю то, что это только для Win8, а сам факт - одобряю. На Ivy Bridge/Haswell можно будет посчитать что-нибудь эдакое без чудовищного оверхеда по копированию по PCIe (а, всего-лишь, с небольшим оверхедом на double buffering :)

Не корысти ради, а порядку для

В процессе отречения от старого мира, стал ненужным следующий комплект добра:

  • Материнка Asus P6T6 WS Revolution (X58 + Nforce 200, 6 длинных PCIe разблюдовку по ширине смотрите в описании матери, 6 SATA, 2 SAS)
  • Процессор i7-920
  • Кулер Thermalright, забыл фамилие
Все вместе (именно этот процессор на именно этой матери) у меня работало, если я правильно помню, на 3.2Ghz, а на 3.4 только зимой, но могу на 200Mhz ошибиться (3.0 и 3.2), дело было давно. Память всю дорогу была 1600, более быструю не пробовал (и, формально, она и не поддерживается).

Оно мне не нужно. Ну то есть и так крутил и сяк, слишком много жрет (т.е. в шкафу греется, а не в шкафу у меня места для нее нет) и слишком большая материнка, некуда пристроить. Работает: я все это собрал сегодня, сунул памяти, загрузил инсталлятор хакинтоша, он загрузился, я и успокоился (ибо комплект и раньше был рабочим, правда CPU потом потрудился в другой машине).

Если есть конкретный интерес - я, конечно, и какой-нть Prime95 полчасика погоняю, на предмет как оно оверклочится.

Отдам весь комплект в хорошие руки. По цене процессора (7500р на сегодня), мать и кулер - комплимент от заведения. С автографом - дороже.

А, да, Москва. Знакомым (втч близко знакомым виртуально) дам в комплект чаепития, незнакомым - донесу до метро (Коньково или Юго-Западная).

Комплект - весь на фото. Ну еще планка на заднюю панель корпуса. Если нужны какие провода (SATA али еще чего) - найдем. Коробка, мануалы и все такое прочее - давно утеряны, но все нужное у асуса на сайте. GP Diagnostic Card вроде бы была, поищу предметнее если будет предметный же спрос.

Q: низкопотребляющие i5-SandyBridge

А вот к примеру есть два процессора:
  • i5-2400: 3.1Ghz, турбо на одном ядре до 3.3, 95 ватт.
  • i5-2400S: 2.5Ghz, турбо на одном ядре до 3.3, 65 ватт.
А сколько будет жрать i5-2400 (без S), если ему стандартный мультипликатор снизить до 25? Впишется ли в 65 ватт?

статью на fcenter, где намерили разницу в 12 ватт вместо 30 - читал. Ну и общий консенсус, дескать у S-моделей с производительностью на ватт хуже, чем у соседей по линейке - заметил. И что ватты эти - условные ("не больше, а меньше - бывает") - тоже усвоил.

Но вопрос у меня совсем конкретный - никто не встречал замеров по тепловыделению/потреблению для андерклоченных горшков?

Опять-снова о производительности ZFS

В процессе борьбы за увеличение количества PCI-e слотов в домашнем NAS, взял я кровные 300 баксов и отнес их в лабаз, где и приобрел:

  • 2x4GB памяти DDR3-1600
  • Процессор i3-2120
  • Материнку Gigabyte GA-Z68MA-D2H-B3 (3 длинных PCIe слота, x16, x8 и x4!)
На общую сумму 8800р или что-то вроде этого.

В сравнении с тем что было (Core2Quad Q9300, 8Gb), общий перформанс вырос не слишком сильно. make -j8 buildworld шел 44 минуты, а теперь идет 37. Это на SSD-диске.

А вот на ZFS (RAIDZ, 5 дисков Seagate 3Tb с гигабайтными пластинами) перформанс выстроился так (результаты кроме первого я уже приводил).

Тестирование путем dd if=/dev/zero of=file bs=1G count=50

  • 437 Mb/sec - Core i3-2120, память DDR3-1600 (8Gb, два канала)
  • 360 Mb/sec - Core i7-920, память DDR3-1333 (12Gb, три канала)
  • 280 Mb/sec - Core2 Quad Q9300, память DDR2-800 (8Gb, сколько каналов не знаю)
При этом, вторая система (i7-920) сильно быстрее всех прочих по горшку и, по идее, не сильно медленнее первой по памяти (потому что три канала, а не два).

В этом тесте я все еще не вижу 100% disk load в systat -vm/iostat -x, но к нему стало ближе. Ну и полоса записи на отдельный диск наконец выросла over 100Mb/sec.

Упирается ли оно в CPU - не могу понять. С одной стороны, на всех 4-х (гипертрединг же) CPU idle time в районе 80%. С другой стороны - как эти проценты считаются на HT мне вовсе неясно, может их там не 80, а 40, а из 60% загрузки ту самую половину (которую уже обсуждали) выжирает ZFS (т.е. ядерный код) и еще процентов 10 - прерывания.

При случае, суну эти же диски в ящик с i7-2600K, но случая придется ждать долго. Вопрос на самом деле важный, может быть имело смысл потратить не $300, а $380 и горшок взять покруче, вроде i5-2400S.

О новых технологиях

Было (это результат профайлера, разложенный по тредам):

Через два дня работы и ~800 строк кода стало (естественно, на тех же параметрах и входных данных):

Реально постобработка маленьких картинок ускорилась в 6 раз, больших - в 4. Почему маленькие быстрее - Х.З. Может быть кэши рулят. Это без учета распаковки, которая в профиль включена (и, увы, она для LJPEG не параллелится, если оный LJPEG не порезан на кусочки, как в DNG).

Имею сказать:

О семантике C++ (продолжение)

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

Действительно, если у нас такое вот:

class someShit{
        char *m_sBuffer;
        size_t m_iLimit;
        size_t m_iCounter;
};
то никто не может гарантировать, что где-то не написали:
 m_sBuffer = (char*)&m_iCounter;
И тогда даже в одном треде можно огрести полные штаны счастья.

Меняю объявление на такое:

class someShit{
        char m_sBuffer[10240];
        size_t m_iLimit;
        size_t m_iCounter;
};
И для интеловского компилятора получаю счастье, в данном примере в память лишний раз никто не лазит:
void someShit::try1()
{
        m_iCounter = 0;
        while (m_iCounter< m_iLimit && m_sBuffer[m_iCounter])
                m_iCounter++;
}
MSVC 2010 это, правда, не помогло. Так и ходит через память.

Исходный вопрос (как отключить) снимается, restrict/__restrict в помощь, ключи компиляции опять-же есть.

ISPC 1.10

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

C:\> deferred_shading.exe pp1920x1200.bin

[ispc static + tasks]:		[151.426] million cycles to render 1920 x 1200 image
[C++ serial dynamic, 1 core]:	[2883.776] million cycles to render image
				(19.04x speedup from ISPC)

C:\>mandelbrot_tasks.exe 
[mandelbrot ispc+tasks]:	[190.607] million cycles
[mandelbrot serial]:		[2133.784] millon cycles
				(11.19x speedup from ISPC)
C:\> mandelbrot.exe
[mandelbrot ispc]:		[102.830] million cycles
[mandelbrot serial]:		[276.757] millon cycles
				(2.69x speedup from ISPC)

О взаимном знании двух рук - 2

С удовлетворением спешу сообщить, что мучившая меня с апреля проблема с VTune - излечена.

Поставил C++ Studio XE 2011 SP1 (Vtune там 2011 XE Update 5) - и Hotspot Analysis (который через драйвер) - заработал. И полугода не прошло. А то так и жил на Lightweight Hotspot. И хрен с ним с Hotspot, работают Lock/Wait и Concurrency, которые раньше были удобными, а за полгода я отвык.

Это та проблема, которая could not find ClientIntC function in the tool

Инженеры Интела из двух подразделений наконец повстречались в курилке!

Про AVX и ISPC

Разработчики Intel SPMD Program Compiler, который в этом блоге уже несколько раз поминался, выпустили версию 1.0.9 в которой

=== v1.0.9 === (26 September 2011)

The binary release of v1.0.9 is the first that supports AVX code generation. Two targets are provided: "avx", which runs with a programCount of 8, and "avx-x2" which runs 16 program instances simultaneously.

Честь им за это и хвала, мои попытки (не слишком настойчивые) самостоятельно собрать ISPC с LLVM3 так и не увенчались успехом, то какие-то ошибки в LLVM-овских H-файлах, то не линкуется, не больно то и хотелось.

Так как предыдущие тесты никуда не делись, я их переделал с новым ISPC, как с SSE4, так и с AVX.

Про AVX и OpenCL

Вчера вышел Intel OpenCL SDK 1.5 с соответствующим анонсом: Increase OpenCL application performance with the new Intel OpenCL SDK 1.5

Пытаюсь enlarge increase эту самую performance, сую в бензопилу лом туда AMD-шные примеры, которые на предыдущей версии работали очень бодренько (и временами почти догоняли AMD-шную видеокарту) и вижу замедление в 2-3 раза для половины примеров.

Начинаю читать код и не вижу там 256-битности. Ну, почти не вижу. Кое-где есть 256-битные load/store, нашел даже один vandps ymm1,ymm1,[memory], но в подавляющем большинстве код - 128-битный.

Он и в прошлой версии был 128-битный, но какой-то более человеческий.

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

Ну то есть понятно, производительность не переносится, но 2-3 раза просадки - это беспредел.

Единственный пример, который стал быстрее, называется Histogram. Но его и старая версия отказывалась векторизовать (немудрено) и новая тоже не хочет.

Опять про movntps

Читал комментарии к прошлому посту про movntps, много думал. Вспоминал, что на i7-920 выигрыш от movntps был и значительный.

Пришлось потратить час-полтора на очередной набор микробенчмарок. Картинка получилась куда сложнее, чем я сначала подумал.

О компиляторах и процессорах: AVX

Армянское радио Нас спрашивают:

Как измениться производительность intrinsic варианта на Core-i7, если поменять
_mm_dp_ps на _mm256_dp_ps
_mm_blend_ps на _mm_blend256_ps

То-есть насколько вырастить производительность если мы совсем на AVX переедем и будет обрабатывать по 8 float за проход? А то слухи разные ходят... от 0% до 200% роста.

Отвечаем:

О компиляторах и процессорах

В комментариях к моему посту о целых числах и плавающей точке мне посоветовали обратить внимание на векторные типы данных и сравнить их по производительности со скалярными типами (ну и ручным SSE-ассемблером тоже).

Я обратил и сравнил, но в процессе получилась масса побочных результатов (разные архитектуры, разные компиляторы), которые жалко выкинуть, а хочется опубликовать.

Об автоматической векторизации

Провел на поминавшемся вчера ISPC еще один тест, на применимость ровно в том месте, куда он лучше всего приспособлен.

Есть такое ужасное место в обработке изображений (уже поминавшееся в этом блоге): преобразование из линейной гаммы в sRGB-гамму или в Lab. Там в формуле сначала линейный участок, а потом степенной. Вот как это выглядит, если делать в лоб для плавающей точки:

void linear2srgb(float *in, float *out)
{
   for(int i = 0; i< DATA_SIZE; i++)
        out[i] = ((in[i]<=0.0031308f)? 12.92f*in[i] : (1+0.055f)*powf(in[i],1/2.4f)-0.055f);
}

Ну, понятно, для (целочисленных) 8-16-битных данных составляют лукап-таблицу, а дальше фигачат по ней, а вот для большей битности таблица получается изрядно большой. Вычислять эту штуку в лоб мешают две вещи:

  • ветвление на каждое входное данное;
  • возведение в степень, которое тоже очень медленное: на SSE/AVX такой функции нет, на FP87 есть, но безобразно медленная.
К примеру, при обработке плавающих данных LCMS (преобразование в Lab, преобразование по матричному профилю в sRGB) процентов 90 времени уходит именно на вышепоказанную операцию (правда в LCMS это место еще сделано потрясающе неудачно с точки зрения производительности).

Как я уже писал, правильное решение заключается в замене вышепоказанной функции чем-то приличным, скажем для кубических сплайнов с таблицей в 4к строк максимальная ошибка по всему диапазону не превышает 10-6, что для всех применений достаточно, при скорости порядка 1.2-1.5Gb/sec на одно процессорное ядро. Но одна строчка кода превращается в несколько десятков, таблицу коэффициентов сплайнов надо еще построить, что мучительно.

Посмотрим, что можно сделать с помощью ISPC и можно ли вообще что-то.

Не все йогурты одинаково полезны

OpenCL люб нам за то, что его вкус можно ощутить и без подходящей видеокарты, уже есть реализации для CPU.

Более того, реализаций для CPU уже две на виндах: AMD-шная входит в состав ATI Catalyst (драйверов для видеокарты) и даже при отсутствии подходящей видеокарты эта часть драйверов поставится. Кроме того, Intel-овский OpenCL на днях перешел из стадии альфа в бету. На Linux, кстати, есть еще IBM-овский OpenCL для CPU, все руки не доходят его ощупать.

Берем AMD-шный пример BitonicSort из APP SDK 2.4 (это AMD-шный SDK для GPGPU) и запускаем, без перекомпиляции, прямо на всех имеющихся в машине девайсах и реализациях. Сортируем 16 млн. элементов. В порядке падения быстродействия:

  1. Intel OpenCL (процессор i7-2600k @4.5Ghz): 10.6 сек.
  2. NVidia OpenCL (GTX480, драйвер 270.61): 16.4 сек.
  3. AMD OpenCL (Radeon 5870, драйвер 11.4): 29.3 cек.
  4. AMD OpenCL на CPU (тот же самый): 415 сек.
Я подозреваю, что AMD-шный OpenCL в случае CPU просто процессор не опознал и сгенерировал код для 8086 или что-то вроде этого. Для CPU AMD Kernel Analyzer показывает нам невекторизованый код, т.е. процессор не опознался и что под него генерировать AMD не знает. На предыдущем процессоре (i7-920) такой разницы с интеловским OpenCL (тогда он был в первой альфе) не было. При этом, при исполнении на AMD-OpenCL процессор загружен где-то на четверть, а "под интелом" - на 100%

Прикол тут в другом: по формальному быстродействию горшки ранжируются в обратном порядке: у AMD бешеные 2 терафлопса на float (по пресс-релизу AMD: 2.7 TFLOP/s), у NVidia - раза в два поменьше (в районе 1.35 TFLOP/s если формально считать), у CPU же, даже если AVX посчитать как 16 операций на такт (две AVX-операции на такт) получается 16 x 4 ядра x 4.5 гигагерца = 288 GFLOP/s.

Понятно, что сортировка - дело такое, для потоков плохо предназначенное.

Чтобы два раза не вставать: большинство AMD-шных примеров на GTX480 работает быстрее (и лишь некоторые - незначительно медленнее), чем на HD5870. Несмотря на формальные попугаи, говорящие об обратном. Обратного, чтобы OpenCL-примеры NVidia работали бы быстрее на AMD, - не наблюдается.

Update: Помучал тот же пример на машине с i7-920 и GTX280. AMD OpenCL/CPU никуда не годится и там, увы. Может быть надо kernel как-то иначе писать. Что же касается реализаций Intel (CPU) и NVidia (GPU), то на этой паре железок и BitonicSort они работают практически одинаково по скорости.

О взаимном знании двух рук

Надо сказать, что сочетание Sandy Bridge и интеловских средств профайлинга производит тягостное впечатление.

На i7 (предыдущего поколения) был у меня VTune Amplifier XE из состава Intel C++ Composer XE (12-я версия компилятора, а версию VTune я не считал). И все работало, никаких проблем.

После замены процессора VTune сказала мне, что hardware sampling на этой архитектуре она не умеет. Ну ладно, компилятор вышел в конце 2010-го, тогда Sandy Bridge в продаже не было (у интела, впрочем, были, как мне кажется).

Ставим C++ Composer XE update 1 (где-то февральский, если я не путаю). При установке он предупреждает, что тоже не умеет hardware sampling на этой архитектуре. Ну, странно да. Одновременно отваливается и User Mode Sampling, да.

Но есть еще VTune Amplifier XE update 2, совсем свежий. Ставим его. Аппаратный самплинг появляется, но User Mode так и не работает. И это известная проблема, советуют you can try to re-install the product. Running it on a different machine should help also. Тьфу. Как-то я был лучшего мнения об интеловских разработках.

Конечно, с lightweight hotspots (без анализа стека) можно как-то жить, но довольно неудобно. MS-овский профайлер работает настолько медленно, что это ужоснах.

Да, я try reinstalling, не помогло. Different machine у меня в данный момент нет.

Pages

Subscribe to intel