Как проще всего радикально ускорить ресурсоёмкие вычисления на R?

Использую R в том числе для некоторых ресурсоёмких вычислений, и похоже упёрся в потолок производительности. Всё уже распараллелено, используются самые быстрые конструкции, циклы везде где можно заменены на ломающие мозг и крайне неудобные для отладки future_apply и аналоги. Всё это дало ускорение в десятки раз, но и этой скорости уже не хватает. Хочется ускорения ещё на пару порядков, мелкими оптимизациями этого не получить, нужно что-то посерьёзней. Куда стоит двигаться? Как обычно, хочется минимальными усилиями получить максимальный результат. Пока вижу варианты:

  1. Rcpp – насколько понимаю, это самый популярный путь, когда не хватает скорости. В плане технологии вопросов нет, вроде бы есть пошаговые инструкции и всё должно работать. Но не очень привлекает, что придётся изучать второй язык и потом поддерживать код сразу на двух языках. Насколько я понимаю, С++ достаточно сложен в плане получения оптимального кода, так что для того, чтобы действительно добиться ускорения критических мест, может потребоваться значительное время. В моём случае это проблематично, поскольку я не программист, а учёный, и времени плотно заниматься изучением нюансов программирования на новом языке не предвидится.

  2. Вставка функций на Fortran. Не самое популярное решение, но вроде бы тоже есть какие-то инструкции, как запустить. Так же, как и с С++, в наличии все проблемы изучения второго языка и сопровождения двуязычного кода. Привлекает, что если немного разобраться с основами, то скорее всего достаточно быстро удастся получить приемлемый по производительности код, не вникая особо в какие-то программистские нюансы. Собственно, это было и остаётся основной особенностью языка, из-за которой его используют в научных расчётах. Не привлекает, что если возникнут проблемы, мало у кого можно спросить совета, сообщества уже особенно-то и нет. Ну и вообще, изучение фортрана сегодня сложно воспринимать как инвестицию в будущее.

  3. Julia. Красивый современный язык, гораздо более привлекательный в плане изучения, чем Fortran. К самому языку никаких вопросов нет, но в плане экосистемы пока что откровенно сыроват. Советы из сети и код из книжек зачастую уже не работают, опытных «гуру», у которых можно узнать правильные ответы, пока ещё очень мало. Пробовал вызывать Julia из R и через XRJulia, и чрез JuliaCall, но так и не смог заставить это работать. Похоже, аналогичные проблемы не только у меня. Возможно через какое-то время появятся новые рабочие способы как их связать, но пока что такая связка выглядит не очень надёжной. А переходить полностью на Julia – значит выбрасывать весь свой опыт, который есть с R. Можно вызывать R из Julia, это работает, но это уже самый крайний случай. Ну и по скорости – чтобы получить на Julia код, как-то сопоставимый по скорости с С++ или Fortran, нужно очень постараться. Получается далеко не у всех. Как рубашка на вырост Julia возможно и неплохой вариант, но если хочется скорости здесь и сейчас, то не уверен, что это лучшее, что можно придумать.

Какие есть идеи?


Ответы (0 шт):