LINUX.ORG.RU

Cuda(Cudafy)

 , , , ,


0

2

Задание такое: Нужно реализовать решение ДУ вида a(t)*x'+b(t)*x+c(t) = 0, x(t) = x0 на gpu. Почитав методички, пришла к выводу, что можно использовать метод Рунге-Кутты 4 порядка, но меня смущает тот факт, что этот метод итерационный, соответственно, каждый следующий шаг вычисляется с учетом предыдущего. Может кто-то встречался с подобной задачкой и есть решение или кто-то может что-то подсказать? Help me, please!


Функция x(t) у тебя одномерна или нет? Я как раз занимаюсь моделированием таких уравнений на cuda.

Crocodoom ★★★★★
()

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

Тогда параллелить смысла нет, даже если известно количество шагов и промежуточные данные хранить отдельно, то каждая интерация должна ждать предыдущую. Их инструментов openacc/openmp http://academy.hpc-russia.ru/files/lecture_5.pdf

Хотя можешь на gpu через openacc, но без распаралеливания )))

Deleted
()
Ответ на: комментарий от lera

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

Deleted
()
Ответ на: комментарий от lera

Да, в таком случае Рунге-Кутта на CUDA не ляжет никак.

Ещё есть метод собственных функций. Это если параллельность обязательна.

Crocodoom ★★★★★
()
Ответ на: комментарий от Crocodoom

Никаких примерчиков(шаблонов) нет случайно? Нужно решить это ду обязательно на gpu и получить на выходе x.

lera
() автор топика

Нужно реализовать решение ДУ вида

к выводу, что можно использовать метод Рунге-Кутты 4 порядка

Судя по формулировкам, в методичке было написано: «решите методом Рунге-Кутта 4 порядка».

метод итерационный, соответственно, каждый следующий шаг вычисляется с учетом предыдущего

Если это тот самый 1-2-2-1/6, то это явный метод, не итерационный.

i-rinat ★★★★★
()
Ответ на: комментарий от Crocodoom

Рунге-Кутта на CUDA не ляжет никак.

Почему не ляжет? Ведь в условиях задачи не указано, что нужно решить с определённой эффективностью, поэтому можно закодить в самом тупом варианте, запустив на железке одну нить, где всё и посчитать. Будет работать на GPU. А то, что быстрее было на CPU посчитать, это дело десятое.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

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

lera
() автор топика
Ответ на: комментарий от Crocodoom

в общем-то я уже все и написала: Нужно реализовать решение ДУ вида a(t)*x'+b(t)*x+c(t) = 0, x(t) = x0 на gpu. На выходе x. Единственное что не сказала - a,b,с -вектора.

lera
() автор топика
Ответ на: комментарий от i-rinat

Ме́тоды Ру́нге — Ку́тты в устаревшей литературе встречались неправильные названия: ме́тоды Ру́нге — Ку́тта или же ме́тоды Ру́нге — Кутта́

lera
() автор топика
Ответ на: комментарий от lera

неправильные

Почему неправильные? Фамилии произносятся [ˈʀʊŋə ˈkʊta]. «Горловой н» в русском нет, так что «нг». В именительном падеже получается «Рунге-Кутта». В родительном теперь почему-то вторая фамилия склоняется, а первая — нет. Уж если склонять, то все? Чем одна от другой отличаются? Обе не русские.

i-rinat ★★★★★
()
Ответ на: комментарий от lera

Нужно реализовать решение ДУ вида a(t)*x'+b(t)*x+c(t) = 0, x(t) = x0 на gpu. На выходе x. Единственное что не сказала - a,b,с -вектора.

Функция x(t) у тебя одномерна или нет?

Это не уточнялось, я предполагаю, что это одномерный вектор

Такая постановка (a,b,c - вектора, x - скаляр) не имеет смысла. Что-то ты не так поняла.

Crocodoom ★★★★★
()
Последнее исправление: Crocodoom (всего исправлений: 2)

А почитать литературу по параллельным вычислениям?

Элементарно поиск по Гуглу по запросу «параллельные методы решения оду» спустя пару ссылок даёт книгу: А. В. Старченко, В. Н. Берцун Методы параллельных вычислений. Но в методичке я так понимаю у вас тоже есть раздел с литературой.

AlexVR ★★★★★
()
Ответ на: комментарий от Crocodoom

Или a,b - матрицы, а x и c - векторы, или всё скалярное (случай размерности 1).

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

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.