Скоро планирую запустить седьмой любительский конкурс по программированию. В нём будет предложена одна задача для решения на процессоре Core 2 Duo E8400 (4 Gb памяти) видеокарте GeForce 250 GTS (1 Gb памяти). Разумеется, это НЕ конкурс чисто на оптимизацию программы под видеокарту. Это будет конкурс по параллельному программированию, поэтому задача будет предложена такая, что нормальные алгоритмы для её решения параллелятся плохо. Задача участников будет состоять в том, чтобы написать программу под Windows 7 (32 bit) или Linux Ubuntu (64 bit) и прислать мне исполняемый файл. Для работы программы НЕ должно требоваться устанавливать что-либо дополнительно, кроме необходимых драйверов видеокарты, CUDA Toolkit 3.2 и Microsoft HPC Pack 2008 SDK (для работы MPI, если кому понадобится).

Как скоро запустится конкурс? Постараюсь подготовиться в течение следующей недели. То есть в районе 7-8 апреля 2011 г., плюс-минус пара дней. Дело в том, что есть серьёзные проблемы, о которых будет сказано ниже.

Сразу предупреждаю участников, что это первый конкурс по программированию видеокарт, поэтому в данном случае не буду обещать, что всё нормально получится. Некоторые программы, которые я сам писал, по какой-то причине вешали всю систему или заставляли карточку сильно перегреваться… потом синий экран — и привет. Так что в случае чего, попрошу отнестись с пониманием к непредвиденному завершению конкурса.

Для чего эта новость?

Новость написана со следующей целью. Если кто-то хочет выступить в качестве информационного спонсора и обещает на своём сайте (блоге) выложить новость о конкурсе (как только конкурс начнётся), то я упомяну такой сайт или блог в качестве спонсора. При условии, что содержимое сайта не противоречит моим представлениям о культуре, этике, нравственности и пр.. Так что будущим спонсорам просьба списаться со мной через почту конкурса «zealint.comp@gmail.com».

Другая причина: я хочу, чтобы потенциальные участники сообщили о своём желании участвовать в комментариях к этому посту. Чтобы я примерно представлял себе объём предстоящей работы.

Последняя причина: хочу предупредить желающих участвовать, чтобы они (если ни разу не пробовали) написали уже хоть одну работающую программу под CUDA, причём чтобы эта программа работала достаточно долго, дабы оценить, выдержит ли видеокарта. Если у вас вообще нет CUDA-совместимой видеокарты, то разберитесь с тем, как работает режим эмуляции, потом просто будете присылать мне исполняемый файл уже без эмуляции.

Чего я хочу от конкурса?

Во-первых, обменяться опытом с участниками. Как и всегда, я предлагаю задачу, в которой гарантированно можно что-то «замутить», то есть помимо тривиальных решений она допускает решения более эффективные. И кто знает, чьё решение будет лучшим: может быть моё (тогда я о нём напишу), а может чьё-то другое (тогда мы его вместе попросим поделиться мыслями).

Во-вторых, несмотря на громкие заявления в сети о том, что «GPU рулит», а «CPU умирает», всё равно разные задачи лучше работают на разных процессорах. Вот я только что вернулся с конференции ПаВТ’2011, там очень много докладов было посвящено гибридным кластерным системам (GPU+CPU). И все отмечали, что какие-то задачи лучше работают на CPU, а какие-то – на GPU. Поэтому мне интересно, что в данной задаче окажется лучше: 2 ядра CPU или 128 ядер GPU? А может и то, и другое сразу?

В-третьих, хочу побудить участников, которые любят рассуждать о CUDA, но не написали под неё ни одной программы, чтобы они тоже подключались и пробовали, наконец, как оно всё работает.

Проблемы в процессе подготовки конкурса

Раньше я уже программировал под CUDA, но в WindowsXP. Всё нормально работало. Теперь, когда у меня Windows 7, все стало плохо. Примерно полдня боролся с той проблемой, что программа не хочет работать дольше 2 секунд — падает драйвер и снова перегружается. Решение нашёл тут.

Вторая проблема была с запуском программ под Ubuntu 10.04, 64 bit. Программы, работающие более 10 секунд, работали неправильно и останавливались. Танцы с бубном привели к тому, что нужно перейти на какую-нибудь консоль (например, первую — CTRL+ALT+F1), НЕ выключая serverX. И запускать программу из консоли. Шаманство в том, что иксы отключать не надо, а иначе ничего не работает.

Обсуждение статьи на форуме в этой теме.