scalacl pluginを使用することについての問題はありますか?配列のパフォーマンス(scalaclプラグイン)を使用したスカラ操作
プロジェクトで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$));
とscalaclプラグインで約375ミリ秒
2.
で実行されます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ミリ
私は考えることができる
30%の改善はあまりありません。私は現在、アレイとwhileループを使用している私のコードの一部を最適化し、100倍のスピードアップを実現しました。慣習的なScalaは本当に遅くなる可能性があります。例えば、あなたがボクシングを取り除く場合、あなたはより印象的な何かを得るでしょう。 – ziggystar
Btw、 'Range#sum'はトランク内で最適化され、線形' O(n) 'の代わりに一定時間' O(n) 'で実行されます。ほとんどの場合、アルゴリズムの改善が望ましい。 – soc