codon/docs/intro/releases.md

171 lines
4.3 KiB
Markdown
Raw Normal View History

2022-08-03 03:04:30 +08:00
Below you can find release notes for each major Codon release,
listing improvements, updates, optimizations and more for each
new version.
GPU and other updates (#52) * Add nvptx pass * Fix spaces * Don't change name * Add runtime support * Add init call * Add more runtime functions * Add launch function * Add intrinsics * Fix codegen * Run GPU pass between general opt passes * Set data layout * Create context * Link libdevice * Add function remapping * Fix linkage * Fix libdevice link * Fix linking * Fix personality * Fix linking * Fix linking * Fix linking * Add internalize pass * Add more math conversions * Add more re-mappings * Fix conversions * Fix __str__ * Add decorator attribute for any decorator * Update kernel decorator * Fix kernel decorator * Fix kernel decorator * Fix kernel decorator * Fix kernel decorator * Remove old decorator * Fix pointer calc * Fix fill-in codegen * Fix linkage * Add comment * Update list conversion * Add more conversions * Add dict and set conversions * Add float32 type to IR/LLVM * Add float32 * Add float32 stdlib * Keep required global values in PTX module * Fix PTX module pruning * Fix malloc * Set will-return * Fix name cleanup * Fix access * Fix name cleanup * Fix function renaming * Update dimension API * Fix args * Clean up API * Move GPU transformations to end of opt pipeline * Fix alloc replacements * Fix naming * Target PTX 4.2 * Fix global renaming * Fix early return in static blocks; Add __realized__ function * Format * Add __llvm_name__ for functions * Add vector type to IR * SIMD support [wip] * Update kernel naming * Fix early returns; Fix SIMD calls * Fix kernel naming * Fix IR matcher * Remove module print * Update realloc * Add overloads for 32-bit float math ops * Add gpu.Pointer type for working with raw pointers * Add float32 conversion * Add to_gpu and from_gpu * clang-format * Add f32 reduction support to OpenMP * Fix automatic GPU class conversions * Fix conversion functions * Fix conversions * Rename self * Fix tuple conversion * Fix conversions * Fix conversions * Update PTX filename * Fix filename * Add raw function * Add GPU docs * Allow nested object conversions * Add tests (WIP) * Update SIMD * Add staticrange and statictuple loop support * SIMD updates * Add new Vec constructors * Fix UInt conversion * Fix size-0 allocs * Add more tests * Add matmul test * Rename gpu test file * Add more tests * Add alloc cache * Fix object_to_gpu * Fix frees * Fix str conversion * Fix set conversion * Fix conversions * Fix class conversion * Fix str conversion * Fix byte conversion * Fix list conversion * Fix pointer conversions * Fix conversions * Fix conversions * Update tests * Fix conversions * Fix tuple conversion * Fix tuple conversion * Fix auto conversions * Fix conversion * Fix magics * Update tests * Support GPU in JIT mode * Fix GPU+JIT * Fix kernel filename in JIT mode * Add __static_print__; Add earlyDefines; Various domination bugfixes; SimplifyContext RAII base handling * Fix global static handling * Fix float32 tests * FIx gpu module * Support OpenMP "collapse" option * Add more collapse tests * Capture generics and statics * TraitVar handling * Python exceptions / isinstance [wip; no_ci] * clang-format * Add list comparison operators * Support empty raise in IR * Add dict 'or' operator * Fix repr * Add copy module * Fix spacing * Use sm_30 * Python exceptions * TypeTrait support; Fix defaultDict * Fix earlyDefines * Add defaultdict * clang-format * Fix invalid canonicalizations * Fix empty raise * Fix copyright * Add Python numerics option * Support py-numerics in math module * Update docs * Add static Python division / modulus * Add static py numerics tests * Fix staticrange/tuple; Add KwTuple.__getitem__ * clang-format * Add gpu parameter to par * Fix globals * Don't init loop vars on loop collapse * Add par-gpu tests * Update gpu docs * Fix isinstance check * Remove invalid test * Add -libdevice to set custom path [skip ci] * Add release notes; bump version [skip ci] * Add libdevice docs [skip ci] Co-authored-by: Ibrahim Numanagić <ibrahimpasa@gmail.com>
2022-09-16 03:40:00 +08:00
# v0.14
## GPU support
GPU kernels can now be written and called in Codon. Existing
loops can be parallelized on the GPU with the `@par(gpu=True)`
annotation. Please see the [docs](../advanced/gpu.md) for
more information and examples.
## Semantics
Added `-numerics` flag, which specifies semantics of various
numeric operations:
- `-numerics=c` (default): C semantics; best performance
- `-numerics=py`: Python semantics (checks for zero divisors
and raises `ZeroDivisionError`, and adds domain checks to `math`
functions); might slightly decrease performance.
## Types
Added `float32` type to represent 32-bit floats (equivalent to C's
`float`). All `math` functions now have `float32` overloads.
## Parallelism
Added `collapse` option to `@par`:
``` python
@par(collapse=2) # parallelize entire iteration space of 2 loops
for i in range(N):
for j in range(N):
do_work(i, j)
```
## Standard library
Added `collections.defaultdict`.
## Python interoperability
Various Python interoperability improvements: can now use `isinstance`
on Python objects/types and can now catch Python exceptions by name.
2022-08-03 03:04:30 +08:00
# v0.13
2022-08-03 03:04:30 +08:00
## Language
### Scoping
Scoping was changed to match Python scoping. For example:
``` python
if condition:
x = 42
print(x)
```
If condition is `False`, referencing `x` causes a `NameError`
to be raised at runtime, much like what happens in Python.
There is zero new performance overhead for code using the old
scoping; code using the new scoping as above generates a flag to
indicate whether the given variable has been assigned.
Moreover, variables can now be assigned to different types:
``` python
x = 42
print(x) # 42
x = 'hello'
print(x) # hello
```
The same applies in Jupyter or JIT environments.
2022-08-03 03:04:30 +08:00
### Static methods
Added support for `@staticmethod` method decorator.
Class variables are also supported:
``` python
class Cls:
a = 5 # or "a: ClassVar[int] = 5" (PEP 526)
@staticmethod
def method():
print('hello world')
c = Cls()
Cls.a, Cls.method(), c.a, c.method() # supported
```
2022-08-03 03:04:30 +08:00
### Tuple handling
Arbitrary classes can now be converted to tuples via the `tuple()`
function.
2022-08-03 03:04:30 +08:00
### Void type
The `void` type has been completely removed in favor of the new
and Pythonic `NoneType`, which compiles to an empty LLVM struct.
This does not affect C interoperability as the empty struct type
is replaced by `void` by LLVM.
2022-08-03 03:04:30 +08:00
### Standard library
The `re` module is now fully supported, and uses
[Google's `re2`](https://github.com/google/re2) as a backend. Future
versions of Codon will also include an additional regex optimization
pass to compile constant ("known at compile time") regular expressions
to native code.
2022-08-03 03:04:30 +08:00
## C variables
Global variables with C linkage can now be imported via `from C import`:
``` python
# assumes the C variable "long foo"
from C import foo: int
print(foo)
```
2022-08-03 03:04:30 +08:00
## Parallelism
Numerous improvements to the OpenMP backend, including the addition
of task-based reductions:
``` python
total = 0
2022-08-06 06:14:47 +08:00
@par
for a in some_arbitrary_generator():
2022-08-06 06:14:47 +08:00
total += do_work(a) # now converted to task reduction
```
2022-08-03 03:04:30 +08:00
## Python interoperability
Included revamped `codon` module for Python, with `@codon.jit` decorator
for compiling Python code in existing codebases. Further improved and
optimized the Python bridge. Please see the [docs](../interop/decorator.md)
for more information.
2022-08-03 03:04:30 +08:00
## Codon IR
New capture analysis pass for Codon IR for improving tasks such as dead
code elimination and side effect analysis. This allows Codon IR to deduce
whether arbitrary, compilable Python expressions have side effects, capture
variables, and more.
2022-08-03 03:04:30 +08:00
## Code generation and optimizations
A new dynamic allocation optimization pass is included, which 1)
removes unused allocations (e.g. instantiating a class but never
using it) and 2) demotes small heap allocations to stack (`alloca`)
allocations when possible. The latter optimization can frequently
remove any overhead associated with instantiating most classes.
2022-08-03 03:04:30 +08:00
## Command-line tool
The `codon` binary can now compile to shared libraries using the `-lib`
option to `codon build` (or it can be deduced from a `.so` or `.dylib`
extension on the output file name).
2022-08-03 03:04:30 +08:00
## Errors
Added support for multiple error reporting.