diff --git a/src/base/kaldi-utils.h b/src/base/kaldi-utils.h index c9d6fd950ab..c483a74f8b7 100644 --- a/src/base/kaldi-utils.h +++ b/src/base/kaldi-utils.h @@ -60,6 +60,15 @@ # define KALDI_MEMALIGN_FREE(x) free(x) #endif +#ifdef _MSC_VER +# define KALDI_FORCE_INLINE __forceinline +#elif defined(__GNUC__) +# define KALDI_FORCE_INLINE __attribute__((always_inline)) inline +#else +# define KALDI_FORCE_INLINE inline +#endif + + #ifdef __ICC #pragma warning(disable: 383) // ICPC remark we don't want. #pragma warning(disable: 810) // ICPC remark we don't want. diff --git a/src/matrix/kaldi-vector.h b/src/matrix/kaldi-vector.h index 3eb4a932095..838ba1a35f0 100644 --- a/src/matrix/kaldi-vector.h +++ b/src/matrix/kaldi-vector.h @@ -72,14 +72,14 @@ class VectorBase { inline const Real* Data() const { return data_; } /// Indexing operator (const). - inline Real operator() (MatrixIndexT i) const { + KALDI_FORCE_INLINE Real operator() (MatrixIndexT i) const { KALDI_PARANOID_ASSERT(static_cast(i) < static_cast(dim_)); return *(data_ + i); } /// Indexing operator (non-const). - inline Real & operator() (MatrixIndexT i) { + KALDI_FORCE_INLINE Real & operator() (MatrixIndexT i) { KALDI_PARANOID_ASSERT(static_cast(i) < static_cast(dim_)); return *(data_ + i); diff --git a/src/matrix/matrix-lib-speed-test.cc b/src/matrix/matrix-lib-speed-test.cc index c2c81f4f4b8..6344d4b094a 100644 --- a/src/matrix/matrix-lib-speed-test.cc +++ b/src/matrix/matrix-lib-speed-test.cc @@ -254,6 +254,25 @@ static void UnitTestAddVecToColsSpeed() { CsvResult(__func__, sizes.size(), t.Elapsed(), "seconds"); } +template +static void UnitTestVectorCallOperator() { + std::vector sizes; + for(int32 size = 1024, i = 0; i < 4; i++) { + sizes.push_back(size); + size *= 2; + } + for(MatrixIndexT size : sizes) { + Vector a(size); + Vector b(size); + b.SetZero(); + Timer t; + for(size_t i = 0; i < size; i++) { + a(i) = b(i); + } + CsvResult("VectorBase::operator()", size, t.Elapsed(), "seconds"); + } +} + template static void MatrixUnitSpeedTest() { UnitTestRealFftSpeed(); UnitTestSplitRadixRealFftSpeed(); @@ -263,6 +282,7 @@ template static void MatrixUnitSpeedTest() { UnitTestAddColSumMatSpeed(); UnitTestAddVecToRowsSpeed(); UnitTestAddVecToColsSpeed(); + UnitTestVectorCallOperator(); } } // namespace kaldi