Операции Scala с производительностью массивов (плагин scalacl) - PullRequest
7 голосов
/ 14 декабря 2011

Есть ли минусы использования плагина scalacl ?

Я планирую использовать scala в своем проекте. Я написал немного кода в Scala, чтобы увидеть время его выполнения.

(1 to 1000000).map(1 + _).sum

1. Без плагина

компилируется во что-то вроде этого:

BoxesRunTime.unboxToInt(((TraversableOnce)Predef..MODULE$.intWrapper(1).to(1000000).map(new MyScala..anonfun.1(), IndexedSeq..MODULE$.canBuildFrom())).sum(Numeric.IntIsIntegral..MODULE$));

и работает около 375 мс

2. С плагином scalacl

 int i = 1;
 int j = 1000000;
 int k = j;
 int m = i;
 for (VectorBuilder localVectorBuilder = new VectorBuilder(); m <= k;) {
     int n = m;
     localVectorBuilder.$plus$eq(BoxesRunTime.boxToInteger(1 + n));
     m += 1;
 }
 int a =  BoxesRunTime.unboxToInt(localVectorBuilder.result().sum(Numeric.IntIsIntegral..MODULE$));

259 мс

1 Ответ

10 голосов
/ 14 декабря 2011

Возможные минусы, о которых я могу подумать:

1) Оптимизация цикла кажется работающей, и разработчик кажется очень компетентным, но он говорит жирным шрифтом на экране «О ScalaCL» « ScalaCLне готов к производству!".Другими словами, есть небольшая вероятность того, что вы можете внести ошибки и нестабильность

2) Вам нужно помнить, что каждый раз нужно компилировать с плагином, иначе вы можете внезапно обнаружить, что у вас есть проблемы с производительностью.Вы не можете быть уверены, что плагин будет поддерживаться / быть совместимым в среднесрочной или долгосрочной перспективе

3) Вы можете полагаться на его оптимизацию, что приведет вас к написанию неэффективного кода, в то же время выявляя и оптимизируя вручнуюузкие места могут привести к более быстрому коду в целом.Другими словами, в действительности это может «перебить трещины»

4) Это дополнительная библиотечная зависимость, которая усложняет ваши файлы сборки

Вы спрашивали о минусах, но они довольно незначительныпо сравнению с его плюсами.Лично у меня не было бы сомнений в использовании петлевых оптимизаций для личных проектов;пока что не совсем уверен насчет cl-коллекций (я попробовал их и обнаружил, что мой GPU немного медленнее, чем мой CPU - тем не менее, он зависит от доступного оборудования), но я думаю, что у проекта большое будущее, как самостоятельное, так и встроенное встандартный компилятор и библиотеки.Я видел очень резкое ускорение (примерно в 20 раз быстрее) для некоторого кода.

...