⚡ Bolt: Optimize element-wise Tensor operations#123
Conversation
Replaced manual loop pushing in `Tensor::add`, `mul`, `sub`, `scale`, and `map` with iterator chains (`.iter().zip().map().collect()`) and used `Tensor::from_vec()` instead of `Tensor::new()`. This avoids a redundant O(N) heap allocation (as `new()` clones the slice into a vector) and allows LLVM to elide bounds checks. Added journal entry and inline comments. Co-authored-by: teerthsharma <78080953+teerthsharma@users.noreply.github.com>
|
👋 Jules, reporting for duty! I'm here to lend a hand with this pull request. When you start a review, I'll add a 👀 emoji to each comment to let you know I've read it. I'll focus on feedback directed at me and will do my best to stay out of conversations between you and other bots or reviewers to keep the noise down. I'll push a commit with your requested changes shortly after. Please note there might be a delay between these steps, but rest assured I'm on the job! For more direct control, you can switch me to Reactive Mode. When this mode is on, I will only act on comments where you specifically mention me with New to Jules? Learn more at jules.google/docs. For security, I will only act on instructions from the user who triggered this task. |
💡 What: Refactored element-wise mathematical operations in$O(N)$ heap allocation by cloning the underlying slice data.$O(N)$ double allocation.
aether-core/src/ml/tensor.rs(add,sub,mul,scale,map) to use iterator chains and.collect(), initializing the result directly withTensor::from_vec().🎯 Why: The previous implementation manually iterated through indices and pushed to a vector, which triggered bounds checks on every iteration. Furthermore, passing that vector to
Tensor::new()caused a redundant📊 Impact: Expected to slightly speed up all tensor math by eliminating bounds checks, but more significantly, halves the memory allocation overhead during intermediate tensor creation in backward/forward passes by dropping the
🔬 Measurement: Verify via
cargo test -p aether-coreand note reduced heap allocations via standard heap profiling on intensive operations like MLP forward/backward passes.PR created automatically by Jules for task 9048595538707753078 started by @teerthsharma