Repository navigation
Build on arm64 and add a NEON path to the slot convert - #13
Merged
Merged
Conversation
With `-target bpf`, clang does not search the multiarch include directory, where Debian/Ubuntu keep glibc's bits/*.h. On aarch64 that is /usr/include/aarch64-linux-gnu, so every codelet failed with "'bits/libc-header-start.h' file not found". Add the host's multiarch directory to the include path when it exists, as jbpf's own test codelets do. Assisted-by: Claude Opus 5.5 <noreply@anthropic.com>
e3_slot_convert.h only had an AVX2+F16C loop. Its build guard exempted aarch64 as if a NEON loop existed, but there was none, so on ARM the gNB-side publish helper ran the scalar convert in the PHY RX thread for every uplink slot (~0.6 ms per slot on Grace). Add the NEON loop: widen 8 bf16 to fp32, scale, and narrow with FCVTN/FCVTN2, which rounds to nearest-even like _mm256_cvtps_ph with _MM_FROUND_TO_NEAREST_INT. The scalar function uses the same instruction on aarch64. Over every bf16 value at six scales, the NEON output is byte-identical to the AVX2+F16C output. vector_path_name() gives the path for the startup log. The microbenchmark hides NEON too in its scalar mode (E3_NO_NEON). Assisted-by: Claude Opus 5.5 <noreply@anthropic.com>
14 of 20 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
-target bpf, clang does not search the multiarch include directory, where Ubuntu keeps glibc'sbits/headers (/usr/include/aarch64-linux-gnuon arm64). Every codelet failed with'bits/libc-header-start.h' file not found.codelets/Makefile.defsnow adds the host's multiarch directory, as jbpf's own test codelets do.e3_slot_convert.h. The shared convert header had only an AVX2+F16C loop. Its build guard let aarch64 through as if a NEON loop existed, so on ARM the gNB-side helper silently ran the scalar convert. The new loop gives the same bytes as AVX2+F16C. The microbenchmark builds on arm64 and hides NEON in its scalar mode.Type of change
Linked issue
None.
Mandatory test checklist
./build.shand the verifier build;make -C codeletsbuilds both codelets and they pass the verifier (632 and 345 instructions);vector vs scalar agreement … IDENTICAL. For 4 ports, NEON takes 33.9 µs and the scalar convert 331 µs.convert path=NEON.codelets/Makefile.defsnow also adds/usr/include/x86_64-linux-gnu, and the AVX2 loop is unchanged apart from the macro that selects it. CI builds x86.mainwith no conflicts; the changed files are identical.VERSION,libe3.pc, new dependencies: N/A, none changed.CI checklist
build and measureis green for the head commit (to check once CI has run).check_commit_trailers.py --base origin/main --head HEADpasses (Assisted-bytrailer).Twin-repo coordination
codelets/include/e3_slot_convert.hmust stay byte-identical to ocudu'socudu_janus/e3/e3_slot_convert.h: ocudu's configure compares them. Paired PR: wineslab/ocudu-e3-private#5.Workflow confirmation
main(fbdf325), with no merge commits.CONTRIBUTING.md(libe3's, applied to this repository).🤖 Generated with Claude Code