You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues-all@impala.apache.org by "Zoltán Borók-Nagy (Jira)" <ji...@apache.org> on 2026/09/25 08:55:00 UTC
[jira] [Created] (IMPALA-15426) Use SIMD in StringSearch (LIKE '%x%', instr, locate, replace)
Zoltán Borók-Nagy created IMPALA-15426:
------------------------------------------
Summary: Use SIMD in StringSearch (LIKE '%x%', instr, locate, replace)
Key: IMPALA-15426
URL: https://issues.apache.org/jira/browse/IMPALA-15426
Project: IMPALA
Issue Type: Improvement
Components: Backend
Reporter: Zoltán Borók-Nagy
StringSearch::Search() (be/src/runtime/string-search.h:81) is a Horspool-style loop with a
bloom filter that checks one haystack position at a time. It runs per row for:
* LIKE '%x%' (like-predicate.cc:247, called through a function pointer, so codegen does
not help);
* instr()/locate();
* replace() (string-functions-ir.cc:527/920);
* parse_url.
h3. Proposed fix
When (haystack length − needle length) ≥ 15, compare the first and the last needle byte
against 16 haystack positions at a time with SSE2, and verify candidates inline. For the
final block, use an overlapping load, not a scalar tail. Keep the current scalar path for
short haystacks and on aarch64 (a NEON port can follow). RSearch() is unchanged.
h3. Measurements
Standalone replica with realistic data, ns per row:
||Data||Needle||Current||New||Speedup||
|TPC-H p_name (33 B)|'green'|39.9|10.4|3.9x|
|TPC-H o_comment (49 B)|'special', 'requests'| | |2.4–2.8x|
|URLs (150 B)|'.php', 'checkout', …| | |3.5–7x|
|Logs / JSON (0.5–1.5 KB)| | | |4.6–11x|
|any|1-byte needle| | |about 1.0x (0.97–1.00x)|
|p_name / o_comment|20-byte needle| | |1.06–1.7x|
There was no regression beyond noise. The new code was fuzzed on 10M random cases
against a naive search, with needles at page ends next to a PROT_NONE guard page and
under ASAN: 0 mismatches. A memmem()-based variant was also tried; it only reached
0.93–2.5x and lost on 33-byte strings.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: issues-all-unsubscribe@impala.apache.org
For additional commands, e-mail: issues-all-help@impala.apache.org