このような pprograms をよく見かけます。ここInt64
で、32 ビット プラットフォームでは絶対的なパフォーマンス キラーです。私の質問は今です:
タスク (私の場合は RNG) に特定の語長が必要な場合、Int64
64 ビット プラットフォームで効率的ですか、それとも C 呼び出しを使用しますか? Int64
そして、を に変換するのはどのくらい効率的Int
ですか?
64ビットシステムでは、Int64で問題ないはずですが、よくわかりません。
さらに重要なことに、暗号化または乱数生成を行う場合は、アルゴリズムが使用するように指示しているデータ型を使用する必要があります。また、符号に注意する必要があります。そうしないと、間違った結果が得られます。これは、暗号化が安全でないか、乱数ジェネレーターが実際にはランダムではないことを意味する場合があります(RNGは難しく、多くはランダムに見えますが、そうではありません)。
他のタイプの作業では、可能な限りIntegerを使用するか、Integral型クラスを使用してプログラムをポリモーフィックにします。次に、プログラムがプロファイルよりも遅いと思われる場合は、プログラムを高速化するときにどこに集中すべきかを判断します。整数型クラスを使用する場合、整数から整数への変更は簡単です。Haskellは、オーバーヘッドを回避するためにポリモーフィズムを使用する(ほとんどの)コードを特殊化するのに十分賢いはずです。
64 ビットのパフォーマンスに関する興味深い記事はこちら:
記事にあるように、大きなボトルネックはプロセッサではなく、キャッシュとメモリ I/O です。