Для работы проектов iXBT.com нужны файлы cookie и сервисы аналитики.
Продолжая посещать сайты проектов вы соглашаетесь с нашей
Политикой в отношении файлов cookie
SpaceMareen
Новичок
SpaceMareen
Рейтинг
+286.30
Автор не входит в состав редакции iXBT.com (подробнее »)
Полный бред, весь софт который запустятся на Сапфире запустится и на Эпике, у них одинаковая ISA и расширения.
.
Проблемы могут быть только с ошибками работы процев, только это не софт, а именно что хард. Вот только по этой части проблемы изредка бывают у обеих компаний.
https://www.tomshardware.com/news/stable-diffusion-gpu-benchmarks
.
Хорошо, допустим Интел как-то печатает какие ядра гибридные а какие нет. Хотя примеров вывода на странице нет, это слегка настораживается. Потому что стандартный cpuid никаких потоков и ядер вообще не печатает, внизу страницы пример. Но хорошо, поверим Интелу.
https://learn.microsoft.com/en-us/cpp/intrinsics/cpuid-cpuidex?view=msvc-170
.
> Мы ведь можем сделать что-то подобное на C например?
Да, и у Майкрософта и по вашей ссылке примеры на С/С++. Только в Ubuntu CPUID по умолчанию вообще нет. Он устанавливается в одну строку, так что нестрашно, но все таки не часть ядра.
.
С выводом в целом согласен, но очень много проволочек, каждый раз переизобретать велосипед костыльными подсчетами cpuid неохота.
.
УПД. Посмотрел что залито Интелом по ссылке на гитхаб
https://github.com/GameTechDev/HybridDetect
Выглядит как уже готовая библиотека, в которой можно определять на какие ядра потоки определять. « Demonstrates split topology threadpools, as well as homogeneous/heterogeneous threadpool adaption. Rendering is done via the critical P-Cores and asteroid simulation is performed using E-Cores». Это то, о чем у меня шла речь — должна быть общедоступная библиотека с хорошим интерфейсом. Интел молодцы.
.
И это ещё накладывается на необходимость прикинуть на какие ядра делать affinity. Через что вы там их делать собрались? Не помню, что печатает CPUID, но помню, что по умолчанию он не везде установлен. По умолчанию доступны cat /proc/cpuinfo и lscpu. Которые количество ядер не печатают, они печатают количество потоков. Вот введёте вы lscpu и вам напечатает «у меня 13900к 32 ядра». Что дальше? Это 16+0 или 8+16 процессор? Как это понять? Вручную составлять таблицу, что ага, 13900к это 8+16? А если юзер отключит SMT и печататься будет 13900к 24 ядра? Еще по варианту учитывать? Умножаем количество рассматриваемых случаев на два.
.
Итого у нас 2 ОС * (affinity + priority) * SMT on/off = минимум 8 сценариев. Плюс нерешенная задача с физическими/логическими ядрами. Слишком много геморроя, если мы говорим о чем-то запущенном на больше чем паре компов. Короче говоря, проблема не в том что разработчики ленивые, а в том что это не их зона ответственности.
.
А кто разрешает? Это не стандартный функционал. То есть по умолчанию такого вообще не предполагается.
.
>Господи в х86 мы даже по сути не знаем какие инструкции он выполняет
.
«Мы» не знаем, а компиляторы знают. Компиляторы очень умные. Только им нужно сказать, под какой процессор компилировать. Но в случае гетерогенных архитектур с этим возникают большие проблемы.
.
Загуглите что такое закон Амдала. Кратко — если у нас можно распараллелить 50% работы, то программу невозможно ускорить больше чем в 2 раза, если можно распараллелить 75% работы, то не больше чем в 4 раза, и так далее.
.
> И вот я как бы не считаю что в интел дураки сидят…малые ядра позволяют масштабироваться в многопоточных задачах
.
Не сидят. На Ютубе висят лекции James Reinders из Intel 2014 года. На них он рассказывает про мелкоядерное масштабирование…на Xeon Phi. Там слайды прямо так называются — little cores vs big cores. Все украдено до нас!
.
Кстати там же мелкоядерное масштабирование задано формулой. Pollack’s Law, правило Поллака, можно либо потратить в 4 раза больше места и получить вдвое более производительное ядро, либо вместо имеющегося ядра расположить 4 маленьких и получить 4х больше производительности. Сам Поллак данное правило ещё в 2008 открыл, оказывается, но никто не говорил об этом до Р/Е ядер в Alder Lake, и даже сейчас имя Поллака редко вспоминают. Но это лирика.
.
Так вот, Джеймс рассказывает. К нему приходят разработчики и говорят «мы написали распараллелили задачу на 4 потоков, как она будет работать на Xeon Phi?», а он им отвечает «ужасно». Потому что пока разработчики не распутывали клубок зависимостей, чтобы параллелизм достигал 8-16-32 потоков, то мелкоядерная архитектура и низкие частоты потенциал многопоточности перекрывали. Что изменилось с тех пор? Ничего. А теперь возвращаемся к закону Амдала =)
.
Вот цитируемый отрывок, если интересно. 41:30 https://youtu.be/hACtH8NdeIk
.
У Интела уже есть гайды для софтоделов. В трёх томах ))
Далеко не каждый компилятор далеко не для каждого языка программирования в принципе может генерировать многопоточный код без разработчика. Но допустим.
.
Берём параллелящуюся задачу. Поделили задачу поровну между четырьмя ядрами. Один из потоков закончил выполнять свою четверть работы раньше, чем остальные. Что он будет делать? Правильно, ждать всех остальных. Это синхронизация, это дополнительные затраты времени.
.
И это в идеальном случае. Даже не рассматривая примеры задач, требующих shared memory, как упомянуто выше.
.
Sapphire Rapids делают из 4 чиплетов (плиток) по 15 ядер. И все-равно только 56.
https://www.ixbt.com/news/2021/06/12/56-intel-sapphire-rapids-15.html
А Интелу очень хотелось бы по 96, как у АМД, уж поверьте.