Многопоточная реализация непараметрического алгоритма кластеризации Affinity Propagation (проект)

Материал из Wiki - Факультет компьютерных наук
Перейти к: навигация, поиск


Что это за проект?

Есть такой замечательный алгоритм Affiniti Propagation , однако существующие реализации на R и Python страдают недостатком производительности и, особенно, неэффективной работой с памятью, что особенно чувствуется при работе с big data. Поэтому мы реализовали прототип многопоточной версии с использованием Python, Cython и mpi4py, но хочется большей скорости и гибкости, особенно при работе суперкомпьютерах (в данный момент мы используем ресурсы суперкомпьютеров МГУ "Ломоносов" и "Чебышев").

Чему вы научитесь?

  • Познакомитесь с различными методами кластерного анализа
  • Получите опыт разработки многопоточных приложений для суперкомпьютеров

Какие начальные требования?

  • Желание писать быстрый код
  • Базовые знания ОС GNU/Linux.
  • Знание Python, C/C++
  • Желательно, знакомство с технологиями параллельного программирования

Какие будут использоваться технологии?

  • mercurial/git
  • Shell, Python, C/C++
  • MPI
  • HDF5

Темы вводных занятий

  • Алгоритмы кластеризации

Направления развития

  • Задокументировать и опубликовать весь код под одной из лицензий для СПО.
  • Использовать гибридный параллелизм MPI/OpenMP/CUDA.
  • Релизовать версию Affinity Propagation для разреженных матриц.

Критерии оценки

4-5 Переписать существующий прототип на C/C++, провести сравнение производительности с однопоточными реализациями и с прототипом на Python.
6-7 Задокументировать код и опубликовать под одной из лицензий для СПО. Реализовать возможность гибкого выбора типов данных для хранения в HDF5.
8-10 Реализовать гибридный параллелизм MPI/OpenMP/CUDA, версию для разреженных матриц