0
<< предыдущая заметкаследующая заметка >>
26 февраля 2012
CUDA - параллельные вычисления на видеокарте

Вынужден был отлучиться,поэтому не смог последние два дня тут быть.До этого я начал эксперементировать с CUDA (интерфейс для вычислений на видеокарте) .Основной платформой CUDA является C++ и позволяет в десятки раз ускорять высчисления как если бы использовался только процессор.Сам код программы:

Сработавшая программа:





Исходный код:http://anonymouse.tf9.ru/examples/1.cu

Exe-приложение:http://anonymouse.tf9.ru/examples/899.rar

В результате у меня получились такие результаты сравнения CUDA и процессора:

Результаты с памятью (плюсуется время передачи даннных с оперативной памяти компьютера на оперативную память виедокарты)

67.89 миллисекунд-если использовать CUDA
73.08 миллисекунд-если добавить к CUDA if(если)
63.96 миллисекунд-если использовать CUDA но операции не производить (то есть чистое время загрузки в память)
144.69 миллисекунд-без CUDA на процессоре

т.е ускорение наблюдаемое = 2 раза

Результаты без памяти (чистое выполнение кода)

79.65 millseconds-просто процессор 202 МЛН ОПЕРАЦИЙ В СЕКУНДУ
2.96 millseconds-CUDa 5,4 МДРЛД ОПЕРАЦИЙ В СЕКУНДУ

Прирост в 25 раз.Отличный показатель и даже при увеличении количества операций видеокартой очень крутой.Однако у меня странный вопрос,почему операций так мало ,если учитывать что тактовая частота моего процессора 3 Ггц.Может быть вся соль в том что работа с массивами на C++ приводит к множеству дополнительных операций на машинном коде или в работе ОС и приорететах процессов,или приложение находиться в режиме Debug

Соответственно моя задача написать функции поиска закономерностей на C++ и CUDA.
Главная проблема в ассоциативных массивах которые не содержит C++,вторая по значимости проблема ,сначала нужно сделать адекватный код на PHP учитывающий все типы закономерностей,а также связать их с практическими задачами которые были поставлены вначале



Объяснение работы программы.Сначала создаётся массив с 16 миллионами (16*1024*1024) нулями внутри.Рассчитывается размер памяти которую займёт прогграмма,а потом загружаются в оперативную память видеоакарты сама программа и её данные.Программа прибавляет к каждому значению единицу.Что составляет 16 миллионов операций.В результате все элементы массива становятся равны одному.
Программу я брал с http://steps3d.narod.ru/tutorials/cuda-tutorial.html ,очень понятные объясения на том сайте
<< предыдущая заметка следующая заметка >>
Оставить комментарий