Taichi

Latest version: v1.7.3

Safety actively analyzes 724451 Python packages for vulnerabilities to keep your Python projects secure.

Scan your dependencies

Page 9 of 23

0.8.3

Full changelog:
- [refactor] Rename nparray to external_array in Python-side (3191) (by **Yi Xu**)
- [misc] Version bump: v0.8.2->v0.8.3 (3188) (by **Bo Qiao**)
- [misc] Revert 3175 3164 (3185) (by **Ye Kuang**)
- [Doc] Improve the documentation for ODOP (3006) (by **ljcc0930**)
- [CUDA] Update CUPTI profiling toolkit, add NVPW_MetricsEvaluator and its APIs for CUDA_VERSION >= 11.4 (3172) (by **rocket**)
- fix (3175) (by **Dunfan Lu**)
- [vulkan] Isolate vulkan runtime (3164) (by **Bob Cao**)
- [bug] Fix the mapping from virtual axes to physical axes again (3170) (by **Yi Xu**)
- [ci] Move pytest/pylint out of runtime dep. (3169) (by **Ailing**)
- [ci] Move code_format.py out of taichi package. (3171) (by **Ailing**)
- [gui] Use Device API memcpy in GGUI (3163) (by **Dunfan Lu**)

0.8.2

Full changelog:
- [bug] Fix the mapping from virtual axes to physical axes (3159) (by **Yi Xu**)
- [ci] Get rid of requirements_lint.txt. (3161) (by **Ailing**)
- [ci] Enable macos 10.14 in release.yml wip. (3158) (by **Ailing**)
- [refactor] [CUDA] Add optional metrics for KernelProfiler in Python scope (3049) (by **rocket**)
- [misc] Fix build on macos 10.14. (3155) (by **Ailing**)
- [bug] Fix Cpu/CudaDevice memory deallocation bug (3157) (by **Ye Kuang**)
- Revert "[Bug] Fix argument shadowed when there is a local variable with the same name (3105)" (3153) (by **Ailing**)
- [Lang] Use ti.linalg.SparseMatrixBuilder as sparse matrix builder (3152) (by **FantasyVR**)
- [Doc] Add docstring and documents for sparse matrix (3119) (by **Jiafeng Liu**)
- [vulkan] Inter-device memcpy API (3137) (by **Dunfan Lu**)
- [Lang] Improve sparse matrix/solver API (3145) (by **FantasyVR**)
- Fix and cleanup GGUI examples (3144) (by **Dunfan Lu**)
- [ci] [vulkan] Upgrade Dockerfile to enable Vulkan tests (2970) (by **Bo Qiao**)
- [Example] An implicit mass spring demo with sparse matrix (3116) (by **FantasyVR**)
- [misc] Version bump: v0.8.1->v0.8.2 (3149) (by **Yi Xu**)
- [refactor] Get rid of the indirection between KernelCodeGen::compile and KernelCodeGen::codegen. (by **Ailing Zhang**)
- [misc] Enable flushing when printing preprocessed ast. (by **Ailing Zhang**)
- [Bug] Throw proper error message when creating more than 32 snode trees in LLVM backend. (by **Ailing Zhang**)
- [Cuda] [opt] Fix duplicate shared memory allocation (3140) (by **Chang Yu**)
- [CI] Add pip cache (3139) (by **zstone12**)
- rgb_to_hex: fix typo and use bit operator instead of multiplication (3136) (by **gaoxinge**)
- [llvm] Establish a correspondence between SNodes and DevicePtr (3120) (by **Dunfan Lu**)
- [Metal] Support multiple SNode roots in codegen/runtime (3090) (by **Ye Kuang**)
- [Autodiff] Throw proper error message for unsupported ti.random. (3131) (by **Ailing**)
- [test] Parametrize test_ad_basics.py (3129) (by **Ye Kuang**)
- [ci] Fix sparse_solver for pylint. (3132) (by **Ailing**)
- [refactor] Enable user selected metrics for CUDA, remove print() method from class KernelProfiler (3048) (by **rocket**)
- [misc] Delete accidentally included spirv dump (3130) (by **Bob Cao**)
- [perf] Reduce SNodeTree materialization time in LLVM backends (3127) (by **Yi Xu**)
- [Lang] Move sparse matrix/solver into subfolder (3115) (by **FantasyVR**)
- [refactor] Enable pylint checking in ci and minor cleanup. (by **Ailing Zhang**)
- [refactor] Move imports to the top level. (by **Ailing Zhang**)
- [vulkan] Make atomic helper functions inline (3118) (by **Chang Yu**)
- [perf] Constant folding optimization (3108) (by **Bob Cao**)
- [Bug] Fix argument shadowed when there is a local variable with the same name (3105) (by **lin-hitonami**)
- [ci] Add back fixes for github actions windows image upgrade. (3117) (by **Ailing**)
- [doc] Update dev install about develop/install. (3113) (by **Ailing**)
- [cuda] Remove unified memory allocator (3098) (by **Dunfan Lu**)
- [refactor] Make ext_arr/any_arr/template to taichi.type.annotations. (by **Ailing Zhang**)
- [refactor] Make type annotations simple, remove dep on high level data structures. (by **Ailing Zhang**)
- [ci] Run shell scripts in CI (3034) (by **Jiasheng Zhang**)
- [Lang] Support chained assignments (3062) (by **Ce Gao**)
- [metal] Rearrange how KernelManager is initialized (3109) (by **Ye Kuang**)
- [GUI] Add context manager support for ui.Gui (3055) (by **Xuanwo**)
- [Lang] [bug] Fix support property decorator for data_oriented class (3052) (by **yihong**)
- [refactor] Work around some cyclic imports. (by **Ailing Zhang**)
- [refactor] Remove importing outside top level. (by **Ailing Zhang**)
- [refactor] Stop overriding taichi.core from taichi/lang/impl.py. (by **Ailing Zhang**)
- [metal] Separate runtime and snodes initialization (3093) (by **Ye Kuang**)
- [ci] Copy paste linux & windows fixes from presubmit to release. (3103) (by **Ailing**)
- [Doc] Add documentation for gui system and install trouble shooting. (2985) (by **Jiasheng Zhang**)
- [doc] Fix the link to the QuanTaichi paper in README.md (3102) (by **Yi Xu**)
- [doc] Remove docs subpath and update references across the codebase (3085) (by **Chengchen(Rex) Wang**)
- [Lang] Use more user-friendly exception when converting from numpy array (3058) (by **Ce Gao**)
- renable sfg test (3097) (by **Dunfan Lu**)
- [cuda] Disable unified memory and make CI pass (3067) (by **Dunfan Lu**)
- [cuda] Fix a memory alignment bug in pre-allocated memory allocator (3096) (by **Dunfan Lu**)
- Fix minor bugs in GL Device (3091) (by **Bob Cao**)
- [metal] Pull out the Runtime MSL code into its own module (3086) (by **Ye Kuang**)
- [Doc] Fix an example in the documentation for coordinate offsets (3089) (by **张皓**)
- [Example] A stable fluid demo with sparse matrix (3081) (by **Jiafeng Liu**)
- [doc] Add Vulkan into README.md (3088) (by **Bob Cao**)
- [refactor] Style police (3082) (by **Bob Cao**)
- [GUI] Extract the type casts of environment variables in misc.gui.gui into a reusable function (3065) (by **Dream Hunter**)
- [lang] Add a method to get all SNodes under a root (3083) (by **Ye Kuang**)
- [Test] Allow `ti test` work with `-a cpu, cuda`. (3066) (by **Ailing**)
- [refactor] Move the AST utils into taichi.lang.ast (3063) (by **Ye Kuang**)
- [refactor] Get rid of settings.py. (by **Ailing Zhang**)
- [refactor] Get rid of build and load_module. (by **Ailing Zhang**)
- [refactor] Move primitive_types.py to type folder. (by **Ailing Zhang**)
- [refactor] Move record.py out of ti.core. (by **Ailing Zhang**)
- [refactor] Move logging out of ti.core. (by **Ailing Zhang**)
- [ci] Try moving all torch tests to single thread. (by **Ailing Zhang**)
- [Doc] Update developer installation (3070) (by **Bo Qiao**)
- [Lang] Fix python AST print format issues in python/taichi/lang/transformer.py (3061) (by **Ce Gao**)
- [ci] Extend windows timeout. (3068) (by **Ailing**)
- [ci] Try fixing windows. (3064) (by **Ailing**)
- [Doc][autodiff] Add a section about customized gradient in autodiff. (3054) (by **Ailing**)
- [Doc] Update Type system (3043) (by **Tiantian Liu**)

0.8.1

Full changelog:
- [vulkan] Disable Vulkan validation layer (3050) (by **Ye Kuang**)
- [Doc] Update Python test doc (3011) (by **ljcc0930**)
- [Doc] Improve the documentation for profiler (3014) (by **rocket**)
- [Doc] Fix Arch Linux building guide clang dependence (3042) (by **Cinderella**)
- [Doc] Update kernels and functions (2999) (by **Mingrui Zhang**)
- [Doc] Update cpp_style.md (3040) (by **Ye Kuang**)
- [Doc] Developer installation update (2996) (by **Bo Qiao**)
- [Lang] [bug] Fix subscripting user classes in Taichi kernels (3047) (by **Yi Xu**)
- [misc] Version bump: v0.8.0->v0.8.1 (3044) (by **Yi Xu**)
- [Doc] Add docstring for init(), reset() and a few constants (3026) (by **Ye Kuang**)
- [gui] Fix mouse position error after window had been resized (3041) (by **Dunfan Lu**)
- [Doc] Performance tuning update (2997) (by **Bo Qiao**)
- [Doc] Update field (2994) (by **FantasyVR**)
- [Doc] Update interacting with external arrays (3000) (by **FantasyVR**)
- [Autodiff] Rename complex_kernel and complex_kernel_grad. (3035) (by **Ailing**)
- [Doc] Update contributor guidelines (2991) (by **Yi Xu**)
- [LLVM] Rename runtime memory allocation function (3036) (by **Bo Qiao**)
- [benchmark] [CUDA] Add the implementation of class CuptiToolkit (2923) (by **rocket**)
- [Doc] Add documentation for TLS/BLS (2990) (by **Ye Kuang**)
- [Doc] Update differentiable programming doc. (2993) (by **Ailing**)
- [Doc] Fix note format on webpage and code highlights for metaprogramming (3027) (by **Mingrui Zhang**)
- Disable validation layer with release builds (3028) (by **Bob Cao**)
- [Doc] Update the Type system section (3010) (by **Tiantian Liu**)
- [Doc] Add documentation for sparse computation (2983) (by **Yuanming Hu**)
- [Doc] Update metaprogramming doc (3009) (by **Mingrui Zhang**)
- [Doc] Improve the documentation for debugging and GGUI (3002) (by **Chang Yu**)
- [ci] Fix release.yml syntax error (3022) (by **Jiasheng Zhang**)
- [misc] Get changelogs via tags instead of commit messages (3021) (by **Yi Xu**)
- [Doc] Update documentation for fields (advanced) (3012) (by **Yi Xu**)
- [Doc] Improve the documentation for C++ style guide (3001) (by **Ye Kuang**)
- [Doc] Fix typo in data_oriented docstring (3005) (by **ljcc0930**)
- [Doc] Remove 'Versioning and releases'; Fix 'Documentation writing guide' (2987) (by **Yi Xu**)
- [misc] Add Vulkan as a target for ti diagnose (2995) (by **Yuheng Zou**)
- [Opt] [ir] [refactor] Remove exceptions from IR pass extract_constant (2966) (by **lin-hitonami**)
- [refactor] [benchmark] Add ti.profiler in python scope (2922) (by **rocket**)
- [refactor] Private field names and function restructure in cc backend. (2989) (by **Jiasheng Zhang**)
- [cpu] Cpu device 1/n: memory allocation (2984) (by **Dunfan Lu**)
- [refactor] Refactored and unified CC backend, removed CCProgram and use CCProgramImpl instead. (2978) (by **Jiasheng Zhang**)
- [CI] Better CI title check info (2986) (by **yihong**)
- [ci] Disable fail-fast matrix on release jobs. (2982) (by **Ailing**)
- [cuda] Cuda Device API 1/n: memory allocation (2981) (by **Dunfan Lu**)
- [misc] Add deactivate_all_snodes and ti.FieldsBuilder.deactivate_all (2967) (by **ljcc0930**)
- [misc] Remove unnecessary symlink step. (2976) (by **Ailing**)
- [ci] Releases must be done on buildbot-ubuntu machine. (2977) (by **Ailing**)
- [ci] Fix OOM on nightly release. (2975) (by **Ailing**)
- [Lang] Add error message for printing an incomplelely-defined field (2979) (by **yihong**)
- [refactor] Minimize Python context (2971) (by **Yi Xu**)
- [Doc] Installation with mirror source (2946) (by **FantasyVR**)

0.8.0

Packed Mode
Previously in Taichi, all non-power-of-two dimensions of a field were automatically padded to a power of two. For instance, a field of shape `(18, 65)` would have internal shape `(32, 128)`. Although the padding had many benefits such as allowing fast and convenient bitwise operations for coordinate handling, it would consume potentially much more memory than people thought.

For people indeed want smaller memory usage, we now introduce an optional packed mode. In packed mode, no more padding will be applied so a field will not have a larger internal shape when some of its dimensions are not power-of-two. The downside is that the runtime performance will regress slightly.

A switch named `packed` for `ti.init()` decides whether to use packed mode:
python
ti.init() default: packed=False
a = ti.field(ti.i32, shape=(18, 65)) padded to (32, 128)

python
ti.init(packed=True)
a = ti.field(ti.i32, shape=(18, 65)) no padding

GGUI

A new GUI system, which is codenamed GGUI, is added to Taichi. GGUI will use GPUs for rendering, which enables it to be much faster than the original `ti.gui`, and to render 3d meshes and particles. It also comes with a brand new set of immediate mode widgets APIs.

Sample 3D code:

python
window = ti.ui.Window("Hello Taichi", (1920, 1080))

canvas = window.get_canvas()
scene = ti.ui.Scene()
camera = ti.ui.make_camera()

while window.running:

camera.position(...)
camera.lookat(...)
scene.set_camera(camera)

scene.point_light(pos=(...), color=(...))

vertices, centers, etc. are taichi fields
scene.mesh(vertices, ...)
scene.particles(centers, radius, ...)

canvas.scene(scene)
window.show()


Sample IMGUI code:

python
window = ti.ui.Window("Hello Taichi", (500, 500))
canvas = window.get_canvas()

gx, gy, gz = (0, -9.8, 0)

while window.running:

window.GUI.begin("Greetings", 0.1, 0.1, 0.8, 0.15)
window.GUI.text("Welcome to TaichiCon !")
if window.GUI.button("Bye"):
window.running = False
window.GUI.end()

window.GUI.begin("Gravity", 0.1, 0.3, 0.8, 0.3)
gx = window.GUI.slider_float("x", gx, -10, 10)
gy = window.GUI.slider_float("y", gy, -10, 10)
gz = window.GUI.slider_float("z", gz, -10, 10)
window.GUI.end()

canvas.set_background_color(color)
window.show()


For more examples, please checkout `examples/ggui_examples` in the taichi repo.
Dynamic SNode Allocation
Previously in Taichi, we cannot allocate new fields after the kernel's execution. Now we can use a new class `FieldsBuilder` to support dynamic allocation.

`FieldsBuilder` has the same data structure declaration API as the previous `root`, such as `dense()`, `pointer()` etc. After declaration, we need to call the `finalize()` function to compile the `FieldsBuilder` to an `SNodeTree` object.

Example usage for `FieldsBuilder`:

py
import taichi as ti
ti.init()

ti.kernel
def func(v: ti.template()):
for I in ti.grouped(v):
v[I] += 1

fb = ti.FieldsBuilder()
x = ti.field(dtype = ti.f32)
fb.dense(ti.ij, (5, 5)).place(x)
fb_snode_tree = fb.finalize() Finalizing the FieldsBuilder and returns a SNodeTree
func(x)

fb2 = ti.FieldsBuilder()
y = ti.field(dtype = ti.f32)
fb2.dense(ti.i, 5).place(y)
fb2_snode_tree = fb2.finalize() Finalizing the FieldsBuilder and returns a SNodeTree
func(y)


Additionally, `root` now is implemented by `FieldsBuilder` implicitly, so we can allocate the fields directly under `root`.
py
import taichi as ti
ti.init() ti.root = ti.FieldsBuilder()

ti.kernel
def func(v: ti.template()):
for I in ti.grouped(v):
v[I] += 1

x = ti.field(dtype = ti.f32)
ti.root.dense(ti.ij, (5, 5)).place(x)
func(x) automatically called ti.root.finalize()
ti.root = new ti.FieldsBuilder()

y = ti.field(dtype = ti.f32)
ti.root.dense(ti.i, 5).place(y)
func(y) automatically called ti.root.finalize()


Furthermore, after we called the `finalize()` of a `FieldsBuilder`, it will return a finalized `SNodeTree` object. If we do not want to use the fields under this `SNodeTree`, we could call `destroy()` manually to recycle the memory into the memory pool.

e.g.:
py
import taichi as ti
ti.init()

ti.kernel
def func(v: ti.template()):
for I in ti.grouped(v):
v[I] += 1

fb = ti.FieldsBuilder()
x = ti.field(dtype = ti.f32)
fb.dense(ti.ij, (5, 5)).place(x)
fb_snode_tree = fb.finalize() Finalizing the FieldsBuilder and returns a SNodeTree
func(x)

fb_snode_tree.destroy()
func(x) cannot be used anymore

Full changelog:
- [doc] Fix several typos in doc (2972) (by **Ziyi Wu**)
- [opengl] Runtime refactor 1/n (2965) (by **Bob Cao**)
- [refactor] Avoid passing device strings into torch (2968) (by **Yi Xu**)
- [misc] Fix typos in examples/simulation/fractal.py (2882) (by **Yilong Li**)
- [opt] Support atomic min/max in warp reduction optimization (2956) (by **Yi Xu**)
- [Bug] Add GIL that was accidentally removed in PR 2939 back (2964) (by **lin-hitonami**)
- [misc] Support clean command to setup.py. (by **Ailing Zhang**)
- [misc] Fix some build warnings. (by **Ailing Zhang**)
- [doc] Add docstring for GGUI python API (2958) (by **Dunfan Lu**)
- [gui] Move all ggui kernels to python by using taichi fields as staging buffers (2957) (by **Dunfan Lu**)
- [opt] Add conservative alias analysis for ExternalPtrStmt (2952) (by **Yi Xu**)
- [opengl] Move old runtime onto Device API (2945) (by **Bob Cao**)
- [Lang] Remove deprecated usage of ti.Matrix.__init__ (2950) (by **Yi Xu**)
- [Lang] Add data_handle property to Ndarray (2947) (by **Yi Xu**)
- [misc] Throw proper error if real function is not properly annotated. (2943) (by **Ailing**)
- [gui] Fix normal bug when default fp is not f32. (2944) (by **Dunfan Lu**)
- [opengl] Device API: Adding GL error checks & correct memory mapping flags (2941) (by **Bob Cao**)
- [Lang] Support configure sparse solver ordering (2907) (by **FantasyVR**)
- [refactor] remove Program::KernelProxy (2939) (by **lin-hitonami**)
- [doc] Update README.md (2940) (by **Yuanming Hu**)
- [opengl] Initial Device API work (2925) (by **Bob Cao**)
- [Lang] Support ti_print for wasm (2910) (by **squarefk**)
- [Lang] Fix ti func with template and add corresponding tests (2871) (by **squarefk**)
- [doc] Update README.md (2937) (by **Yuanming Hu**)
- [metal] Fix metal codegen to make OSX 10.14 work (2935) (by **Ye Kuang**)
- [Doc] Add developer installation to README.md (2933) (by **Ye Kuang**)
- [misc] Edit preset indices (2932) (by **ljcc0930**)
- fratal example (2931) (by **Dunfan Lu**)
- [refactor] Exchange compiled_grad_functions and compiled_functions in kernel_impl.py (2930) (by **Yi Xu**)
- [Misc] Update doc links (2928) (by **FantasyVR**)
- Disable a few vulkan flaky tests. (2926) (by **Ailing**)
- [llvm] Remove duplicated set dim attribute for GlobalVariableExpression (2929) (by **Ailing**)
- [ci] Artifact uploading before test in release.yml (2921) (by **Jiasheng Zhang**)
- [bug] Fix the Bug that cannot assign a value to a scalar member in a struct from python scope (2894) (by **JeffreyXiang**)
- [misc] Update examples (2924) (by **Taichi Gardener**)
- [ci] Enable tmate session if release test fails. (2919) (by **Ailing**)
- [refactor] [CUDA] Wrap the default profiling tool as EventToolkit , add a new class for CUPTI toolkit (2916) (by **rocket**)
- [metal] Fix upperbound for list-gen and struct-for (2915) (by **Ye Kuang**)
- [ci] Fix linux release forgot to remove old taichi (2914) (by **Jiasheng Zhang**)
- [Doc] Add docstring for indices() and axes() (2917) (by **Ye Kuang**)
- [refactor] Rename SNode::n to SNode::num_cells_per_container (2911) (by **Ye Kuang**)
- Enable deploy preview if changes are detected in docs. (2913) (by **Ailing**)
- [refactor] [CUDA] Add traced_records_ for KernelProfilerBase, refactoring KernelProfilerCUDA::sync() (2909) (by **rocket**)
- [ci] Moved linux release to github action (2905) (by **Jiasheng Zhang**)
- [refactor] [CUDA] Move KernelProfilerCUDA from program/kernel_profiler.cpp to backends/cuda/cuda_profiler.cpp (2902) (by **rocket**)
- [wasm] Fix WASM AOT module builder order (2904) (by **Ye Kuang**)
- [CUDA] Add a compilation option for CUDA toolkit (2899) (by **rocket**)
- [vulkan] Support for multiple SNode trees in Vulkan (2903) (by **Dunfan Lu**)
- add destory snode tree api (2898) (by **Dunfan Lu**)

0.7.32

Full changelog:
- [vulkan] Turn off Vulkan by default and add dev install instructions (2897) (by **Dunfan Lu**)
- [Misc] Fix the path in conda_env.yaml (2895) (by **Ce Gao**)
- [ci] Rollback buggy Dockerfile (by **Dunfan Lu**)
- [bug] [opt] Disable putting pointers into global tmp buffer (2888) (by **Yi Xu**)
- [Llvm] Increase the number of arguments allowed in a kernel (2886) (by **Yi Xu**)
- [gui] GGUI fix undefined variable (2885) (by **Mingrui Zhang**)
- [ci] Build and Release Vulkan in CI/CD (2881) (by **Dunfan Lu**)
- [Lang] Refine semantics of ti.any_arr (2875) (by **Yi Xu**)
- [refactor] OpenGL program impl (2878) (by **Dunfan Lu**)
- [refactor] Vulkan program impl (2876) (by **Dunfan Lu**)
- Clean up sparse matrix (2872) (by **squarefk**)
- Re-enable sfg test on CUDA (2874) (by **Bo Qiao**)
- [refactor] Unify llvm_program_ and metal_program_ in Program class. (by **Ailing Zhang**)
- [refactor] Let LlvmProgramImpl inherit ProgramImpl. (by **Ailing Zhang**)
- [refactor] Init ProgramImpl from MetalProgramImpl. (by **Ailing Zhang**)
- [CUDA] [bug] Fix CUDA error "allocate_global (DataType type) misaligned address" (2863) (by **rocket**)
- [Lang] Experimental SpMV and direct linear solvers (2853) (by **FantasyVR**)
- [refactor] Get rid of some unnecessary get_current_program(). (by **Ailing Zhang**)
- [ci] Enable CI on pushing to master. (2865) (by **Ailing**)
- [Lang] Support fill, from_numpy, to_numpy for ti.ndarray (2868) (by **Yi Xu**)

0.7.31

Full changelog:
- [doc] Remove links from documentation articles to API reference (2866) (by **Chengchen(Rex) Wang**)
- [Lang] Support struct fors on ti.any_arr (2857) (by **Yi Xu**)
- [ci] M1 release (2855) (by **Jiasheng Zhang**)
- [Doc] Update the API reference section. (2856) (by **Chengchen(Rex) Wang**)
- [LLVM] [Bug] fix typo of PR 2781 (2854) (by **rocket**)
- [Vulkan] Use reference counting based wrapper layer (2849) (by **Bob Cao**)
- [gui] Two sided mesh (2851) (by **Dunfan Lu**)
- [refactor] Make ti.ext_arr a special case of ti.any_arr (2850) (by **Yi Xu**)
- [Lang] Add ti.Vector.ndarray and ti.Matrix.ndarray (2808) (by **Yi Xu**)
- [ci] No need to specify arch on M1 CI. (2845) (by **Ailing**)
- [Lang] Customized struct support (2627) (by **Andrew Sun**)
- [Lang] Fix ti test parameters (2830) (by **squarefk**)
- [ci] Enable verbose on M1 CI to collect more info on hanging jobs. (2844) (by **Ailing**)
- [ci] Fixed bug of wrong os parameter (2843) (by **Jiasheng Zhang**)
- [gui] GGUI 17/n: doc (2842) (by **Dunfan Lu**)
- [gui] GGUI 16/n: examples (2841) (by **Dunfan Lu**)
- [refactor] Move FrontendContext from global into Callable class. (by **Ailing Zhang**)
- [refactor] Decouple AsyncEngine with Program. (by **Ailing Zhang**)
- [refactor] Decouple MemoryPool with Program. (by **Ailing Zhang**)
- [refactor] Decouple opengl codegen compile with Program. (by **Ailing Zhang**)
- [refactor] Unify compile() for LlvmProgramImpl and MetalProgramImpl. (by **Ailing Zhang**)
- [refactor] Initial MetalProgramImpl implementation. (by **Ailing Zhang**)
- [gui] GGUI small fixups (2840) (by **Dunfan Lu**)
- [ci] Fixed bugs of double env in release.yml (2838) (by **Jiasheng Zhang**)
- [Lang] Let rescale_index support SNode as input parameter (2826) (by **Jack12xl**)
- [refactor] Minor cleanup in program.cpp. (by **Ailing Zhang**)
- [gui] GGUI 15/n: Python-side code (2832) (by **Dunfan Lu**)
- [gui] GGUI 14/n: Shaders (2829) (by **Dunfan Lu**)
- [Lang] Experimental sparse matrix support on CPUs (2792) (by **FantasyVR**)
- [Vulkan] Add relaxed FIFO presentation mode (2828) (by **Bob Cao**)
- [ci] Conditional build matrix on release (2819) (by **Jiasheng Zhang**)
- [gui] GGUI 13/n: Pybind stuff (2825) (by **Dunfan Lu**)
- [gui] GGUI 12/n: Window and Canvas (2824) (by **Dunfan Lu**)
- [gui] GGUI 11/n: Renderer (2818) (by **Dunfan Lu**)
- [gui] GGUI 7.5/n: Avoid requiring CUDA toolchains to compile GGUI (2821) (by **Dunfan Lu**)
- [vulkan] Let me pass (2823) (by **Dunfan Lu**)
- [ci] Add timeout for every job in presubmit.yml (2820) (by **Jiasheng Zhang**)
- [Vulkan] Device API Multi-streams, multi-queue, and initial multi-thread support (2802) (by **Bob Cao**)
- [Doc] Fix example path and conda instruction link (2815) (by **Bo Qiao**)
- [Lang] Fix unfolding subscripting inside ti.external_func_call() (2806) (by **squarefk**)
- Enable tensor subscripting as input for external function call (2812) (by **squarefk**)
- [gui] GGUI 10/n: IMGUI (2809) (by **Dunfan Lu**)
- [Vulkan] [ci] Enable and release Vulkan (2795) (by **Chang Yu**)
- [Vulkan] Fixing floating point load/store/atomics on global temps and context buffers (2796) (by **Bob Cao**)
- [gui] GGUI 9/n: Renderables and Scene (2803) (by **Dunfan Lu**)
- [vulkan] Fix bug in empty root buffer (2807) (by **Chang Yu**)
- [Lang] Fix tensor based grouped ndrange for (2800) (by **squarefk**)
- [gui] GGUI 8/n: Renderable class (2798) (by **Dunfan Lu**)

Page 9 of 23

© 2025 Safety CLI Cybersecurity Inc. All Rights Reserved.