Upload
iosif-itkin
View
1.114
Download
1
Embed Size (px)
DESCRIPTION
Tools & Methods of Program Analysis 2014 (TMPA-2014) Conference in Kostroma, November 14-15 Current Challenges in the Area of Efficient Parallel Algorithms and Data Structure Development Devexperts is a leading provider of high-load software used in integrated automation for brokerages, exchanges and other players in the financial services industry. The specific nature of the industry dictates the need for developing and verifying lock-free / wait-free algorithms and data structure implementations, which efficiently use multiprocessor systems with shared memory, to prove the correctness of their work. Over the last decade, this area has become increasingly relevant, although a number of topics still leave much room for further research. In quite a few cases, theoretical research has not been supported by practical implementations either. We are going to speak about the main research streams, which are relevant to us as a company. We will also touch upon the topic of exploring ways to set up mutually beneficial cooperation with universities at the confluence of science and business.
Citation preview
Devexperts Research
[основные направления]TMPA-2014
Дмитрий ЦителовВиталий Трифанов
Роман Елизаров
Devexperts
• Разработка ПО для финансовых компаний– Брокеры, дилеры, биржи
• Глубоко специализированная компания– R&D полного цикла– QA– M&S 24/7
• dxFeed – сервис доставки рыночных данных
Много данных, всё обновляется
Поток на входе непрерывно растет
Особенности
ОсобенностиДля эффективности!
Бесплатный обед закончился!
Хотим
● Писать многопоточный высокопроизводительный код
● Уметь доказывать его корректность на модели
● Уметь верифицировать сам код (на соответствие модели)
Пример: Data Racepublic class Account {
private int amount = 0;
}
public class TestRace {
public static void main (String[] args) {
final Account a = new Account();
Thread t1 = depositAccountInNewThread(a, 5);
Thread t2 = depositAccountInNewThread(a, 6);
t1.join();
t2.join();
System.out.println(a.amount); //5? 6? 11?
}
}
Expected execution
Racy execution
Как искать гонки?
Динамически Быстро Точно
Ограничить область поиска
Важно не потерять информацию!
Синхронизационные контракты
• Факты синхронизации– lock, semaphore, ConcurrentHashMap, etc.
• Обращения к разделяемым данным– коллекции, календарь, etc.
Язык описания высокоуровневых свойств
Data race detector
• DSL для описания контрактов– xml-based– только основные контракты
• Динамический поиск гонок– инструментирование байт-кода– алгоритм на основе логических часов– находит и применяет контракты
Реальная задача: хэш-таблицы
• Работа Gao at al– Хэш-таблица без ожидания– Только машинное доказательство– Не проработан до конца механизм изменения
размера без ожидания
• Реализация Cliff Click (high-scale-lib)– Не очевидно что этот тот же самый алгоритм– Нет формального доказательства
Открытые проблемы
• Построить человеко-читаемое доказательство алгоритма Gao et al– Включая изменение размера без ожидания
• Разбить доказательство на модули– Хотим заменять примитивы в значениях
таблицы на сложные структуры
• Атомарно читать/писать сложные структуры в данном месте памяти– А не через подмену указателей
Проверка линеаризуемости
• Отсутствие гонок не гарантирует корректность многопоточной программы
• Обычно, говоря «корректность», имеют в виду линеаризуемость - эквивалентность последовательному исполнению
• Нужно уметь проверять линеаризуемость полученного кода как юнит-тест
Намеченный формат работы
• Отдельное подразделение в компании– очень важно, чтобы не дергали текучкой– хотим построить полноценный процесс
• Взаимодействие с ВУЗами– своих сил не хватает– студентам нужны квалификационные работы– ВУЗу нужны публикации
Контакты
• Дмитрий Цителов ([email protected])• Виталий Трифанов ([email protected]
)• Роман Елизаров ([email protected])