loop1.cpp | loop1.cpp | |||
---|---|---|---|---|
/* | /* | |||
* This benchmark causes some versions of gcc to crash. | * This benchmark causes some versions of gcc to crash. | |||
*/ | */ | |||
#include <blitz/vector.h> | #include <blitz/vector2.h> | |||
#include <blitz/array.h> | #include <blitz/array.h> | |||
#include <blitz/rand-uniform.h> | #include <random/uniform.h> | |||
#include <blitz/benchext.h> | #include <blitz/benchext.h> | |||
BZ_NAMESPACE(blitz) | ||||
extern void sink(); | ||||
BZ_NAMESPACE_END | ||||
BZ_USING_NAMESPACE(blitz) | BZ_USING_NAMESPACE(blitz) | |||
void VectorVersion(BenchmarkExt<int>& bench); | void VectorVersion(BenchmarkExt<int>& bench); | |||
void ArrayVersion(BenchmarkExt<int>& bench); | void ArrayVersion(BenchmarkExt<int>& bench); | |||
void sink() {} | ||||
int dontActuallyRunBenchmark() | int dontActuallyRunBenchmark() | |||
{ | { | |||
return 1; | return 1; | |||
} | } | |||
int main() | int main() | |||
{ | { | |||
if (dontActuallyRunBenchmark()) | if (dontActuallyRunBenchmark()) | |||
return 0; | return 0; | |||
int numBenchmarks = 2; | int numBenchmarks = 2; | |||
BenchmarkExt<int> bench("loop1: $x=sqrt($y)", numBenchmarks); | BenchmarkExt<int> bench("loop1: $x=sqrt($y)", numBenchmarks); | |||
const int numSizes = 26; | const int numSizes = 26; | |||
bench.setNumParameters(numSizes); | bench.setNumParameters(numSizes); | |||
bench.setRateDescription("Mflops/s"); | //bench.setRateDescription("Mflops/s"); removed | |||
Vector<int> parameters(numSizes); | Vector<int> parameters(numSizes); | |||
Vector<long> iters(numSizes); | Vector<long> iters(numSizes); | |||
Vector<double> flops(numSizes); | Vector<double> flops(numSizes); | |||
for (int i=0; i < numSizes; ++i) | for (int i=0; i < numSizes; ++i) | |||
{ | { | |||
parameters[i] = (int)pow(10.0, (i+1)/4.0); | parameters(i) = (int)pow(10.0, (i+1)/4.0); | |||
iters[i] = 50000000L / parameters[i]; | iters[i] = 50000000L / parameters(i); | |||
if (iters[i] < 2) | if (iters(i) < 2) | |||
iters[i] = 2; | iters(i) = 2; | |||
flops[i] = 1 * parameters[i]; | flops(i) = 1 * parameters(i); | |||
} | } | |||
bench.setParameterVector(parameters); | bench.setParameterVector(parameters); | |||
bench.setIterations(iters); | bench.setIterations(iters); | |||
bench.setFlopsPerIteration(flops); | bench.setOpsPerIteration(flops); | |||
bench.beginBenchmarking(); | bench.beginBenchmarking(); | |||
VectorVersion(bench); | VectorVersion(bench); | |||
ArrayVersion(bench); | ArrayVersion(bench); | |||
bench.endBenchmarking(); | bench.endBenchmarking(); | |||
bench.saveMatlabGraph("loop1.m"); | bench.saveMatlabGraph("loop1.m"); | |||
return 0; | return 0; | |||
} | } | |||
template<typename T> | template<typename T> | |||
void initializeRandomDouble(T data, int numElements, int stride = 1) | void initializeRandomDouble(T* data, int numElements, int stride = 1) | |||
{ | { | |||
static Random<Uniform> rnd; | ranlib::Uniform<T> rnd; | |||
for (int i=0; i < numElements; ++i) | for (int i=0; i < numElements; ++i) | |||
data[size_t(i*stride)] = rnd.random(); | 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) | void VectorVersion(BenchmarkExt<int>& bench) | |||
{ | { | |||
bench.beginImplementation("Vector<T>"); | bench.beginImplementation("Vector<T>"); | |||
while (!bench.doneImplementationBenchmark()) | while (!bench.doneImplementationBenchmark()) | |||
{ | { | |||
int N = bench.getParameter(); | int N = bench.getParameter(); | |||
cout << "Vector<T>: N = " << N << endl; | cout << "Vector<T>: N = " << N << endl; | |||
cout.flush(); | cout.flush(); | |||
End of changes. 10 change blocks. | ||||
22 lines changed or deleted | 15 lines changed or added | |||
This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |