Слайд 2
![«Низкоуровневые» шаблоны, учитывающие специфику конкретного языка программиро-вания, называются идиомами. На](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/578602/slide-1.jpg)
«Низкоуровневые» шаблоны, учитывающие специфику конкретного языка программиро-вания, называются идиомами.
На наивысшем уровне
существуют архитек-турные шаблоны, они охватывают собой архитектуру всей программной системы.
Слайд 3
![Типы шаблонов проектирования 1.Основные 2.Частные Основные шаблоны (Fundamental) Шаблон делегирования](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/578602/slide-2.jpg)
Типы шаблонов проектирования
1.Основные
2.Частные
Основные шаблоны (Fundamental)
Шаблон делегирования (Delegation pattern)
Объект внешне выражает некоторое
поведе-ние, но в реальности передаёт ответствен-ность за выполнение этого поведения связан-ному объекту.
Слайд 4
![-Шаблон функционального дизайна (Functional design) Гарантирует, что каждый модуль компьютер-ной](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/578602/slide-3.jpg)
-Шаблон функционального дизайна (Functional design)
Гарантирует, что каждый модуль компьютер-ной программы
имеет только одну обязан-ность и исполняет её с минимумом побочных эффектов на другие части программы.
-Неизменяемый интерфейс (Immutable interface)
Создание неизменяемого объекта.
Слайд 5
![-Интерфейс (Interface) Общий метод для структурирования компью-терных программ для того,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/578602/slide-4.jpg)
-Интерфейс (Interface)
Общий метод для структурирования компью-терных программ для того, чтобы
их было проще понять.
-Интерфейс-маркер (Marker interface)
В качестве атрибута (как пометки объектной сущности) применяется наличие или отсутст-вие реализации интерфейса-маркера. В сов-ременных языках программирования вместо этого могут применяться атрибуты или анно-тации.
Слайд 6
![-Контейнер свойств (Property container) Позволяет добавлять дополнительные свойст-ва для класса](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/578602/slide-5.jpg)
-Контейнер свойств (Property container)
Позволяет добавлять дополнительные свойст-ва для класса в контейнер
(внутри класса), вме-сто расширения класса новыми свойствами.
-Канал событий (Event channel)
Расширяет шаблон Publish/Subscribe, создавая централизованный канал для событий. Использует объект-представитель для подпис-ки и объект-представитель для публикации со-бытия в канале.
Слайд 7
![1. Порождающие шаблоны (Creational) Шаблоны проектирования, которые абстраги-руют процесс инстанцирования.](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/578602/slide-6.jpg)
1. Порождающие шаблоны (Creational)
Шаблоны проектирования, которые абстраги-руют процесс инстанцирования. Они позволя-ют сделать
систему независимой от способа создания, композиции и представления объек-тов. Шаблон, порождающий классы, использу-ет наследование, чтобы изменять инстанциру-емый класс, а шаблон, порождающий объекты, делегирует инстанцирование другому объекту.
Слайд 8
![-Абстрактная фабрика (Abstract factory) Класс, который представляет собой интер-фейс для](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/578602/slide-7.jpg)
-Абстрактная фабрика (Abstract factory)
Класс, который представляет собой интер-фейс для создания компонентов
системы.
-Строитель (Builder)
Класс, который представляет собой интерфейс для создания сложного объекта.
-Фабричный метод (Factory method)
Определяет интерфейс для создания объекта, но оставляет подклассам решение о том, какой класс инстанцировать.
Слайд 9
![-Отложенная инициализация (Lazy initialization) Объект, инициализируемый во время первого обращения](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/578602/slide-8.jpg)
-Отложенная инициализация (Lazy initialization)
Объект, инициализируемый во время первого обращения к нему.
-Мультитон
(Multiton)
Гарантирует, что класс имеет поименованные экземпляры объекта и обеспечивает глобаль-ную точку доступа к ним.
-Объектный пул (Object pool)
Класс, который представляет собой интерфейс для работы с набором инициализированных и готовых к использованию объектов.
Слайд 10
![-Прототип (Prototype) Определяет интерфейс создания объекта через клонирование другого объекта](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/578602/slide-9.jpg)
-Прототип (Prototype)
Определяет интерфейс создания объекта через клонирование другого объекта вместо создания
через конструктор.
-Получение ресурса есть инициализация (Resource acquisition is initialization (RAII))
Получение некоторого ресурса совмещается с инициализацией, а освобождение — с уничто-жением объекта.
-Одиночка (Singleton)
Класс, который может иметь только один экземпляр.
Слайд 11
![2. Структурные шаблоны (Structural) определяют различные сложные структуры, которые изменяют](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/578602/slide-10.jpg)
2. Структурные шаблоны (Structural)
определяют различные сложные структуры, которые изменяют интерфейс уже существую-щих объектов
или его реализацию, позволяя облегчить разработку и оптимизировать про-грамму.
Слайд 12
![-Адаптер (Adapter / Wrapper) Объект, обеспечивающий взаимодействие двух других объектов,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/578602/slide-11.jpg)
-Адаптер (Adapter / Wrapper)
Объект, обеспечивающий взаимодействие двух других объектов, один из
которых ис-пользует, а другой предоставляет несовмес-тимый с первым интерфейс.
-Мост (Bridge)
Структура, позволяющая изменять интерфейс обращения и интерфейс реализации класса независимо.
-Компоновщик (Composite)
Объект, который объединяет в себе объекты, подобные ему самому.
Слайд 13
![-Декоратор или Wrapper/Обёртка (Decorator) Класс, расширяющий функциональность дру-гого класса без](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/578602/slide-12.jpg)
-Декоратор или Wrapper/Обёртка (Decorator)
Класс, расширяющий функциональность дру-гого класса без использования наследования.
-Фасад (Facade)
Объект,
который абстрагирует работу с не-сколькими классами, объединяя их в единое целое.
-Единая точка входа (Front controller)
Обеспечивает унифицированный интерфейс для интерфейсов в подсистеме. Front Control-ler определяет высокоуровневый интерфейс, упрощающий использование подсистемы.
Слайд 14
![-Приспособленец (Flyweight) Это объект, представляющий себя как уни-кальный экземпляр в](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/578602/slide-13.jpg)
-Приспособленец (Flyweight)
Это объект, представляющий себя как уни-кальный экземпляр в разных местах
програм-мы, но фактически не являющийся таковым.
-Заместитель (Proxy)
Объект, который является посредником между двумя другими объектами, и который реали-зует/ограничивает доступ к объекту, к которо-му обращаются через него.
Слайд 15
![3. Поведенческие шаблоны (Behavioral) Определяют взаимодействие между объек-тами, увеличивая таким образом гибкость.](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/578602/slide-14.jpg)
3. Поведенческие шаблоны (Behavioral)
Определяют взаимодействие между объек-тами, увеличивая таким образом гибкость.
Слайд 16
![-Цепочка обязанностей (Chain of responsibility) Предназначен для организации в системе](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/578602/slide-15.jpg)
-Цепочка обязанностей (Chain of responsibility)
Предназначен для организации в системе уровней ответственности.
-Команда,
Action, Transaction (Command)
Представляет действие. Объект команды зак-лючает в себе само действие и его параметры.
-Интерпретатор (Interpreter)
Решает часто встречающуюся, но подвержен-ную изменениям, задачу.
Слайд 17
![-Итератор, Cursor (Iterator) Представляет собой объект, позволяющий получить последовательный доступ](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/578602/slide-16.jpg)
-Итератор, Cursor (Iterator)
Представляет собой объект, позволяющий получить последовательный доступ к элемен-там объекта-агрегата
без использования опи-саний каждого из объектов, входящих в состав агрегации.
-Посредник (Mediator)
Обеспечивает взаимодействие множества объектов, формируя при этом слабую связан-ность и избавляя объекты от необходимости явно ссылаться друг на друга.
Слайд 18
![-Хранитель (Memento) Позволяет не нарушая инкапсуляцию зафикси-ровать и сохранить внутренние](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/578602/slide-17.jpg)
-Хранитель (Memento)
Позволяет не нарушая инкапсуляцию зафикси-ровать и сохранить внутренние состояния объ-екта
так, чтобы позднее восстановить его в этих состояниях.
-Null Object (Null Object)
Предотвращает нулевые указатели, предостав-ляя объект «по умолчанию».
-Наблюдатель или Издатель-подписчик (Observer) Определяет зависимость типа «один ко многим» между объектами так, что при из-менении состояния одного объекта все завися-щие от него оповещаются об этом событии.
Слайд 19
![-Слуга (Servant) Используется для обеспечения общей функци-ональности группе классов. -Состояние](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/578602/slide-18.jpg)
-Слуга (Servant)
Используется для обеспечения общей функци-ональности группе классов.
-Состояние (State)
Используется,когда во время
выполнения про-граммы объект должен менять своё поведение в зависимости от своего состояния.
-Стратегия (Strategy)
Предназначен для определения семейства алгоритмов, инкапсуляции каждого из них и обеспечения их взаимозаменяемости.
Слайд 20
![-Шаблонный метод (Template method) Определяет основу алгоритма и позволяет наследникам](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/578602/slide-19.jpg)
-Шаблонный метод (Template method)
Определяет основу алгоритма и позволяет наследникам переопределять некоторые
шаги алгоритма, не изменяя его структуру в целом.
-Посетитель (Visitor)
Описывает операцию, которая выполняется над объектами других классов. При изменении класса Visitor нет необходимости изменять обслуживаемые классы.
-Спецификация (Specification)
Служит для связывания бизнес-логики.
Слайд 21
![Частные шаблоны параллельного программирования (Concurrency) Concurrency — Параллелизм Используются для](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/578602/slide-20.jpg)
Частные шаблоны параллельного программирования (Concurrency)
Concurrency — Параллелизм
Используются для более эффективного напи-сания многопоточных программ, и
предостав-ляет готовые решения проблем синхронизации
Слайд 22
![-Active Object (Active object) Служит для отделения потока выполнения ме-тода](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/578602/slide-21.jpg)
-Active Object (Active object)
Служит для отделения потока выполнения ме-тода от потока,
в котором он был вызван. Использует шаблоны асинхронный вызов методов и планировщик
-Balking (Balking)
Служит для выполнения действия над объек-0том только тогда, когда тот находится в кор-ректном состоянии.
-Обмен сообщениями (Messaging pattern, Messaging design pattern (MDP))
Позволяет компонентам и приложениям обмениваться информацией (сообщениями).
Слайд 23
![-Блокировка с двойной проверкой (Double checked locking) Предназначен для уменьшения](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/578602/slide-22.jpg)
-Блокировка с двойной проверкой (Double checked locking)
Предназначен для уменьшения накладных ра-сходов,
связанных с получением блокировки.
-Блокировка (Lock)
Один поток блокирует ресурс для предотвра-щения доступа или изменения его другими потоками.
-Монитор (Monitor)
Объект, предназначенный для безопасного использования более чем одним потоком.
Слайд 24
![-Reactor (Reactor) Предназначен для синхронной передачи зап-росов сервису от одного](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/578602/slide-23.jpg)
-Reactor (Reactor)
Предназначен для синхронной передачи зап-росов сервису от одного или нескольких
источников.
-Read/write lock (Read/write lock)
Позволяет нескольким потокам одновремен-но считывать информацию из общего храни-лища, но позволяя только одному потоку в текущий момент времени её изменять.
-Планировщик (Scheduler)
Обеспечивает механизм реализации политики планирования, но при этом не зависящих ни от одной конкретной политики.
Слайд 25
![-Однопоточное выполнение (Single thread execution) Препятствует конкурентному вызову метода, тем](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/578602/slide-24.jpg)
-Однопоточное выполнение (Single thread execution)
Препятствует конкурентному вызову метода, тем самым запрещая
параллельное выполне-ние этого метода.
-Кооперативный паттерн (Cooperative pattern)
Обеспечивает механизм безопасной остановки потоков исполнения, используя общий флаг для сигнализирования прекращения работы потоков.
Слайд 26
![Другие типы шаблонов Также на сегодняшний день существует ряд других](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/578602/slide-25.jpg)
Другие типы шаблонов
Также на сегодняшний день существует ряд других шаблонов:
-Carrier Rider
Mapper описывают предоставле-ние доступа к хранимой информации.
-Аналитические шаблоны описывают основ-ной подход для составления требований для программного обеспечения (requirement analysis) до начала самого процесса программ-ной разработки.
Слайд 27
![-Коммуникационные шаблоны описывают процесс общения между отдельными участниками/сотрудниками организации. -Организационные](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/578602/slide-26.jpg)
-Коммуникационные шаблоны описывают процесс общения между отдельными участниками/сотрудниками организации.
-Организационные шаблоны описывают организационную иерархию
предприятия/фирмы
-Антипаттерны (Anti-Design-Patterns) описывают, как не следует поступать при разработке программ, показывая характерные ошибки в дизайне и в реализации.
Слайд 28
![Архитектура GPU и ее сравнение с CPU CPU Core](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/578602/slide-27.jpg)
Архитектура GPU и ее сравнение с CPU
CPU Core
Слайд 29
![GPU Core](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/578602/slide-28.jpg)
Слайд 30
![Ограничения и возможности при работе с GPU Ограничения: -При выполнении](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/578602/slide-29.jpg)
Ограничения и возможности при работе с GPU
Ограничения:
-При выполнении расчетов на GPU,
будет выделен целый блок ядер (32 для NVIDIA).
-Все ядра выполняют одни и те же инструкции, но с разными данными, такие вычисления называются Single-Instruction-Multiple-Data или SIMD (хотя NVIDIA вводит свое уточнение).
Слайд 31
![-GPU очень не любит ветвлений, да и в целом сложной](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/578602/slide-30.jpg)
-GPU очень не любит ветвлений, да и в целом сложной логики
в алгоритмах.
Возможности:
Собственно, ускорение тех самых SIMD-вы-числений. Простейшим примером может слу-жить поэлементное сложение матриц.
Слайд 32
![Наиболее распространены две технологии, которые можно использовать для программи-рования под](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/578602/slide-31.jpg)
Наиболее распространены две технологии, которые можно использовать для программи-рования под GPU:
OpenCL
CUDA
OpenCL
– это стандарт, который поддержива-ют большинство производителей видеокарт, в т.ч. и на мобильных устройствах, также код, написанный на OpenCL, можно запускать на CPU.
Слайд 33
![CUDA – это проприетарная технология и SDK от компании NVIDIA.](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/578602/slide-32.jpg)
CUDA – это проприетарная технология и SDK от компании NVIDIA. Писать
можно на C/C++ или использовать биндинги к другим языкам.
Сравнивать OpenCL и CUDA несколько не кор-ректно, т.к. одно — стандарт, второе — целое SDK. Тем не менее многие выбирают CUDA для разработки под видеокарты несмотря на то, что технология проприетарная, хоть и бесплат-ная и работает только на картах NVIDIA.
Тому есть несколько причин:
Слайд 34
![-Более продвинутое API; -Проще синтаксис и инициализация карты; -Подпрограмма, выполняемая](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/578602/slide-33.jpg)
-Более продвинутое API;
-Проще синтаксис и инициализация карты;
-Подпрограмма, выполняемая на GPU, является
частью исходных текстов основной (host) программы;
-Собственный профайлер, в т.ч. и визуальный;
-Большое количество готовых библиотек;
-Более живое комьюнити.
К особенностям стоит отнести то, что CUDA поставляется с собственным компилятором, который так же может скомпилировать стандартный C/C++ код.
Слайд 35
![Результаты выполнения алгоритмов на GPU Для тестирования GPU взят инстанс](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/578602/slide-34.jpg)
Результаты выполнения алгоритмов на GPU
Для тестирования GPU взят инстанс в AWS
с видеокартой Tesla k80, это далеко не самая мощная серверная карта на сегодняшний день, но наиболее доступная и имеет:
4992 CUDA ядра
24 GB памяти
480 Gb/s — пропускная способность памяти
И для тестов на CPU взят инстанс с процессо-ром Intel Xeon CPU E5-2686 v4 @ 2.30GHz
Слайд 36
![Трансформация Время выполнения трансформации на GPU и CPU в мс](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/578602/slide-35.jpg)
Трансформация
Время выполнения трансформации на GPU и CPU в мс
Слайд 37
![Агрегация Время выполнения агрегации на GPU и CPU в мс](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/578602/slide-36.jpg)
Агрегация
Время выполнения агрегации
на GPU и CPU в мс
Слайд 38
![Сортировка Время выполнения сортировки на GPU и CPU в мс](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/578602/slide-37.jpg)
Сортировка
Время выполнения сортировки на
GPU и CPU в мс
Слайд 39
![Оверхед на пересылку данных Время пересылки данных на GPU, сортировки](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/578602/slide-38.jpg)
Оверхед на пересылку данных
Время пересылки данных на GPU, сортировки и пересылки
данных обратно в RAM в мс
Слайд 40
![HtoD – передаем данные на видеокарту GPU Execution – сортировка](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/578602/slide-39.jpg)
HtoD – передаем данные на видеокарту
GPU Execution – сортировка на видеокарте
DtoH
– копирование данных из видеокарты в оперативную память
Первое, что можно отметить – считывать дан-ные из видеокарты получается быстрее, чем записывать их туда.
Второе – при работе с видеокартой можно по-лучить latency от 350 микросекунд, а этого уже может хватить для некоторых low latency приложений.
Слайд 41
![Оверхед для большого объема данных Время пересылки данных на GPU,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/578602/slide-40.jpg)
Оверхед для большого объема данных
Время пересылки данных на GPU, сортировки и
пересылки данных обратно в RAM в мс
Слайд 42
![Серверное использование Пример игровой и серверной видеокарт](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/578602/slide-41.jpg)
Серверное использование
Пример игровой и серверной видеокарт
Слайд 43
![Основные отличия серверной (NVIDIA) и игро-вой карты: -Гарантия производителя (игровая](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/578602/slide-42.jpg)
Основные отличия серверной (NVIDIA) и игро-вой карты:
-Гарантия производителя (игровая карта не рассчитана
на серверное использование).
-Возможные проблемы с виртуализацией для потребительской видеокарты.
-Наличие механизма коррекции ошибок на серверной карте.
Слайд 44
![-Количество параллельных потоков (не CUDA ядер) или поддержка Hyper-Q, которая](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/578602/slide-43.jpg)
-Количество параллельных потоков (не CUDA ядер) или поддержка Hyper-Q, которая позво-ляет
из нескольких потоков на CPU работать с картой, например, из одного потока закачи-вать данные на карту, а из другого запускать вычисления.
Слайд 45
![Многопоточность Время выполнения математических расчетов на GPU и CPU c](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/578602/slide-44.jpg)
Многопоточность
Время выполнения математических расчетов на GPU и CPU c матрицами размером
1000 x 60 в мс
Слайд 46
![Время выполнения математических расчетов на GPU и CPU c матрицами 10 000 x 60 в мс](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/578602/slide-45.jpg)
Время выполнения математических расчетов на GPU и CPU c матрицами 10
000 x 60 в мс
Слайд 47
![Ограничение ресурсов Как мы уже говорили, два основных ресурса видеокарты](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/578602/slide-46.jpg)
Ограничение ресурсов
Как мы уже говорили, два основных ресурса видеокарты – это
вычислительные ядра и па-мять.
Поэтому, если планируете использовать GPU в своих проектах, стоит рассчитывать на то, что приложение будет использовать видеокарту монопольно, либо вы будете программно конт-ролировать объем выделяемой памяти и коли-чество ядер, используемых для вычислений
Слайд 48
![Контейнеры и GPU А если в сервере несколько видеокарт? Опять](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/578602/slide-47.jpg)
Контейнеры и GPU
А если в сервере несколько видеокарт?
Опять же, можно на
уровне приложения ре-шать, какой GPU оно будет использовать.
Другой способ – это Docker-контейнеры. Можно использовать и обычные контейнеры, но NVIDIA предлагает свои контейнеры NGC, с оптимизированными версиями различного софта, библиотек и драйверов.Оверхед на использования контейнера около 3%.
Слайд 49
![Работа в кластере Другой вопрос, что делать, если вы хотите](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/578602/slide-48.jpg)
Работа в кластере
Другой вопрос, что делать, если вы хотите выполнять одну
задачу на нескольких GPU в рамках одного сервера или кластера?
Если вы выбрали библиотеку на подобии thrust или более низкоуровневое решение, то задачу придется решать вручную. Высокоуровневые фреймворки, например, для машинного обуче-ния или нейронных сетей, обычно поддержи-вают возможность использования нескольких карт из коробки.
Слайд 50
![Рекомендации Если вы размышляете об использовании GPU в своих проектах,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/578602/slide-49.jpg)
Рекомендации
Если вы размышляете об использовании GPU в своих проектах, то GPU,
скорее всего, вам подойдет если:
-Вашу задачу можно привести к SIMD-виду
-Есть возможность загрузить большую часть данных на карту до вычислений (закеширо-вать)
-Задача подразумевает интенсивные вычисле-ния
Слайд 51
![Заранее также стоит задаться вопросами: -Сколько будет параллельных запросов; -На](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/578602/slide-50.jpg)
Заранее также стоит задаться вопросами:
-Сколько будет параллельных запросов;
-На какое latency вы
рассчитываете;
-Достаточно ли вам одной карты для вашей нагрузки, нужен сервер с несколькими картами или кластер GPU-серверов.