1

Boost の gmp_rational データ型のパフォーマンスを C# の SolverFoundation.Rational 型と比較しています。gmp_rational を使用した演算の実行は、比較演算を除いて、C# SolverFoundation.Rational よりもはるかに高速です。次の関数を C++ と C# で実装し、そのパフォーマンスを比較しました。

typedef mpq_rational NT;
void test()
{
    NT x = 3.05325557;
    NT y = 2.65684334;
    NT z, j, k;

    std::clock_t start;
    double duration;

    start = std::clock();

    for(int i = 0; i < 10000; i++)
    {
        if (i%1000 == 0)
            x = 3;
        x = x * y;
        z = x + y;
        j = x + y;
        k = x + y;
        bool r1 = j > k; // takes very long
    }

    duration = ( std::clock() - start ) / (double) CLOCKS_PER_SEC;
    std::cout<<"duration: "<< duration <<'\n';    
}

最後の比較操作 "j > k" がない場合、関数は 5.5 秒を必要とします。これにより、関数には 33 秒かかります。

C# で同じメソッドを実装し、同じ比較を行いました。最後の比較演算 "j > k" がなければ、このメソッドには 19 秒かかります。これにより、メソッドは 19.6 秒を必要とします。したがって、C# コードは C++ コードよりもさらに高速ですが、その理由はわかりません。

4

0 に答える 0