diff options
| author | Carl Hetherington <cth@carlh.net> | 2020-06-02 19:47:30 +0200 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2020-06-02 19:47:30 +0200 |
| commit | 6636b550a4b69bf3d77b51aa033159036d88f33b (patch) | |
| tree | 740ed4b2615cfbeeeb29c0ecf458400ea8f3b43a /benchmark | |
| parent | 5f2db276b59257b05e351c1ca5665de9cc3f78f4 (diff) | |
Add SSE/AVX2 version of rgb_to_xyz().sse2
Diffstat (limited to 'benchmark')
| -rw-r--r-- | benchmark/rgb_to_xyz_avx2.cc | 69 | ||||
| -rw-r--r-- | benchmark/wscript | 2 |
2 files changed, 70 insertions, 1 deletions
diff --git a/benchmark/rgb_to_xyz_avx2.cc b/benchmark/rgb_to_xyz_avx2.cc new file mode 100644 index 00000000..65abe2ba --- /dev/null +++ b/benchmark/rgb_to_xyz_avx2.cc @@ -0,0 +1,69 @@ +/* + Copyright (C) 2020 Carl Hetherington <cth@carlh.net> + + This file is part of libdcp. + + libdcp is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + libdcp is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with libdcp. If not, see <http://www.gnu.org/licenses/>. + + In addition, as a special exception, the copyright holders give + permission to link the code of portions of this program with the + OpenSSL library under certain conditions as described in each + individual source file, and distribute linked combinations + including the two. + + You must obey the GNU General Public License in all respects + for all of the code used other than OpenSSL. If you modify + file(s) with this exception, you may extend this exception to your + version of the file(s), but you are not obligated to do so. If you + do not wish to do so, delete this exception statement from your + version. If you delete this exception statement from all source + files in the program, then also delete it here. +*/ + +#include "openjpeg_image.h" +#include "rgb_xyz.h" +#include "colour_conversion.h" +#include <boost/scoped_array.hpp> +#include <stdint.h> + +using boost::scoped_array; +using boost::shared_ptr; + +int const trials = 256; + +int +main () +{ + srand (1); + + dcp::Size size(1998, 1080); + + scoped_array<uint8_t> rgb (new uint8_t[size.width * size.height * 8]); + for (int y = 0; y < size.height; ++y) { + uint16_t* p = reinterpret_cast<uint16_t*> (rgb.get() + y * size.width * 8); + for (int x = 0; x < size.width; ++x) { + for (int c = 0; c < 4; ++c) { + *p = (rand() & 0xfff) << 4; + ++p; + } + } + } + + shared_ptr<dcp::OpenJPEGImage> xyz; + for (int i = 0; i < trials; ++i) { + xyz = dcp::rgb_to_xyz_avx2 (rgb.get(), size, dcp::ColourConversion::srgb_to_xyz()); + } +} + + diff --git a/benchmark/wscript b/benchmark/wscript index 3e748972..0b6994b9 100644 --- a/benchmark/wscript +++ b/benchmark/wscript @@ -32,7 +32,7 @@ # def build(bld): - for p in ['rgb_to_xyz']: + for p in ['rgb_to_xyz', 'rgb_to_xyz_avx2']: obj = bld(features='cxx cxxprogram') obj.name = p obj.uselib = 'BOOST_FILESYSTEM' |
