Add start of check results function
This commit is contained in:
parent
6522d9114a
commit
6225ae90a7
38
src/main.cpp
38
src/main.cpp
@ -1,6 +1,8 @@
|
|||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include <numeric>
|
||||||
|
#include <cmath>
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "Stream.h"
|
#include "Stream.h"
|
||||||
@ -11,6 +13,9 @@ const unsigned int ARRAY_SIZE = 52428800;
|
|||||||
|
|
||||||
#define IMPLEMENTATION_STRING "CUDA"
|
#define IMPLEMENTATION_STRING "CUDA"
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
void check_solution(const unsigned int ntimes, std::vector<T>& a, std::vector<T>& b, std::vector<T>& c);
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
std::cout
|
std::cout
|
||||||
@ -32,10 +37,41 @@ int main(int argc, char *argv[])
|
|||||||
stream->write_arrays(a, b, c);
|
stream->write_arrays(a, b, c);
|
||||||
|
|
||||||
stream->copy();
|
stream->copy();
|
||||||
|
stream->mul();
|
||||||
|
stream->add();
|
||||||
|
stream->triad();
|
||||||
|
|
||||||
stream->read_arrays(a, b, c);
|
stream->read_arrays(a, b, c);
|
||||||
std::cout << c[105] << std::endl;
|
std::cout << a[105] << std::endl;
|
||||||
|
|
||||||
|
check_solution<double>(1, a, b, c);
|
||||||
|
|
||||||
delete[] stream;
|
delete[] stream;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
void check_solution(const unsigned int ntimes, std::vector<T>& a, std::vector<T>& b, std::vector<T>& c)
|
||||||
|
{
|
||||||
|
// Generate correct solution
|
||||||
|
T goldA = 1.0;
|
||||||
|
T goldB = 2.0;
|
||||||
|
T goldC = 0.0;
|
||||||
|
|
||||||
|
const T scalar = 3.0;
|
||||||
|
|
||||||
|
for (unsigned int i = 0; i < ntimes; i++)
|
||||||
|
{
|
||||||
|
// Do STREAM!
|
||||||
|
goldC = goldA;
|
||||||
|
goldB = scalar * goldC;
|
||||||
|
goldC = goldA + goldB;
|
||||||
|
goldA = goldB + scalar * goldC;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Calculate the average error
|
||||||
|
double errA = std::accumulate(a.begin(), a.end(), 0.0, [&](double sum, const T val){ return sum + fabs(val - goldA); });
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user