Pull to refresh
70
0
Alexander Komarov @izard

software optimization

Send message

Новая библиотека x86 SIMD интринсиков — immintrin debug

Reading time 3 min
Views 5.8K
С каждым новым поколением процессоров Intel появляются новые и все более сложные векторные инструкции. Хотя длина вектора (512 бит) в ближайшее время расти не будет, появятся новые типы данных и виды инструкций. Например, кто сможет с первого взгляда понять, что делает такой интринсик (и соответствующая ему инструкция процессора)?

Bitwise ternary logic that provides the capability to implement any three-operand binary function; the specific binary function is specified by value in imm8.

__m512i _mm512_mask_ternarylogic_epi32 (__m512i src, __mmask8 k, __m512i a, __m512i b, int imm8)
FOR j := 0 to 15
    i := j*32
    IF k[j]
        FOR h := 0 to 31
            index[2:0] := (src[i+h] << 2) OR (a[i+h] << 1) OR b[i+h]
            dst[i+h]   := imm8[index[2:0]]
        ENDFOR
    ELSE
        dst[i+31:i] := src[i+31:i]
    FI
ENDFOR
dst[MAX:512] := 0

ОК, допустим, мы разобрались, как она работает. Следующий уровень сложности — отладка кода, интенсивно использующего такие интринсики.
под катом о новом средстве для отладки интринсиков
Total votes 29: ↑28 and ↓1 +27
Comments 0

CAT — Управление размером кэша процессора

Reading time 4 min
Views 9.5K
Архитекторы процессоров архитектуры x86 исторически были против предоставления программистам возможности непосредственного управления кэшем. Один как-то сказал мне в 2009 году — «никогда мы этого не сделаем, кэш всегда должен быть прозрачным для программиста». Некоторые RISC процессоры представляют архитектурную возможность управления данными/кодом, который окажется в кэше. И вот, наконец-то, нечто подобное появилось и в архитектуре x86 (начиная с Broadwell*).
Читать дальше →
Total votes 22: ↑21 and ↓1 +20
Comments 8

Самая медленная инструкция x86

Reading time 3 min
Views 37K
Все знают и любят ассемблер x86. Большинство его инструкций современный процессор исполняет за единицы или доли наносекунд. Некоторые операции, которые декодируются в длинную последовательность микрокода, или ожидающие доступа к памяти могут исполняться намного дольше — до сотен наносекунд. Этот пост — о рекордсменах. Хит парад из четырех инструкций под катом, но для тех, кому лень читать весь текст, я напишу здесь, что главный злодей — [memory]++ при определенных условиях.

image

КПДВ взята из документа Агнера Фога, который, наряду с двумя документами от Intel (optimization guide и architecture software development manual) содержат много полезного и интересного по теме.
Читать дальше →
Total votes 45: ↑45 and ↓0 +45
Comments 28

Содержимое Intel IOT development kit

Reading time 5 min
Views 18K
В феврале я писал о сборке Yocto для Galileo gen1, которая несколько облегчает разработку для Galileo. С тех пор прошел почти год, и у Galileo появились последователи — Galileo gen2, Edison. Про Edison (уже два месяца в продаже) надо писать отдельно, этот же пост об Intel IOT Development Kit.

image

Из железок на моем рабочем столе (извините за беспорядок) он совместим с Galileo gen1, gen2 и Edison.
С декабря 2013 по октябрь 2014 я был архитектором этого продукта, и сейчас я опишу, как продвигался проект, что уже получилось, и что запланировано.
Читать дальше →
Total votes 18: ↑17 and ↓1 +16
Comments 19

Galileo developer kit для Internet Of Things и программа для разработчиков

Reading time 3 min
Views 10K
На позапрошлой неделе на Mobile World Congress президент Intel Рене Джеймс анонсировала программу для разработчиков Internet Of Things. Всякие конкурсы-призы-хакатоны, короче — маркетинговая программа. Но были некоторые новости и по технической части. На MWC и Embedded World наша команда продемонстрировала некоторые новые возможности в разработке софта для IOT. Мы опубликовали два бинарных образа дисков (и соответствующие исходники для самостоятельной сборки), которые позволяют серьезно сократить время, необходимое для настройки системы для разработки софта для Galileo.
Читать дальше →
Total votes 18: ↑18 and ↓0 +18
Comments 20

Отчет о посещении SPS IPC Drives 2013 — немного о настоящих промышленных роботах

Reading time 4 min
Views 8.4K
imageНа Хабре публиковалось много отчетов о посещении основных выставок IT индустрии — CeBIT, CES, MWC. Я решил написать пост о SPS IPC Drives 2013, прошедшей недавно в Нюрнберге. Тоже большая выставка, 60000 посетителей — почти как на MWC. Я езжу на SPS/IPC/Drives уже третий год (живу недалеко, и по работе полезно), и в этом посте попытаюсь описать, на какие тенденции развития отрасли я обратил внимание в этот раз. У Intel нет на этой выставке своего стенда, поэтому лично мне эта выставка нравится больше всех остальных — не надо стоять на стенде несколько дней подряд, изучая окрестности во время коротких вылазок, когда подменяет коллега, а можно вдумчиво все обойти пофотографировать и пообщаться с участниками.

Название выставки — SPS/IPC/Drives на русский переводится как «Программируемые логические контроллеры, индустриальные ПК, и cервоприводы.» Эти три категории продуктов, и все с ними связанное и составляют большую часть продуктов и сервисов, которые демонстрируют полторы тысячи компаний-участников.

Как и на всех IT выставках, где большая часть посетителей — мужчины, компании нанимают красивых девушек, чтобы они завлекали посетителей к их стендам. Девушек я фотографировать в этот раз не стал, а снимал только роботов, типа этого музыканта на заглавной картинке. Конечно, гуманоидных роботов было подавляющее меньшинство, а те, что были, не делали ничего полезного.

То ли дело настоящие промышленные роботы:
Читать дальше →
Total votes 15: ↑14 and ↓1 +13
Comments 2

Совместный запуск Linux и baremetal OS

Reading time 4 min
Views 16K
Недавно я выложил в сеть под BSD лицензией небольшой проект на 8 килострочек C кода. Официально это коллекция бенчмарков для моих клиентов — вендоров промавтоматики. Код очень специфический, и, на первый взгляд, малоприменим за пределами узкой области PLC и motion control. Но есть небольшая изюминка, на которой я не очень акцентировал внимание в статье на IDZ. В поставку бенчмарков включена baremetal среда для их исполнения. В этом посте я опишу, что это такое, и как ее можно использовать.
Читать дальше →
Total votes 31: ↑30 and ↓1 +29
Comments 13

Angry Birds на PLC?

Reading time 4 min
Views 18K
imageВ предыдущем топике я обещал подробнее описать особенности программирования промышленных PLC, и почему такое программирование все больше напоминает разработку обычного софта. О языке IEC61131-3 ST (промышленном диалекте Паскаля) я уже писал, также хорошим вступлением можно считать вот этот хабратопик. Этот пост — о компиляторах PLC, средах разработки, особенностях программирования и эволюции языка и экосистемы.
Читать дальше →
Total votes 25: ↑19 and ↓6 +13
Comments 13

Промышленные сети в контексте четвертой промышленной революции

Reading time 7 min
Views 32K

Сначала небольшое историческое отступление о том, что такое четвертая промышленная революция, анонсированная в прошлом году.
  • Появление промышленности. Первая промышленная революция произошла в начале XIX века и была связана с массовым переходом от использования мускульной силы к энергии парового двигателя. Ключевые технологии — паровой двигатель, фабрика. Появилась возможность массового производства, но его продукты стоили дорого.
  • Массовое производство. Вторая революция случилась в начале 20 века, и ознаменовала начало дешевого массового производства. Ключевые технологии — конвейер и Тейлоризм. Продукты массового производства подешевели на порядок.
  • Автоматизация. Третий переворот в промышленности произошел в 80-е годы. Станки с ЧПУ и роботы сделали современные фабрики практически безлюдными. (Аутсорсинг ручного труда в развивающиеся страны сгладил эту тенденцию.) Продукты массового производства подешевели еще на порядок (стало дешевле выкинуть, чем чинить).
  • Децентрализация. Революция четыре точка ноль происходит сейчас. Ключевая технология — конвергенция промышленности и IT, 3д принтеры. Появляется возможность производства мелкой серии или уникального продукта по цене, приближающейся к стоимости того же самого в крупной серии.
Это немецкий взгляд на 4 четыре фазы развития промышленности. Существует еще и американский, который не разделяет третью и четвертую фазы.

Мне кажется, во вступлении я написал слишком много общих фраз и слишком мало технического хардкора. Исправлю это под катом, описав некоторые технические детали о промышленных сетях и продуктах Intel, связанных с ними (+ еще одна картинка с роботом).
Читать дальше →
Total votes 37: ↑35 and ↓2 +33
Comments 16

Действительно ли у каждого ядра есть «свой собственный» кэш первого и второго уровней?

Reading time 6 min
Views 35K
У современных процессоров архитектуры Core i7 существует очевидный, документированный, но отчего-то не очень известный даже среди многих специалистов сценарий priority inversion. Его я опишу в этом посте. В нем есть код на С, три диаграммы, и некоторые подробности работы кэшей в процессорах архитектуры Core i7. Никаких покровов не срывается, вся информация давно общедоступна.

Priority inversion – ситуация, когда низкоприоритетный процесс может блокировать или замедлять высокоприоритетный. Обычно имеется в виду очередность доступа к исполнению на ядре для высокоприоритетного кода относительно низкоприоритетного. С этим должно неплохо справляться ядро ОС. Однако помимо вычислительных ядер, которые несложно распределять посредством affinity и MSI-X, в процессоре есть ресурсы, общие для всех задач – контроллер памяти, QPI, общий кэш третьего уровня, PCIe устройства. В вопросы PCIe я углубляться не буду, т.к. не являюсь экспертом в данной теме. Priority inversion на почве доступа к памяти и QPI я давно не наблюдал – пропускной способности современного многоканального контроллера как правило хватает и высокоприоритетным, и низкоприоритетным задачам. Остановлюсь на кэшах.
Читать дальше →
Total votes 59: ↑55 and ↓4 +51
Comments 31

x86 на производстве: high end промышленные контроллеры, Паскаль и вирусы

Reading time 5 min
Views 16K
Есть такой не очень корректный термин: PC based industrial automation. Я думаю, что он не совсем точен, так как никто, конечно, не подсоединяет станок к обычному персональному компьютеру. А то вдруг зависнет, и станок отрежет что-нибудь ненужное. Но рациональное зерно в этом термине есть — уже много лет среди управляющих устройств промышленной автоматизации встречаются устройства, напоминающие ПК.

Simatic S7Напоминающие, конечно, не внешне.

Как и в вашем ноутбуке, в контроллере может стоять процессор Core i5, обыкновенная DRAM (только обычно с ECC), SSD диск, обычный Ethernet. Процесс загрузки тоже не отличается — BIOS загружает операционку. Как правило, операционка — RTOS. Однако иногда бывает даже Windows. Причем не всегда это Windows Embedded Compact (бывшая CE). Используется даже Windows Embedded 7, а это полноценная семерка. (Линуксы тоже встречаются)

Читать дальше →
Total votes 31: ↑26 and ↓5 +21
Comments 9

Intel Architecture Code Analyzer 2.0.1

Reading time 2 min
Views 4.6K
Мои потребности в анализе производительности софта на x86 покрывают три тула. Один из них — Vtune XE знаком, наверное, всем, кто сталкивался с оптимизацией.

Второй тул, к сожалению, не столь широко известнен. Он уже упоминался на Хабре в контексте оптимизации AVX кода, но область его применения несколько шире.

Иногда после того, как Vtune нашел самый главный хотспот (а зачастую, разработчик и так его знает), возникает потребность приложить некоторые усилия для уменьшения числа тактов, которые тратятся на его исполнение. Уже почти три года я использую для анализа производительности таких небольших, но критичных участков кода Intel Architecture Code Analyzer.

Пользоваться им просто, вот рекурсивный алгоритм всего лишь из 6 шагов:
1. В соответствующем .c/.cpp файле включается
#include «iacaMarks.h»,
2. dll/so библиотеки IACA кладутся в доступное системе место,
3. в исходник добавляются макросы
IACA_START, IACA_END
соответственно, перед началом и после окончания оптимизируемого кода. Например,
Читать дальше →
Total votes 17: ↑15 and ↓2 +13
Comments 6

Анонсирована аппаратная поддержка транзакционной памяти в Haswell

Reading time 4 min
Views 14K
Haswell будет очень инновационным Tock'ом. Еще в прошлом году стало доступно описание новых операций с целыми в AVX. А на этой неделе было опубликовано очередное расширение архитектуры X86. В Haswell появится аппаратная поддержка транзакционной памяти! На англоязычных сайтах обсуждение кипит. ISN Arstechnica LWN Engadget

Я думаю, что это самое нетривиальное расширение архитектуры X86 за много-много лет. Фича называется Transactional Synchronization Extensions (далее TSX), и состоит из двух частей — Hardware Lock Elision (HLE) и Restricted Transactional Memory (RTM). Обратите внимание на слово «Restricted». Все верно, есть некоторые ограничения по объему, гранулярности и уровню вложенности транзакций.

Об этих ограничениях и как это все будет работать подробнее под катом. (Никаких картинок, скучный технический текст)
Читать дальше →
Total votes 28: ↑26 and ↓2 +24
Comments 14

Об истории реализаций memcpy и их производительности

Reading time 3 min
Views 22K
void * memcpy ( void * destination, const void * source, size_t num );
Казалось бы, что там сложного? А о реализациях этой функции можно написать целую историю.

Когда я смотрю на окно своего любимого рабочего инструмента — профилировщика Vtune XE, очень часто вижу, что он в очередной раз обнаружил, что значительное время потратилось на копирование памяти. Так и обычно и написано: clock ticks spent in libgcc/[g]libc/kernel memcpy — XX%.

Наверное, поэтому memcpy часто переписывался, например в lkml частенько появляются подобные треды. (Больше реализаций, скорее всего, есть только у сортировок). Казалось бы, в отличие от сортировки, где есть много вариантов и алгоритмов с копированием памяти все просто. На самом деле, даже если говорить о корректности, а не производительности, возможны варианты. (В подтверждение тому — обсуждение эпического бага с участием Линуса Торвальдса и Ульриха Дреппера).

Еще во времена 8086, то есть тридцать четыре года назад, внутри реализации memcpy был следующий код:
mov [E]SI, src
mov [E]DI, ptr_dst
mov [E]CX, len
rep movsb
(все проверки и т.д. здесь и далее опущены для простоты)

Что же изменилось с тех пор? Под катом ассемблерный код и ни одной картинки.
Читать дальше →
Total votes 45: ↑44 and ↓1 +43
Comments 36

Особенности работы кэша применительно к realtime на x86

Reading time 3 min
Views 14K
image В продолжение постов об использовании железа с х86 архитектурой в системах реального времени. Там я вкраце описал, насколько x86 удовлетворяют realtime требованиям, и что этому мешает.

Небольшое лирическое отступление. Системы реального времени — один из наименее известных двигателей компьютерного прогресса. Например, первый портативный компьютер был создан благодаря им. Сейчас почему-то считается, что первым серийным портативным компьютером был Osborn. На самом деле устройство на картинке выше было создано в Сименсе как cредство управления и программирования промышленной автоматизации за два года до Osborn. Переносные компьютеры этого семейства (Siemens Simatic) выпускаются и сейчас, хотя, конечно, железо много раз менялось.

Но перейдем к делу. В этом топике я подробнее остановлюсь на одном из факторов, который мешает предсказуемости времени выполнения realtime кода. Под катом будет не длинный, но нудноватый текст.
Читать дальше →
Total votes 43: ↑42 and ↓1 +41
Comments 25

2 года в Германии, впечатления после переезда из Новой Зеландии

Reading time 6 min
Views 6.2K
Почти 2 года как мы с женой переехали в Германию из Новой Зеландии. Хочу описать впечатления и несколько лайфхаков, полезных первое время. Все это можно найти в интернете, но редко в одном месте. Возможно, отчасти все будет слишком специфично для Мюнхена/Баварии. Текст длинный!
Читать дальше →
Total votes 14: ↑14 and ↓0 +14
Comments 10

Worst case execution time на x86

Reading time 3 min
Views 7.8K
В прошлом посте я описал, как и зачем измеряется interrupt latency на платформе Atom.

Сегодня расскажу о том, почему один и тот же код с одними и теми же входными данными может исполняться разное время. Для некоторых realtime приложений это очень нежелательный эффект, с которым приходится бороться.
Читать дальше →
Total votes 26: ↑23 and ↓3 +20
Comments 12

Вопросы использования Intel Atom для embedded realtime задач

Reading time 3 min
Views 10K
После того, как архитектура Atom проявила себя в нетбуках, некоторые компании стали использовать Atom для Embedded Realtime применений. Делают промышленные контроллеры, гоняют на них PLC код.

Те же чипы, что и в нетбуке обычно на заводах не используют. Есть специальный платформы. Сначала был Crown Beach, сейчас начинает использоваться в дизайнах Queens Bay. Для IVI (автомобильный компьютер) есть своя платформа.

Естественно, удовлетворение realtime требований — необходимое условие. Об этом подробнее под катом.
Читать дальше →
Total votes 38: ↑30 and ↓8 +22
Comments 18

Intel Ct beta — что, зачем, как

Reading time 3 min
Views 5.9K
2 недели назад помогал клиенту начать пользоваться бетой Intel Ct. Заодно, как водится, и сам немножко разобрался, и теперь хочу поделиться.

Недавно появилась возможность скачать бету Ct, зарегистрировавшись на сайте. Пока только для Windows, но через некоторое время должна появиться бета и для Linux.
Если интересно, стоит ли пробовать скачать бету Intel Ct, и что это вообще такое, читайте дальше.
Total votes 30: ↑25 and ↓5 +20
Comments 23

Стань судьей Android Developer Challange 2. На Android Market появилось программа для судей-волонтеров

Reading time 2 min
Views 1.2K
Два дня назад Google наконец-то опубликовал на Android Market программу для судей Android Developer Challenge 2. Результаты первого тура целиком зависят от оценок пользователей! Есть около 2 недель на то, чтобы проголосовать.

Был опубликован неполный список программ, засабмиченных на ADC 2.
В списке около 100 программ, но на самом деле их гораздо больше. Около 50 я уже успел посмотреть и поставить им оценки, а Judging app предлагает посмотреть все новые и новые приложения. Жена будет недовольна тем, как я проведу выходные :(
Читать дальше →
Total votes 5: ↑5 and ↓0 +5
Comments 4
1

Information

Rating
Does not participate
Location
Portland, Oregon, США
Date of birth
Registered
Activity