Выполнение вашей задачи в CUDA не сильно поможет, если вы сделаете то же самое в CPU.
При условии, что ваши файлы хранятся на стандартном магнитном жестком диске, типичная однопоточная программа ЦП будет использовать:
- Около 5 мс, чтобы найти сектор, в котором хранится файл, и поместить его под считывающую головку.
- Около 10 мс для загрузки файла 1 МБ (при скорости чтения 100 МБ / с) в оперативную память
- Менее 0,1 мс для загрузки 1 МБ данных из ОЗУ в кэш-память ЦП и их обработки с использованием алгоритма линейного поиска.
Это 15,1 мс для одного файла. Если у вас есть 1000 файлов, работа займет 15.1 с.
Теперь, если я дам вам сверхмощный графический процессор с бесконечной пропускной способностью памяти, без задержек и бесконечной скоростью процессора, вы сможете выполнить задачу (3) без времени. Тем не менее, чтение с жесткого диска все равно будет занимать столько же времени. GPU не может распараллелить работу другого, независимого устройства.
В результате вместо того, чтобы тратить 15,1 с, теперь вы будете делать это за 15,0 с.
Бесконечный графический процессор даст вам ускорение на 0,6%. Настоящий графический процессор был бы даже близко к этому!
В более общем случае: если вы планируете использовать CUDA, спросите себя: является ли фактическое вычисление узким местом проблемы?
- Если да - продолжайте поиск возможных решений в мире CUDA.
- Если нет - CUDA не может вам помочь.
Если вы имеете дело с тысячами крошечных файлов и вам нужно часто выполнять чтение, подумайте о методах, которые могут «атаковать» ваше узкое место. Некоторые могут включать в себя:
- Буферизация ОЗУ
- Перевод жестких дисков в конфигурацию RAID
- Получение SSD
может быть больше вариантов, я не эксперт в этой области.