Какова примерная проблема и решение для изучения совместной памяти, распределенной памяти и / или программирования на GPU? - PullRequest
3 голосов
/ 22 апреля 2011

Мы ищем типовые проблемы и коды, которые будут работать на любой или на всех архитектурах с общей памятью, распределенной памятью и GPGPU.Эталонной платформой, которую мы используем, является LittleFe (littlefe.net), недорогой образовательный кластер открытого дизайна, в настоящее время с шестью двухъядерными процессорами, каждый с чипсетом nVidia.

Эти проблемы и решения будут полезны для обучения параллелизму любого новичка, предоставляя рабочие примеры и возможности засучить рукава и код.Эксперты Stackoverflow обладают хорошим пониманием и, скорее всего, будут иметь некоторые фавориты.

Расчет площади под кривой интересен, прост и понятен, но обязательно найдутся такие, которые так же легко выражаются и переполненывозможности практиковаться и учиться.

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

На LittleFe мы преимущественно использовалитри приложения.Первый - это анализ оптимальных целей на дартс, который сильно параллелен с минимальными накладными расходами.Второй - это игра жизни Конвея, типичная для проблем с разделением граничных условий.У него умеренные накладные расходы на связь.Третий - это модель формирования галактики из n тел, которая требует значительных накладных расходов.

Ответы [ 3 ]

2 голосов
/ 22 апреля 2011

Руководство по программированию CUDA (PDF) содержит подробный анализ реализации умножения матриц на GPU. Это, кажется, основной пример «Привет, мир» для изучения программирования на GPU.

Кроме того, CUDE SDK содержит десятки других хорошо объясненных примеров программирования на GPU в CUDA и OpenCL. Мой любимый пример - сталкивающиеся шары. (демо с несколькими тысячами шариков, сталкивающихся в реальном времени)

1 голос
/ 23 апреля 2011

Одной из более сложных, но простых примеров проблем является процедура BLAS sgemm или dgemm (C = альфа * A x B + бета * C), где A, B, C - матрицы действительных размеров, а альфа и бета - скаляры.Типы могут быть с плавающей точкой одинарной точности (sgemm) или плавающей точкой двойной точности (dgemm).

Реализация этой простой подпрограммы на различных платформах и архитектурах дает некоторое представление о функциональности и принципах работы.Для получения более подробной информации о BLAS и подпрограмме? Gemm смотрите http://www.netlib.org/blas.

Вам нужно только обратить внимание, что для реализации двойной точности на GPU у GPU должны быть возможности двойной точности.

1 голос
/ 22 апреля 2011

Два из моих любимых числовых чисел и поиск простых чисел. Для первого мы кодируем правило прямоугольника средней точки для функции f (x) = 4.0 / (1.0 + x * x). Интегрирование функции между 0 и 1 дает приближение константы pi, что облегчает проверку правильности ответа. Параллелизм находится во всем диапазоне интеграции (вычисление площадей прямоугольников).

Для второго мы вводим целочисленный диапазон, а затем идентифицируем и сохраняем простые числа в этом диапазоне. Мы используем грубое разделение ценностей по всем возможным факторам; если найдены какие-либо делители, отличные от 1 или числа, то значение является составным. Если простое число найдено, посчитайте его и сохраните в общем массиве. Параллелизм делит диапазон, так как тестирование на простоту N не зависит от тестирования M. Есть некоторая хитрость, необходимая для того, чтобы разделить первичное хранилище между потоками или собрать распределенные парциальные ответы.

Это очень простые и простые проблемы, которые нужно решить, что позволяет студентам сосредоточиться на параллельной реализации, а не на вычислительных процессах.

...