Можем ли мы использовать cuFFT для обработки нескольких файлов разного размера?

Я любитель, работающий над распараллеливанием операций БПФ/выполнения нескольких файлов вместе. У меня есть, скажем, 1000 файлов, каждый из которых содержит реальные данные разных размеров, т.е. если в одном файле около 22000 значений, в другом файле может быть 15000 значений, в следующем может быть 19000 значений и так далее.

Любая идея о том, как это может быть достигнуто? Если вы ответили через ПАРТИЙНЫЙ КОНТРОЛЬ, объясните, как это сделать?


person Developer by Blood    schedule 16.08.2014    source источник


Ответы (1)


Есть два стандартных решения вашей проблемы:

Потоки: cuFFT поддерживает потоки CUDA через cufftSetStream. функция. Шаблон, который вы хотели бы использовать, состоит в том, чтобы связать каждое БПФ с отдельным потоком. Это может позволить вам перекрывать обработку нескольких БПФ. Более того, копирование данных в GPU и из него может перекрываться вычислениями с минимальным влиянием на производительность.

Пакетная обработка. Как вы упомянули, пакетная обработка — еще одно решение. Если все ваши БПФ имеют довольно схожий размер (как в вашем примере), вы должны иметь возможность дополнять меньшие данные данными, которые не изменят/значительно не изменят вывод, чтобы сделать их все одинакового размера. Вы можете обработать их с помощью пакетного вызова.

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

person Jez    schedule 16.08.2014
comment
Сначала я подумал о NULL, но это не кажется хорошей практикой. Спасибо, что познакомили меня с cufftSetStream, я разберусь с этим и отмечу его как ответ, если он сработает хорошо. Спасибо :) - person Developer by Blood; 16.08.2014
comment
сомнительно, что будет какое-либо перекрытие независимых преобразований cufft размером ~ 15000. Однако перекрытие копирования данных с преобразованиями должно быть возможным, как @JackOLantern демонстрирует здесь< /а>. И вы можете найти другие полезные примеры в теге cufft. - person Robert Crovella; 16.08.2014
comment
@RobertCrovella Можно ли копировать и иметь все 1000 файлов с таким большим объемом данных на графическом процессоре в данный момент нормально и абсолютно практично/хорошо/действительно или разделить файлы на пакет (не путайте это с ключевым словом cufft)? - person Developer by Blood; 17.08.2014
comment
@Jez Я изучил потоки (по ссылке Роберта), но это кажется немного неэффективным, так как мне нужно создавать 1000 потоков для 1000 файлов? - person Developer by Blood; 17.08.2014
comment
Вам не нужно 1000 потоков. И вам не нужны сразу все 1000 файлов на GPU. Вы создаете конвейер. Возможно, вам потребуется больше узнать о программировании CUDA и программировании CUDA с потоками. - person Robert Crovella; 18.08.2014