diff --git a/build-logic/src/main/java/com/android/ndk/samples/buildlogic/Versions.kt b/build-logic/src/main/java/com/android/ndk/samples/buildlogic/Versions.kt index 89c4aa5f8..5f7a7a663 100644 --- a/build-logic/src/main/java/com/android/ndk/samples/buildlogic/Versions.kt +++ b/build-logic/src/main/java/com/android/ndk/samples/buildlogic/Versions.kt @@ -6,7 +6,7 @@ object Versions { const val COMPILE_SDK = 35 const val TARGET_SDK = 35 const val MIN_SDK = 21 - const val NDK = "27.1.12297006" // r27b + const val NDK = "28.2.13676358" // r28c const val CMAKE = "4.1.0" val JAVA = JavaVersion.VERSION_1_8 } diff --git a/vectorization/src/main/cpp/benchmark.cpp b/vectorization/src/main/cpp/benchmark.cpp index 49944ab83..c7dfc1cbf 100644 --- a/vectorization/src/main/cpp/benchmark.cpp +++ b/vectorization/src/main/cpp/benchmark.cpp @@ -48,8 +48,8 @@ Vec4 result; * @return The average duration per call in nanoseconds. */ [[nodiscard, clang::noinline]] std::chrono::nanoseconds Benchmark( - Vec4& position, Mat4& translation, - std::function func) { + Vec4<>& position, Mat4<>& translation, + std::function(const Vec4<>&, const Mat4<>&)> func) { // TODO: Move to a unit test. auto test = func(position, translation); auto expected = Vec4{{20, 10, 10, 1}}; @@ -82,11 +82,11 @@ BenchmarkMatrixMultiplication(Backend backend) { switch (backend) { case Backend::kAutoVectorization: LOG(INFO) << "Benchmarking auto-vectorization"; - return Benchmark(position, translation, [](Vec4 p, Mat4 t) { + return Benchmark(position, translation, [](Vec4<> p, Mat4<> t) { return MultiplyWithAutoVectorization(t, p); }); case Backend::kCxxSimd: -#if __NDK_MAJOR__ >= 28 +#if __NDK_MAJOR__ >= 29 #error check if std::simd works yet #endif // The libc++ in NDK r27 has only a skeleton implementation of std::simd. @@ -96,19 +96,20 @@ BenchmarkMatrixMultiplication(Backend backend) { return std::unexpected{BenchmarkError::kNotImplemented}; case Backend::kClangVector: LOG(INFO) << "Benchmarking Clang vectors"; - return Benchmark(position, translation, [](Vec4 p, Mat4 t) { + return Benchmark(position, translation, [](Vec4<> p, Mat4<> t) { return MultiplyWithClangVectors(t, p); }); case Backend::kClangMatrix: LOG(INFO) << "Benchmarking Clang matrices"; - return Benchmark(position, translation, [](Vec4 p, Mat4 t) { + return Benchmark(position, translation, [](Vec4<> p, Mat4<> t) { // This is the default implementation since it's the fastest. return t * p; }); case Backend::kOpenMp: LOG(INFO) << "Benchmarking OpenMP SIMD"; - return Benchmark(position, translation, - [](Vec4 p, Mat4 t) { return MultiplyWithOpenMP(t, p); }); + return Benchmark(position, translation, [](Vec4<> p, Mat4<> t) { + return MultiplyWithOpenMP(t, p); + }); default: return std::unexpected{BenchmarkError::kUnknownBackend}; } diff --git a/vectorization/src/main/cpp/matrix.h b/vectorization/src/main/cpp/matrix.h index 14ab5bdea..1b2039c27 100644 --- a/vectorization/src/main/cpp/matrix.h +++ b/vectorization/src/main/cpp/matrix.h @@ -140,10 +140,10 @@ class Matrix { template Matrix(T (&&)[Rows][Columns]) -> Matrix; -#if __NDK_MAJOR__ >= 28 -#error "TODO: `template ` each of these" -#endif -using Mat4 = Matrix<4, 4>; -using Vec4 = Matrix<4, 1>; +template +using Mat4 = Matrix<4, 4, T>; + +template +using Vec4 = Matrix<4, 1, T>; } // namespace samples::vectorization