Top Banner
Распределенныевычисления на мобильных платформах. Зачем еще нужен металическийфреймворк iOS Денис Свинарчук
111

"Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS

Jan 06, 2017

Download

Engineering

Ontico
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

“Распределенные” вычисления на мобильных платформах. Зачем еще нужен “металический” фреймворк iOS Денис Свинарчук

Page 2: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

https://github.com/dnevera/highload2016

• HLParallelSorting - битоническая сортировка на GPU и генератор случайных чисел

• HLMoexStatistic - работа со структурированными не графическими данными на примере обезличенных сделок MOEX

• HLCNNDigitalRecognition - пример распознавания рукописных цифр от 0-9 на примере размеченных данных для CNN MNIST

Page 3: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

2016• Современные вычисления: ещё, ещё больше узлов, ещё больше кластеров, ещё больше облачных сервисов

Page 4: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Ещё, ещё больше вычислений

Ещё, ещё больше узлов

Page 5: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Ещё, ещё больше связности

Page 6: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Ещё, ещё больше ящиков

Page 7: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

2016• Современные вычисления: ещё, ещё больше узлов, ещё больше кластеров, ещё больше облачных сервисов

• Современные клиенты: мобильники с мощными ускорителями вычислений. Почему они простаивают?

Page 8: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

2016• Современные вычисления: ещё, ещё больше узлов, ещё больше кластеров, ещё больше облачных сервисов

• Современные клиенты: мобильники с мощными ускорителями вычислений. Почему они простаивают?

• Почему вычислять на клиентах хорошо. Почему иногда плохо. Что можно сделать?

Page 9: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Мобильники с мощными ускорителями• Любой современный смартфон мощнее любого PC — первого спирального витка эпохи “толстых клиентов”

Page 10: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Мобильники с мощными ускорителями• Любой современный смартфон мощнее любого PC — первого спирального витка эпохи “толстых клиентов”

• Больше памяти, больше производительности

Page 11: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Мобильники с мощными ускорителями• Любой современный смартфон мощнее любого PC — первого спирального витка эпохи “толстых клиентов”

• Больше памяти, больше производительности

• Современная быстрая беспроводная технология связи

Page 12: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Мобильники с мощными ускорителями• Любой современный смартфон мощнее любого PC — первого спирального витка эпохи “толстых клиентов”

• Больше памяти, больше производительности

• Современная быстрая беспроводная технология связи

• Чумовые возможности “сопроцессоров”

Page 13: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Мобильники с мощными ускорителями

Page 14: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Для чего весь этот рост используется• Игры

Page 15: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Для чего весь этот рост используется• Игры • Анимация UI

Page 16: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Для чего весь этот рост используется• Игры • Анимация UI • Опять игры

Page 17: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Для чего весь этот рост используется• Игры • Анимация UI • Опять игры • Инстаграм

Page 18: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Для чего весь этот рост используется• Игры • Анимация UI • Опять игры • Инстаграм • Цифровые гитарные комбики из AppStore

Page 19: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Для чего весь этот рост используется• Игры • Анимация UI • Опять игры • Инстаграм • Цифровые гитарные комбики из AppStore • Рендеринг png в html Webkit

Page 20: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Для чего весь этот рост используется• Игры • Анимация UI • Опять игры • Инстаграм • Цифровые гитарные комбики из AppStore • Рендеринг png в html Webkit • Парсинг JSON

Page 21: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

?

Page 22: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /
Page 23: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /
Page 24: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Для чего на самом деле можно• Анализ больших массивов данных

Page 25: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Для чего на самом деле можно• Анализ больших массивов данных • Решение экспертных задач

Page 26: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Для чего на самом деле можно• Анализ больших массивов данных • Решение экспертных задач • Машинное обучение

Page 27: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Для чего на самом деле можно• Анализ больших массивов данных • Решение экспертных задач • Машинное обучение • Торговые стратегии

Page 28: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Для чего на самом деле можно• Анализ больших массивов данных • Решение экспертных задач • Машинное обучение • Торговые стратегии • Распределенная обработка очень больших массивов данных

Page 29: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Вычисления • Числовые:

• Нечисловые: func quicksort<T: Comparable>(a: [T])->[T] { guard a.count > 1 else { return a } let x = a[a.count/2] return quicksort(a.filter { $0 < x }) +

a.filter { $0 == x } + quicksort( a.filter { $0 > x })

}

Page 30: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Вычисления • CPU — …

Page 31: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Вычисления • CPU — …

• DSP — digital signal processor

Page 32: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

DSP

Page 33: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Вычисления • CPU — …

• DSP — digital signal processor

• GPU — graphics processing unit

Page 34: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

GPU

Page 35: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Доступ к ускорителям iOS

• vDSP (DSP)

• OpenGL ES 2.0/3.0 (GPU)

• Metal (GPU)

Page 36: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

vDSPБазовый набор процедур над одномерными данными на сигнальном сопроцессоре

• y ← 𝝰x+y, C ← 𝝰AB+𝝱C

• Conv, window над ℝ и ℂ • FFT • FIR • IIR

Page 37: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

OpenGL ES

Можно всё!А не только 3D

Page 38: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

OpenGL ES

Но хостовый код!и вообще…

Page 39: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

OpenGL ES

Page 40: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Metal

Можно всё!А не только 3D

GPGPU

Page 41: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Metal (что нам от него нужно)• API прямого доступа к GPU

Page 42: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Metal (что нам от него нужно)• API прямого доступа к GPU

• Распараллеливание вычислений (числовые, нечисловые)

Page 43: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Metal (что нам от него нужно)• API прямого доступа к GPU

• Распараллеливание вычислений (числовые, нечисловые)

• Конвейеры задач

Page 44: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Metal (что нам от него нужно)• API прямого доступа к GPU

• Распараллеливание вычислений (числовые, нечисловые)

• Конвейеры задач

• Графические вычисления

Page 45: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Metal• Очень низкие накладные расходы

Page 46: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Metal• Очень низкие накладные расходы

• Прекомпиляция шейдеров

Page 47: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Metal• Очень низкие накладные расходы

• Прекомпиляция шейдеров

• Динамическая параметризация

Page 48: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Metal• Очень низкие накладные расходы

• Прекомпиляция шейдеров

• Динамическая параметризация

• Прелиминарная проверка интерфейсов (ввода-вывода данных и их форматов, кодов возврата etc.)

Page 49: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Metal• Эффективные параллельные вычисления

Page 50: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Metal• Эффективные параллельные вычисления

• Разделяемый доступ к ресурсам CPU/GPU

Page 51: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Metal• Эффективные параллельные вычисления

• Разделяемый доступ к ресурсам CPU/GPU

• Явная синхронизация данных CPU/GPU

Page 52: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Metal• Эффективные параллельные вычисления

• Разделяемый доступ к ресурсам CPU/GPU

• Явная синхронизация данных CPU/GPU

• Синхронный многопоточный доступ к очереди команд

Page 53: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Metal

Page 54: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Metal• Произвольные типы данных

typedef struct { uint id; uint time; float value; float sortable;} Trade;

Page 55: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Например

Page 56: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

kernel void randomKernel( device float *array [[buffer(0)]],

… )

Page 57: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /
Page 58: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

kernel void bitonicSortKernel(device float *array [[buffer(0)]],…)

Page 59: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /
Page 60: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /
Page 61: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /
Page 62: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

MetalПроизвольная структура данных

kernel void bitonicSortKernel(

device Trade *array [[buffer(0)]],)

Page 63: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Например, приложения

Page 64: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Умный торговый терминал, Metal

Page 65: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Умный торговый терминал, Metal

https://habrahabr.ru/post/312096/

Page 66: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Умный торговый терминал, Metal

• Фильтр большая выборка сделок (N·1e6) (x10)

Page 67: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Умный торговый терминал, Metal

• Фильтр большая выборка сделок (N·1e6) (x10)

• Расчет гистограммы по выборке (x100)

Page 68: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Умный торговый терминал, Metal

• Фильтр большая выборка сделок (N·1e6) (x10)

• Расчет гистограммы по выборке (x100)

• Апроксимация распределения (x10)

Page 69: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Умный торговый терминал, Metal

• Фильтр большая выборка сделок (N·1e6) (x10)

• Расчет гистограммы по выборке (x100)

• Апроксимация распределения (x10)

• Расчет интенсивности торговли, 𝝈 (ско), профит фактор (vDSP)

Page 70: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Большие графы, Metal

Page 71: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Большие графы, Metal

• Кластеризация (в разы)

Page 72: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Большие графы, Metal

• Кластеризация (в разы)

• K-means (x50 раз)

Page 73: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Большие графы, Metal

• Кластеризация (в разы)

• K-means (x50 раз)

• K-NN (x400 раз)

Page 74: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Модные APIЕще больше возможностей

Page 75: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

iOS >=10 Neural Networks API

• BNN — Basic Neural Networks

• MPSCNN — Convolution Neural Networks

Page 76: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

iOS >=10 Neural Networks API

Page 77: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

MPSCNNMetal Perfomance Shader CNN, профит-фактор

Page 78: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Бонусы Metal

• CUDA -> Metal

• Open CL -> Metal

Page 79: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

НО!

Page 80: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Очень много “больших” данных

• Сделки торговых систем

Page 81: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Очень много “больших” данных

• Сделки торговых систем

• Данные для анализа

Page 82: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Очень много “больших” данных

• Сделки торговых систем

• Данные для анализа

• Размеченные данные и данные весов слоев NN

Page 83: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Очень много JSON

func convertStringToDictionary(text: String) -> [String:AnyObject]? {

if let data = text.dataUsingEncoding(NSUTF8StringEncoding) {

return try! NSJSONSerialization.JSONObjectWithData(data, options: [])

}

return nil

}

Page 84: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Очень много JSONПолитики отстрела приложений iOS

• Таймаут watchdog’а

• User force-quit

•Low memory termination

• SIGABRT, SIGBUS, SIGSEGV

Page 85: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Очень много JSON

•Много RAM

Page 86: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Очень много JSON

•Много RAM

•Всегда много CPU

Page 87: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Очень много JSON

•Много RAM

•Всегда много CPU

•Очень много батарейки

Page 88: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Можно, конечно, так

Page 89: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Очень много JSON

func readline() -> String? { var line:UnsafeMutablePointer<CChar>? = nil var linecap:Int = 0 defer { free(line) }

return getline(&line, &linecap, file) > 0 \ ? String(cString:line!) : nil }

Page 90: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Сделки по ФР за день JSON

Page 91: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Сделки по ФР за день JSON

Page 92: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Сделки по ФР за день JSON

reading time = 76s, trades = 374995

Page 93: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Сделки по ФР за день JSON• PNG

• JPG

• MP4

• H.264

⬅ Никого не смущает бинарный формат

Page 94: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

JSON RAW

Page 95: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Сделки по ФР за день RAW

var trades:[Trade] = [Trade](repeating:Trade(), count:count)let fd = open(path, O_RDONLY, S_IRUSR)let mp = mmap(nil, size, PROT_READ, MAP_FILE, fd, 0)

memcpy(trades,mp,size)

Page 96: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Сделки по ФР за день RAW

memcpy(trades,mp,size) == копирование в память GPU

Page 97: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Сделки по ФР за день RAW

var trades:[Trade] = [Trade](repeating:Trade(), count:count)let fd = open(path, O_RDONLY, S_IRUSR)let mp = mmap(nil, size, PROT_READ, MAP_FILE, fd, 0)

let buffer = makeBuffer(bytesNoCopy: mp, length: size)

Page 98: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Сделки по ФР за день RAW

reading time = 0.032s, trades = 374995

Page 99: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Сделки по ФР за день JSON

Сколько времени уйдет на запрос расчета статистики к серверу?

Page 100: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

• Затраты на вычисления статистики на сервере • Затраты на доставку ответа • Затраты на парсинг ответа

• На каждую статистику

• Затраты на доставку ответа • Затраты на снепшот (один раз) • Затраты на добавление буфера в память (ε сек) • Затраты на вычисления

• Но это все статистики! А не одна

JSON+CPU RAW+GPU

Page 101: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

JSON+CPU

0,0

0,3

0,5

0,8

1,0

Вычисление Доставка Парсинг

0,3

1,0

0,4

RAW+GPU

0,0

0,4

0,8

1,2

1,6

Доставка Снепшот Вычисление

1,5

0,03

1,0

Page 102: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Очень много JSON

•Никогда много RAM •Всегда мало CPU •Мало батарейки

Page 103: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Быстрые и горячие

Page 104: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Оптимизация. Быстро

Page 105: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Оптимизация. Холоднее

Page 106: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Оптимизация. RT быcтро

39.6º

Page 107: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Оптимизация. RT достаточно быстро

37.5º

Page 108: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Итоги

Page 109: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Итоги

Page 110: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

Вопросы?

Page 111: "Распределенные" вычисления на мобильных платформах. Зачем еще нужен "металлический" фреймворк iOS /

[email protected]

• https://github.com/dnevera/highload2016

• https://imagemetalling.wordpress.com