- Added benchmarks for resizing with target-cpu=native.

This commit is contained in:
Kirill Kuzminykh
2021-07-04 00:41:38 +03:00
parent 627d396fee
commit bb1dd8e2b8
2 changed files with 33 additions and 12 deletions
+27 -7
View File
@@ -37,10 +37,20 @@ Resize algorithms:
|------------|:-------:|:--------:|:----------:|:--------:|
| image | 105.38 | 204.21 | 301.58 | 399.52 |
| resize | 16.223 | 72.447 | 132.64 | 193.26 |
| fir native | 0.476 | 57.003 | 87.564 | 120.65 |
| fir rust | 0.476 | 57.003 | 87.564 | 120.65 |
| fir sse4.1 | - | 12.143 | 18.662 | 26.334 |
| fir avx2 | - | 9.346 | 13.342 | 18.934 |
`rustflags = ["-C", "target-cpu=native"]`
| | Nearest | Bilinear | CatmullRom | Lanczos3 |
|------------|:-------:|:--------:|:----------:|:--------:|
| image | 91.498 | 183.47 | 282.34 | 386.74 |
| resize | 15.752 | 63.137 | 116.45 | 169.73 |
| fir rust | 0.467 | 58.133 | 65.575 | 89.721 |
| fir sse4.1 | - | 11.567 | 16.566 | 23.859 |
| fir avx2 | - | 8.746 | 11.818 | 17.253 |
### Resize RGBA image 4928x3279 => 852x567
- Source image [nasa-4928x3279.png](https://github.com/Cykooz/fast_image_resize/blob/main/data/nasa-4928x3279.png)
@@ -50,10 +60,19 @@ Resize algorithms:
|------------|:-------:|:--------:|:----------:|:--------:|
| image | 110.45 | 264.84 | 421.25 | 596.17 |
| resize | 23.919 | 100.38 | 173.62 | 247.39 |
| fir native | 13.832 | 70.448 | 100.87 | 133.84 |
| fir rust | 13.832 | 70.448 | 100.87 | 133.84 |
| fir sse4.1 | 12.03 | 23.721 | 30.266 | 37.874 |
| fir avx2 | 6.949 | 15.873 | 19.956 | 25.527 |
`rustflags = ["-C", "target-cpu=native"]`
| | Nearest | Bilinear | CatmullRom | Lanczos3 |
|------------|:-------:|:--------:|:----------:|:--------:|
| image | 97.782 | 246.27 | 403.20 | 568.91 |
| resize | 24.282 | 86.244 | 151.41 | 217.74 |
| fir rust | 9.968 | 67.628 | 74.96 | 99.376 |
| fir sse4.1 | 7.926 | 19.017 | 24.06 | 31.323 |
| fir avx2 | 6.924 | 15.312 | 18.266 | 23.703 |
## Examples of code
@@ -65,21 +84,21 @@ use fast_image_resize::{
};
fn resize_lanczos3(src_pixels: &[u8], width: NonZeroU32, height: NonZeroU32) -> Vec<u8> {
let mut resizer = Resizer::new(ResizeAlg::Convolution(FilterType::Lanczos3));
let src_image = ImageData::new(width, height, src_pixels, PixelType::U8x4).unwrap();
let src_view = src_image.src_view();
let dst_width = NonZeroU32::new(1024).unwrap();
let dst_height = NonZeroU32::new(768).unwrap();
let mut dst_image = ImageData::new_owned(dst_width, dst_height, src_image.pixel_type());
let src_view = src_image.src_view();
let mut dst_view = dst_image.dst_view();
let mut resizer = Resizer::new(ResizeAlg::Convolution(FilterType::Lanczos3));
resizer.resize(&src_view, &mut dst_view);
dst_image.get_buffer().to_owned()
}
fn crop_and_resize_image(mut src_view: SrcImageView) -> ImageData<Vec<u8>> {
let mut resizer = Resizer::new(ResizeAlg::Convolution(FilterType::Lanczos3));
src_view
.set_crop_box(CropBox {
left: 10,
@@ -91,8 +110,9 @@ fn crop_and_resize_image(mut src_view: SrcImageView) -> ImageData<Vec<u8>> {
let dst_width = NonZeroU32::new(1024).unwrap();
let dst_height = NonZeroU32::new(768).unwrap();
let mut dst_image = ImageData::new_owned(dst_width, dst_height, src_view.pixel_type());
let mut dst_view = dst_image.dst_view();
let mut resizer = Resizer::new(ResizeAlg::Convolution(FilterType::Lanczos3));
resizer.resize(&src_view, &mut dst_view);
dst_image
+6 -5
View File
@@ -5,21 +5,21 @@ use fast_image_resize::{
};
fn resize_lanczos3(src_pixels: &[u8], width: NonZeroU32, height: NonZeroU32) -> Vec<u8> {
let mut resizer = Resizer::new(ResizeAlg::Convolution(FilterType::Lanczos3));
let src_image = ImageData::new(width, height, src_pixels, PixelType::U8x4).unwrap();
let src_view = src_image.src_view();
let dst_width = NonZeroU32::new(1024).unwrap();
let dst_height = NonZeroU32::new(768).unwrap();
let mut dst_image = ImageData::new_owned(dst_width, dst_height, src_image.pixel_type());
let src_view = src_image.src_view();
let mut dst_view = dst_image.dst_view();
let mut resizer = Resizer::new(ResizeAlg::Convolution(FilterType::Lanczos3));
resizer.resize(&src_view, &mut dst_view);
dst_image.get_buffer().to_owned()
}
fn crop_and_resize_image(mut src_view: SrcImageView) -> ImageData<Vec<u8>> {
let mut resizer = Resizer::new(ResizeAlg::Convolution(FilterType::Lanczos3));
src_view
.set_crop_box(CropBox {
left: 10,
@@ -31,8 +31,9 @@ fn crop_and_resize_image(mut src_view: SrcImageView) -> ImageData<Vec<u8>> {
let dst_width = NonZeroU32::new(1024).unwrap();
let dst_height = NonZeroU32::new(768).unwrap();
let mut dst_image = ImageData::new_owned(dst_width, dst_height, src_view.pixel_type());
let mut dst_view = dst_image.dst_view();
let mut resizer = Resizer::new(ResizeAlg::Convolution(FilterType::Lanczos3));
resizer.resize(&src_view, &mut dst_view);
dst_image