Skip to content

Commit 9ff46ec

Browse files
committed
Update Serial
1 parent 2929a6c commit 9ff46ec

File tree

4 files changed

+29
-31
lines changed

4 files changed

+29
-31
lines changed

Diff for: src/StreamModels.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ std::unique_ptr<Stream<T>> make_stream(Args... args) {
9797

9898
#elif defined(SERIAL)
9999
// Use the Serial implementation
100-
return std::make_unique<SerialStream<T>>(array_size, deviceIndex);
100+
return std::make_unique<SerialStream<T>>(args...);
101101

102102
#elif defined(FUTHARK)
103103
// Use the Futhark implementation

Diff for: src/main.cpp

+8-7
Original file line numberDiff line numberDiff line change
@@ -328,10 +328,11 @@ void check_solution(const size_t num_times, T const* a, T const* b, T const* c,
328328
abort();
329329
}
330330

331-
// Error relative tolerance check
331+
// Error relative tolerance check - a higher tolerance is used for reductions.
332332
size_t failed = 0;
333-
T max_rel = std::numeric_limits<T>::epsilon() * T(1000000.0);
334-
auto check = [&](const char* name, T is, T should, size_t i = size_t(-1)) {
333+
T max_rel = std::numeric_limits<T>::epsilon() * T(100.0);
334+
T max_rel_dot = std::numeric_limits<T>::epsilon() * T(10000000.0);
335+
auto check = [&](const char* name, T is, T should, T max_rel, size_t i = size_t(-1)) {
335336
// Relative difference:
336337
T diff = std::abs(is - should);
337338
T abs_is = std::abs(is);
@@ -353,15 +354,15 @@ void check_solution(const size_t num_times, T const* a, T const* b, T const* c,
353354
for (size_t i = 0; i < num_benchmarks; ++i) {
354355
if (bench[i].id != BenchId::Dot) continue;
355356
if (run_benchmark(bench[i]))
356-
check("sum", sum, goldS);
357+
check("sum", sum, goldS, max_rel_dot);
357358
break;
358359
}
359360

360361
// Calculate the L^infty-norm relative error
361362
for (size_t i = 0; i < array_size; ++i) {
362-
check("a", a[i], goldA, i);
363-
check("b", b[i], goldB, i);
364-
check("c", c[i], goldC, i);
363+
check("a", a[i], goldA, i, max_rel);
364+
check("b", b[i], goldB, i, max_rel);
365+
check("c", c[i], goldC, i, max_rel);
365366
}
366367

367368
if (failed > 0 && !silence_errors)

Diff for: src/serial/SerialStream.cpp

+9-11
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,16 @@
1313
#endif
1414

1515
template <class T>
16-
SerialStream<T>::SerialStream(const intptr_t ARRAY_SIZE, int device)
16+
SerialStream<T>::SerialStream(BenchId bs, const intptr_t array_size, const int device_id,
17+
T initA, T initB, T initC)
18+
: array_size{array_size}
1719
{
18-
array_size = ARRAY_SIZE;
19-
2020
// Allocate on the host
2121
this->a = (T*)aligned_alloc(ALIGNMENT, sizeof(T)*array_size);
2222
this->b = (T*)aligned_alloc(ALIGNMENT, sizeof(T)*array_size);
2323
this->c = (T*)aligned_alloc(ALIGNMENT, sizeof(T)*array_size);
24+
25+
init_arrays(initA, initB, initC);
2426
}
2527

2628
template <class T>
@@ -44,15 +46,11 @@ void SerialStream<T>::init_arrays(T initA, T initB, T initC)
4446
}
4547

4648
template <class T>
47-
void SerialStream<T>::read_arrays(std::vector<T>& h_a, std::vector<T>& h_b, std::vector<T>& h_c)
49+
void SerialStream<T>::get_arrays(T const*& h_a, T const*& h_b, T const*& h_c)
4850
{
49-
for (intptr_t i = 0; i < array_size; i++)
50-
{
51-
h_a[i] = a[i];
52-
h_b[i] = b[i];
53-
h_c[i] = c[i];
54-
}
55-
51+
h_a = a;
52+
h_b = b;
53+
h_c = c;
5654
}
5755

5856
template <class T>

Diff for: src/serial/SerialStream.h

+11-12
Original file line numberDiff line numberDiff line change
@@ -23,21 +23,20 @@ class SerialStream : public Stream<T>
2323
intptr_t array_size;
2424

2525
// Device side pointers
26-
T *a;
27-
T *b;
28-
T *c;
26+
T *a, *b, *c;
2927

3028
public:
31-
SerialStream(const intptr_t, int);
29+
SerialStream(BenchId bs, const intptr_t array_size, const int device_id,
30+
T initA, T initB, T initC);
3231
~SerialStream();
3332

34-
virtual void copy() override;
35-
virtual void add() override;
36-
virtual void mul() override;
37-
virtual void triad() override;
38-
virtual void nstream() override;
39-
virtual T dot() override;
33+
void copy() override;
34+
void add() override;
35+
void mul() override;
36+
void triad() override;
37+
void nstream() override;
38+
T dot() override;
4039

41-
virtual void init_arrays(T initA, T initB, T initC) override;
42-
virtual void read_arrays(std::vector<T>& a, std::vector<T>& b, std::vector<T>& c) override;
40+
void get_arrays(T const*& a, T const*& b, T const*& c) override;
41+
void init_arrays(T initA, T initB, T initC);
4342
};

0 commit comments

Comments
 (0)