Мне нужно улучшить производительность части программного обеспечения, которое анализирует XML-файлы и добавляет их содержимое в большую базу данных SQL. Я пытался найти информацию о том, можно ли реализовать это на графическом процессоре. Мое исследование, касающееся как CUDA, так и OpenCL, оставило меня без каких-либо четких ответов, кроме того, что программное обеспечение может быть разработано на языках C/C++, FORTRAN и многих других языках, используя директивы компилятора для включения обработки GPU. Это заставляет меня задаться этим вопросом: действительно ли мне нужен API или библиотека, написанная для ускорения GPU, или программа, написанная на C/C++, с использованием стандартной библиотеки XML Parsing и скомпилированная с помощью директив компилятора для CUDA/OpenCL, автоматически запускает XML библиотечные функции на графическом процессоре?GPU Ускоренный анализ XML
ответ
На самом деле я не вижу смысла в анализе XML на графическом процессоре. Архитектура графического процессора ориентирована на массовые вычисления чисел с плавающей запятой, а не на операции, такие как обработка текста. Я думаю, что гораздо лучше использовать процессор и разделить синтаксический анализ XML между потоками, чтобы использовать несколько ядер. Использование GPU в таком приложении, на мой взгляд, является излишним.
слишком плохие люди без знания пытаются ответить на вопрос о точках репутации. У меня точно такая же проблема, мне нужен лучший алгоритм для анализа на GPU, и я не могу его найти. -1 для этого – Nulik
В общем, графические процессоры не подходят для ускорения обработки XML ... Графические процессоры отличны только в том случае, если предполагаемая задача имеет массовый параллелизм для использования большого количества блоков обработки графического процессора. Обработка XML, с другой стороны, thread state machine переходный тип задания.
Сначала посмотрите на структуру вашего xml. Следуя этой ссылке, вы можете найти критерии для структуры XML, подходящей для параллельной обработки. Parallel XML Parsing in Java
Если ваша структура XML параллельно перерабатываемый, а затем несколько идей:
Как я знаю, потребности XML разбора стека структуру помнить текущую позицию в дереве и проверить правильность открытия и закрытия узлов.
Структура стека может быть представлена в виде одномерного массива со указателем стека. Указатель стека содержит положение верхнего элемента стека в массиве
Говорят, что вы можете хранить массивы в 1D текстурах (максимум 4096 элементов). Или в 2D текстуры (макс. = 16777216 4,096x4,096 элементов) ... Посмотрите на следующую ссылку для получения дополнительной https://developer.nvidia.com/gpugems/GPUGems2/gpugems2_chapter33.html
если присвоить отдельный номер с плавающей точкой для каждого уникального имени элемента, то вы можете хранить элементы, как номера
Если вы берете входной текст как массив кодов ascii/utf-8, то почему бы не сохранить их как массив чисел с плавающей запятой?
Последнее, что необходимо учитывать при использовании графического процессора, - это структура вывода.
Если вам нужно, например, столбец столбцов фиксированной длины, то только о том, как представить такую структуру в 1D или 2D-массиве чисел с плавающей запятой
Если вы уверены в предыдущих пунктах, и графический процессор является правильным для вас, то просто напишите функции для конвертировать ваши данные текстуры и текстуры обратно к данным
и тогда, конечно, весь XML Parser ...
Я никогда не пытался программирования с GPU на всех, но, кажется, очень скоро мне сказать, что что-то невозможно ...
Кто-то должен быть первым, чтобы построить весь алгоритм и попытаться ли это эффективно использовать GPU или не
* "Должен ли я на самом деле нужен API или библиотеки, написанные для ускорения GPU, или же программа, написанная на C/C++, используя стандартную библиотеку XML Parsing и скомпилированную с помощью директив компилятора для CUDA/OpenCL, автоматически запускает функции библиотеки XML на GPU? »* - Определенно первое, и вам, вероятно, потребуется значительно реструктурировать задействованные алгоритмы, если даже возможно/полезен с такой иерархической и неподходящей задачей для GPU-вычислений, как XML-синтаксический анализ (хотя я не эксперт в XML-синтаксическом анализе, я признаю). –