BabelStream/rust-stream/src/plain_stream.rs
Tom Lin ce4d6cfbfb Add integration tests and CI
Fix wrong nstream in plain_stream
2021-06-16 01:11:40 +01:00

62 lines
1.3 KiB
Rust

use crate::stream::{AllocatorType, ArrayType, RustStream, StreamData};
use core_affinity::CoreId;
pub struct SerialDevice {
pub(crate) pin: bool,
}
// single threaded version
impl<T: ArrayType, A: AllocatorType> RustStream<T> for StreamData<T, SerialDevice, A> {
fn init_arrays(&mut self) {
if self.device.pin {
core_affinity::set_for_current(
match core_affinity::get_core_ids().as_ref().map(|x| x.first()) {
Some(Some(x)) => *x,
_ => CoreId { id: 0 },
},
);
}
self.a.fill(self.init.0);
self.b.fill(self.init.1);
self.c.fill(self.init.2);
}
fn copy(&mut self) {
for i in 0..self.size {
self.c[i] = self.a[i];
}
}
fn mul(&mut self) {
for i in 0..self.size {
self.b[i] = self.scalar * self.c[i];
}
}
fn add(&mut self) {
for i in 0..self.size {
self.c[i] = self.a[i] + self.b[i];
}
}
fn triad(&mut self) {
for i in 0..self.size {
self.a[i] = self.b[i] + self.scalar * self.c[i];
}
}
fn nstream(&mut self) {
for i in 0..self.size {
self.a[i] += self.b[i] + self.scalar * self.c[i];
}
}
fn dot(&mut self) -> T {
let mut sum = T::default();
for i in 0..self.size {
sum += self.a[i] * self.b[i];
}
sum
}
}