Войти
ФлеймФорумПрограммирование

Использование GPU для проведения параллельных вычислений

Страницы: 1 2 3 4 5 6 Следующая »
#0
15:49, 12 сен. 2007

Добрый день, Уважаемые Господа!

Перед мной стоит задача задействовать ресурсы графического процессора для проведения параллельных вычислений.

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

На данный момент существует программа, позволяющее распараллеливать проведение расчетов на ПРОИЗВОЛЬНОЕ количество процессов.

Программа позволяет также осуществлять запуск этих нескольких процессов на разных ядрах в многоядерных CPU с целью увеличения производительности вычислений.

Очевидно, что использование современных многопоточных GPU может позволить получить выигрыш в скорости вычислений по сравнению даже с многоядерными CPU.

Для решения этой задачи, по всей видимости, мне нужно будет создание программы-конвертера, которая

- работала бы в фоновом режиме, во время работы расчетной программы

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

- перенаправляла бы вычисления из CPU в GPU.

Сложность заключается в том, что все это нужно мне сделать БЕЗ МОДИФИКАЦИИ ИСХОДНОГО ТЕКСТА ПРОГРАММЫ по определенному ряду причин.

Поэтому, мне хотелось бы узнать Ваше мнение по поводу способов решения этой задачи!

Мне кажется, что наиболее эффективным способом решения этой проблемы является задействование ресурсов GPU с помощью использования ШЕЙДЕРОВ на языке их описания OpenGL Shading Language (GLSL).

В синтаксисе GLSL существуют возможность выполнять в GPU такие же никоуровневые команды как и в ассемблере для CPU (ADD, SUB и т.д.).

Значит, нужно в «прозрачном» режиме для каждого из запущенных процессов просто перенаправлять на исполнение команды из CPU в GPU.

Таким образом, необходимо решить 2 следующие задачи:

1. Найти способ перехватывания инструкций между расчетной программой и CPU для каждого из запущенных процессов.

2. Найти способ перенаправлять вычисления из CPU в GPU и в обратную сторону.

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

Заранее благодарен за дельные советы, Triton.


#1
16:26, 12 сен. 2007

Ecolib API.
NVidia Cuda (FX).

#2
16:27, 12 сен. 2007

>Сложность заключается в том, что все это нужно мне сделать БЕЗ МОДИФИКАЦИИ ИСХОДНОГО ТЕКСТА ПРОГРАММЫ по определенному ряду причин
крута

>В синтаксисе GLSL существуют возможность выполнять в GPU такие же никоуровневые команды как и в ассемблере для CPU (ADD, SUB и т.д.).
аналогично

#3
16:29, 12 сен. 2007

Святой Дьявол
БЕЗ МОДИФИКАЦИИ ИСХОДНОГО ТЕКСТА ПРОГРАММЫ ???

#4
16:48, 12 сен. 2007

Triton
Э-э :) Просто так взять и "перенаправить" на GPU не выйдет :)

>>Значит, нужно в «прозрачном» режиме для каждого из запущенных процессов просто перенаправлять на исполнение команды из CPU в GPU.
Это не возможно хотя бы потому что CPU != GPU и набор команд CPU != набору команд GPU :)

"И как-то так, через хитро закрученную жопу она и работает...", это случайно не о твоей программе? :))

#5
17:43, 12 сен. 2007

Благодарю всем откликнувшимся!

По поводу Ecolib и Cuda, большое спасибо. Сейчас скачал по ним доки, изучаю.

Я согласен с тем, что постановка задачи очень не тривиальная.

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

Мне поставили задачу реанимировать проект, а исходного кода программы то-же нет.

В программе происходит расчет кинентики химических реакций многокомпонентных смесей.

Тематика велась на протяжении нескольких ДЕСЯТКОВ лет и написать сейчас с нуля то же самое просто невозможно.

Программа работает хорошо, верифицирована с зарубежными кодами, к ней притензий нет.

Поэтому мне и было сказано любым путем найти способ увеличить вычислительную производительность БЕЗ МОДИФИКАЦИИ ИСХОДНОГО ТЕКСТА ПРОГРАММЫ.

Т.к. сложность компонентного состава увеличивается с каждым годом на порядок в то время как рост производительности CPU стоит практически на месте.

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

Вот я и подумал, что т.к.

- в программе выполняются только арифметические действия (плюс, минус, умножить, разделить),

- программа работает в режиме командной строки,

то можно перехватывать команды из CPU пересылать их на исполнение в GPU и обрабатывать при помощи шейдеров.

Наверняка, для данного приложения в CPU пересылается набор команд идентичный набору команд, имеющемуся в GPU (ADD, SUB и т.д.), т.к. прога написана давно, работает в режиме командной строки и выполняет арифметические операции.

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

Самым очевидным решением является использование шейдеров и GLSL.

Но мне не понятян механизм при помощи которого я мог бы перехватить и перенаправить команды из CPU в GPU...

#6
17:51, 12 сен. 2007

>Но мне не понятян механизм при помощи которого я мог бы перехватить и перенаправить команды из CPU в GPU...
Никак, исчи програмиста который всё это написал и выманивай исходники

#7
17:53, 12 сен. 2007

Никак. CPU->GPU возможно только программно.
GPU построен таким образом, чтобы выполнять программы малой длины тысячи раз , для решения поставленной задачи весь вычислительный процесс необходимо разбить на такие куски. Это было бы возможно только в случае наличия исходников, да и тогда пришлось бы переписывать. Простой дизассембл не даст ничего. Тупик.

З.Ы. Это только мое мнение, а у гениальности пределов нет, так что если найти ГЕНИЯ...

#8
17:54, 12 сен. 2007

Triton
>Я согласен с тем, что постановка задачи очень не тривиальная.
Она НЕкорректная. И это еще мягко сказано

>Мне поставили задачу реанимировать проект, а исходного кода программы то-же нет.
Тогда се-ля-ви. Юзать эту софтину и писать с нуля новую.
А вообщето контора, которая является автором софта, но не имеет исходников выражает недоумение.

>Поэтому мне и было сказано любым путем найти способ увеличить вычислительную производительность БЕЗ МОДИФИКАЦИИ ИСХОДНОГО ТЕКСТА ПРОГРАММЫ.
есть 2 пути
- советский: придумать новый алгоритм, который будет рабоать гораздо быстрее
- американский: купить новое железо

>Т.к. сложность компонентного состава увеличивается с каждым годом на порядок в то время как рост производительности CPU стоит практически на месте.
Вообщето это от софта зависит. Надо умудрится, чтобы производительность не изменилась на железе, которое ОДНОЗНАЧНО быстрее.


>Тематика велась на протяжении нескольких ДЕСЯТКОВ лет и написать сейчас с нуля то же самое просто невозможно.
совметсно с этим
>но вводятся какие-то поправки из неопубликованных источников, которые нигде невозможно найти.
харошая контора

>- программа работает в режиме командной строки,
MS-DOS?

#9
18:09, 12 сен. 2007

Triton
Поставленная задача при данных условиях не решаема.

#10
18:11, 12 сен. 2007

Джо
партия сказала НАДО

#11
18:13, 12 сен. 2007

Triton
>В программе происходит расчет кинентики химических реакций многокомпонентных смесей.
и вообще... это не про ваш мега-шедевр(вакуумная бомбочка) новости трендят?

#12
18:21, 12 сен. 2007

как то у меня всё это сомнения вызывает.
>- программа работает в режиме командной строки,
>Тематика велась на протяжении нескольких ДЕСЯТКОВ лет

думаю то что это отлажено не значит что нужно писать то, что ты описал.

написать с нуля использую возможности современных процов (несколько десятков лет назад небыло MMX SSE и прочего)
и используя усовершенствованные алгоритмы даст больший прирост в производительности + там если очень хочется и GPU можно воткнуть, если найдёшь куда конечно.
а если сейчас к этой древности писать ещё что-то , что перенаправляет потоки, вытаскивает данные и прочим занимается то можно получить не прирост а полное Г.
всё вышесказанное моё ИМХО.

#13
18:25, 12 сен. 2007

Программа написана под linux и каким-то образом портирована по windows.

1. Под виндой работает железно, но интерфейс режима командной строки linux-овский.

По всей видимости, в исполняемый exe-файл каким-то образом инкапсулирован x-сервер для эмуляции unix-систем под винду, т.к. программа не требует дополнительной инсталляции каких-либо x-серверов наподобие Hummingbird Exceed для своего запуска.

2. Есть также инсталляционная версия под linux.

Запустил под linux-ом инсталляционный скрипт-файл этой проги.

Она развернулась и также спокойно запускается, работает.

При просмотре одного из исполняемых файлов, предназначенных для пакетного ввода исходной информации, видно, что он написан при помощи языка TCL.

Может быть, будут какие-то соображения с учетом этой вводной?

Может быть под linux-ом можно что-нибудь придумать для решения моей задачи?

#14
19:48, 12 сен. 2007

Triton
>На данный момент существует программа, позволяющее распараллеливать проведение расчетов на ПРОИЗВОЛЬНОЕ количество процессов.
>Программа позволяет также осуществлять запуск этих нескольких процессов на разных ядрах в многоядерных CPU с целью увеличения производительности вычислений.

из этого следует что программа распараллеливает вычисления? или я чёто недопонял? или вы хотите сделать кластер на GPU?

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

Либо дисассемблируй код, и востанавливай исходники:)

Страницы: 1 2 3 4 5 6 Следующая »
ФлеймФорумПрограммирование

Тема в архиве.