LINUX.ORG.RU
решено ФорумTalks

[нытик-тред][нищеброд] Чертова CUDA!

 ,


0

2

Вот как можно было писать модуль CUFFT, что мне моих 512МБ видеопамяти (GeForce 9600) не хватает, чтобы сделать Фурье малюсенького изображения 4к х 4к?

Вот чего такого делает cufftPlan2d, что ей 300МБ мало? (аллокаторы я еще не вызывал даже…) Ведь 4к х 4к - это всего лишь 128МБ!!!

// эх, фермю, что-ли покупать???

☆☆☆☆☆
Ответ на: комментарий от Eddy_Em

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

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

короче, можно ведь тупо интеграл сосчитать, без всяких БПФ.

Памяти у меня тоже, увы, 512 мегабайт.

BattleCoder ★★★★★
()

Мне вроде бы надо 78*78*78 точек... ну примерно 80 в кубе, это примерно пол-миллиона. Это меньше чем 4000x4000 =) думаю, должно хватить.

Другое дело, что считать надо много раз (для разных параметров), если память будет очищать сама... а то по-моему с очисткой памяти GPU у cuda проблемы (судя по глюкам, которые я иногда получал)

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

хотя...

сейчас до меня дошла одна неприятная мысль =) думаю, что я ошибся...

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

и, наверное, этот случай нельзя свести к ДПФ, так как там ядро не меняется, оно всегда одинаковое, и зависит только от длины N последователности.

Так что CUFFT мне наверное не поможет :( придётся руками считать. а я уж было обрадовался.

И. наверное, с «быстрым» алгоритмом заморачиваться не буду тоже.

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

Кстати, мне тут в голову пришло (может, поздновато)

Если вам нужно двумерное дискретное преобразование Фурье, может, вам и не нужен алгоритм быстрого преобразования? Не пробовали считать вручную, просто суммировать ряд?

по-любому это будет медленнее, зато на GPU легко распараллелить. И памяти явно меньше кушает алгоритм «в лоб».

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

Не пробовали считать вручную, просто суммировать ряд?

Это же будет слишком долго - тогда проще и быстрей на CPU посчитать (что сейчас и делается в случае, если GPU не справится).

Я просто недавно подумал, что по сути-то Фурье мне не нужно: я его использовал для фильтрации изображений (реализовал свертку через Фурье), но ведь можно просто свертку реализовать - тогда так много памяти отводить не надо будет.

Нужно будет попробовать: если свертка на GPU будет выполняться быстрее, чем Фурье на CPU, можно будет так и реализовать.

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

А, ну если так, то да. мне то не свёртка нужна =)

по идее свёртка через Фурье как раз должна быть и быстрее, ведь она сводит её к обычному умножению =) насколько знаю.

Но с памятью беда, ага...

Можно купить Tesla, там памяти от 3 гигов и выше обычно.

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

по идее свёртка через Фурье как раз должна быть и быстрее, ведь она сводит её к обычному умножению =) насколько знаю.

Потому и делал через Фурье. Но GPU-то позволяет одновременно штук эдак 128 потоков запустить - вполне может выйти быстро. ХЗ, надо проверять.

Можно купить Tesla, там памяти от 3 гигов и выше обычно.

Ладно бы мне это нужно было постоянно делать…

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