diff options
author | Frank Barchard <fbarchard@google.com> | 2023-02-13 10:52:58 -0800 |
---|---|---|
committer | libyuv LUCI CQ <libyuv-scoped@luci-project-accounts.iam.gserviceaccount.com> | 2023-02-13 20:14:57 +0000 |
commit | 2bdc210be9eb11ded16bf3ef1f6cadb0d4dcb0c2 (patch) | |
tree | c446d71538c965d0e5391ef77cd49b45ba51463d /unit_test | |
parent | b2528b0be934de1918e20c85fc170d809eeb49ab (diff) | |
download | libyuv-2bdc210be9eb11ded16bf3ef1f6cadb0d4dcb0c2.tar.gz |
MergeUV_AVX512BW for I420ToNV12
On Skylake Xeon 640x360 100000 iterations
AVX512 MergeUVPlane_Opt (1196 ms)
AVX2 MergeUVPlane_Opt (1565 ms)
SSE2 MergeUVPlane_Opt (1780 ms)
Pixel 7 MergeUVPlane_Opt (1177 ms)
Bug: None
Change-Id: If47d4fa957cf27781bba5fd6a2f0bf554101a5c6
Reviewed-on: https://chromium-review.googlesource.com/c/libyuv/libyuv/+/4242247
Commit-Queue: Frank Barchard <fbarchard@chromium.org>
Reviewed-by: richard winterton <rrwinterton@gmail.com>
Diffstat (limited to 'unit_test')
-rw-r--r-- | unit_test/rotate_test.cc | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/unit_test/rotate_test.cc b/unit_test/rotate_test.cc index 9dec7811..e8d2ca16 100644 --- a/unit_test/rotate_test.cc +++ b/unit_test/rotate_test.cc @@ -14,6 +14,10 @@ #include "libyuv/cpu_id.h" #include "libyuv/rotate.h" +#ifdef ENABLE_ROW_TESTS +#include "libyuv/rotate_row.h" +#endif + namespace libyuv { #define SUBSAMPLE(v, a) ((((v) + (a)-1)) / (a)) @@ -858,4 +862,47 @@ TEST_F(LibYUVRotateTest, I410Rotate270_Opt) { disable_cpu_flags_, benchmark_cpu_info_); } +#if defined(ENABLE_ROW_TESTS) + +TEST_F(LibYUVRotateTest, Transpose4x4) { + // dst width and height + const int width = ((benchmark_width_ * benchmark_height_ + 3) / 4 + 3) & ~3; + const int height = 4; + align_buffer_page_end(src_pixels, height * width * 4); + align_buffer_page_end(dst_pixels_c, width * height * 4); + align_buffer_page_end(dst_pixels_opt, width * height * 4); + + MemRandomize(src_pixels, height * width * 4); + memset(dst_pixels_c, 1, width * height * 4); + memset(dst_pixels_opt, 1, width * height * 4); + + Transpose4x4_32_C((const uint8_t*)src_pixels, height * 4, + (uint8_t*)dst_pixels_c, width * 4, width); + + for (int i = 0; i < benchmark_iterations_; ++i) { +#if defined(__aarch64__) + if (TestCpuFlag(kCpuHasNEON)) { + Transpose4x4_32_NEON((const uint8_t*)src_pixels, height * 4, + (uint8_t*)dst_pixels_opt, width * 4, width); + } else { + Transpose4x4_32_C((const uint8_t*)src_pixels, height * 4, + (uint8_t*)dst_pixels_opt, width * 4, width); + } +#else + Transpose4x4_32_C((const uint8_t*)src_pixels, height * 4, + (uint8_t*)dst_pixels_opt, width * 4, width); +#endif + } + + // for (int i = 0; i < width * height; ++i) { + // EXPECT_EQ(dst_pixels_c[i], dst_pixels_opt[i]); + // } + + free_aligned_buffer_page_end(src_pixels); + free_aligned_buffer_page_end(dst_pixels_c); + free_aligned_buffer_page_end(dst_pixels_opt); +} + +#endif // ENABLE_ROW_TESTS + } // namespace libyuv |