Pull to refresh
0

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

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

Недавно появилась возможность скачать бету Ct, зарегистрировавшись на сайте. Пока только для Windows, но через некоторое время должна появиться бета и для Linux.

Если внимательно прочитать статью об Intel Ct в википедии … то ничего о сущности Ct узнать не удастся. На русском языке тоже информации немного. А жаль — технология из ряда тех, которые лично мне кажутся одновременно полезными и элегантными.

Если одним предложением — Intel Ct это технология, позволяющая достаточно прозрачно для программиста воспользоваться параллельностью современного и перспективного железа, во многих ее формах. Ландшафт вполне неплохо окученный — CUDA, OpenCL, Cilk++, TBB, OpenMP, MPI и т.д. У каждого подхода есть своя область применения, сильные и слабые стороны, свои сторонники и свои направления развития. Область применения Ct — реализация data parallel алгоритмов. Так что из вышеприведенного списка по задачам к Ct наиболее близки CUDA и OpenCL.

Я бы назвал Ct DSLом. Есть свой рантайм, реализованный на C++ (шаблоны, перегрузка операторов, все очень идеоматичненько). Естественно, программа на Ct откомпилируется компилятором Intel. Последний gcc тоже подойдет.

Основной тип — Vec. Его инстансы immutable, передаются по значению, операторы возвращают новый экземпляр. Отсюда функциональный привкус, и заметные преимущества в обеспечении многопоточной корректности. Никаких проблем с data-races и дедлоками (by design).
Vec бывают разные — одномерные, 2-х и 3-х мерные, разреженные. Их элементами могут быть разные типы, включая векторы. Например,
Vec charArray(source, width); // create and initialize vector
Vec2D intArray(source, width, height);
rcall(ct_foo)(charArray, 1); // call example Ct code.

Программа делится на 2 области — область C++ и область Ct. Можно в одном и том же .cpp файле. В области C++ можно объявлять и инициализировать вектора, в области Ct — производить над ними операции. Например, код, приведенный выше — область С++.(Я здесь немного упрощаю.)
А вот и область Ct:
void ct_foo(Vec& charArray, int t)
{
charArray += t; // updates all vector data with scalar.
}

Менее тривиальные примеры можно найти в каталоге samples или здесь.

Есть два вида компиляции — отладочная и релизная. Основная разница — линковка с разными библиотеками. После линковки с отладочной библиотекой все будет прозрачно работать в Intel Debugger (и в gdb, конечно, тоже), можно дебажить как обычный C++ код.
Релизная версия линкуется со своим рантаймом (там на самом деле виртуальная машина — есть GC, JIT). Во время ее запуска происходит рекомпиляция для архитектуры, на которой исполняемся. Достаточно быстрая рекомпиляция. Даже в бете это не очень долгий процесс — я намерил около 300 миллисекунд для средних размеров рассчетной задачки.

Чем выгодна такая сравнительно сложная внутренняя архитектура? А как еще обеспечить бесплатную для разработчика совместимость вверх?
Например, если вдруг когда-нибудь :) появятся процессоры, состоящие из нескольких «широких» x86 ядер, и большого количества простых x86 ядер, сидящих на общей памяти. Или надо будет одновременно воспользоваться SIMD и multi-core. И если гетерогенные ядра — дело достаточно далекого будущего, то расширение регистров SIMD до 256 бит произойдет уже скоро . А там, глядишь, и 512 бит не за горами. Причем перекомпиляция не потребуется — просто слинковаться с динамической библиотекой. Ну, которая с рантаймом.
Код в Ct выражает алгоритм с точки зрения вычислительной задачи, совершенно прозрачно относительно платформ, на которых он может выполняться. Рантайм разбирается с платформой, и нет необходимости менять реализацию или беспокоиться о blocks/warps/threads.

Так как продукт еще официально не выпущен, я не могу очень подробно описывать функциональность — она все равно поменяется. Но вряд ли радикально, и, скорее всего, если это случится, будут доступны скрипты/документы, которые помогут адаптировать написанный софт к релизу. Если скачать бету сейчас, то в каталоге Doc есть замечательный файлик ct_userguide.pdf. Там есть все. На этот раз наши технические писатели особенно хорошо поработали. Конечно, все на не нашем языке, но кого это останавливало? Еще больше информации появится ближе к релизу, ну и я смогу ответить на некоторые вопросы в комментах.

Сложно было написать так много букв, ни разу не упомянув один логически связанный с предметной областью продукт. Стоит тут недалеко в лабе, но увы, пока не могу о нем сказать ничего нового.
Tags:
Hubs:
+20
Comments 23
Comments Comments 23

Articles

Information

Website
www.intel.ru
Registered
Founded
Employees
5,001–10,000 employees
Location
США
Representative
Анастасия Казантаева