Compare commits

...

2 Commits

Author SHA1 Message Date
Bruno BELANYI 9e29a5cb7d library: render: scene: remove FIXME about chunks 2020-03-19 21:55:42 +01:00
Antoine Martin ce64403449 library: render: split rows in chunks for perf 2020-03-19 21:55:04 +01:00
1 changed files with 9 additions and 6 deletions

View File

@ -61,14 +61,17 @@ impl Scene {
Self::pixel
};
let mut rows: Vec<_> = image.enumerate_rows_mut().collect();
rayon::scope(|s| {
// FIXME(Bruno): it would go even faster to cut the image in blocks of rows, leading to
// better cache-line behaviour...
for (_, row) in image.enumerate_rows_mut() {
let chunk_size = self.camera.film().height() as usize / rayon::current_num_threads();
// `chunks_size + 1` to have exactly num_threads tasks spawned, even with rounding
for chunk in rows.chunks_mut(chunk_size + 1) {
s.spawn(|_| {
for (x, y, pixel) in row {
*pixel = pixel_func(&self, x as f32, y as f32).into();
pb.inc(1);
for (_, row) in chunk {
for (x, y, pixel) in row {
*pixel = pixel_func(&self, x as f32, y as f32).into();
pb.inc(1);
}
}
})
}