-
Notifications
You must be signed in to change notification settings - Fork 1.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[vm/ffi] Pointer operation optimizations #38172
Labels
area-vm
Use area-vm for VM related issues, including code coverage, and the AOT and JIT backends.
library-ffi
Milestone
Comments
15 tasks
This was referenced Sep 30, 2019
The CL to address this is in review. |
dart-bot
pushed a commit
that referenced
this issue
Oct 7, 2019
This CL optimizes Pointer operations in hot loops for Pointer<NativeInteger/NativeDouble/Pointer> (not for structs). Design: go/dart-ffi-pointers-il It provides roughly a 100x speedup for the FfiMemory benchmark. The next 5x speedup is to get rid of allocations due to `load` and `store` not being inlined. FFI API is changed to enable optimizations: * Disable dynamic invocations of Pointer.load / Pointer.store. * Disallow implicit downcast of argument passed to Pointer.store. * Stop zeroing out Pointer.address on Pointer.free(). Issue: #38172 Related issues: Closes: #35902 (Disallowing dynamic invocations of Pointer ops.) Closes: #37385 (Function variance checking.) Change-Id: I96058d8b5b49052eb6999f084372e6f08b4f6f17 Cq-Include-Trybots: luci.dart.try:vm-ffi-android-debug-arm-try,vm-ffi-android-debug-arm64-try,app-kernel-linux-debug-x64-try,vm-kernel-linux-debug-ia32-try,vm-dartkb-linux-debug-simarm64-try,vm-kernel-win-debug-x64-try,vm-kernel-win-debug-ia32-try,vm-dartkb-linux-debug-x64-try,vm-kernel-precomp-linux-debug-x64-try,vm-dartkb-linux-release-x64-abi-try,vm-kernel-precomp-android-release-arm64-try Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/117547 Commit-Queue: Daco Harkes <dacoharkes@google.com> Reviewed-by: Martin Kustermann <kustermann@google.com>
dart-bot
pushed a commit
that referenced
this issue
Oct 7, 2019
This reverts commit 3712ed2. Reason for revert: Breaks Arm32 precompiled. Issue: #38737 Original change's description: > [vm/ffi] Optimize Pointer operations for statically known types > > This CL optimizes Pointer operations in hot loops for Pointer<NativeInteger/NativeDouble/Pointer> (not for structs). > > Design: go/dart-ffi-pointers-il > > It provides roughly a 100x speedup for the FfiMemory benchmark. The next 5x speedup is to get rid of allocations due to `load` and `store` not being inlined. > > FFI API is changed to enable optimizations: > > * Disable dynamic invocations of Pointer.load / Pointer.store. > * Disallow implicit downcast of argument passed to Pointer.store. > * Stop zeroing out Pointer.address on Pointer.free(). > > Issue: #38172 > > Related issues: > Closes: #35902 (Disallowing dynamic invocations of Pointer ops.) > Closes: #37385 (Function variance checking.) > > Change-Id: I96058d8b5b49052eb6999f084372e6f08b4f6f17 > Cq-Include-Trybots: luci.dart.try:vm-ffi-android-debug-arm-try,vm-ffi-android-debug-arm64-try,app-kernel-linux-debug-x64-try,vm-kernel-linux-debug-ia32-try,vm-dartkb-linux-debug-simarm64-try,vm-kernel-win-debug-x64-try,vm-kernel-win-debug-ia32-try,vm-dartkb-linux-debug-x64-try,vm-kernel-precomp-linux-debug-x64-try,vm-dartkb-linux-release-x64-abi-try,vm-kernel-precomp-android-release-arm64-try > Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/117547 > Commit-Queue: Daco Harkes <dacoharkes@google.com> > Reviewed-by: Martin Kustermann <kustermann@google.com> TBR=kustermann@google.com,sjindel@google.com,dacoharkes@google.com Change-Id: I3b7923ace45beaa9f99119e9ea20c1e52b429ad8 No-Presubmit: true No-Tree-Checks: true No-Try: true Issue: #38172 Cq-Include-Trybots: luci.dart.try:vm-ffi-android-debug-arm-try, vm-ffi-android-debug-arm64-try, app-kernel-linux-debug-x64-try, vm-kernel-linux-debug-ia32-try, vm-dartkb-linux-debug-simarm64-try, vm-kernel-win-debug-x64-try, vm-kernel-win-debug-ia32-try, vm-dartkb-linux-debug-x64-try, vm-kernel-precomp-linux-debug-x64-try, vm-dartkb-linux-release-x64-abi-try, vm-kernel-precomp-android-release-arm64-try Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/120582 Reviewed-by: Daco Harkes <dacoharkes@google.com> Commit-Queue: Daco Harkes <dacoharkes@google.com>
dart-bot
pushed a commit
that referenced
this issue
Oct 8, 2019
Original CL in patchset 1. Fix for simdbc in patchset 4. Fix for arm32 precompiled in: https://dart-review.googlesource.com/c/sdk/+/120660/ This CL optimizes Pointer operations in hot loops for Pointer<NativeInteger/NativeDouble/Pointer> (not for structs). Design: go/dart-ffi-pointers-il It provides roughly a 100x speedup for the FfiMemory benchmark. The next 5x speedup is to get rid of allocations due to `load` and `store` not being inlined. FFI API is changed to enable optimizations: * Disable dynamic invocations of Pointer.load / Pointer.store. * Disallow implicit downcast of argument passed to Pointer.store. * Stop zeroing out Pointer.address on Pointer.free(). Issue: #38172 Related issues: Closes: #35902 (Disallowing dynamic invocations of Pointer ops.) Closes: #37385 (Function variance checking) Change-Id: I3921a595fd05026d6ca565ace496771d7c1d877b Cq-Include-Trybots: luci.dart.try:vm-ffi-android-debug-arm-try,vm-ffi-android-debug-arm64-try,app-kernel-linux-debug-x64-try,vm-kernel-linux-debug-ia32-try,vm-dartkb-linux-debug-simarm64-try,vm-kernel-win-debug-x64-try,vm-kernel-win-debug-ia32-try,vm-dartkb-linux-debug-x64-try,vm-kernel-precomp-linux-debug-x64-try,vm-dartkb-linux-release-x64-abi-try,vm-kernel-precomp-android-release-arm64-try,vm-kernel-asan-linux-release-x64-try,vm-kernel-linux-release-simarm-try,vm-kernel-linux-release-simarm64-try,vm-kernel-mac-debug-simdbc64-try,vm-kernel-precomp-android-release-arm_x64-try,vm-kernel-reload-mac-release-simdbc64-try,vm-kernel-precomp-obfuscate-linux-release-x64-try,vm-kernel-reload-rollback-linux-debug-x64-try,vm-kernel-precomp-mac-release-simarm_x64-try Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/120661 Reviewed-by: Martin Kustermann <kustermann@google.com> Commit-Queue: Daco Harkes <dacoharkes@google.com>
dart-bot
pushed a commit
that referenced
this issue
Oct 11, 2019
Follow up of https://dart-review.googlesource.com/c/sdk/+/117547 This gets rid of unnecessary allocations in hot loops with indexed loads and stores. Issue: #38172 Change-Id: I37a4b1aba00084e465d47cce79bb9963e1afc104 Cq-Include-Trybots: luci.dart.try:vm-ffi-android-debug-arm-try,vm-ffi-android-debug-arm64-try,app-kernel-linux-debug-x64-try,vm-kernel-linux-debug-ia32-try,vm-dartkb-linux-debug-simarm64-try,vm-kernel-win-debug-x64-try,vm-kernel-win-debug-ia32-try,vm-dartkb-linux-debug-x64-try,vm-kernel-precomp-linux-debug-x64-try,vm-dartkb-linux-release-x64-abi-try,vm-kernel-precomp-android-release-arm64-try,vm-kernel-asan-linux-release-x64-try,vm-kernel-linux-release-simarm-try,vm-kernel-linux-release-simarm64-try,vm-kernel-mac-debug-simdbc64-try,vm-kernel-precomp-android-release-arm_x64-try,vm-kernel-reload-mac-release-simdbc64-try,vm-kernel-precomp-obfuscate-linux-release-x64-try,vm-kernel-reload-rollback-linux-debug-x64-try,vm-kernel-precomp-mac-release-simarm_x64-try Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/119645 Reviewed-by: Martin Kustermann <kustermann@google.com>
The low-hanging fruits have been implemented. |
dart-bot
pushed a commit
that referenced
this issue
Oct 15, 2019
Speeds up the FfiMemory benchmarks by a factor of 3 in AoT. Issue: #38172 Change-Id: Ic6d920e27ff905a7e08c47f4afb229d8620068ec Cq-Include-Trybots: luci.dart.try:vm-ffi-android-debug-arm-try,vm-ffi-android-debug-arm64-try,app-kernel-linux-debug-x64-try,vm-kernel-linux-debug-ia32-try,vm-dartkb-linux-debug-simarm64-try,vm-kernel-win-debug-x64-try,vm-kernel-win-debug-ia32-try,vm-dartkb-linux-debug-x64-try,vm-kernel-precomp-linux-debug-x64-try,vm-dartkb-linux-release-x64-abi-try,vm-kernel-precomp-android-release-arm64-try,vm-kernel-asan-linux-release-x64-try,vm-kernel-linux-release-simarm-try,vm-kernel-linux-release-simarm64-try,vm-kernel-precomp-android-release-arm_x64-try,vm-kernel-reload-mac-release-simdbc64-try,vm-kernel-precomp-obfuscate-linux-release-x64-try,vm-kernel-reload-rollback-linux-debug-x64-try,vm-kernel-precomp-mac-release-simarm_x64-try,dart-sdk-linux-try,flutter-engine-linux-try Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/121580 Commit-Queue: Daco Harkes <dacoharkes@google.com> Reviewed-by: Martin Kustermann <kustermann@google.com>
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Labels
area-vm
Use area-vm for VM related issues, including code coverage, and the AOT and JIT backends.
library-ffi
Creating a new issue for this, instead of having everything in #36247. We need to implement the pointer operations in IL/Dart to get rid of runtime entries.
Originally posted by @sjindel-google in #36247 (comment)
Some optimizations depend on statically knowing the type argument on Pointer. Related API changes:
Pointer.elementAt
should also be made an extension method to prevent branching in hot loops.load
([vm/ffi] Change return type of load to dynamic #37463).dynamic
and onPointer<NativeType>
(dart:ffi interaction with dynamic #35902).The pointer optimizations could be implemented without doing these API changes, if loads and stores through
dynamic
and onPointer<NativeType>
keep working as a slow path.What optimizations we can do, and how we can do them, might be influenced by finalizers (#35770).
The text was updated successfully, but these errors were encountered: