7

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ミリ秒

4

1 に答える 1

10

私が考えることができる考えられる短所:

1) ループの最適化は機能しているように見え、開発者は非常に有能に見えますが、「ScalaCL について」画面に太字で「ScalaCL は本番環境に対応していません!」と表示されています。つまり、バグや不安定性を導入する可能性がわずかにあります

2) 毎回プラグインを使用してコンパイルすることを忘れないでください。そうしないと、パフォーマンスの問題が突然発生する可能性があります。プラグインが中期的または長期的に維持/互換性があるかどうかを確認することはできません

3) その最適化に依存するようになり、非効率的なコードを作成するようになる可能性がありますが、ボトルネックを特定して手動で最適化すると、コード全体が高速化される可能性があります。言い換えれば、それは事実上「紙をひび割れさせる」ことができます。

4) これは追加のライブラリ依存関係であり、ビルド ファイルが複雑になります。

あなたは短所を求めましたが、これらはその長所に比べてかなりマイナーです. 個人的には、個人的なプロジェクトにループ最適化を使用することにためらいはありません。cl-collections についてはまだよくわかりません (試してみたところ、GPU が CPU よりも少し遅いことがわかりました。利用可能なハードウェアに依存していることは明らかです)。標準のコンパイラとライブラリ。一部のコードでは、非常に劇的なスピードアップ (最大で 20 倍程度) が見られました。

于 2011-12-13T23:57:23.853 に答える