2011-12-13 15 views
7

有沒有使用scalacl plugin的缺點?具有數組性能的Scala操作(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毫秒

+2

提高30%並不多。我優化了我的代碼的一部分,現在使用數組和while循環來實現100倍的加速。習慣性Scala可能非常慢。例如,如果你擺脫拳擊,那麼你會得到更令人印象深刻的東西。 – ziggystar 2011-12-13 22:54:30

回答

10

可能的缺點我能想到的:

1)循環優化似乎工作和開發商似乎很能幹,但它以粗體字在「關於ScalaCL」屏幕說「 ScalaCL沒有生產準備!「換句話說,你可能會引入一些bug和不穩定性

2)你需要記住每次使用插件編譯,否則你可能會突然發現你有性能問題。確保該插件將在中期或長期保持/兼容

3)您可能會依賴其優化,導致您編寫低效的代碼,而識別和手動優化瓶頸可能會導致更快的代碼換句話說,它可以實際上「紙上的裂縫」

4)這是一個額外的庫依賴項,並增加了構建文件的複雜性

你問了一下,但與專業人士相比,這些都很小。就個人而言,我會毫不猶豫地使用個人項目的循環優化;對於cl-collection的確定還沒有確定(我試過它們,發現我的GPU比我的CPU慢一點 - 但是這取決於可用的硬件),但我認爲這個項目有一個美好的未來,不管是單獨還是併入標準的編譯器和庫。我已經看到了一些代碼的非常戲劇性的加速(高達20倍)。