Могу ли я компилировать программы 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, что-то, что я видел, и это указано в спецификациях материнской платы), какие вещи не будут работать, а какие будут?

Я ценю любую помощь!


person haxonek    schedule 20.01.2021    source источник
comment
Обычная математика FP должна использовать скалярные инструкции SSE, а не x87. Я не знаю Go, но если у него нет длинного двойного типа или его эквивалента, тогда у 64-битного кода не должно быть причин использовать x87 FPU. Конечно, KNL - это x86-64, включая x87 FPU, поэтому он будет работать, но с довольно плохой производительностью, потому что его x87 FPU не полностью конвейеризирован для всех инструкций, например. один фмуль на 2 цикла.   -  person Peter Cordes    schedule 20.01.2021
comment
@PeterCordes При повторном прочтении я думаю, что напечатал это неправильно. Из первой ссылки кто-то объясняет Нет, я думаю, вы должны скомпилировать и ожидать, что это не сработает. Процессор Knight's Corner базируется на платформе x86-64, да, но на самом деле у него есть собственный набор инструкций для операций с плавающей запятой — ни x87, ни AVX, ни SSE, ни MMX... О, и тогда вы можете бросить все это далеко, когда выйдет Knight's Landing (KNL). Он использует AVX-512F в качестве набора инструкций с плавающей запятой. Но даже это может быть неправильно, потому что я не могу сказать, говорят ли они о процессорах или сопроцессорах.   -  person haxonek    schedule 20.01.2021
comment
Эмм ну и что? ты бы потом справился во время компиляции... me = cornfused. Если вы хотите эмулировать x86 с плавающей запятой, например. x87, то это тоже возможно, но медленнее...   -  person Jay    schedule 20.01.2021
comment
О, вы говорите о раннем Xeon Phi, основанном на KNC (Knight's Corner). Да, это другое, у него есть только свой вариант/предшественник AVX-512 в ядре на базе P5-Pentium и, возможно, никакого другого железа FP. В вашем заголовке и тегах указано Landing от Knight, то есть silvermont + AVX + AVX2 + AVX-512, включая все базовые версии x86-64, как это делает обычный Silvermont (до SSE4.1 включительно, а также х87). В таблицах инструкций Agner Fog есть тайминги KNL для инструкций x87, таких как fmul, так что это абсолютное доказательство того, что они работают. agner.org/optimize/instruction_tables.pdf   -  person Peter Cordes    schedule 20.01.2021
comment
Я собираюсь купить процессор посадки рыцарей, я просто не знал, будет ли эта проблема перенесена, или проблема будет с AVX-512F.   -  person haxonek    schedule 20.01.2021
comment
Тогда ты в порядке, как я и сказал. KNL поддерживает AVX-512F (совместим со Skylake-AVX512 для подмножества AVX512 есть у них обоих), но он также поддерживает x87, SSE и AVX, поэтому он может запускать код, который не был скомпилирован для использования AVX-512. См. en.wikipedia.org/wiki/Xeon_Phi. Только KNC не использует устаревшие способы вычисления FP.   -  person Peter Cordes    schedule 20.01.2021


Ответы (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). по сравнению с SSE 2 на такт mulsd (пропускная способность при получении 0,5c). Та же пропускная способность 0,5c для других математических вычислений SSE/AVX, включая AVX-512 vfma132ps zmm для выполнения 16-кратных операций плавного умножения-сложения одинарной точности в одной инструкции.

Надеюсь, компилятор Go не слишком часто использует x87. Обычный способ выполнения скалярных вычислений в 64-битном режиме (который используют компиляторы C и их математические библиотеки) — это SSE в регистрах XMM. Компиляторы x86-64 C используют x87 только для таких типов, как long double.

person Peter Cordes    schedule 20.01.2021
comment
@haxonek: Если это ответ на ваш вопрос, вы можете принять его, поставив галочку под стрелками голосования. - person Peter Cordes; 20.01.2021

Да:

Xeon Phi — это серия многоядерных процессоров x86, разработанных и изготовленных Intel. Он предназначен для использования в суперкомпьютерах, серверах и высокопроизводительных рабочих станциях. Его архитектура позволяет использовать стандартные языки программирования и интерфейсы прикладного программирования (API), такие как... См. также https://en.wikipedia.org/wiki/Xeon_Phi

Если вы можете скомпилировать go на процессоре x86, вы сможете скомпилировать этот конкретный процессор x86, который производится Intel.

Xeon это не Itanium :)

В таких системах вы также сможете скомпилировать go, вам просто нужно будет предоставить подходящий компилятор c...

Что заставляет вас думать, что в противном случае вы не смогли бы скомпилировать, скажем, Atari или, возможно, Arduino?

Если вы можете уточнить это, возможно, я смогу еще больше улучшить свой ужасный ответ.

person Jay    schedule 20.01.2021
comment
Хм, чем больше я вникаю в это, тем больше думаю, что могу спутать сопроцессоры с обычным процессором. Тем не менее, я думаю, что есть какая-то проблема с тем, как выполняется математика с плавающей запятой (AVX-512F?), и я не уверен, будет ли это полностью запретительным, снизит производительность или просто не будет проблемой. . - person haxonek; 20.01.2021
comment
Где есть воля, там и способ, вы спрашивали о компиляции, а не о производительности, я уверен, что вы это сделаете :) - person Jay; 20.01.2021