- PVSM.RU - https://www.pvsm.ru -
[1]
Всем привет!
Последняя неделя на Хабре ознаменовалась серией хакерских постов — взламывали как VoIP [2], так и онлайн-пробки [3].
Предлагаю продолжить неделю более созидательно — решить задачу мирового масштаба [4] по генетике по параллельному программированию.
Сделать за месяц надо всего ничего: найти в двух строках, состоящих из нуклеотидов символов A, T, G и C, максимально длинную общую подстроку.
Призы по сравнению с предыдущим разом подросли и окрепли — сегодня на кону 6 ультрабуков Asus Zenbook UX31E [5] и 10 SSD-дисков суммарной емкостью 800 гигов.
Заманчиво?
Вам дана reference-строка (например, такая: GATGAGCATGTGTTGAATCCTCA
) и много длинных input-строк (вот одна из них: GTCCTCCAGTTTGTAGCATGTGTATTTATGTCCTCCAGTTTGTAGCATGTGTATTTAT
). Нужно для каждый пары из reference- и input-строк найти максимально длинные общие подстроки и вернуть их «координаты». В примере ответом будет (5 13 15 23)
и (5 13 44 52)
, то есть найдены две подстроки:
#код на Питоне, строки в ответе должны нумероваться от единицы, поэтому '-1'
ref = 'GATGAGCATGTGTTGAATCCTCA'
input = 'GTCCTCCAGTTTGTAGCATGTGTATTTATGTCCTCCAGTTTGTAGCATGTGTATTTAT'
ref[(5 - 1):13] == input[(15 - 1):23] #True
ref[(5 - 1):13] == input[(44 - 1):52] #True
В вашем распоряжении есть референсный код [6], который правильно, но очень медленно решает данную задачу брутфорсом.
Звучит просто?
Здесь начинается самое интересное. Предложу несколько вариантов, которые могут быть полезны:
Что вам выбрать, мы посоветовать не можем. Кому-то нравится писать на pthreads, кому-то на OpenMP, а кто-то любит использовать параллельные функции из TBB и может быть даже MKL.
Одно известно наверняка — на нашем форуме [9] часто обсуждаются очень умные идеи и мысли. Например, стоит посмотреть на инструкции в SSE4.2.
К сожалению, наша автоматическая система тестирования слишком молода для поддержи всех языков программирования.
В этот раз мы научили ее понимать C++ (несмотря на мою искреннюю любовь к питону и Java Script), поэтому писать придется на старом добром C++.
Платформа разработки может быть любой, но собираться и тестироваться код будет на машине с Linux (Debian stable — kernel 2.6.32) с установленным gcc (версия 4.6.2 для любителей pthreads) и Intel Parallel Studio XE 2011 (для тех, кто выбирает Intel Compiler, оптимизирующий код под наши процессоры).
Первым трем командам, написавшим самый быстрый код и отправившим решение до 16 мая, мы подарим по Asus Zenbook UX31E [10] на участника.
Вторым трем командам — по SSD 320 Series 80Gb [10].
Еще 4 участникам, которые напишут нам самые интересные посты в блоги Intel Software Network [11], также достанутся SSD.
Итак, еще раз: одна задача [4], один месяц, 6 ультрабуков и 10 SSD [10] для лучших участников из России и СНГ.
Всем, кто решит поучаствовать [12], желаем удачи!
Организаторы и судьи конкурса готовы ответить на любые ваши вопросы в комментариях.
Автор: rozboris
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/konkurs/5744
Ссылки в тексте:
[1] Image: http://software.intel.com/ru-ru/articles/contest-accelerate-2012-main/
[2] VoIP: http://habrahabr.ru/post/141966/
[3] онлайн-пробки: http://habrahabr.ru/company/dsec/blog/142166/
[4] задачу мирового масштаба: http://software.intel.com/ru-ru/articles/contest-accelerate-2012-problem/
[5] Asus Zenbook UX31E: http://www.asus.com/Notebooks/Superior_Mobility/ASUS_ZENBOOK_UX31E/
[6] референсный код: http://intel-software-academic-program.com/contests/ayc/early2012/ayc.zip
[7] Intel VTune Amplifier XE: http://software.intel.com/en-us/articles/intel-vtune-amplifier-xe/
[8] один из более чем 9000 алгоритмов поиска подстроки в строке: http://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%B8%D1%81%D0%BA_%D0%BF%D0%BE%D0%B4%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B8#.D0.90.D0.BB.D0.B3.D0.BE.D1.80.D0.B8.D1.82.D0.BC.D1.8B
[9] форуме: http://software.intel.com/ru-ru/forums/accelerate-2012/
[10] Asus Zenbook UX31E: http://software.intel.com/ru-ru/articles/contest-accelerate-2012-main/#prize
[11] блоги Intel Software Network: http://software.intel.com/ru-ru/blogs/
[12] решит поучаствовать: http://software.intel.com/ru-ru/articles/contest-accelerate-2012-registration/
Нажмите здесь для печати.