Могу ли я компилировать программы Go на процессорах Xeon Phi (Knight's Landing)?
Я любитель, которому нравится запускать свои собственные программы на Go, и по мере того, как процессоры Xeon Phi становятся старше, они также становятся чрезвычайно дешевыми. Так дешево, что я могу построить машину с двумя сокетами 2015/16 года менее чем за 1000 долларов.
Я пытаюсь выяснить, могу ли я запускать на них программы Go. Из того, что я видел, эта ветка говорит, что они не будут работать (и попробовать gccgo), но там написано, что они не будут работать, потому что они частично работают на x87 ISA. Как ни странно, в примечаниях к выпуску Go говорится , что они отказываются от поддержки x87 в 1.16 , подразумевая, что она поддерживалась в прошлом. Я видел в других потоках, что все программы будут работать на уровне совместимости, но это чрезвычайно медленный уровень, который имеет доступ только к небольшой части кеша процессора.
Я чувствую, что ухожу все дальше и дальше от своей стихии; Мне интересно, знает ли кто-нибудь, кто использовал Xeon Phi, будет ли он запускать код Go? Или вообще, после загрузки Ubuntu (или FreeBSD, что-то, что я видел и указано в спецификациях материнской платы), какие вещи не будут работать, а какие будут?
Я ценю любую помощь!
2 ответа
Вы основываете свои опасения по поводу Рыцарской Гавани на этой цитате о Рыцарском углу :
Процессор Knight's Corner базируется на платформе x86-64, да, но на самом деле у него есть собственный набор инструкций для операций с плавающей запятой — ни x87, ни AVX, ни SSE, ни MMX... О, и тогда вы можете бросить все это далеко, когда выйдет Knight's Landing (KNL).
Под «выбросить все это» они подразумевают все заботы и несовместимости. KNL основан на Silvermont и полностью совместим с x86-64 (включая x87, SSE и SSE2 для обоих стандартных способов выполнения математических вычислений FP). Он также поддерживает AVX-512F, AVX-512ER и несколько других расширений AVX-512, а также AVX и AVX2 и SSE до SSE4.2. Очень похоже на серверный процессор Skylake, за исключением другого набора расширений AVX-512.
Смысл этого как раз в том, чтобы решить проблему, о которой вы беспокоитесь: чтобы любой устаревший двоичный файл мог работать на KNL. Чтобы получить от этого хорошую производительность, вы хотите запускать код, векторизованный векторами AVX-512, в циклах, которые выполняют тяжелую работу, но весь окружающий код и другие программы в остальной части дистрибутива Linux или что-то еще может работать обычным образом. стандартный код болота, который использует любой x87 и/или SSE.
Knight's Corner (коммерческий Xeon Phi первого поколения) имеет собственный вариант / предшественник AVX-512 в ядре на базе P5-Pentium и никакого другого оборудования FP.
Knight's Landing (коммерческий Xeon Phi второго поколения) основан на Silvermont с AVX-512 и является первым процессором, который может действовать как «хост»-процессор (загрузочный), а не просто как сопроцессор.
Этот «хост»-режим является еще одной причиной для включения достаточного количества оборудования для декодирования и выполнения x87 и SSE: если вы используете всю систему на KNL, вы, скорее всего, захотите выполнить некоторые устаревшие двоичные файлы для нечувствительных к производительности. задачи, а не только скомпилированные специально для нее бинарники.
Однако его производительность x87 не велика: как один скаляр
fmul
за 2 часа ( https://agner.org/optimize ). по сравнению с 2 SSE на такт
mulsd
(пропускная способность 0,5c). Та же пропускная способность 0,5c для других вычислений SSE/AVX, включая AVX-512.
vfma132ps zmm
выполнять 16-кратные операции Fused-Multiply-Add с одинарной точностью в одной инструкции.
Надеюсь, компилятор Go не слишком часто использует x87. Обычный способ выполнения скалярных вычислений в 64-битном режиме (который используют компиляторы C и их математические библиотеки) — это SSE в регистрах XMM. Компиляторы x86-64 C используют x87 только для таких типов, как
long double
.
Да:
Xeon Phi — это серия многоядерных процессоров x86, разработанных и изготовленных Intel. Он предназначен для использования в суперкомпьютерах, серверах и высокопроизводительных рабочих станциях. Его архитектура позволяет использовать стандартные языки программирования и интерфейсы прикладного программирования (API), такие как... См. также https://en.wikipedia.org/wiki/Xeon_Phi .
Если вы можете скомпилировать go на процессоре x86, вы сможете скомпилировать этот конкретный процессор x86, который производится Intel.
Xeon это не Itanium :)
В таких системах вы также сможете скомпилировать go, вам просто нужно будет предоставить подходящий компилятор c...
Что заставляет вас думать, что в противном случае вы не смогли бы скомпилировать, скажем, Atari или, возможно, Arduino?
Если вы можете уточнить это, возможно, я смогу еще больше улучшить свой ужасный ответ.