📄 loop1.cpp
字号:
/*
* This benchmark causes some versions of egcs 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<class 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<class 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 + -