Comments 25
Предваряя техническое описание — возможно ли использование OpenCL и CUDA в «больших» архиваторах типа WinRAR или 7zip.
0
Интересно, а на видеокартах AMD каков прирост будет.
P.S. если будут исходники/бинарники и инструкция по запуску (если там есть подводные камни), могу потестить на ATI Radeon HD 5770.
P.S. если будут исходники/бинарники и инструкция по запуску (если там есть подводные камни), могу потестить на ATI Radeon HD 5770.
0
Интересно было, все-таки посмотреть на результаты сравнения, если бы алгоритм для CPU был бы написан на C++, все-таки это было бы более справедливо.
0
Вы правы, я уже думал об этом, можно лишь отметить, что Cuda и OpenCl также работают из NET. Ну, если взять лучший вариант для CPU, то время у GPGPU все равно лучше. Также я заметил, что GPGPU работает гораздо быстрее, чем происходит запись в файл, процесс записи в файл одна из долгих операций.
+1
Вы правы, я уже думал об этом, можно лишь отметить, что Cuda и OpenCl также работают из NET
Я честно говоря не знаю как с CUDA/OpenCL работать из под .Net, но в любом случае код, который исполняется на видеокарте, должен компилироваться напрямую в машинные инструкции, то есть выполнятся не под виртуальной машинной, без автоматической сборки мусора.
Кстати сама статья по работе с CUDA/OpenCL из .Net была бы интересная, или хотя бы комментарий со ссылками на библиотеки:)
0
Спасибо, будет что на выходных посмотреть.
0
Насколько я понял, CUDA.NET — это оболочка для CUDA API, при этом функцию обработки данных на видеокарте все равно нужно писать на неуправляемом языке, верно?
Было бы интересно посмотреть сравнение времени работы алгоритма на c для параллельной работы на CPU и вашей реализации на CUDA.NET.
Было бы интересно посмотреть сравнение времени работы алгоритма на c для параллельной работы на CPU и вашей реализации на CUDA.NET.
0
Насколько я понял, CUDA.NET — это оболочка для CUDA API
Да и CLOO и CUDA.NET это обертки над API.
при этом функцию обработки данных на видеокарте все равно нужно писать на неуправляемом языке, верно?
Исключительно на неуправляемом языке, мы пишем ядро(kernel) для видеокарты, а вызываем мы его из .Net, при этом как ядро будет компилироваться и работать зависит только от вашего драйвера, по сути, это же ядро мы можем вызвать из C/C++, Matlab, и т.д.(все что может работать с OpenCl и CUDA).
Было бы интересно посмотреть сравнение времени работы алгоритма на c для параллельной работы на CPU и вашей реализации на CUDA.NET.
Мне тоже было интересно, но времени писать пока нет.
0
Может тогда стоит писать на рамдиск, чтобы увидеть реальную производительность?
0
В вашем тесте файлы размером в 200мб и в 600мб. Интересно посмотреть было бы как изменится картина с:
1. OpenCL выполнялся на карте AMD
2. Файл выходил за пределы памяти, допустим при памяти в 1гб на видеокарте, он занимал 2,2 гб. Соответствующие тесты провести можно было бы для CPU также.
1. OpenCL выполнялся на карте AMD
2. Файл выходил за пределы памяти, допустим при памяти в 1гб на видеокарте, он занимал 2,2 гб. Соответствующие тесты провести можно было бы для CPU также.
+1
1. OpenCL выполнялся на карте AMD
В следующей статье я выложу программу, и вы сами сможете протестировать. Так получилось что у всех моих знакомых видеокарты Nvidia. Правда до этого у меня была AMD 4850, но она не поддерживала расширение(OpenCl) cl_khr_byte_addressable_store, поэтому я не мог работать на ней с байтами.
2. Файл выходил за пределы памяти, допустим при памяти в 1гб на видеокарте, он занимал 2,2 гб. Соответствующие тесты провести можно было бы для CPU также.
На видеокарту файл подается частями, и теоретически он может быть любого размера.
+1
Не упираются ли результаты на GPU в скорость чтения/записи винчестера? Судя по цифрам вроде бы не должны, но для чистоты эксперимента хотелось бы уточнить, а вдруг потенциал еще больше.
0
Да, я думаю, жесткий диск тормозит 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 происходит большой скачек по времени, это связанно с тем, что файл подается порциями и после обработки на видеокарте, файл сначала записывается на диск, а потом запускается следующий кусочек на обработку. Я хотел сделать буффер для обработки и асинхронно записывать в файл, но времени на это не хватило.
CPU(Async) без записи 00:01:16.5318999 с записью 01:30.8914603, разница в 14 секунд.
OpenCL без записи 00:00:29.4916041 с записью 00:01:09.3714452, разница в 39 секунд.
Для CUDA аналогично.
Можно увидеть, что для OpenCl и CUDA происходит большой скачек по времени, это связанно с тем, что файл подается порциями и после обработки на видеокарте, файл сначала записывается на диск, а потом запускается следующий кусочек на обработку. Я хотел сделать буффер для обработки и асинхронно записывать в файл, но времени на это не хватило.
0
Исходный код закрыт? Интересно было бы посмотреть… Если нет, не сложно было бы на гитхабе выложить?
0
Возможно, я выложу код на гитхабе, если выложу, в следующей статье дам ссылку.
0
Мы тоже реализовал Хаффмана на GPU. Однако в сравнении участвовала самая быстрая на данный момент реализация на C++ — FastHuffman. Процессор, на котором мы тестировали — i7, реализация GPU работала на Amazon. Прирост где-то около 15-20 процентов, но реализация неоптимальна. А что у вас с декодированием?
Наши исходники доступны тут: github.com/Kentzo/phuffman, бранч называется cuda
Наши исходники доступны тут: github.com/Kentzo/phuffman, бранч называется cuda
+1
Интересно:)
Вначале я планировал сделать и декодирование, но с ним возникли сложности, а так как времени у меня было не много, пришлось его пока отложить, но кое-какие мысли есть!
Не поделитесь?
Я не претендую на самую быструю реализацию.
Вначале я планировал сделать и декодирование, но с ним возникли сложности, а так как времени у меня было не много, пришлось его пока отложить, но кое-какие мысли есть!
Однако в сравнении участвовала самая быстрая на данный момент реализация на C++ — FastHuffman.
Не поделитесь?
Прирост где-то около 15-20 процентов, но реализация неоптимальна.
Я не претендую на самую быструю реализацию.
0
Доступна где-то в сети. Я попозже поищу — дам ссылку. Что касается декодирования, то тут все сложнее и у нас с этим тоже некоторые проблемы. Я предлагаю объединиться и бороться с проблемами декодирования сообща. У меня Хаффман это небольшая часть диссера.
0
Вот, нашел: www.cipr.rpi.edu/~said/FastAC.html
Там еще и адаптивный вариант имеется.
Там еще и адаптивный вариант имеется.
0
Не хватает тестов OpenCL на CPU и CPU+GPU вместе.
+1
Не хватает сравнения с оптимизированным 7z на тех же данных.
0
Sign up to leave a comment.
Использование GPGPU для сжатия данных (Часть I)