2017-01-18 3 views
3

Я использую алгоритм Minimum Edit Distance, чтобы определить, насколько тесно связаны две строки. Я реализовал его для работы на процессоре, и он отлично работает, когда у вас сотни строк, но это источник замедления, когда вы сравниваете тысячи строк несколько раз. Поэтому я подумал, что было бы полезно отключить загрузку на GPU, так как он мог выполнять сразу несколько сравнений.Могу ли я запустить алгоритм на GPU с помощью Metal?

Возможно ли это? Металлические ресурсы, с которыми я столкнулся, в основном предназначены для графики, которые не помогают. Или, может быть, они?

+0

Возможно, вас заинтересует мой новый декодер huffman, реализованный поверх Metal для идей, загляните на github: https://github.com/mdejong/MetalHuffman – MoDJ

ответ

6

Что вы хотите сделать, возможно, по крайней мере, для определенных размеров проблем, но это не так просто. Что вам нужно сделать, так это выразить алгоритм таким образом, который можно запустить на графическом процессоре, а на iOS - это, вероятно, использование Metal. В частности, вам нужно будет написать одно или несколько вычислительных ядер на языке затенения Metal, который реализует минимальный алгоритм редактирования расстояния, а затем отправит их с помощью кодера команды compute Metal. Существует несколько ресурсов для программирования вычислений с Metal вокруг Интернета.

Мне не известно о наличии металлической реализации MED, но есть как минимум one CUDA implementation, и вы можете прочитать более подробное объяснение MED на GPU here.

3

В дополнение к ответу @warrenm вам нужно написать функцию ядра или пару из них. есть классный сайт металлический учебник: http://metalbyexample.com, а также Apple, документация есть кое-что о нем: https://developer.apple.com/library/content/documentation/Miscellaneous/Conceptual/MetalProgrammingGuide/Compute-Ctx/Compute-Ctx.html

, а также есть несколько учебников по https://www.raywenderlich.com, но они в основном графических ориентированных. Вы также можете проверить библиотеку GPUImage для iOS, что является прекрасной оболочкой OpenGL с приятным интерфейсом. Может быть, есть возможность написать пользовательские функции, которые будут выполняться с помощью OpenGL?

Смежные вопросы