columnar
columnar copied to clipboard
Improve filtering performance by using SIMD predication
When columnar storage processes a filter, there are two heavy stages - unpacking data and processing the filter. Filtering performance can be improved by replacing conditions like if ( ( i==(ACCESSOR_VALUES)m_tValue ) ^ (!EQ) ) with predication using _mm256_cmpeq_epi32 and similar intrinsics.
➤ Ilya Kuznetsov commented:
We will also need to add specializations for range filters to replace the generic if ( RANGE_EVAL::Eval ( (VALUES)i, (VALUES)m_iMinValue, (VALUES)m_iMaxValue ) ) that we have now.