Применения

 

Решение для потокового шифрования

 

Мы предлагаем уникальное решение, MALT-C, - программируемый на C/C++ чип с энергетикой встраиваемого микропроцессора, производительностью на Ватт на уровне современного ПЛИС на всех популярных потоковых шифрах и ценой универсального микропроцессора! Ни одного микропроцессора с подобными характеристиками ранее в России спроектировано не было!

 

Построенные на процессорах семейства MALT-C криптографические ускорители предназначены для использования в задачах симметричного шифрования, в том числе для потоковых шифров. Предпочтительной является многоканальная обработка. Наши процессоры построены на доверенной отечественной архитектуре. В конце 2017 мы получили с фабрики и успешно протестировали первые образцы MALT в «кремнии».

 

Посмотрите на характеристики: базовый кристалл, 160-ядерный MALT-C с индексом 7Mb160PLV, с частотой 1 ГГц и пиковым энергопотреблением 5 Вт в задаче шифрования AES128 обеспечивает максимальную пропускную способность 195 Гбит/c! (режим ECB, без учета подготовки ключа). На нем эффективно реализуется шифрование по стандартам ГОСТ 28147-89 ("Магма"), ГОСТ Р 34.11-2012 ("Стрибог") и ГОСТ Р 34.12-2015 ("Кузнечик"). Попробуйте MALT! Примените в своих разработках MALT-C вместо зарубежных ПЛИС и криптографических сопроцессоров! Подробное сравнение приведено в таблице ниже.

 

Таблица. Сравнение пропускной способности процессора MALT-C 7Mb160PLV с CPU, GPU и специализированными интегральными схемами на различных алгоритмах шифрования. Данные приведены без учета подготовки ключа, блочные шифры используются в режиме потокового шифрования. 

Алгоритм 7Mb160PLV
Гбит/c
CPU, Гбит/c GPU, Гбит/c ASIC, Гбит/с
ГОСТ Р 34.12-2015
“Кузнечик”
10 Intel Core i7-3537U(1)
0.12
NVIDIA GeForce GT750M (1)
2.2
 
ГОСТ 28147-89
“Магма”
120 Intel Xeon E5 2697 v3(2)
22
NVIDIA GeForce GTX 750(2)
21.2
 
AES 128 195 Семейство Intel Xeon E5v2 (3)
50
NVIDIA GTX 1080(4)
280
 
RC4 160     Результат моделирования (5)
30.72
Salsa20 444   NVIDIA GeForce GTX 590(6)
43.4
 
Chacha20 364 Intel Core i7-6700(7)
19
  ChaCha-IP-13(8)
12.8

 

Примечания:

1) Увеличение скорости работы алгоритма шифрования «КУЗНЕЧИК» с использованием технологии CUDA.

2) Производительность ГОСТ-шифрования на х86- и GPU-процессорах.

3) AES-GCM Encryption Performance on Intel® Xeon® E5 v3 Processors.

4) High Performance CUDA AES Implementation: A Quantitative Performance Analysis Approach.

5) High-Performance Hardware Implementation for RC4 Stream Cipher.

6) New Speed Records for Salsa20 Stream Cipher Using an Autotuning Framework on GPUs.

7) AES-NI SSL Performance.

8) ChaCha-IP-13 / EIP-13 ChaCha20 accelerators.

Эти и другие источники вы можете найти в разделе Статьи.

 

 

 

Решение на MALT. Ускоритель потокового шифрования

 

Один из примеров аппаратного воплощения MALT - ускоритель потокового шифрования для шины PCIe. Предназначен для шифрования “на лету” данных, передаваемых по одному из трех направлений: PCIe -> 10G Ethernet, 10G Ethernet -> PCIe, PCIe -> PCIe, соответственно, может выступать как сетевой шифратор/дешифратор на шине PCIe или как ускоритель потокового шифрования для шины PCIe. Модуль представляет собой x4 PCIe карту половинной высоты. Обработку потока данных осуществляет криптопроцессор MALT-С, снабженный собственным ОЗУ, ПЗУ, несколькими 10G интерфейсами, необходимыми вспомогательными портами (UART, JTAG, I2C, 1G Ethernet) для настройки и управления. Для работы MALT-C с шиной PCI Express Gen2/3 используется интерфейсный ПЛИС.

 

Наименование параметра Характеристика
Входные/выходные интерфейсы PCIe Gen1/2/3 x4, 1000BASE-T, 10GBASE-T
Пропускная способность передачи данных по сети До 10 Гбит/с на любом алгоритме без зацепления
Алгоритмы шифрования данных «Кузнечик», «Магма», AES 128, RC4, Salsa20, Chacha20 и др.
Потребляемая мощность, не более До 20 Вт в работе, 0.25 Вт в режиме ожидания
Масштабируемость Возможно подключение нескольких плат на хост
Программирование Полностью программируемое на языке Си устройство

 

 

 

Решение на MALT. Автономный сетевой шифратор

 

Другой пример - автономный шифратор. Устройство представляет собой отдельно стоящий прибор, предназначенный для потокового шифрования в сети Ethernet. Для подключения к доверенной и открытой сетям используются два независимых порта 10G Ethernet, между которыми и производится шифрование. Обработку потока данных осуществляет криптопроцессор MALT-С, снабженный собственным ОЗУ, ПЗУ, двумя 10G интерфейсами, необходимыми вспомогательными портами (COM, JTAG, i2c, 1G Ethernet) для настройки и управления.

 

Наименование параметра Характеристика
Назначение Шифрование «10G Ethernet - 10G Ethernet»
Пропускная способность передачи данных по сети До 10 Гбит/с на любом алгоритме без зацепления
Алгоритмы шифрования данных «Кузнечик», «Магма», AES 128, RC4, Salsa20, Chacha20 и др.
Потребляемая мощность, не более До 15 Вт в работе, 0.2 Вт в режиме ожидания
Программирование Полностью программируемое на языке Си устройство

 

 

 

Доверенное блокчейн-решение

 

Мы первые спроектировали отечественный чип для блокчейна! Да, для майнинга он тоже подходит. Если вам интересен майнинг - напишите нам, и мы расскажем вам о разрабатываемых нами решениях для майнинга существующих сегодня и перспективных криптовалют. Но, блокчейн - это не только майнинг и в первую очередь это не майнинг. Блокчейн - это подход, гарантирующий достоверность данных, хранимых в децентрализованной сети равноправных узлов. Не важно, о какой операции идет речь, о передачи средств в Bitcoin или исполнении контракта в Ethereum, от блокчейн-транзакций, как всегда, требуется скорость и энергоэффективность. 

 

Семейство процессоров MALT-C специально разработано для выполнения вычислительно сложных криптопреобразований, в частности, блокчейн-транзакций с предельной энергоэффективностью. Благодаря нашему процессору вы сможете обеспечить доверенное цифровое взаимодействие, при котором информация и документы будут успешно передаваться и храниться с использованием технологии блокчейн и сертифицированных в России средств криптографии. Процессоры семейства MALT-C потребляют единицы Ватт, поэтому вы сможете создать компактные блокчейн-терминалы, в том числе встраиваемые или носимые. Оборудование на основе архитектуры MALT гарантировано защищено от программных и аппаратных backdoor’ов, здесь вы контролируете все от железа до ПО! Кто еще в мире может предложить такое отечественному заказчику? Применив свой собственный криптографический алгоритм на MALT-C, вы сможете исключить возможность использования специализированных интегральных схем (ASIC) для “взлома” хэш функции прямым перебором, защитив свою блокчейн-систему.

 

 

 

Замена графической карте

 

Сегодня все чаще графические процессоры или GPU находят своё применение для задач, не связанных с визуализацией в компьютерных играх. Это связано с исключительной вычислительной мощностью современных GPU, содержащих тысячи вычислительных элементов, развитыми средствами программирования GPU и, что очень важно, невысокой ценой. Однако, насколько бы GPU не становились похожи на универсальные процессоры, их стихия - обработка графики в играх, там их архитектура раскрывается на 100% и реальная производительность приближается к пиковой. На остальных же задачах, таких как блокчейн, большие данные и математическая физика, их функциональность, с одной стороны, избыточна, так как в блокчейн применениях не используется работа с плавающей точкой, с другой - недостаточна, так как ограниченная поддержка ветвлений и произвольной адресации в общей памяти может снижать на 1-2 порядка производительность в задачах класса "большие данные" относительно теоретического предела.

 

Напрашивается специализированное решение. Что, если создать чип, 80% которого занимают однотипные вычислительные элементы, спроектированные “с нуля” специально под заданный целевой класс задач? Вычислительные элементы объединить в группы, управляемые компактными универсальными RISC процессорами, объединенными в вычислительный массив, “выглядящий” для программиста как обычный, программируемый на C/C++ многопотоковый процессор? Мы получим удобный для программиста и исключительно производительный специализированный процессор. Мы спроектировали три семейства таких процессоров и назвали проект MALT. Читайте подробнее об архитектуре в соответствующем разделе.

Программирование

 

Мы уверены, что вы имеете опыт работы с коммерчески доступными x86/GPU/ARM вычислительными системами на языках С/С++. Скорее всего, вы программировали GPU на специализированных языках типа OpenCL или CUDA. Очень вероятно, что как для универсальных, так и для графических процессоров вы использовали специальные, ориентированные на конкретное “железо”, приемы для повышения производительности работы вашего кода. И, как любому программисту, вам бы хотелось, с одной стороны, “поменьше копаться в железе” и использовать уже изученные, привычные для вас, языки программирования, с другой - “выжать из оборудования все, на что оно способно”, и получить действительно быстрый и/или, в зависимости от требования заказчика, энергоэффективный код.

 

Учитывая вышесказанное, отлично понимая трудности работы с любой новой архитектурой, мы собираемся предложить для программирования всех процессоров, построенных на базе архитектуры MALT, универсальный подход, который позволяет начать работать на MALT с C/C++ кодом, либо уже имеющимся у вас, либо написанным на основе предлагаемых нами примеров. Далее, оптимизируя его в соответствии с рекомендациями из нашего руководства, выжать из оборудования все, на что оно способно. Для удобной отладки пользовательского кода мы предоставляем полнофункциональный эмулятор. Для выявления узких мест и оптимизации в комплекте с эмулятором идет профилировщик.

 

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

 

C++ для MALT. Наиболее простой путь начала работы с MALT. Для программирования скалярных ядер поддерживается стандарт С++17. Работа с потоками осуществляется через конструкции C++ std::thread, std::mutex и другие. MALT выступает в роли классического многоядерного процессора, поэтому портировать существующее ПО и библиотеки легко.

 

OpenCL для MALT. Реализация стандарта OpenCL для работы со скалярными и векторными ядрами MALT. Реализация OpenCL поставляется вместе с библиотекой проблемно-ориентированных алгоритмов, оптимизированных под MALT. Теперь перейти на MALT для пользователей ускорителей AMD, NVIDIA, ARM стало проще.

 

Написать свою программу или запустить интересующий Вас пример можно в онлайн-компиляторе, который скомпилирует исходный код и выполнит его онлайн в виртуальной среде. Онлайн-компилятор позволит не только ознакомиться с системой MALT, но и оценить возможности системы.

 

Отметим, что часть инструментальных средств, описанных выше, находится в стадии разработки, пожалуйста, уточняйте информацию по поводу доступности тех или иных инструментов для конкретного процессора или семейства!

 


 

C++ для MALT

 

При использовании потоков C++ решения MALT "выглядят" как обычные многоядерные процессоры. Поддерживаются стандарты языка вплоть до С++17. Функции для использования аппаратных расширений содержатся в пространстве имён malt::

 

Пример программы на С++ для MALT:

 


#include <vector> 
#include <thread>  
#include <functional>  

int main() {
     const int size_x = 1920;
     const int size_y = 1080;
     uint8_t frame[size_x * size_y], buffer[size_x * size_y];
     load_grayscale_image(frame, size_x, size_y);
     memset(buffer, 0, size_x * size_y * sizeof(uint8_t));

     auto f = [](uint8_t *in, uint8_t *out,
                 int start, int end, int shift) {
         out[start] = in[start];
         for (int offset = start + shift; offset < end; offset++)
             out[offset] = in[offset - 1] / 4 + in[offset] / 2 + in[offset - 1] / 4;
         out[end] = in[end];
     };

   std::vector<std::thread>threads;
   threads.resize(size_y);
   for (int y = 0; y < threads.size(); y++)
       threads[y] = std::thread(f, frame, buffer,
                                y * size_x, (y - 1) * size_x - 1, 1);

   for (auto &t : threads) t.join();

   threads.resize(size_x); 
   for (int x = 0; x < threads.size(); x++) 
      threads[x] = std::thread(f, buffer, frame x, x + (size_y - 1) * size_x, size_x); 
   for (auto &t : threads) t.join(); 
   return 0; }

 

 


 

OpenCL для MALT 

 

Реализация стандарта OpenCL для работы со скалярными и векторными ядрами MALT. Реализация OpenCL поставляется вместе с библиотекой проблемно-ориентированных алгоритмов, оптимизированных под MALT. Теперь перейти на MALT для пользователей ускорителей AMD, NVIDIA, ARM стало проще.

 

Пример программы на OpenCL для MALT:

 


// Примерный код OpenCL-ядра для выделения особых точек изображения

#define DIM_X   128
#define DIM_Y   128

#define M       9
#define MASK(n) (masks+(n)*M*M)
#define HESS_L  100

int D(__global uchar* img, int x, int y, __constant uchar *mask) {
  x -= M/2; y -= M/2; int v = 0;
  for (int dx=0; dx<M; dx++)
    for (int dy=0; dy<M; dy++) 
      v += mask[dx+M*dy] * img[(x+dx)+DIM_X*(y+dy)];
  return v;    
}

__kernel void mark_ipoints(__global uchar *img, __constant uchar* masks) {
  for (int x=M/2; x<DIM_X-M/2; x++) { 
    for (int y=M/2; y<DIM_Y-M/2; y++) {
      int Dxx = D(img,x,y,MASK(0)), 
          Dyy = D(img,x,y,MASK(1)), 
          Dxy = D(img,x,y,MASK(2));
      img[x+DIM_X*y] |= (abs(5*Dxx*Dyy - 4*Dxy*Dxy) > HESS_L) << 7; 
    } 
  }
}

Архитектура

 

Как это работает?

 

Около 80% любого из разрабатываемых нами кристаллов, занимают однотипные вычислительные элементы, спроектированные “с нуля” специально под целевой класс задач. Эти элементы определяют производительность и энергетику чипа. Их на кристалле от сотен до тысяч! Все вычислительные элементы программируемы на языке С или его подмножестве. Вычислительные элементы объединены в группы, управляемые компактными универсальными RISC процессорами, объединенными в вычислительный массив, “выглядящий” для программиста как обычный, программируемый на C/C++ многопотоковый процессор. Классические проблемы многопоточного программирования (механизмы разрешения конфликтов одновременного доступа к общим данным, в том числе атомарные операции) мы решили аппаратно на уровне контроллера памяти.

 

Краткий взгляд на архитектуру MALT

 

Основу архитектуры MALT составляют десятки или сотни, в зависимости от модели, компактных асинхронных универсальных вычислительных ядер, объединенных одной или несколькими оригинальными worm-hole сетями с топологией типа fat-tree. Коммуникация между сетями - программно-аппаратная. Иерархия универсальных ядер включает три уровня: supermaster - управляющее ядро, master - коммуникационные ядра, slave - доступные для задач пользователя вычислительные ядра. Slave ядра, в зависимости от модели, могут содержать векторные ускорители, выполняющие специализированные задачи целевого класса, каждый ускоритель содержит от 8-ми до 128-ми однотипных процессорных элементов с общей памятью команд. Все вычислительные ядра и ускорители имеют собственную локальную память данных. Все универсальные ядра непосредственно адресуют общую внешнюю динамическую память DRAM и другие общие ресурсы (PCIe, Ethernet, SATA). Арбитраж доступа к внешним ресурсам обеспечивается smart memory controller’ом (SMC) - аппаратным контроллером «умной памяти» с дополнительным признаком готовности данных. Количество SMC-контроллеров, перечень и конфигурация общих внешних ресурсов зависит от семейства MALT и определяется требованиями целевых задач.

 

 

Условия Использования

 

Официальное уведомление

 

Данные правила распространяются на всех посетителей и пользователей сайта. Пользуясь материалами сайта, потребитель выражает свое согласие с данными правилами. MALT System сохраняет за собой право изменять данные правила и инструкции по своему усмотрению. В случае нарушения данных правил MALT System оставляет за собой право применить все допустимые законом средства по отношению к нарушителям. Данные правила распространяются на настоящих и будущих посетителей сайта (maltsystem.com) MALT System.  MALT System содержит данный веб-сайт для периодического оперативного и постоянного предоставления необходимой, достаточной и актуальной информации о проекте MALT System всем пользователям интернета, заинтересованным в получении информации о тех или иных аспектах его деятельности, инициативах и достижениях. Хотя мы и будем стараться предоставлять максимально точную информацию, ее точность и полнота не может быть гарантирована. Кроме того, данный веб-сайт содержит некоторые сведения о перспективах (т. е. планы, цели, стратегия и т. д.), отражающие знание нашего менеджмента и включающее в себя риски и неопределенности. Мы бы хотели предупредить вас, что реальный ход событий или результаты могут отличаться от публикуемых на сайте заявлений и проспектов. Таким образом MALT System не несет ответственности или обязательств любого рода за информацию на веб-сайте maltsystem.com.

 

Информация об ограничениях и порядок использования информации

 

Вся информация, размещенная на веб-сайте maltsystem.com,  включая статьи, тексты, фотоизображения, иллюстрации, дизайн сайта, а также подбор и расположение материалов является объектом авторских прав и охраняется в соответствии с законодательством РФ и международным законодательством об авторском праве и смежных правах. MALT System является обладателем исключительных авторских имущественных прав на указанную информацию и представляет интересы авторов статей, размещенных на веб-сайте maltsystem.com. Копирование (в том числе запись на носители информации), воспроизведение (включая воспроизведение на сайтах сети интернет для любых целей, включая обзоры), переработка, распространение, передача в эфир, сообщение по кабелю для всеобщего сведения, доведение до всеобщего сведения через сеть интернет, иное использование статей и других материалов веб-сайта maltsystem.com любым способом без письменного разрешения MALT System (требуется не электронная копия разрешения) запрещено и влечет ответственность, предусмотренную законодательством РФ о защите авторских прав.  При цитировании материалов в сети Интернет ссылка на www.maltsystem.com обязательна. Для получения разрешения на републикацию свяжитесь с нами.

 

Конфиденциальность

 

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

 

Cookies

 

Сайт использует файлы cookies. В соответствии с требованиями законодательства разных стран в области электронной связи, лица, посещающие веб-сайты, использующие cookies, должны быть предупреждены о данном факте и о способах их отключения. Cookie-файл - это небольшой текстовый файл, отсылаемый сайтом на ваш ПК, когда вы заходите на сайт. Этот файл сохраняется на компьютере, и при повторном посещении сайт обращается к данной информации. На нашем сайте файлы cookies используются по техническим соображениям и для ускорения его работы. Если вы не желаете получать данные файлы, вы можете отключить их в настройках безопасности веб-браузера. Однако при отключении cookies MALT System не может гарантировать правильность работы данного сайта. Чтобы сайт запомнил выбранные вами страницы и ускорил их загрузку при следующем посещении сайта, убедитесь, что файлы cookies-включены.

 

Ограничение ответственности

 

Текстовая и графическая информация, использованные на настоящем веб-сайте, не возлагают никаких контрактных или иных обязательств на MALT System  также данная информация не может рассматриваться как предложение или приглашение иного рода к покупке или продаже товаров или услуг. Контрактные и иные обязательства, взятые в соответствии со стандартными условиями и положениями MALT System по продаже, а также условиями и положениями, согласованными с MALT System в письменном виде, имеют приоритет над Информацией, которая приведена на настоящем сайте.  Информация может содержать технические неточности или опечатки. MALT System принимает все возможные меры, чтобы гарантировать точность Информации на момент ее занесения на сайт. Однако, как и любой другой печатный материал, Информация может быть неактуальна на момент обращения к ней посетителя сайта. MALT System не несет ответственности за ошибки, упущения, несвоевременное обновление подобной информации, а ответственность за все решения, принимаемые на основании данной Информации, возлагается исключительно на пользователя. MALT System оставляет за собой право в любое время вносить изменения в содержимое сайта без предварительного уведомления. 

 

Информация не подпадает под действие гарантий или заявлений, выраженных явно или подразумеваемых, а MALT System прямо отказывается от всех подразумеваемых гарантий или положений в части названия, описания, качества, пригодности или непосягательства на право третьих лиц на интеллектуальную собственность. При наличии законодательных актов, ограничивающих область действия ограничительных оговорок, данные ограничения применяются в полном объеме, разрешенном местным законодательством. MALT System не несет ответственности, прямой или косвенной, за косвенные убытки, возникающие при использовании настоящего сайта, включая, в частности, упущенную выгоду, производственный простой, потерю программ и иных данных в системах обработки Информации и потерями иного рода. 

 

Материалы

 

Сайт содержит материалы, охраняемые авторским правом. Все используемые материалы, размещенные на сайте, являются собственностью их автора (владельца прав) и охраняются 4-ой частью Гражданского кодекса Российской Федерации от 18 декабря 2006 г. N 230-ФЗ”. Эти материалы предназначены только для ознакомления. Для прочих целей Вы должны купить лицензионное издание. Если Вы оставляете у себя в каком-либо виде материалы, полученные на этом сайте, но не приобретаете право на их использование, Вы нарушаете законы об Интеллектуальной собственности и Авторском праве, что может повлечь за собой преследование по соответствующим статьям существующего законодательства. 

 

Ссылки

 

Любые ссылки на другие (внешние) веб-сайты предоставлены бесплатно. Информацию с этих сайтов нельзя интерпретировать как дополнение к материалам сайта maltsystem.comMALT System не контролируют эти веб-сайты и доступ к ним — исключительно ваша ответственность. Ссылки, размещенные на данном сайте, могут привести на другие сайты, за которые MALT System не несет ответственности. Соответственно компания MALT System снимает с себя ответственность, прямую или косвенную, за информацию, содержащуюся на данных сайтах.  Все комментарии и материалы, предоставляемые MALT System через настоящий сайт, включая ответы на вопросы или предложения, должны рассматриваться как неконфиденциальные. MALT System не несет ответственности за данные комментарии или материалы и имеет полное право на их копирование, использование или распространение без ограничений. Кроме того, компания MALT System может свободно использовать любые идеи, концепции, ноу-хау и другие технические совершенствования, содержащиеся в подобных комментариях или материалах.

Если у вас есть вопросы по поводу всего вышеизложенного — пожалуйстасвяжитесь с нами.

Основные идеи

 

Легкие потоки

 

 

Как обеспечить возможность эффективной вычислительной загрузки множества простых процессорных ядер? Как упорядочить доступ множества вычислительных потоков к общей памяти без конфликтов и чрезмерных накладных расходов?

Если задача может быть разделена на независимые друг от друга подзадачи, то они могут быть выполнены множеством исполнительных ядер с возможностью быстрого переключения между подзадачами. В общем случае различные ядра могут выполнять различные блоки программного кода. Результаты вычислений сохраняются в общей памяти или передаются из “дочернего” в “материнский” поток. В относительно устоявшейся терминологии это называется "легкие потоки". Здесь важно обеспечить механизм порождения параллельно исполняемых потоков на уровне процессора, а не на уровне операционной системы. В идеале накладные расходы на вызов такого потока сравнимы с затратами при вызове обычной функции. В рамках языка C порождение потока можно описать вызовом вида:

 

void start_thread(int(*)(int), int, ...); 

 

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

 

Такой вызов совместно с атомарными неблокируемыми операциями инкремента и некоторыми другими стандартными операциями создает возможность порождать (spawn) и объединять (join) группы параллельно выполняемых потоков, создавая последовательно-параллельную программу для процессора со множеством вычислительных ядер.

 

 

Умная память

 

Под «умной памятью» обычно понимают память с дополнительными признаками данных и возможностью манипулировать данными на основе этих признаков на уровне контроллера памяти без непосредственного участия вычислительных процессорных ядер. Одним из наиболее известных типов такой памяти является общая память с FE-битами, в которой к каждому слову памяти добавляется один дополнительный бит. Этот бит может принимать значения “full”, если ячейка содержит информацию или “empty” в противном случае. При попытке считать информацию из пустой ячейки, считывающее ядро или поток будет приостановлено до тех пор, пока в ячейке не появятся данные.

 

Таким образом, на аппаратном уровне обеспечивается одновременная работа множества потоков с общей памятью без глобальных блокировок. Формализма FE-битов достаточно, чтобы обеспечить синхронизацию любого заданного количества параллельно исполняемых процессов, в том числе на базе этого подхода можно сделать любые атомарные операции. Ключевые особенности механизма FE битов:
 FE механизмы не порождают глобальных блокировок,
 FE механизмы могут использоваться для блокировок любой гранулярности,
 FE механизмы не используют механизмы опросов,
 FE механизмы не потребляют ресурсы ожидающих потоков.

 

Но умная память это не только FE-биты. Умный контроллер позволяет решить проблемы взаимодействия множества вычислительных потоков с общим ресурсом вообще и общей памятью в частности, в том числе реализовать:
 “настоящие” атомарные операции в памяти,
 “исполнение инструкций в памяти”, например i++ или косвенная адресация,
 “DMA без DMA” т.е. блочные операции, реализуемые без отдельного DMA контроллера,
и многое другое! 

 

 

Темный кремний

 

По мере увеличения числа транзисторов и усложнения технологических процессов растут токи утечки в транзисторе и, как следствие, растет энергопотребление. Эти эффекты заметны на тех. процессах ниже 90 нм, их необходимо учитывать на 28 нм и более новых чипах. Расчетное энергопотребление, которое может быть достигнуто на современном процессоре при toggle rate 50% (переключении каждого транзистора на кристалле один раз за два такта в среднем), на 1-2 порядка превышает TDP (требования по теплоотводу). Это значит, что значительная часть кристалла во время работы должна бездействовать, чтобы обеспечить соответствующее заданному уровню энергопотребление. Эта часть получила название «темный» кремний.

 

«Темный» кремний - это не только не используемые в настоящий момент части блоков памяти и автоматически выключенные на определенных тактах с помощью механизма clock gating’а функциональные элементы, но, в первую очередь, крупные специализированные узлы процессора, не нужные “именно сейчас” и законсервированные путем снижения тактовой частоты, понижения напряжения питания или переведенные в режим “сна”. Концепция "темного кремния" позволяет размещать на кристалле процессора заведомо большее число вычислительных блоков, чем может быть задействовано единовременно в рамках заданного TDP, и консервировать те из них, которые на данный момент не нужны или не могут быть задействованы по энергетическим соображениям.

 

 

Настоящая многоядерность и многопоточность

  Пример исполнения приложений на

  различных группах ядер процессора Kilocore

 

Классическая временная многопоточность (temporal multithreading) основана на исполнении нескольких задач на одном физическом ядре процессора, когда поток исполняется до тех пор, пока не произойдёт аппаратное прерывание, системный вызов или пока не истечёт отведённое для него операционной системой время, после этого ядро переключается на другой поток под управлением операционной системы, переключающей контексты. В multicore архитектурах temporal multithreading дополнен возможностью запустить поток на одном из нескольких физических ядер, одновременная многопоточность (simultaneous multithreading), например hyper-threading в процессорах компании Intel, позволяет запустить на одном физическом ядре несколько потоков. Эти подходы актуальны, когда требуемое количество исполняемых задач существенно превышает количество вычислительных ядер.

 

Однако сейчас мы технологически приходим к процессорным manycore архитектурам, способным предоставить на каждую задачу пользователя сотни или тысячи ядер. Где взять столько потоков? Конечно породить, используя формализм легких потоков на уровне пользовательского кода! Сколько же потоков будет исполняться на одном ядре? В соответствии с концепцией темного кремния - не более одного! Как будут распределяться ресурсы процессора между несколькими задачами? Тривиально, каждая задача получит столько ядер, сколько нужно, и еще останется! Именно это мы называем настоящей многоядерностью и многопоточностью. 

 

 

Компактные вычислительные ядра

 

 

Кристалл intel 8080. 

4800 транзисторов.

Кристалл intel core i7-5960X.

2,6 млрд. транзисторов.

Первые 8-битные процессоры были предельно компактными, так Intel 8080 содержал всего 4800 транзисторов и имел производительность на уровне 0.1 MIPS/Mhz. Классическое ядро Pentium P54C содержало 3,2 миллиона транзисторов и имело производительность на уровне 1.7 MIPS/Mhz. Современный Intel Core i7 содержит несколько млрд. транзисторов и имеет производительность порядка 10 MIPS/Mhz. Да, MIPS не самый объективный показатель производительности вычислительного ядра, а MIPS/Mhz - не самый лучший индекс эффективности архитектуры, но снижение показателя MIPS/Mhz/транзистор на три порядка сложно не заметить.

 

В чем причина? Если кратко, причина в том, что собственно вычисления перестали быть основной задачей ядра. Поддержка вычислений, в первую очередь в части работы с памятью, - вот что сегодня требует миллионов транзисторов. Мы считаем, что необходимо вернуться к компактным вычислительным ядрам, заметная часть которых по числу задействованных транзисторов выполняет целевую вычислительную или иную задачу. Как быть в ситуациях, когда задач много и для них оптимальны различные архитектуры ядра? Сделать универсальную архитектуру, пригодную для всех задач, т.е. создать еще одного монстра с миллиардом транзисторов? Нет! Мы считаем, что нужно делать столько различных программируемых ядер, сколько нужно, оставляя каждое ядро предельно компактным.

 

 

Специализация устройств на кристалле

 

Нельзя говорить о производительности или энергоэффективности вообще, эти ключевые показатели процессора могут рассматриваться только в контексте конкретной задачи, на которой измерены. Если бы под каждый класс задач создавался отдельный вычислитель, а разработчики таких устройств имели равную квалификацию, финансовые и технологические возможности, то эффективность чипа определялась бы только специализацией, т.е. узостью выбранного класса задач: чем уже, тем эффективнее. Большинство таких спецвычислителей относились бы к классу непрограммируемых СБИС, т.е. СБИС с жестко заданной логикой работы.

 

Так на практике и происходит, если целевой класс задач настолько востребован, что требует миллионы чипов, как, например, СБИС для майнинга криптовалют типа биткоин. Их энергоэффективность на конкретной переборной задаче превосходит на 2-3 порядка процессоры общего назначения. Однако очень часто класс задач не столь узок, чтобы обойтись одним непрограммируемым чипом, а разработка целого ряда спецвычислителей под все возможные подклассы не оправдана ни экономически, ни технически. Классический выход из этого тупика - выбор вычислителя с универсальной архитектурой, CPU/GPU или ПЛИС.

 

Есть ли другой путь? Да, есть. Это специализация на уровне вычислительных блоков на кристалле. Такой подход для повышения энергоэффективности уже широко используется при разработке сетевых процессоров, графических карт, процессоров для мобильных устройств, каждый из которых можно рассматривать как спецвычислитель для задачи обработки сетевых пакетов, рендеринга сцен в компьютерных играх или воспроизведения мобильного контента. Если среди перечисленного выше есть ваша задача, то решение для вас уже создано! Если же нет, то, возможно, энергоэффективный процессор под вашу задачу еще только предстоит создать!

 

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

 

 

No cache coherency

 

Когерентность кэша (cache coherence) — механизм поддержания целостности данных, хранящихся в локальных кэшах отдельных устройств в многопроцессорной или многоядерной системе, частный случай когерентности памяти. Этот механизм позволил при переходе от одноядерных к многоядерным процессорам сохранить у программиста иллюзию быстрой общей памяти данных. Накладные расходы на когерентность кэша для систем из нескольких ядер были допустимыми.

 

Ситуация изменилась при переходе к процессорам с десятками и сотнями ядер, когерентность кэша данных, требующая низколатентной связи “всех со всеми”, стала исключительно сложным и энергопотребляющим ресурсом. Так площадь современного кэш-контроллера многократно превышает размер базового 32-битного RISC ядра. Были на этом пути и гениальные решения, например созданный в 2013-том 100-ядерный Tilera Tile-Gx с внукрикристальной кэш когерентной сетью iMesh, который однако не получил широкого распространения.

 

Мы считаем, что когерентность кэшей должна отмереть, как один из рудиментов, оставшихся от одноядерной эры, ей на замену должна прийти программно-управляемая асинхронная распределенная память с NUMA-подобной архитектурой, в которой приложения сами определяют, когда и где необходима синхронизация блоков локальной и глобальной памяти.

 

 

Программирование на С/С++

 

Наверно, сложно найти более динамично развивающуюся сегодня область, чем программирование. Новые языки возникают каждый год, а старые меняются до неузнаваемости. Совершенствование идет как в сторону большей абстрактности, так и в сторону лучшего отражения особенностей аппаратуры. С другой стороны, программисты исключительно консервативны, огромный объем кода системных и прикладных библиотек унаследован из прошлого тысячелетия. Эти соображения переносят языки С/С++ в раздел must-have для любой разрабатываемой архитектуры. Разработчики железа неоднократно игнорировали это соображение, либо предлагая пользователю ассемблер, либо создавая собственный высокоуровневый язык, результат всегда был одинаковым - забвение.

 

Мы считаем поддержку С или С/С++, возможно с некоторыми ограничениями, необходимой на всех уровнях программирования разрабатываемых архитектур от специализированных процессорных элементов до ядер общего назначения и вычислительной системы в целом. Мы считаем, что пользователю должны быть предоставлены базовые С/С++ библиотеки или их разумное подмножество, эффективно исполняемое на целевой архитектуре. Мы считаем, что сначала пользователь должен быстро получить рабочий код на С/С++ для целевой архитектуры, а потом, пользуясь нашим Optimization guide, поднять его производительность до необходимого уровня.