Skip to content

Commit 0515ee0

Browse files
Update status in readme (#183)
* Update status in readme * Apply suggestions from code review Co-authored-by: Elliot Saba <[email protected]> * Update README.md --------- Co-authored-by: Elliot Saba <[email protected]>
1 parent 390ac44 commit 0515ee0

File tree

1 file changed

+24
-3
lines changed

1 file changed

+24
-3
lines changed

README.md

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,21 +9,42 @@
99
# General Overview
1010

1111
Diffractor is an experimental next-generation, compiler-based AD system for Julia.
12-
Its public interface should be familiar to users, essentially matching Zygote.
1312

1413
Design goals:
1514
- Ultra high performance for both scalar and array code
16-
- Efficient higher order derivatives
15+
- Efficient higher order derivatives through nested AD
1716
- Reasonable compile times
1817
- High flexibility (like Zygote)
1918
- Support for forward/reverse/mixed modes
19+
- Fast Jacobians
2020

2121
This is achieved through a combination of innovations:
2222
- A new lowest level interface (∂⃖ the "AD optic functor" or "diffractor"), more suited to higher order AD
2323
- New capabilities in Base Julia (Opaque closures, inference plugins)
2424
- Better integration with ChainRules.jl
25+
- Demand-driven forward-mode AD (Applying transforms to only those IR statements that contribute to relevant outputs of the function being differentiated)
2526

26-
# Current Status
27+
# Current status
28+
## Current Status: Forward-Mode
29+
Currently, forward-mode is the only fully-functional mode and is now shipping in some closed source products.
30+
It is in a position to compete with [ForwardDiff.jl](https://github.com/JuliaDiff/TaylorDiff.jl), and with [TaylorDiff.jl](https://github.com/JuliaDiff/TaylorDiff.jl).
31+
It is not as battle-tested as ForwardDiff.jl, but it has several advantages.
32+
Primarily, as it is not an operator overloading AD, it frees one from the need to relax type-constants and worry about the types of containers.
33+
Furthermore, Like TaylorDiff.jl, it supports Taylor series based computation of higher order derviatives.
34+
It directly and efficiently uses ChainRules.jl's `frules`, no need for a wrapper macro to import them etc.
35+
36+
37+
One limitation over ForwardDiff.jl is a lack of chunking support, to pushforward multiple bases at once.
38+
39+
40+
41+
## Current Status: Reverse-Mode
42+
Improved reverse mode support is planned for a future release.
43+
While reverse mode was originally implemented and working, it has been stripped out until such a time as it can be properly implemented on top of new Julia compiler changes.<br>
44+
⚠️ **Reverse Mode support should be considered experimental, and may break without warning, and may not be fixed rapidly.** ⚠️ <br>
45+
46+
With that said, issues and PRs for reverse mode continue to be appreciated.
47+
### Status as of last time reverse mode was worked on:
2748

2849
The plan is to implement this in two stages:
2950
1. Generated function based transforms, using the ChainRules, the new low level interface and Opaque closures

0 commit comments

Comments
 (0)