⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 loop1.cpp

📁 c++经典教材 Blitz++ v0.8
💻 CPP
字号:
/* * This benchmark causes some versions of gcc to crash. */#include <blitz/vector.h>#include <blitz/array.h>#include <blitz/rand-uniform.h>#include <blitz/benchext.h>BZ_USING_NAMESPACE(blitz)void VectorVersion(BenchmarkExt<int>& bench);void ArrayVersion(BenchmarkExt<int>& bench);void sink() {}int dontActuallyRunBenchmark(){    return 1;}int main(){    if (dontActuallyRunBenchmark())        return 0;    int numBenchmarks = 2;    BenchmarkExt<int> bench("loop1: $x=sqrt($y)", numBenchmarks);    const int numSizes = 26;    bench.setNumParameters(numSizes);    bench.setRateDescription("Mflops/s");    Vector<int> parameters(numSizes);    Vector<long> iters(numSizes);    Vector<double> flops(numSizes);    for (int i=0; i < numSizes; ++i)    {        parameters[i] = (int)pow(10.0, (i+1)/4.0);        iters[i] = 50000000L / parameters[i];        if (iters[i] < 2)            iters[i] = 2;        flops[i] = 1 * parameters[i];    }    bench.setParameterVector(parameters);    bench.setIterations(iters);    bench.setFlopsPerIteration(flops);    bench.beginBenchmarking();    VectorVersion(bench);    ArrayVersion(bench);    bench.endBenchmarking();    bench.saveMatlabGraph("loop1.m");    return 0;}template<typename T>void initializeRandomDouble(T data, int numElements, int stride = 1){    static Random<Uniform> rnd;    for (int i=0; i < numElements; ++i)        data[size_t(i*stride)] = rnd.random();}template<typename T>void initializeArray(T& array, int numElements){    static Random<Uniform> rnd;    for (size_t i=0; i < numElements; ++i)        array(i) = rnd.random();}void VectorVersion(BenchmarkExt<int>& bench){    bench.beginImplementation("Vector<T>");    while (!bench.doneImplementationBenchmark())    {        int N = bench.getParameter();        cout << "Vector<T>: N = " << N << endl;        cout.flush();        long iters = bench.getIterations();        Vector<double> x(N);        initializeRandomDouble(x.data(), N);        Vector<double> y(N);        initializeRandomDouble(y.data(), N);        bench.start();        long i;        for (i=0; i < iters; ++i)        {            x=sqrt(y);            sink();        }        bench.stop();        bench.startOverhead();        for (i=0; i < iters; ++i)            sink();        bench.stopOverhead();    }    bench.endImplementation();}void ArrayVersion(BenchmarkExt<int>& bench){    bench.beginImplementation("Array<T,1>");    while (!bench.doneImplementationBenchmark())    {        int N = bench.getParameter();        cout << "Array<T,1>: N = " << N << endl;        cout.flush();        long iters = bench.getIterations();        Array<double, 1> x(N);        initializeRandomDouble(x.dataFirst(), N);        Array<double, 1> y(N);        initializeRandomDouble(y.dataFirst(), N);        bench.start();        long i;        for (i=0; i < iters; ++i)        {            x=sqrt(y);            sink();        }        bench.stop();        bench.startOverhead();        for (i=0; i < iters; ++i)            sink();        bench.stopOverhead();    }    bench.endImplementation();}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -