Pull to refresh

Comments 25

Предваряя техническое описание — возможно ли использование OpenCL и CUDA в «больших» архиваторах типа WinRAR или 7zip.
Думаю, что какую-то часть операций можно вынести на GPGPU, но на текущий момент написать архиватор с полной поддержкой GPGPU, не возможно в силу особенностей этих технологий. Наверное в будущем это и будет возможно.
Интересно, а на видеокартах AMD каков прирост будет.
P.S. если будут исходники/бинарники и инструкция по запуску (если там есть подводные камни), могу потестить на ATI Radeon HD 5770.
Да во второй части я размещу exe-файл, для запуска нужен будет только .Net 4.0. Подводных камней быть не должно, вам только нужно будет установить драйвера с поддержкой OpenCl.
Интересно было, все-таки посмотреть на результаты сравнения, если бы алгоритм для CPU был бы написан на C++, все-таки это было бы более справедливо.
Вы правы, я уже думал об этом, можно лишь отметить, что Cuda и OpenCl также работают из NET. Ну, если взять лучший вариант для CPU, то время у GPGPU все равно лучше. Также я заметил, что GPGPU работает гораздо быстрее, чем происходит запись в файл, процесс записи в файл одна из долгих операций.
Вы правы, я уже думал об этом, можно лишь отметить, что Cuda и OpenCl также работают из NET

Я честно говоря не знаю как с CUDA/OpenCL работать из под .Net, но в любом случае код, который исполняется на видеокарте, должен компилироваться напрямую в машинные инструкции, то есть выполнятся не под виртуальной машинной, без автоматической сборки мусора.
Кстати сама статья по работе с CUDA/OpenCL из .Net была бы интересная, или хотя бы комментарий со ссылками на библиотеки:)
Все тоже самое, как и в C/C++, только «хостом» является .Net приложение. Хорошо, в ближайшее время постараюсь написать о .Net и работе с CUDA и OpenCl.
Я использовал библиотеку CLOO для OpenCl, и CUDA.NET для CUDA.
Спасибо, будет что на выходных посмотреть.
Насколько я понял, CUDA.NET — это оболочка для CUDA API, при этом функцию обработки данных на видеокарте все равно нужно писать на неуправляемом языке, верно?

Было бы интересно посмотреть сравнение времени работы алгоритма на c для параллельной работы на CPU и вашей реализации на CUDA.NET.
Насколько я понял, CUDA.NET — это оболочка для CUDA API

Да и CLOO и CUDA.NET это обертки над API.
при этом функцию обработки данных на видеокарте все равно нужно писать на неуправляемом языке, верно?

Исключительно на неуправляемом языке, мы пишем ядро(kernel) для видеокарты, а вызываем мы его из .Net, при этом как ядро будет компилироваться и работать зависит только от вашего драйвера, по сути, это же ядро мы можем вызвать из C/C++, Matlab, и т.д.(все что может работать с OpenCl и CUDA).
Было бы интересно посмотреть сравнение времени работы алгоритма на c для параллельной работы на CPU и вашей реализации на CUDA.NET.

Мне тоже было интересно, но времени писать пока нет.
Может тогда стоит писать на рамдиск, чтобы увидеть реальную производительность?
В вашем тесте файлы размером в 200мб и в 600мб. Интересно посмотреть было бы как изменится картина с:
1. OpenCL выполнялся на карте AMD
2. Файл выходил за пределы памяти, допустим при памяти в 1гб на видеокарте, он занимал 2,2 гб. Соответствующие тесты провести можно было бы для CPU также.
1. OpenCL выполнялся на карте AMD

В следующей статье я выложу программу, и вы сами сможете протестировать. Так получилось что у всех моих знакомых видеокарты Nvidia. Правда до этого у меня была AMD 4850, но она не поддерживала расширение(OpenCl) cl_khr_byte_addressable_store, поэтому я не мог работать на ней с байтами.
2. Файл выходил за пределы памяти, допустим при памяти в 1гб на видеокарте, он занимал 2,2 гб. Соответствующие тесты провести можно было бы для CPU также.

На видеокарту файл подается частями, и теоретически он может быть любого размера.
Не упираются ли результаты на GPU в скорость чтения/записи винчестера? Судя по цифрам вроде бы не должны, но для чистоты эксперимента хотелось бы уточнить, а вдруг потенциал еще больше.
Да, я думаю, жесткий диск тормозит OpenCl и CUDA. Я специально тестировал сначала с записью в файл, а потом без записи. Например, если сравнить результаты:
CPU(Async) без записи 00:01:16.5318999 с записью 01:30.8914603, разница в 14 секунд.
OpenCL без записи 00:00:29.4916041 с записью 00:01:09.3714452, разница в 39 секунд.
Для CUDA аналогично.
Можно увидеть, что для OpenCl и CUDA происходит большой скачек по времени, это связанно с тем, что файл подается порциями и после обработки на видеокарте, файл сначала записывается на диск, а потом запускается следующий кусочек на обработку. Я хотел сделать буффер для обработки и асинхронно записывать в файл, но времени на это не хватило.

может попорбовать потестировать и исключив зависимость от чтения?
то есть (освободив кучу памяти) сначала зачитать весь файл в оперативку, а потом уже начать счет.
Исходный код закрыт? Интересно было бы посмотреть… Если нет, не сложно было бы на гитхабе выложить?
Возможно, я выложу код на гитхабе, если выложу, в следующей статье дам ссылку.
Мы тоже реализовал Хаффмана на GPU. Однако в сравнении участвовала самая быстрая на данный момент реализация на C++ — FastHuffman. Процессор, на котором мы тестировали — i7, реализация GPU работала на Amazon. Прирост где-то около 15-20 процентов, но реализация неоптимальна. А что у вас с декодированием?
Наши исходники доступны тут: github.com/Kentzo/phuffman, бранч называется cuda
Интересно:)
Вначале я планировал сделать и декодирование, но с ним возникли сложности, а так как времени у меня было не много, пришлось его пока отложить, но кое-какие мысли есть!
Однако в сравнении участвовала самая быстрая на данный момент реализация на C++ — FastHuffman.

Не поделитесь?
Прирост где-то около 15-20 процентов, но реализация неоптимальна.

Я не претендую на самую быструю реализацию.
Доступна где-то в сети. Я попозже поищу — дам ссылку. Что касается декодирования, то тут все сложнее и у нас с этим тоже некоторые проблемы. Я предлагаю объединиться и бороться с проблемами декодирования сообща. У меня Хаффман это небольшая часть диссера.
Вот, нашел: www.cipr.rpi.edu/~said/FastAC.html
Там еще и адаптивный вариант имеется.
Не хватает тестов OpenCL на CPU и CPU+GPU вместе.
Не хватает сравнения с оптимизированным 7z на тех же данных.
Sign up to leave a comment.

Articles

Change theme settings