
как мы видели на прошлой лекции на многих этапах проектирования выполняются ресурсоёмкие расчеты

в некоторых случаях эти расчеты никак не могут быть ускорены
в одних случаях возможно ускорение за счет массово-параллельных расчетов на базе MPI и/или GPU (т.е. программ специальной архитектуры с поддержкой на аппаратном уровне)
в других случаях ускорение возможно за счет параллелизма на уровне приложения. которое сводится к разбиению задачи на подзадачи меньшего объема (синтез плейсмент и роутинг по кускам)
и наконец - массово-параллельные независимые расчеты, не требующие специальной архитектуры от вычислительной программы - характеризация, верификация, корнера, монте-карло, ESD

последняя разновидность может быть ускорена просто за счёт распределения независимых задач по множеству машин-исполнение.
Для диспетчеризации массовых запусков независимых (или слабо зависимых задач) предназначен целый класс программых средств - GRID
distibuted.net SETI@Home BOINC
PBS
LSF OpenLAVA
SGE UNIVA SoGE
HTCondor 
SLURM

---Beowulf

слайд устройста грид-системы


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

существует MPICH-G2 допускающий обмен сообщениями через высокоскоростной интерфейс при его наличии и BOINC-сеть при его  отсутствии, но как это будет работать


возможные технологии параллелизма и от чего зависит производительность
- последовательное исполнение => производительность задается тактовой частотой и производительностью памяти
- использование векторных инструкций MMX/3DNow!, SSE1/2/3/4, AVX, AVX512 => производительность задается тактовой частотой и шириной векторных регистров
- многопоточность, OpenMP - обмен данными между потоками через общую память => производительность ограничена производительностью процессоров и памяти, масштабируемость ограничена одной машиной
- MPI, PVM - обмен данными между потоками через сообщения => производительность ограничена производительностью процессоров и сети передачи сообщений, масштабируемость соответствеут возможностям сети передачи
- Xeon Phi - стандартный набор команд (+AVX), много ядер, ограниченная память
- GPU - нестандартный набор команд, очень много ядер, ограниченная память
- паралельные языки программирования (автоматически параллелящие компиляторы)
- комбинации 

возможные варианты устройства вычислительной инфраструктуры
сеть BOINC - 830000 слабосвязанных узлов
GRID - сотни-десятки тысяч узлов связности Ethernet
MPI-кластеры - сотни-десятки тысяч узлов связности IB/Myrinet итд...
суперкомпьютеры Cray Эльбрус - нестандартные процессоры на нестандартных высокоскоростных шинах с нестандартной реализацией памяти
облака 
комбинированные решения - MPI-приложения запускаемые на узлах грид системы 

Таким образом промышленных коммерческих симуляторов в BOINC не бывает



Ethernet RoCE iWARP
Myrinet Infiniband OmniPath Ангара

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