Taichi

Latest version: v1.7.1

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

Scan your dependencies

Page 4 of 22

1.4.0

Deprecation Notice
- Support for sparse SNodes on the Metal backend has been removed.
- ti.Matrix.rotation2d() has been removed.
- The packed switch in ti.init() has been removed.
- The dynamic_index switch in ti.init() is now deprecated and will be removed in v1.5.0. See the feature introduction below for details.
- Slicing from a single row/column of a matrix (e.g.a[x, a:b]) now returns a vector instead of a matrix.

New features
AOT

Taichi AOT is officially available in Taichi v1.4.0, along with a native Taichi Runtime (TiRT) library taichi_c_api. Native applications can now load compiled AOT modules and launch Taichi kernels without a Python interpreter.

In this release, TiRT has stabilized the Vulkan backend on desktop platforms and Android. You can find prebuilt TiRT binaries on the release page. You can refer to a comprehensive tutorial on the doc site; the detailed TiRT C-API documentation is available at https://docs.taichi-lang.org/docs/taichi_core.

Ndarray
Taichi ndarray is now formally released in v1.4.0. The ndarray is an array object that holds contiguous multi-dimensional data to allow easy exchange with external libraries. See documentation for more details.

Dynamic index
Before v1.4.0, when you wanted to access a vector/matrix with a runtime variable instead of a compile-time constant, you had to set ti.init(dynamic_index=True). However, that option only works for LLVM-based backends (CPU & CUDA) and may slow down runtime performance because all matrices are affected. Starting from v1.4.0, that option is no longer needed. You can use variable indices whenever necessary on all backends without affecting the performance of those matrices with only constant indices.

Improvements
Performance
- The compilation speed has been optimized by ~2x.

Example list & ti gallery
Since v1.0.0, we have been enriching our taichi example collection, bringing the number of demos in the gallery window from eight to twelve. Run ti gallery to check out some new demos!
![image](https://user-images.githubusercontent.com/90667349/212647128-8421782f-b18c-4fec-8392-812c95406e16.png)
Bug fixes
- Incorrect behavior of struct fors on sparse SNodes in certain cases has been fixed. (7121)
- CUDA will no longer allocate extra device memory when performing `to_numpy()` and `from_numpy()`. (7008)
- StructType is now allowed as a type hint to ti.func. (6964)
- Incorrect recompilation caused by filling in a matrix field with the same matrix has been fixed. (6951)
- Matrix type inference has been fixed. (6928)
- Getting 64-bit data from ndarrays in the Python scope is now handled correctly. (6836)
- Name collision problem in ti.dataclass has been fixed. (6737)

Highlights:
- **Aot module**
- Deprecate element shape and field dim for AOT symbolic args (7100) (by **Haidong Lan**)
- **Bug fixes**
- Fix num_splits in parallel_struct_for (7121) (by **Yi Xu**)
- Fix ret_type and cast_type of UnaryOpStmt in Scalarize (7082) (by **Yi Xu**)
- Fix getting 64-bit data from ndarray in Python scope (6836) (by **Yi Xu**)
- Avoid overwriting global tmp with dynamic_index=True (6820) (by **Yi Xu**)
- **Build system**
- Deprecate export_core (7028) (by **Zhanlue Yang**)
- **Command line interface**
- Add "ti cache clean" command to clean the offline cache files manually (6937) (by **PGZXB**)
- **Documentation**
- Update tutorial.md (7176) (by **Zhao Liang**)
- Update math_module.md (7175) (by **Zhao Liang**)
- Update debugging.md (7173) (by **Zhao Liang**)
- Fix C++ tutorial does not display on doc site (7174) (by **Zhao Liang**)
- Update doc regarding dynamic index (7148) (by **Yi Xu**)
- Move glossary to top level (7118) (by **Zhao Liang**)
- Update type.md (7038) (by **Zhao Liang**)
- Fix docstring (7065) (by **Zhao Liang**)
- Remove packed mode in doc (7030) (by **Zhao Liang**)
- Minor doc update (6952) (by **Zhao Liang**)
- Glossary (6101) (by **Olinaaaloompa**)
- Update dac (6875) (by **Gabriel Vainer**)
- Update faq.md (6921) (by **Zhao Liang**)
- Update dataclass.md (6876) (by **Gabriel Vainer**)
- Update the documentation about Dynamic SNode (6752) (by **Lin Jiang**)
- Stop mentioning packed mode (6755) (by **Yi Xu**)
- **Error messages**
- Raise errors when using metal sparse (7113) (by **Lin Jiang**)
- Do not show warning when the offline cache path does not exist (7005) (by **PGZXB**)
- **GUI**
- Support colored texts (7036) (by **Dunfan Lu**)
- **Intermediate representation**
- Allow a maximum of 12 SNode indices (6901) (by **Dunfan Lu**)
- **Language and syntax**
- Raise errors when using the packed switch (7125) (by **Yi Xu**)
- Fix cannot use taichi in REPL (7114) (by **Zhao Liang**)
- Remove deprecated ti.Matrix.rotation2d() (7098) (by **Yi Xu**)
- Remove filename kwarg in aot Module save() (7085) (by **Ailing**)
- Remove sourceinspect deprecation warning message (7081) (by **Zhao Liang**)
- Make slicing a single row/column of a matrix return a vector (7068) (by **Yi Xu**)
- Deprecate the dynamic_index switch (7071) (by **Yi Xu**)
- Add irpass::eliminate_immutable_local_vars() test cases for TensorType (7043) (by **Zhanlue Yang**)
- Fix gui docstring (7003) (by **Zhao Liang**)
- Support dynamic indexing in spirv (6990) (by **Yi Xu**)
- Support dynamic indexing in metal (6985) (by **Yi Xu**)
- Support LU sparse solver on CUDA backend (6967) (by **pengyu**)
- Fix struct type problem (6949) (by **Zhao Liang**)
- Add warning message when converting dynamic snode to numpy (6853) (by **Zhao Liang**)
- Deprecate sourceinspect dependency (6894) (by **Zhao Liang**)
- Warn users if ndarray size is out of int32 boundary (6846) (by **Yi Xu**)
- Remove the real_matrix switch (6885) (by **Yi Xu**)
- Enable real_matrix and real_matrix_scalarize by default (6801) (by **Zhanlue Yang**)
- Raise an error for the semantic change of transpose() (6813) (by **Yi Xu**)
- Add bool type in python as an alias to i32 (6742) (by **daylily**)
- Add deprecation warning for the removal of the packed switch (6753) (by **Yi Xu**)
- **Metal backend**
- Raise deprecate warning and error when using sparse snodes on metal (6739) (by **Lin Jiang**)
- **Miscellaneous**
- Strictly check ndim with external array (7126) (by **Haidong Lan**)
- Refactored flattend_values() to avoid potential conflicts in flattened statements (6749) (by **Zhanlue Yang**)

Full changelog:
- [Doc] Update tutorial.md (7176) (by **Zhao Liang**)
- [aot] (cherry-pick) Removed unused archs in C-API (7167), FindTaichi CMake module to help outside project integration (7168) (7177) (by **PENGUINLIONG**)
- [docs] Create windows_debug.md (7164) (by **Bob Cao**)
- [Doc] Update math_module.md (7175) (by **Zhao Liang**)
- [Doc] Update debugging.md (7173) (by **Zhao Liang**)
- [Doc] Fix C++ tutorial does not display on doc site (7174) (by **Zhao Liang**)
- [doc] Fix spelling of "paticle_field" (7024) (by **Xiang (Kevin) Li**)
- [doc] Update accelerate_python.md to use ti.max (7161) (by **Tao Jin**)
- [aot] Fixed ti_get_last_error signature (7165) (by **PENGUINLIONG**)
- [example] Update quaternion arithmetics in fractal_3d_ggui (7139) (by **Zhao Liang**)
- [doc] Add doc ndarray (7157) (by **Olinaaaloompa**)
- [doc] Update field.md (Fields advanced) (6867) (by **Gabriel Vainer**)
- [ci] Use make_changelog.py to generate the full changelog (7152) (by **Lin Jiang**)
- [aot] Introduce new AOT deployment tutorial (7144) (by **PENGUINLIONG**)
- [Doc] Update doc regarding dynamic index (7148) (by **Yi Xu**)
- [Misc] Strictly check ndim with external array (7126) (by **Haidong Lan**)
- [ci] Run test when pushing to rc branches (7146) (by **Lin Jiang**)
- [ci] Disable backward_cpp on macOS (7145) (by **Proton**)
- [gui] Fix scene line renderable (7131) (by **Bob Cao**)
- [Lang] Raise errors when using the packed switch (7125) (by **Yi Xu**)
- [cpu] Reuse VirtualMemoryAllocator for CPU ndarray memory allocation (7128) (by **Ailing**)
- [ci] Temporarily disable ad_external_array on Metal (7136) (by **Bob Cao**)
- [Error] Raise errors when using metal sparse (7113) (by **Lin Jiang**)
- [misc] Cherry-pick 7072 into rc-v1.4.0 (7135) (by **Ailing**)
- [aot] Rename device capability atomic_i64 to atomic_int64 for consistency (7095) (by **PENGUINLIONG**)
- [Lang] Fix cannot use taichi in REPL (7114) (by **Zhao Liang**)
- [Bug] Fix num_splits in parallel_struct_for (7121) (by **Yi Xu**)
- [Doc] Move glossary to top level (7118) (by **Zhao Liang**)
- [Aot] Deprecate element shape and field dim for AOT symbolic args (7100) (by **Haidong Lan**)
- [Lang] Remove deprecated ti.Matrix.rotation2d() (7098) (by **Yi Xu**)
- [doc] Modified some errors in the function examples (7094) (by **welann**)
- [ci] More Windows git hacks (7102) (by **Proton**)
- [Lang] Remove filename kwarg in aot Module save() (7085) (by **Ailing**)
- [Lang] Remove sourceinspect deprecation warning message (7081) (by **Zhao Liang**)
- [example] Remove gui warning message (7090) (by **Zhao Liang**)
- [Bug] Fix ret_type and cast_type of UnaryOpStmt in Scalarize (7082) (by **Yi Xu**)
- [doc] Update ndarray deprecation warning to 1.5.0 (7083) (by **Haidong Lan**)
- [example] Update gallery images (7053) (by **Zhao Liang**)
- [Doc] Update type.md (7038) (by **Zhao Liang**)
- [Doc] Fix docstring (7065) (by **Zhao Liang**)
- [Lang] Make slicing a single row/column of a matrix return a vector (7068) (by **Yi Xu**)
- [ci] Workaround windows checkout 'Needed a single revision' issue (7078) (by **Proton**)
- [lang] Make sure ndarrays created in python frontend are initialized as zero (7060) (by **Ailing**)
- [Lang] Deprecate the dynamic_index switch (7071) (by **Yi Xu**)
- [misc] Update python package metadata (7063) (by **Proton**)
- [bug] Fixed compilation error caused by 7047 (7069) (by **PGZXB**)
- [opt] Automatically identify allocas to scalarize (7055) (by **Yi Xu**)
- [refactor] Remove ir parameter of KernelCodeGen::KernelCodeGen(Kernel *kernel, IRNode *ir) (7046) (by **PGZXB**)
- [refactor] Remove unnecessary IRNode::kernel (7047) (by **PGZXB**)
- [refactor] Remove dependencies on Program::current_ast_builder() in C++ side (7044) (by **PGZXB**)
- [ci] Version sanity check before publishing (7062) (by **Proton**)
- [ci] Make changelog generation working again (7058) (by **Proton**)
- [rhi] Update CommandList dispatch API (7052) (by **Bob Cao**)
- [aot] C-API versioning (7050) (by **PENGUINLIONG**)
- [refactor] Remove offloaded parameter of Program::compile() (7045) (by **PGZXB**)
- [lang] Migrate TensorType expansion for subscription indices from Python to Frontend IR (6942) (by **Zhanlue Yang**)
- [opt] Add ExtractPointers pass for dynamic index (7051) (by **Yi Xu**)
- [Lang] Add irpass::eliminate_immutable_local_vars() test cases for TensorType (7043) (by **Zhanlue Yang**)
- [Lang] Fix gui docstring (7003) (by **Zhao Liang**)
- [rhi] Update compute CommandList APIs (except dispatch) (7037) (by **Bob Cao**)
- [ir] Let GetElementExpression&Statement support index list (7049) (by **Lin Jiang**)
- [aot] C-API opengl runtime interop (7042) (by **PENGUINLIONG**)
- [ci] Pin pre-commit python version to 3.10 (7041) (by **Proton**)
- [opengl] Enable more gles tests in CI (7031) (by **Ailing**)
- [ci] Tuning headless demo VRAM usage (7039) (by **Proton**)
- [Build] Deprecate export_core (7028) (by **Zhanlue Yang**)
- [GUI] Support colored texts (7036) (by **Dunfan Lu**)
- [aot] Revert "C-API opengl runtime interop (7014)" (7032) (by **Proton**)
- [ci] Update pre-commit app versions (7025) (by **Proton**)
- [Doc] Remove packed mode in doc (7030) (by **Zhao Liang**)
- Revert "[opengl] Enable more gles tests in CI" (7029) (by **Ailing**)
- [build] Remove libexport_core.so dependency for Android App CI (6997) (by **Zhanlue Yang**)
- [opengl] Enable more gles tests in CI (7010) (by **Ailing**)
- [aot] C-API opengl runtime interop (7014) (by **damnkk**)
- [misc] Add macro to control amdgpu-related header file (7021) (by **Zeyu Li**)
- [bug] Fix device memory allocation for numpy array on CUDA backend (7008) (by **Zhanlue Yang**)
- [ci] Try enabling MSVC and check build times (6905) (by **Bob Cao**)
- [gfx] Update Device API: Splitting ResourceBinder into seperate Shade… (7020) (by **Proton**)
- [gfx] Revert "Update Device API: Splitting ResourceBinder into sepera… (7019) (by **Proton**)
- [amdgpu] Update amdgpu device to new API (7018) (by **Bob Cao**)
- [perf] Fix fill ndarray size problem. (6992) (by **Haidong Lan**)
- [cuda] Fix LLVM15 rsqrt perf regression (7012) (by **Haidong Lan**)
- [gfx] Update Device API: Splitting ResourceBinder into seperate ShaderResourceSet & RasterResources (6954) (by **Bob Cao**)
- [opt] Add ImmediateIRModifier to provide amortized constant-time replace_usages_with() (7001) (by **Yi Xu**)
- [amdgpu] Part0 add render hardware interface (6464) (by **Zeyu Li**)
- [Error] Do not show warning when the offline cache path does not exist (7005) (by **PGZXB**)
- [Lang] [spirv] Support dynamic indexing in spirv (6990) (by **Yi Xu**)
- [misc] Remove unnecessary CompileConfig::lazy_compilation (7009) (by **PGZXB**)
- [ci] Add C++ tests on AMDGPU RHI (6597) (by **Zeyu Li**)
- [ci] Update taichi-release-tests branch (disable QuanTaichi GOL) (7011) (by **Proton**)
- [amdgpu] Part3 update runtime module (6486) (by **Zeyu Li**)
- [opengl] Fix tests running both on opengl and vulkan (7006) (by **Ailing**)
- [ir] Record the return types to a StructType (6995) (by **Lin Jiang**)
- [lang] Get the CHI-IR struct type in python (6994) (by **Lin Jiang**)
- [ir] Change type maps to unordered maps and add mutexes (7000) (by **Lin Jiang**)
- [ir] Add struct type to CHI-IR (6982) (by **Lin Jiang**)
- [misc] Add repography activity stats (6991) (by **Proton**)
- [aot] Enable validation layers for C-API tests (6893) (by **Zhanlue Yang**)
- [opengl] Add ti.gles arch and enable tests (6988) (by **Ailing**)
- [Lang] [metal] Support dynamic indexing in metal (6985) (by **Yi Xu**)
- [opengl] Reset opengl context when taichi program resets (6987) (by **Ailing**)
- [Lang] Support LU sparse solver on CUDA backend (6967) (by **pengyu**)
- [misc] Keeping up with new python-wheel implementation (6986) (by **Proton**)
- [aot] Recover AOT CI script (6970) (by **PENGUINLIONG**)
- [lang] Migrate TensorType expansion for svd from Python code to Frontend IR (6972) (by **Zhanlue Yang**)
- [misc] Adding XCode project support (6976) (by **Bob Cao**)
- [bug] Fix taichi_ngp starting from ti example (6973) (by **Ailing**)
- [ci] Revert "Fix missing c_api.so in linux nightly" (6974) (by **Ailing**)
- [ci] Build: auto install vulkan on Linux (6969) (by **Proton**)
- [ci] Auto setup miniforge3 env when build (6966) (by **Proton**)
- [Lang] Fix struct type problem (6949) (by **Zhao Liang**)
- [aot] C-API breaking changes! (6955) (by **PENGUINLIONG**)
- [lang] Fix scalarization for PrintStmt (6945) (by **Zhanlue Yang**)
- [bug] Allow StructType as type hint to ti.func (6964) (by **Yi Xu**)
- [refactor] Remove legacy code for dynamic index (6961) (by **Yi Xu**)
- [aot] Fix rwtexture with template_args (6960) (by **Ailing**)
- [ci] Fix missing c_api.so in linux nightly (6962) (by **Ailing**)
- [lang] Migrate TensorType expansion for SNode indices from Python to Frontend IR (6934) (by **Zhanlue Yang**)
- [doc] New FAQ added (6963) (by **Olinaaaloompa**)
- [ci] Sync CI cache script & workflow (6959) (by **Proton**)
- [ci] Update release test branch, reduce running time (6944) (by **Proton**)
- [ci] Remove redundant tests (6947) (by **Proton**)
- [bug] Fix recompilation of filling a matrix field with the same matrix (6951) (by **Yi Xu**)
- [aot] Fixed C-API behavior tests (6939) (by **PENGUINLIONG**)
- [refactor] Remove _PyScopeMatrixImpl (6943) (by **Yi Xu**)
- [aot] Fix validation warning: OpImageFetch should operate on OpImage instead of OpSampledImage (6925) (by **Zhanlue Yang**)
- [CLI] Add "ti cache clean" command to clean the offline cache files manually (6937) (by **PGZXB**)
- [Doc] Minor doc update (6952) (by **Zhao Liang**)
- [ci] Fix forgotten build script paths (6941) (by **Proton**)
- [opt] Add pass eliminate_immutable_local_vars (6926) (by **Yi Xu**)
- [ci] Fix pre-commit errors (6940) (by **Proton**)
- [doc] Editorial updates (6935) (by **Olinaaaloompa**)
- [ci] Workflow Rewrite: Building on Linux (6848) (by **Proton**)
- [refactor] Remove _IntermediateMatrix and _MatrixFieldElement (6932) (by **Yi Xu**)
- [aot] C_API behavior test (6904) (by **damnkk**)
- [lang] Fix matrix type inference and remove _MatrixEntriesInitializer (6928) (by **Yi Xu**)
- [lang] Reorder sparse matrix before solving (6886) (by **pengyu**)
- [Doc] Glossary (6101) (by **Olinaaaloompa**)
- [aot] Refactor C-API error tests (6890) (by **Zhanlue Yang**)
- [doc] Update layout.md (Fields) (6868) (by **Gabriel Vainer**)
- [Doc] Update dac (6875) (by **Gabriel Vainer**)
- [lang] Support 'len' with Matrix-typed operands (6923) (by **Zhanlue Yang**)
- [doc] Update sparse.md (6908) (by **Gabriel Vainer**)
- [doc] Update performance.md (6911) (by **Gabriel Vainer**)
- [doc] Update debugging.md (6909) (by **Gabriel Vainer**)
- [doc] Update profiler.md (6910) (by **Gabriel Vainer**)
- [bug] Add GetElementExpression to offline cache key (6918) (by **PGZXB**)
- [ci] Reenable AMDGPU CI, disable OpenGL tests in AMDGPU task (6887) (by **Proton**)
- [lang] Fix accidental changes during matrix refactor (6914) (by **Yi Xu**)
- [example] Add circle-packing example (6870) (by **Zhao Liang**)
- [Doc] Update faq.md (6921) (by **Zhao Liang**)
- [misc] Show suggestion when locking metadata.lock fails (6919) (by **PGZXB**)
- [doc] New FAQs (6055) (by **Olinaaaloompa**)
- [example] Add poission disk sampling example (6852) (by **Zhao Liang**)
- [vulkan] Improve Vulkan RHI impl with lower overhead internal implementations (6912) (by **Bob Cao**)
- [doc] Link to LLVM 15 built for Visual Studio 2022 (6916) (by **PENGUINLIONG**)
- [lang] Fix issue of IfExpr with TensorTyped operands (6897) (by **Zhanlue Yang**)
- [doc] Update hello_world.md (6889) (by **Gabriel Vainer**)
- [IR] Allow a maximum of 12 SNode indices (6901) (by **Dunfan Lu**)
- [doc] Update odop.md (6874) (by **Gabriel Vainer**)
- [doc] Update external.md (6869) (by **Gabriel Vainer**)
- [Doc] Update dataclass.md (6876) (by **Gabriel Vainer**)
- [doc] Update cloth_simulation.md (6898) (by **Vissidarte-Herman**)
- [example] Update marching squares example (6851) (by **Zhao Liang**)
- [Lang] Add warning message when converting dynamic snode to numpy (6853) (by **Zhao Liang**)
- [Lang] Deprecate sourceinspect dependency (6894) (by **Zhao Liang**)
- [aot] Added C-API behavior tests (6871) (by **damnkk**)
- [aot] Gather satellite repo URLs (6860) (by **PENGUINLIONG**)
- [refactor] Remove _TiScopeMatrixImpl (6892) (by **Yi Xu**)
- [ci] Python test minor fixes (6891) (by **Proton**)
- [ir] Add ir_traits namespace to use less dynamic casts & Run CFG only ever once (6812) (by **Bob Cao**)
- [Lang] Warn users if ndarray size is out of int32 boundary (6846) (by **Yi Xu**)
- [build] Enable strip for libtaichi_c_api.so with Release Build (6845) (by **Zhanlue Yang**)
- [Lang] Remove the real_matrix switch (6885) (by **Yi Xu**)
- [build] Turn on function level linking for taichi_c_api (6840) (by **Zhanlue Yang**)
- [test] Remove tests with real_matrix=True and real_matrix_scalarize=True (6873) (by **Yi Xu**)
- [misc] Revert back to master after 6843 merged (6883) (by **Bob Cao**)
- [vulkan] Cleanup spdlog related logging from Vulkan RHI (6843) (by **Bob Cao**)
- [ci] Temporarily disable AMDGPU CI (6872) (by **Proton**)
- [Lang] Enable real_matrix and real_matrix_scalarize by default (6801) (by **Zhanlue Yang**)
- [bug] MatrixType bug fix: Fix error with static-grouped-ndrange (6839) (by **Zhanlue Yang**)
- [example] Fix jacobian example (6849) (by **Mingrui Zhang**)
- [bug] Fix flaky mass_spring_game_ggui.py on Mac M1 by setting up default values for VulkanCapabilities (6850) (by **Zhanlue Yang**)
- [example] Solve implicit fem using sparsee solver (6827) (by **pengyu**)
- [build] Migrate cmake targets from OBJECT to STATIC for libtaichi_c_api.so (6831) (by **Zhanlue Yang**)
- [Bug] Fix getting 64-bit data from ndarray in Python scope (6836) (by **Yi Xu**)
- [test] Avoid constant folding in overflow tests (6835) (by **Ailing**)
- [aot] Added C-API behavior test (6837) (by **damnkk**)
- [bug] Matrix refactor bug fix: Fix cross scope matrix operations (6822) (by **Zhanlue Yang**)
- [build] Refactored and removed RuntimeCUDA and RuntimeCUDAInjector (6830) (by **Zhanlue Yang**)
- [bug] Matrix refactor bug fix: Fix logical binary operations with TensorTyped operands (6817) (by **Zhanlue Yang**)
- [example] Add order-independent transparency example (6829) (by **Lin Jiang**)
- [opt] Re-enable constant folding when debug=True (6824) (by **Ailing**)
- [Bug] Avoid overwriting global tmp with dynamic_index=True (6820) (by **Yi Xu**)
- [bug] Matrix refactor bug fix: Fix restrictions on BinaryOp/TernaryOp operands' broadcasting (6805) (by **Zhanlue Yang**)
- [aot] C-API Device capability improvements (6773) (by **PENGUINLIONG**)
- [misc] Headers dependency cleanup from RHI (6699) (by **Bob Cao**)
- [ci] Revert "Temporarily disable desktop headless tests (6811)" (6816) (by **Proton**)
- [misc] Bump version to v1.4.0 (6804) (by **PENGUINLIONG**)
- [ci] Add AMDGPU relected ci (6743) (by **Zeyu Li**)
- [test] Remove unnecessary duplicated python runtime test runs (6808) (by **Ailing**)
- [Lang] Raise an error for the semantic change of transpose() (6813) (by **Yi Xu**)
- [refactor] Remove unnecessary checks in program (6802) (by **Ailing**)
- [vulkan] Support texture type args in aot add_kernel (6796) (by **Ailing**)
- [ci] Temporarily disable desktop headless tests (6811) (by **Proton**)
- [bug] Fix name collision in ti.dataclass (6737) (by **Yi Xu**)
- [bug] MatrixType bug fix: Add additional restrictions for unpacking a Matrix (6795) (by **Zhanlue Yang**)
- [doc] Update docstring for grad replaced (6800) (by **Mingrui Zhang**)
- [build] Add MSBuild option to setup.py (6724) (by **Bob Cao**)
- [Lang] [type] Add bool type in python as an alias to i32 (6742) (by **daylily**)
- [lang] Use less gpu memory when building sparse matrix (6781) (by **pengyu**)
- [example] Add cuda options for sparse matrix examples (6785) (by **pengyu**)
- [misc] Remove usage of deprecated num_channels/channel_format type hint in rw_texture in codebase (6791) (by **Ailing**)
- [bug] MatrixType bug fix: Fix error with BLS (6664) (by **Zhanlue Yang**)
- [vulkan] Support rw_texture in aot add_kernel (6789) (by **Ailing**)
- [bug] MatrixType bug fix: Fix error with quant (6776) (by **Yi Xu**)
- [bug] MatrixType bug fix: Fix test_ad_gdar_diffmpm (6786) (by **Yi Xu**)
- [vulkan] Deprecate num_channels and channel_format args in rw_texture type annotation (6782) (by **Ailing**)
- [misc] Remove the default potential_bug label on bug report issues (6784) (by **Ailing**)
- [bug] MatrixType bug fix: Fix error with texture (6775) (by **Yi Xu**)
- [vulkan] Make sure kernel recompiles when texture dtype changes (6774) (by **Ailing**)
- [aot] Clean up exported symbols for libtaichi_c_api.so (6140) (by **Zhanlue Yang**)
- [Misc] Refactored flattend_values() to avoid potential conflicts in flattened statements (6749) (by **Zhanlue Yang**)
- [aot] Warn the user about out-of-range access in C++ wrapper (6492) (by **PENGUINLIONG**)
- [build] Initial distributed compiling support (6762) (by **Proton**)
- [aot] Revert C-API Device capability improvements (6772) (by **PENGUINLIONG**)
- [aot] C-API Device capability improvements (6702) (by **PENGUINLIONG**)
- [aot] C-API to get available archs (6766) (by **PENGUINLIONG**)
- [doc] Update sparse matrix document (6719) (by **pengyu**)
- [autodiff] Separate non-linear operators to an individual class (6700) (by **Mingrui Zhang**)
- [bug] Fix dereferencing nullptr (6763) (by **Yi Xu**)
- [Doc] Update the documentation about Dynamic SNode (6752) (by **Lin Jiang**)
- [doc] Update dev install about clang version (6759) (by **Ailing**)
- [build] Improve TI_WITH_CUDA guards for CUDA related test cases (6698) (by **Zhanlue Yang**)
- [Lang] Add deprecation warning for the removal of the packed switch (6753) (by **Yi Xu**)
- [lang] Improve sparse matrix building on GPU (6748) (by **pengyu**)
- [aot] JSON serde (6754) (by **PENGUINLIONG**)
- [bug] MatrixType bug fix: Fix error with to_numpy() and from_numpy() (6726) (by **Zhanlue Yang**)
- [Doc] Stop mentioning packed mode (6755) (by **Yi Xu**)
- [lang] Get the length of dynamic SNode by x.length() (6750) (by **Lin Jiang**)
- [llvm] Support nested struct with matrix return value on real function (6734) (by **Lin Jiang**)
- [Metal] [error] Raise deprecate warning and error when using sparse snodes on metal (6739) (by **Lin Jiang**)
- [build] Integrate backward_cpp to test targets for enabling C++ stack trace (6697) (by **Zhanlue Yang**)
- [aot] Load AOT module from memory (6692) (6714) (by **PENGUINLIONG**)
- [ci] Add dockerfile.ubuntu-18.04.amdgpu (6736) (by **Zeyu Li**)
- [doc] Update LLVM10 -> LLVM15 in installation guide (6747) (by **Zhanlue Yang**)
- [misc] Fix warnings of taichi examples (6740) (by **PGZXB**)
- [example] Ti-example: instant ngp renderer (6673) (by **Youtian Lin**)
- [build] Use a separate prebuilt llvm15 binary for manylinux environment (6732) (by **Ailing**)

1.3

Taichi now introduces a powerful feature for developers - Argument Packs. This new functionality enables efficient caching of unchanged parameters between multiple kernel calls, which not only provides convenience when launching a kernel, but also boosts the performance.

Key Advantages
- Argument Pack: User-defined data types that encapsulate multiple parameters into a single, manageable unit.
- Buffering Capability: Store and reuse parameters that remain constant across kernel calls, reducing the overhead of repeated parameter passing.
- Device-level Caching: Taichi optimizes performance by caching argpacks directly on the device.

Usage Example

import taichi as ti
ti.init()

Defining a custom argument type using "ti.types.argpack"
view_params_tmpl = ti.types.argpack(view_mtx=ti.math.mat4, proj_mtx=ti.math.mat4, far=ti.f32)

Declaration of a Taichi kernel leveraging Argument Packs
ti.kernel
def p(view_params: view_params_tmpl) -> ti.f32:
return view_params.far

Instantiation of the argument pack
view_params = view_params_tmpl(
view_mtx=ti.math.mat4(
[[1, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, 1]]),
proj_mtx=ti.math.mat4(
[[1, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, 1]]),
far=1)

Executing the kernel with the Argument Pack

1.3.0

Deprecation Notice
- Using sparse data structures on the Metal backend is now deprecated. The support for Dynamic SNode has been removed in v1.3.0, and the support for Pointer/Bitmasked SNode will be removed in v1.4.0.
- The `packed` switch in `ti.init()` is now deprecated and will be removed in v1.4.0. See the feature introduction below for details.
- `ti.Matrix.rotation2d()` is now deprecated and will be removed in v1.4.0. Use `ti.math.rotation2d()` instead.
- To clearly distinguish vectors from matrices, `transpose()` on a vector is no longer allowed. If you want something like `a b.transpose()`, write `a.outer_product(b)` instead.
- Ndarray: The arguments of ndarray type annotation `element_dim`, `element_shape` and `field_dim` will be deprecated in v1.4.0. The `field_dim` is renamed to `ndim` to make it more intuitive. `element_dim` and `element_shape` will be replaced by passing a matrix type into `dtype` argument. For example, the `ti.types.ndarray(element_dim=2, element_shape=(3,3))` will be replaced by `ti.types.ndarray(dtype=ti.matrix(3,3))`.

New features

Dynamic SNode

To support variable-length fields, Taichi provides dynamic SNodes.
You can now use the dynamic SNode on fields of different data types, even struct fields and matrix fields.
You can use `x[i].append(...)` to append an element, use `x[i].length()` to get the length, and use `x[i].deactivate()` to clear the list as shown in the following code snippet.

python
pair = ti.types.struct(a=ti.i16, b=ti.i64)
pair_field = pair.field()

block = ti.root.dense(ti.i, 4)
pixel = block.dynamic(ti.j, 100, chunk_size=4)
pixel.place(pair_field)
l = ti.field(ti.i32)
ti.root.dense(ti.i, 5).place(l)

ti.kernel
def dynamic_pair():
for i in range(4):
pair_field[i].deactivate()
for j in range(i * i):
pair_field[i].append(pair(i, j + 1))
pair_field = [[],
[(1, 1)],
[(2, 1), (2, 2), (2, 3), (2, 4)],
[(3, 1), (3, 2), ... , (3, 8), (3, 9)]]
l[i] = pair_field[i].length() l = [0, 1, 4, 9]


Packed Mode

Packed mode was introduced in [v0.8.0](https://github.com/taichi-dev/taichi/releases/tag/v0.8.0) to allow users to trade runtime performance for memory usage. In v1.3.0, after the elimination of runtime overhead in common cases, packed mode has become the default mode. There's no longer any automatic padding behavior behind the scenes, so users can use fields and SNodes without surprise.

Sparse Matrix

We introduce the experimental sparse matrix and sparse solver on the CUDA backend. The API of using is the same as CPU backend. Currently, only the `f32` data type and LLT linear solver are supported on CUDA. You can only use `ti.ndarray` to compute [SpMV](https://en.wikipedia.org/wiki/Sparse_matrix%E2%80%93vector_multiplication) and linear solver operation. Float64 data type and other linear solvers are under implementation.

Improvements

Python Frontend

- Matrix slicing now supports augmented assign (e.g. +=) besides assign.

Taichi Examples

1. Our user https://github.com/Linyou contributed an excellent example on instant ngp renderer [PR #6673](https://github.com/taichi-dev/taichi/pull/6673). Run `taichi_ngp` to check it out!

[Developers only] LLVM15 upgrade

Starting from v1.3.0, Taichi has upgraded its LLVM dependency to version 15.0.0. If you're interested in contributing or simply building Taichi from source, please follow our [installation doc for developers](https://docs.taichi-lang.org/docs/master/dev_install).
Note this change has no impact on Taichi users.

Highlights
- **Documentation**
- Update the documentation about Dynamic SNode (6752) (by **Lin Jiang**)
- Stop mentioning packed mode (6755) (by **Yi Xu**)
- **Language and syntax**
- Add deprecation warning for the removal of the packed switch (6753) (by **Yi Xu**)
- **Metal backend**
- Raise deprecate warning and error when using sparse snodes on metal (6739) (by **Lin Jiang**)

Full changelog
- [aot] Revert C-API Device capability improvements (6772) (by **PENGUINLIONG**)
- [aot] C-API Device capability improvements (6702) (by **PENGUINLIONG**)
- [aot] C-API to get available archs (6766) (by **PENGUINLIONG**)
- [doc] Update sparse matrix document (6719) (by **pengyu**)
- [autodiff] Separate non-linear operators to an individual class (6700) (by **Mingrui Zhang**)
- [bug] Fix dereferencing nullptr (6763) (by **Yi Xu**)
- [Doc] Update the documentation about Dynamic SNode (6752) (by **Lin Jiang**)
- [doc] Update dev install about clang version (6759) (by **Ailing**)
- [build] Improve TI_WITH_CUDA guards for CUDA related test cases (6698) (by **Zhanlue Yang**)
- [Lang] Add deprecation warning for the removal of the packed switch (6753) (by **Yi Xu**)
- [lang] Improve sparse matrix building on GPU (6748) (by **pengyu**)
- [aot] JSON serde (6754) (by **PENGUINLIONG**)
- [bug] MatrixType bug fix: Fix error with to_numpy() and from_numpy() (6726) (by **Zhanlue Yang**)
- [Doc] Stop mentioning packed mode (6755) (by **Yi Xu**)
- [lang] Get the length of dynamic SNode by x.length() (6750) (by **Lin Jiang**)
- [llvm] Support nested struct with matrix return value on real function (6734) (by **Lin Jiang**)
- [Metal] [error] Raise deprecate warning and error when using sparse snodes on metal (6739) (by **Lin Jiang**)
- [build] Integrate backward_cpp to test targets for enabling C++ stack trace (6697) (by **Zhanlue Yang**)
- [aot] Load AOT module from memory (6692) (6714) (by **PENGUINLIONG**)
- [ci] Add dockerfile.ubuntu-18.04.amdgpu (6736) (by **Zeyu Li**)
- [doc] Update LLVM10 -> LLVM15 in installation guide (6747) (by **Zhanlue Yang**)
- [misc] Fix warnings of taichi examples (6740) (by **PGZXB**)
- [example] Ti-example: instant ngp renderer (6673) (by **Youtian Lin**)
- [build] Use a separate prebuilt llvm15 binary for manylinux environment (6732) (by **Ailing**)

1.2.2

Molten-vk version is downgraded to v1.1.10 to fix a few GGUI issues.

Full changelog:
- [build] Downgrade molten-vk version to v1.1.10 (6564) (by **Zhanlue Yang**)

1.2.1

This is a bug fix release for v1.2.0.

Full changelog:
- [mesh] Fix MeshTaichi warnings in CUDA backend (6369) (by **Chang Yu**)
- [Bug] Fix cache_loop_invariant_global_vars pass (6462) (by **Lin Jiang**)

1.2

Support for Multiple Return Values in Taichi Kernel:
In this update, we've introduced the capability to return multiple values from a Taichi kernel. This can be achieved by specifying a tuple as the return type. You can directly use `(ti.f32, s0)` as the type hint or write the type hint in Python manner like `typing.Tuple[ti.f32, s0]` or for Python 3.9 and above, `tuple[ti.f32, s0]` . The following example illustrates this new feature:


s0 = ti.types.struct(a=ti.math.vec3, b=ti.i16)

ti.real_func
def foo() -> (ti.f32, s0):
return 1, s0(a=ti.math.vec3([100, 0.5, 3]), b=1)

ti.kernel
def bar() -> (ti.f32, s0):
return foo()

ret1, ret2 = bar()

Page 4 of 22

© 2024 Safety CLI Cybersecurity Inc. All Rights Reserved.