Рассмотрены известные автору подходы к реализации как lock-free, так и fine-grained lock-based set/map: хеш-таблицы, деревья. Что из подходов STL может быть реализовано в lock-free манере, а что принципиально нет. Подводные камни lock-free и их нейтрализация.
Автоматическая оптимизация алгоритмов с помощью быстрого возведения матриц в ...Alexander Borzunov
Описание декоратора для автоматической оптимизации алгоритмов с помощью быстрого возведения матриц в степень в Python.
Смотрите подробнее:
GitHub: https://github.com/borzunov/cpmoptimize
Хабрахабр: http://habrahabr.ru/post/236689/
Python Package Index: https://pypi.python.org/pypi/cpmoptimize
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU
http://techtalks.nsu.ru
Видеозапись: http://www.youtube.com/watch?v=v7uBLSm6ft8
06 октября 2015. Как приручить дракона: введение в LLVM (Дмитрий Кашицын, HDsoft)
«В этом докладе мы кратко расскажем о таком звере, о котором много кто слышал, но немногие щупали. Что такое компилятор на самом деле? Чем LLVM отличается от других компиляторов? Как в LLVM происходит компиляция программы, как работают оптимизации? Наконец, какой путь проходит программа от разбора исходного текста до генерации исполняемого файла?
Лекция будет обзорной и не потребует от слушателей глубоких знаний теории компиляторов.»
Лекция прочитана в рамках проекта Tech Talks @NSU – серии открытых лекций о разработке ПО и карьере в IT, проводимых в Новосибирском государственном университете.
Подробности: http://techtalks.nsu.ru
10 июня 2015. Дмитрий Кашицын (HDsoft) дает обзор LLVM.
http://techtalks.nsu.ru
Видеозапись: https://plus.google.com/events/ctes98f7uhf19t5jlvlbk24dan4
В этом докладе мы кратко расскажем о таком звере, как LLVM, о котором много кто слышал, но немногие щупали. Что такое компилятор на самом деле? Чем LLVM отличается от других компиляторов? Как в LLVM происходит компиляция программы, как работают оптимизации? Наконец, какой путь проходит программа от разбора исходного текста до генерации исполняемого файла?
Лекция будет обзорной и не потребует от слушателей глубоких знаний теории компиляторов.
Лекция прочитана в рамках проекта Tech Talks @NSU – серии открытых лекций о разработке ПО и карьере в IT, проводимых в Новосибирском государственном университете.
Подробности: http://techtalks.nsu.ru
Рассмотрены известные автору подходы к реализации как lock-free, так и fine-grained lock-based set/map: хеш-таблицы, деревья. Что из подходов STL может быть реализовано в lock-free манере, а что принципиально нет. Подводные камни lock-free и их нейтрализация.
Автоматическая оптимизация алгоритмов с помощью быстрого возведения матриц в ...Alexander Borzunov
Описание декоратора для автоматической оптимизации алгоритмов с помощью быстрого возведения матриц в степень в Python.
Смотрите подробнее:
GitHub: https://github.com/borzunov/cpmoptimize
Хабрахабр: http://habrahabr.ru/post/236689/
Python Package Index: https://pypi.python.org/pypi/cpmoptimize
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU
http://techtalks.nsu.ru
Видеозапись: http://www.youtube.com/watch?v=v7uBLSm6ft8
06 октября 2015. Как приручить дракона: введение в LLVM (Дмитрий Кашицын, HDsoft)
«В этом докладе мы кратко расскажем о таком звере, о котором много кто слышал, но немногие щупали. Что такое компилятор на самом деле? Чем LLVM отличается от других компиляторов? Как в LLVM происходит компиляция программы, как работают оптимизации? Наконец, какой путь проходит программа от разбора исходного текста до генерации исполняемого файла?
Лекция будет обзорной и не потребует от слушателей глубоких знаний теории компиляторов.»
Лекция прочитана в рамках проекта Tech Talks @NSU – серии открытых лекций о разработке ПО и карьере в IT, проводимых в Новосибирском государственном университете.
Подробности: http://techtalks.nsu.ru
10 июня 2015. Дмитрий Кашицын (HDsoft) дает обзор LLVM.
http://techtalks.nsu.ru
Видеозапись: https://plus.google.com/events/ctes98f7uhf19t5jlvlbk24dan4
В этом докладе мы кратко расскажем о таком звере, как LLVM, о котором много кто слышал, но немногие щупали. Что такое компилятор на самом деле? Чем LLVM отличается от других компиляторов? Как в LLVM происходит компиляция программы, как работают оптимизации? Наконец, какой путь проходит программа от разбора исходного текста до генерации исполняемого файла?
Лекция будет обзорной и не потребует от слушателей глубоких знаний теории компиляторов.
Лекция прочитана в рамках проекта Tech Talks @NSU – серии открытых лекций о разработке ПО и карьере в IT, проводимых в Новосибирском государственном университете.
Подробности: http://techtalks.nsu.ru
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...Yandex
Евгений Крутько, НИЦ «Курчатовский институт».
В докладе на примере программы моделирования динамики движения конструкций по методу конечных элементов рассматриваются возможности и практика распараллеливания вычислений. Речь в нём пойдёт как о технике создания новых вычислительных потоков, так и об использовании стандартов openMP и MPI.
Aleksei Milovidov "Let's optimize one aggregate function in ClickHouse"Fwdays
Let's calculate an average of one column for each key, like the following query: SELECT key, avg(value) FROM table GROUP BY key. What can be more simple? But the question is: what is the most efficient way to do it? How to write code to achieve maximum performance on a variety of hardware?
2. LOGO
Номер строки Профиль Аналитический
профиль
Программа
1 Program Account;
2 {Расчет стоимости заказа товаров почтой}
3
4 Const
5 Lowpostage=5; {низкий почтовый сбор}
6 Highpostage=10; {высокий почтовый сбор}
7 Var
8 items, number : integer;
9 price, totalcost : real;
10
11 1 1 Begin
12 1 1 readln (items);
13 1 1 totalcost := 0;
Пример построения профиля и аналитического профиля
программы
3. LOGO
Номер строки Профиль Аналитический
профиль
Программа
14 4 1+N while items>0 do
15 3 N begin
16 3 N items :=items – 1;
17 3 N readln (number, price);
18 3 N totalcost := totalcost + number*price
19 3 N end;
20 1 1 if totalcost < 100
21 0 0 then totalcost := totalcost + lowpostage
22 1 1 else totalcost := totalcost + highpostage;
23 1 1 writeln (totalcost)
24 1 1 End.
(продолжение)
Пример построения профиля и аналитического профиля
программы
4. LOGO
Номер строки Аналитический
профиль
Время однократного
выполнения (усл. ед.)
Общее время
выполнения каждой
строки
11 1 0 0
12 1 5 5
13 1 2 2
14 1+N 2 2+2N
15 N 0 0
16 N 2 2N
17 N 10 10N
18 N 2 2N
19 N 0 0
20 1 2 2
21 0 2 0
22 1 2 2
23 1 12 12
24 1 0
Общее время исполнения программы 25+16N
Результаты расчётов
6. LOGOАнализ объемной сложности программы
Алгоритм:
записывается схема вызовов программы;
каждой строке схемы вызовов сопоставляются возникающие
параметры, глобальные и локальные переменные и объем памяти для
каждой из них;
на основании полученной информации определяется такое место (или
места) в программе, в котором параметры и переменные занимают
наибольшую память.
7. LOGO
Схема вызова Новая память данных Всего используется
Calculator a(6 ед.), b(6 ед.),
Rezult(6 ед.), N(1 ед.)
19
Input Не требуется 19
Operation Flag(1 ед.),
Action(4 ед.)
24
Calculator Не требуется 19
Add Не требуется 19
Результаты, полученные при вычислении объемной
сложности
Анализ временной сложности программ
8. LOGO
Function GSD (a, b, : integer) : integer; {поиск наибольшего общего делителя чисел a и b}
Begin {a>0 and b>0}
While a <> b do
If a>b
then a := a – b
else b := b – a;
{ a = b }
GSD := a
End;
Function GSD_ (a, b, : integer) : integer; {поиск наибольшего общего делителя чисел a и b с
помощью алгоритма Евклида}
Var
r : integer;
Begin { a>0 and b>0 }
Repeat
r := a mod b;
a := b;
b := r
Until b = 0;
GSD_ := a
End;
Способы повышения эффективности программ
9. LOGOТочное число операций
Операция Первая функция Вторая функция
Присваивание 500000 4
Сложение 499999 0
Умножение 0 1
Сравнение 999999 1
10. LOGO
Упрощение условного выражения, управляющего
циклами.
Вариант 1
x := 0; successful := true;
While (x<>max) and successful do
Begin
x := x + 1;
Calc (x, k, xp, successful);
If successful
then writeln (x:20, xp:15)
End;
Вариант 2
x := 0;
While x<>max do
Begin
x := x + 1;
Calc (x, k, xp, successful);
If successful
then writeln (x:20, xp:15)
else x := max
End;
11. LOGO
Вариант 1
If odd (n)
then low := 3
else low := 2;
high := n div low;
If odd (n)
then step := 2
else step := 1;
Вариант 2
If odd (n)
then begin
low := 3; step := 2
end
else begin
low := 2; step := 1
end;
Комбинирование операторов с целью совместного использования
всеми частями программы фрагментов, содержащих
12. LOGOЭффективность вычислений
...
!7!5!3
)sin(
753
xxx
xx
Sk = t0 + t1 + t2 + …
+ tk.
xt 0
!3
3
1
x
t
!5
5
2
x
t
!7
7
3
x
t
0
3
1
3*2
t
x
t 1
5
2
5*4
t
x
t 2
7
3
7*6
t
x
t
1
2
)12(2
kk t
kk
x
t
xt 0 1
2
)12(2
kk t
kk
x
t для k > 0,
00
tS kkk tSS 1
для k > 0,
13. LOGO
Function Sine (x : real) : real;
Const
eps = 0.00001; {точность вычислений}
Var
k : integer;
term, sum : real;
Begin { 0.0 <= x <= }
k := 0; term := x; sum := term;
While abs (term) > eps do
begin
k := k + 1;
term := -term * sqr (x) / (2*k*(2*k+1));
sum := sum +term
end;
Sine : = sum
End;
14. LOGO
Function Sine (x : real) : real;
Const
eps = 0.00001; {точность вычислений}
Var
i : integer;
pi_x, sqrX, term, sum : real;
Begin { 0.0 <= x <= }
pi_x := pi – x;
If pi_x < x then x := pi_x;
i := 0; term := x; sum := term; sqrX : = sqr(X);
While abs (term) > eps do
begin
i := i + 2;
term := -term * sqr (x) / (i*(i+1));
sum := sum +term
end;
Sine := sum
End;