Как стать автором
Обновить
70
0
Alexander Komarov @izard

software optimization

Отправить сообщение

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

Время на прочтение3 мин
Количество просмотров5.9K
С каждым новым поколением процессоров 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

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

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

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

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

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

image

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

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

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

image

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

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

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

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

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

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

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

То ли дело настоящие промышленные роботы:
Читать дальше →
Всего голосов 15: ↑14 и ↓1+13
Комментарии2

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

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

Angry Birds на PLC?

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

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

Время на прочтение7 мин
Количество просмотров32K

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

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

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

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

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

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

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

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

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

Читать дальше →
Всего голосов 31: ↑26 и ↓5+21
Комментарии9

Intel Architecture Code Analyzer 2.0.1

Время на прочтение2 мин
Количество просмотров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
соответственно, перед началом и после окончания оптимизируемого кода. Например,
Читать дальше →
Всего голосов 17: ↑15 и ↓2+13
Комментарии6

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

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

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

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

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

Время на прочтение3 мин
Количество просмотров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
(все проверки и т.д. здесь и далее опущены для простоты)

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

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

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

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

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

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

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

Worst case execution time на x86

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

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

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

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

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

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

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

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

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

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

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

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

Информация

В рейтинге
Не участвует
Откуда
Portland, Oregon, США
Дата рождения
Зарегистрирован
Активность