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

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

  • Upload
    ontico

  • View
    60

  • Download
    8

Embed Size (px)

Citation preview

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