tensorstudio 1.7.0__tar.gz → 1.8.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (183) hide show
  1. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/CHANGELOG.md +19 -0
  2. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/CMakeLists.txt +1 -1
  3. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/PKG-INFO +25 -15
  4. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/README.md +24 -14
  5. tensorstudio-1.8.0/benchmarks/results.md +347 -0
  6. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/benchmarks/results_matmul.md +13 -13
  7. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/docs/autograd/coverage.md +50 -5
  8. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/docs/autograd/gradient-notes.md +28 -0
  9. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/docs/autograd/overview.md +45 -9
  10. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/docs/core/api-reference.md +7 -1
  11. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/docs/core/tensors.md +22 -3
  12. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/docs/hardware/cpu-backend.md +1 -1
  13. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/docs/index.md +4 -1
  14. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/docs/interchange/onnx.md +1 -1
  15. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/docs/interchange/serialization.md +1 -1
  16. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/docs/nn/training.md +1 -1
  17. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/docs/release/publishing.md +4 -4
  18. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/docs/release/versioning.md +2 -2
  19. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/docs/roadmap/milestones.md +4 -0
  20. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/docs/roadmap/roadmap.md +17 -9
  21. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/include/tensorstudio/autograd.hpp +4 -1
  22. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/include/tensorstudio/tensor.hpp +8 -0
  23. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/include/tensorstudio/version.hpp +1 -1
  24. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/pyproject.toml +1 -1
  25. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/python/tensorstudio/_C.pyi +12 -2
  26. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/python/tensorstudio/_version.py +1 -1
  27. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/python/tensorstudio/autograd.py +2 -2
  28. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/src/bindings/bind_autograd.cpp +7 -4
  29. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/src/bindings/bind_tensor.cpp +25 -4
  30. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/src/core/autograd.cpp +38 -4
  31. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/src/core/tensor.cpp +60 -0
  32. tensorstudio-1.8.0/tests/test_autograd_hardening.py +139 -0
  33. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/tests/test_import.py +1 -1
  34. tensorstudio-1.7.0/benchmarks/results.md +0 -347
  35. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/.gitattributes +0 -0
  36. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/.github/workflows/ci.yml +0 -0
  37. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/.github/workflows/publish-testpypi.yml +0 -0
  38. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/.github/workflows/publish.yml +0 -0
  39. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/.github/workflows/wheels.yml +0 -0
  40. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/.gitignore +0 -0
  41. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/.pre-commit-config.yaml +0 -0
  42. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/CONTRIBUTING.md +0 -0
  43. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/LICENSE +0 -0
  44. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/SECURITY.md +0 -0
  45. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/benchmark_all.py +0 -0
  46. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/benchmarks/__init__.py +0 -0
  47. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/benchmarks/bench_activations.py +0 -0
  48. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/benchmarks/bench_autograd.py +0 -0
  49. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/benchmarks/bench_conv2d.py +0 -0
  50. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/benchmarks/bench_elementwise.py +0 -0
  51. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/benchmarks/bench_matmul.py +0 -0
  52. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/benchmarks/bench_pooling.py +0 -0
  53. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/benchmarks/bench_reductions.py +0 -0
  54. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/benchmarks/bench_tensor_ops.py +0 -0
  55. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/benchmarks/bench_training_loop.py +0 -0
  56. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/benchmarks/benchmark_report.py +0 -0
  57. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/benchmarks/results_conv2d.md +0 -0
  58. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/benchmarks/results_pooling.md +0 -0
  59. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/benchmarks/results_reductions.md +0 -0
  60. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/benchmarks/results_tensor_ops.md +0 -0
  61. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/benchmarks/thresholds.json +0 -0
  62. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/docs/core/broadcasting.md +0 -0
  63. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/docs/core/math-and-statistics.md +0 -0
  64. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/docs/core/native-cpp-core.md +0 -0
  65. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/docs/data/dataloader-patterns.md +0 -0
  66. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/docs/data/datasets-and-dataloaders.md +0 -0
  67. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/docs/data/tensor-datasets.md +0 -0
  68. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/docs/development/contributing.md +0 -0
  69. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/docs/development/cpp-first.md +0 -0
  70. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/docs/getting-started/installation.md +0 -0
  71. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/docs/getting-started/quickstart.md +0 -0
  72. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/docs/getting-started/source-build.md +0 -0
  73. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/docs/hardware/linux.md +0 -0
  74. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/docs/hardware/macos.md +0 -0
  75. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/docs/hardware/windows.md +0 -0
  76. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/docs/interchange/model-formats.md +0 -0
  77. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/docs/interchange/numpy-interop.md +0 -0
  78. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/docs/interchange/trusted-serialization.md +0 -0
  79. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/docs/nn/modules.md +0 -0
  80. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/docs/nn/optimizers.md +0 -0
  81. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/docs/nn/overview.md +0 -0
  82. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/docs/performance/benchmarks.md +0 -0
  83. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/docs/performance/optimization.md +0 -0
  84. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/docs/performance/profiling.md +0 -0
  85. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/docs/project/checkpoints.md +0 -0
  86. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/docs/project/project-layout.md +0 -0
  87. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/docs/project/workflows.md +0 -0
  88. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/docs/release/checklist.md +0 -0
  89. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/docs/roadmap/priorities.md +0 -0
  90. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/docs/vision/dataset-creation.md +0 -0
  91. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/docs/vision/overview.md +0 -0
  92. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/examples/basic_tensor_ops.py +0 -0
  93. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/examples/export_onnx.py +0 -0
  94. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/examples/image_folder_classification.py +0 -0
  95. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/examples/linear_regression.py +0 -0
  96. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/examples/project_training.py +0 -0
  97. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/examples/save_load_model.py +0 -0
  98. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/examples/tiny_mlp.py +0 -0
  99. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/examples/vision_classifier.py +0 -0
  100. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/include/tensorstudio/device.hpp +0 -0
  101. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/include/tensorstudio/dtype.hpp +0 -0
  102. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/include/tensorstudio/errors.hpp +0 -0
  103. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/include/tensorstudio/module.hpp +0 -0
  104. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/include/tensorstudio/ops.hpp +0 -0
  105. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/include/tensorstudio/optim.hpp +0 -0
  106. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/include/tensorstudio/perf.hpp +0 -0
  107. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/include/tensorstudio/random.hpp +0 -0
  108. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/include/tensorstudio/serialization.hpp +0 -0
  109. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/include/tensorstudio/shape.hpp +0 -0
  110. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/include/tensorstudio/storage.hpp +0 -0
  111. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/mkdocs.yml +0 -0
  112. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/python/tensorstudio/__init__.py +0 -0
  113. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/python/tensorstudio/data/__init__.py +0 -0
  114. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/python/tensorstudio/data/dataloader.py +0 -0
  115. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/python/tensorstudio/data/dataset.py +0 -0
  116. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/python/tensorstudio/dtypes.py +0 -0
  117. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/python/tensorstudio/errors.py +0 -0
  118. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/python/tensorstudio/grad_mode.py +0 -0
  119. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/python/tensorstudio/interchange/__init__.py +0 -0
  120. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/python/tensorstudio/interchange/onnx.py +0 -0
  121. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/python/tensorstudio/math.py +0 -0
  122. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/python/tensorstudio/nn/__init__.py +0 -0
  123. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/python/tensorstudio/nn/functional.py +0 -0
  124. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/python/tensorstudio/nn/losses.py +0 -0
  125. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/python/tensorstudio/nn/modules.py +0 -0
  126. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/python/tensorstudio/ops.py +0 -0
  127. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/python/tensorstudio/optim/__init__.py +0 -0
  128. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/python/tensorstudio/optim/adam.py +0 -0
  129. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/python/tensorstudio/optim/adamw.py +0 -0
  130. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/python/tensorstudio/optim/lr_scheduler.py +0 -0
  131. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/python/tensorstudio/optim/sgd.py +0 -0
  132. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/python/tensorstudio/optim/utils.py +0 -0
  133. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/python/tensorstudio/performance.py +0 -0
  134. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/python/tensorstudio/project/__init__.py +0 -0
  135. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/python/tensorstudio/project/checkpoint.py +0 -0
  136. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/python/tensorstudio/project/config.py +0 -0
  137. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/python/tensorstudio/project/trainer.py +0 -0
  138. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/python/tensorstudio/py.typed +0 -0
  139. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/python/tensorstudio/serialization.py +0 -0
  140. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/python/tensorstudio/tensor.py +0 -0
  141. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/python/tensorstudio/typing.py +0 -0
  142. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/python/tensorstudio/vision/__init__.py +0 -0
  143. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/python/tensorstudio/vision/datasets.py +0 -0
  144. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/python/tensorstudio/vision/io.py +0 -0
  145. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/python/tensorstudio/vision/metrics.py +0 -0
  146. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/python/tensorstudio/vision/models.py +0 -0
  147. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/python/tensorstudio/vision/transforms.py +0 -0
  148. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/python/tensorstudio/vision/visualization.py +0 -0
  149. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/src/bindings/bind_nn.cpp +0 -0
  150. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/src/bindings/bind_ops.cpp +0 -0
  151. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/src/bindings/bind_optim.cpp +0 -0
  152. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/src/bindings/bindings.cpp +0 -0
  153. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/src/bindings/bindings.hpp +0 -0
  154. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/src/core/device.cpp +0 -0
  155. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/src/core/dtype.cpp +0 -0
  156. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/src/core/errors.cpp +0 -0
  157. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/src/core/module.cpp +0 -0
  158. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/src/core/ops.cpp +0 -0
  159. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/src/core/optim.cpp +0 -0
  160. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/src/core/perf.cpp +0 -0
  161. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/src/core/random.cpp +0 -0
  162. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/src/core/serialization.cpp +0 -0
  163. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/src/core/shape.cpp +0 -0
  164. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/src/core/storage.cpp +0 -0
  165. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/test_all.py +0 -0
  166. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/tests/test_autograd.py +0 -0
  167. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/tests/test_benchmark_report.py +0 -0
  168. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/tests/test_broadcasting.py +0 -0
  169. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/tests/test_core_math_expansion.py +0 -0
  170. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/tests/test_data.py +0 -0
  171. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/tests/test_errors.py +0 -0
  172. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/tests/test_indexing.py +0 -0
  173. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/tests/test_interchange.py +0 -0
  174. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/tests/test_nn.py +0 -0
  175. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/tests/test_numpy_interop.py +0 -0
  176. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/tests/test_ops.py +0 -0
  177. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/tests/test_optim.py +0 -0
  178. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/tests/test_performance.py +0 -0
  179. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/tests/test_project.py +0 -0
  180. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/tests/test_serialization.py +0 -0
  181. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/tests/test_tensor.py +0 -0
  182. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/tests/test_views.py +0 -0
  183. {tensorstudio-1.7.0 → tensorstudio-1.8.0}/tests/test_vision.py +0 -0
@@ -2,6 +2,25 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 1.8.0 - 2026-07-07
6
+
7
+ - Completed the ordered Autograd Coverage And Hardening roadmap section as one
8
+ release batch.
9
+ - Added `retain_graph` support to `Tensor.backward()` and
10
+ `tensorstudio.autograd.backward()`.
11
+ - Added graph lifecycle hardening: normal backward frees non-leaf graph history,
12
+ repeated backward through a freed graph raises a clear error, and retained
13
+ graphs clear intermediate gradients between backward passes.
14
+ - Added Tensor `is_leaf`, `clear_history()`, and `detach_()` controls for
15
+ explicit graph lifecycle management.
16
+ - Added guarded public in-place methods `zero_()`, `fill_()`, and `add_()`.
17
+ They reject gradient-tracked mutation while grad mode is enabled and work
18
+ inside `tensorstudio.no_grad()`.
19
+ - Expanded non-scalar backward and finite-difference gradient tests for stable
20
+ probability ops, statistics, norms, and batched matrix multiplication.
21
+ - Expanded autograd documentation with a coverage matrix, lifecycle notes, and
22
+ explicit higher-order-gradient limitations.
23
+
5
24
  ## 1.7.0 - 2026-07-07
6
25
 
7
26
  - Completed the ordered Core Math Expansion roadmap section as one release
@@ -1,6 +1,6 @@
1
1
  cmake_minimum_required(VERSION 3.18)
2
2
 
3
- project(tensorstudio VERSION 1.7.0 LANGUAGES CXX)
3
+ project(tensorstudio VERSION 1.8.0 LANGUAGES CXX)
4
4
 
5
5
  find_package(Python COMPONENTS Interpreter Development.Module REQUIRED)
6
6
  set(PYBIND11_FINDPYTHON ON)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: tensorstudio
3
- Version: 1.7.0
3
+ Version: 1.8.0
4
4
  Summary: TensorStudio is a compact C++ tensor and autograd engine with a Python API for learning, experimentation, and lightweight ML workloads.
5
5
  Keywords: tensor,autograd,machine-learning,cpp,pybind11
6
6
  Author: TensorStudio contributors
@@ -71,12 +71,13 @@ Description-Content-Type: text/markdown
71
71
  TensorStudio is a compact C++ tensor and autograd engine with a Python API for
72
72
  learning, experimentation, and lightweight ML workloads.
73
73
 
74
- TensorStudio `1.7.0` is a CPU-only stable API foundation with native C++
74
+ TensorStudio `1.8.0` is a CPU-only stable API foundation with native C++
75
75
  threading, storage reuse, SIMD-friendly typed kernels, and optional
76
76
  CBLAS/Accelerate matrix multiplication when available. It adds native stable
77
77
  softmax/logsumexp, batched matrix multiplication, statistical reductions,
78
- boolean reductions, and seeded random distributions. It is eager-only,
79
- intentionally compact, and not a replacement for mature ML frameworks.
78
+ boolean reductions, seeded random distributions, and a hardened eager autograd
79
+ lifecycle. It is eager-only, intentionally compact, and not a replacement for
80
+ mature ML frameworks.
80
81
 
81
82
  ## Install
82
83
 
@@ -241,11 +242,20 @@ loss.backward()
241
242
  print(x.grad.tolist())
242
243
  ```
243
244
 
245
+ Reuse a graph explicitly when needed:
246
+
247
+ ```python
248
+ loss = (x * x).sum()
249
+ loss.backward(retain_graph=True)
250
+ loss.backward()
251
+ ```
252
+
244
253
  Use `no_grad()` when you want eager computation without recording a graph:
245
254
 
246
255
  ```python
247
256
  with ts.no_grad():
248
257
  y = x * 2
258
+ x.zero_()
249
259
  ```
250
260
 
251
261
  ## Neural Networks
@@ -381,11 +391,11 @@ Run the loose local regression thresholds with:
381
391
  python benchmark_all.py --check-thresholds
382
392
  ```
383
393
 
384
- On one Windows CPython 3.10 development run reporting `1.7.0`, with
394
+ On one Windows CPython 3.10 development run reporting `1.8.0`, with
385
395
  TensorStudio threads enabled, storage pooling enabled, SSE2 autovectorization
386
396
  reported, and no BLAS provider found, TensorStudio beat NumPy on 7 local
387
397
  benchmark cases and lost on 96 NumPy-comparable cases. JAX CPU dispatch was
388
- available on that machine; TensorStudio won 45 local cases and lost 53. The
398
+ available on that machine; TensorStudio won 47 local cases and lost 51. The
389
399
  strongest local wins were the simple NumPy convolution/pooling reference loops
390
400
  and some small JAX-dispatch-heavy eager cases. NumPy and JAX were faster for
391
401
  many elementwise, reduction, matrix multiplication, larger activation, and
@@ -397,15 +407,15 @@ Snapshot from that local run:
397
407
 
398
408
  | operation | shape | TensorStudio | NumPy | JAX CPU dispatch | TS vs NumPy | TS vs JAX |
399
409
  |---|---:|---:|---:|---:|---:|---:|
400
- | `sigmoid` | `(32,)` | 0.0152 ms | 0.0044 ms | 0.0727 ms | 0.2909x | 4.7701x |
401
- | `mean` | `(32,)` | 0.0177 ms | 0.0083 ms | 0.0113 ms | 0.4715x | 0.6400x |
402
- | `sum_axis1` | `(16, 16)` | 0.0163 ms | 0.0031 ms | 0.0123 ms | 0.1901x | 0.7536x |
403
- | `chain_relu` | `(128,)` | 0.0867 ms | 0.0062 ms | 0.0923 ms | 0.0721x | 1.0641x |
404
- | `matmul` | `(256, 256)` | 2.2252 ms | 0.4754 ms | 0.2750 ms | 0.2136x | 0.1236x |
405
- | `conv2d_3x3_padding1` | `(1, 1, 8, 8)` | 0.1915 ms | 1.2845 ms | 0.1081 ms | 6.7064x | 0.5646x |
406
- | `max_pool2d_2x2` | `(1, 1, 16, 16)` | 0.0277 ms | 0.1577 ms | n/a | 5.7024x | n/a |
407
- | `avg_pool2d_2x2` | `(1, 1, 16, 16)` | 0.0278 ms | 0.5538 ms | n/a | 19.8919x | n/a |
408
- | `elementwise_backward` | `(1024,)` | 2.7344 ms | n/a | n/a | n/a | n/a |
410
+ | `sigmoid` | `(32,)` | 0.0155 ms | 0.0044 ms | 0.0761 ms | 0.2860x | 4.9227x |
411
+ | `mean` | `(32,)` | 0.0158 ms | 0.0082 ms | 0.0126 ms | 0.5215x | 0.7968x |
412
+ | `sum_axis1` | `(16, 16)` | 0.0161 ms | 0.0028 ms | 0.0136 ms | 0.1714x | 0.8417x |
413
+ | `chain_relu` | `(128,)` | 0.0861 ms | 0.0056 ms | 0.0944 ms | 0.0646x | 1.0971x |
414
+ | `matmul` | `(256, 256)` | 2.1900 ms | 0.4380 ms | 0.2610 ms | 0.2000x | 0.1192x |
415
+ | `conv2d_3x3_padding1` | `(1, 1, 8, 8)` | 0.1995 ms | 1.2390 ms | 0.1086 ms | 6.2118x | 0.5443x |
416
+ | `max_pool2d_2x2` | `(1, 1, 16, 16)` | 0.0286 ms | 0.1684 ms | n/a | 5.8921x | n/a |
417
+ | `avg_pool2d_2x2` | `(1, 1, 16, 16)` | 0.0286 ms | 0.5569 ms | n/a | 19.4803x | n/a |
418
+ | `elementwise_backward` | `(1024,)` | 2.7758 ms | n/a | n/a | n/a | n/a |
409
419
 
410
420
  Speedup is `competitor median / TensorStudio median`, so values above `1.0x`
411
421
  favor TensorStudio.
@@ -7,12 +7,13 @@
7
7
  TensorStudio is a compact C++ tensor and autograd engine with a Python API for
8
8
  learning, experimentation, and lightweight ML workloads.
9
9
 
10
- TensorStudio `1.7.0` is a CPU-only stable API foundation with native C++
10
+ TensorStudio `1.8.0` is a CPU-only stable API foundation with native C++
11
11
  threading, storage reuse, SIMD-friendly typed kernels, and optional
12
12
  CBLAS/Accelerate matrix multiplication when available. It adds native stable
13
13
  softmax/logsumexp, batched matrix multiplication, statistical reductions,
14
- boolean reductions, and seeded random distributions. It is eager-only,
15
- intentionally compact, and not a replacement for mature ML frameworks.
14
+ boolean reductions, seeded random distributions, and a hardened eager autograd
15
+ lifecycle. It is eager-only, intentionally compact, and not a replacement for
16
+ mature ML frameworks.
16
17
 
17
18
  ## Install
18
19
 
@@ -177,11 +178,20 @@ loss.backward()
177
178
  print(x.grad.tolist())
178
179
  ```
179
180
 
181
+ Reuse a graph explicitly when needed:
182
+
183
+ ```python
184
+ loss = (x * x).sum()
185
+ loss.backward(retain_graph=True)
186
+ loss.backward()
187
+ ```
188
+
180
189
  Use `no_grad()` when you want eager computation without recording a graph:
181
190
 
182
191
  ```python
183
192
  with ts.no_grad():
184
193
  y = x * 2
194
+ x.zero_()
185
195
  ```
186
196
 
187
197
  ## Neural Networks
@@ -317,11 +327,11 @@ Run the loose local regression thresholds with:
317
327
  python benchmark_all.py --check-thresholds
318
328
  ```
319
329
 
320
- On one Windows CPython 3.10 development run reporting `1.7.0`, with
330
+ On one Windows CPython 3.10 development run reporting `1.8.0`, with
321
331
  TensorStudio threads enabled, storage pooling enabled, SSE2 autovectorization
322
332
  reported, and no BLAS provider found, TensorStudio beat NumPy on 7 local
323
333
  benchmark cases and lost on 96 NumPy-comparable cases. JAX CPU dispatch was
324
- available on that machine; TensorStudio won 45 local cases and lost 53. The
334
+ available on that machine; TensorStudio won 47 local cases and lost 51. The
325
335
  strongest local wins were the simple NumPy convolution/pooling reference loops
326
336
  and some small JAX-dispatch-heavy eager cases. NumPy and JAX were faster for
327
337
  many elementwise, reduction, matrix multiplication, larger activation, and
@@ -333,15 +343,15 @@ Snapshot from that local run:
333
343
 
334
344
  | operation | shape | TensorStudio | NumPy | JAX CPU dispatch | TS vs NumPy | TS vs JAX |
335
345
  |---|---:|---:|---:|---:|---:|---:|
336
- | `sigmoid` | `(32,)` | 0.0152 ms | 0.0044 ms | 0.0727 ms | 0.2909x | 4.7701x |
337
- | `mean` | `(32,)` | 0.0177 ms | 0.0083 ms | 0.0113 ms | 0.4715x | 0.6400x |
338
- | `sum_axis1` | `(16, 16)` | 0.0163 ms | 0.0031 ms | 0.0123 ms | 0.1901x | 0.7536x |
339
- | `chain_relu` | `(128,)` | 0.0867 ms | 0.0062 ms | 0.0923 ms | 0.0721x | 1.0641x |
340
- | `matmul` | `(256, 256)` | 2.2252 ms | 0.4754 ms | 0.2750 ms | 0.2136x | 0.1236x |
341
- | `conv2d_3x3_padding1` | `(1, 1, 8, 8)` | 0.1915 ms | 1.2845 ms | 0.1081 ms | 6.7064x | 0.5646x |
342
- | `max_pool2d_2x2` | `(1, 1, 16, 16)` | 0.0277 ms | 0.1577 ms | n/a | 5.7024x | n/a |
343
- | `avg_pool2d_2x2` | `(1, 1, 16, 16)` | 0.0278 ms | 0.5538 ms | n/a | 19.8919x | n/a |
344
- | `elementwise_backward` | `(1024,)` | 2.7344 ms | n/a | n/a | n/a | n/a |
346
+ | `sigmoid` | `(32,)` | 0.0155 ms | 0.0044 ms | 0.0761 ms | 0.2860x | 4.9227x |
347
+ | `mean` | `(32,)` | 0.0158 ms | 0.0082 ms | 0.0126 ms | 0.5215x | 0.7968x |
348
+ | `sum_axis1` | `(16, 16)` | 0.0161 ms | 0.0028 ms | 0.0136 ms | 0.1714x | 0.8417x |
349
+ | `chain_relu` | `(128,)` | 0.0861 ms | 0.0056 ms | 0.0944 ms | 0.0646x | 1.0971x |
350
+ | `matmul` | `(256, 256)` | 2.1900 ms | 0.4380 ms | 0.2610 ms | 0.2000x | 0.1192x |
351
+ | `conv2d_3x3_padding1` | `(1, 1, 8, 8)` | 0.1995 ms | 1.2390 ms | 0.1086 ms | 6.2118x | 0.5443x |
352
+ | `max_pool2d_2x2` | `(1, 1, 16, 16)` | 0.0286 ms | 0.1684 ms | n/a | 5.8921x | n/a |
353
+ | `avg_pool2d_2x2` | `(1, 1, 16, 16)` | 0.0286 ms | 0.5569 ms | n/a | 19.4803x | n/a |
354
+ | `elementwise_backward` | `(1024,)` | 2.7758 ms | n/a | n/a | n/a | n/a |
345
355
 
346
356
  Speedup is `competitor median / TensorStudio median`, so values above `1.0x`
347
357
  favor TensorStudio.
@@ -0,0 +1,347 @@
1
+ # TensorStudio Benchmark Results
2
+
3
+ These benchmarks are local references, not marketing claims.
4
+ TensorStudio is compared on CPU only and uses the same shapes and dtype.
5
+
6
+ ## Environment
7
+
8
+ - Platform: `Windows-10-10.0.26200-SP0`
9
+ - Processor: `Intel64 Family 6 Model 158 Stepping 10, GenuineIntel`
10
+ - Python: `3.10.11`
11
+ - TensorStudio: `1.8.0`
12
+ - TensorStudio threads: `12`
13
+ - TensorStudio BLAS enabled: `False`
14
+ - TensorStudio SIMD level: `sse2`
15
+ - TensorStudio storage pool enabled: `True`
16
+ - NumPy: `1.26.4`
17
+ - TensorFlow CPU eager: unavailable (not installed)
18
+ - PyTorch CPU: unavailable (not installed)
19
+ - JAX CPU dispatch: available (0.6.2)
20
+
21
+ ## Summary
22
+
23
+ - TensorStudio wins versus NumPy: `7`
24
+ - TensorStudio losses versus NumPy: `96`
25
+ - TensorStudio wins versus JAX CPU dispatch: `47`
26
+ - TensorStudio losses versus JAX CPU dispatch: `51`
27
+
28
+ TensorStudio beat NumPy on at least one local benchmark case. See the detailed table before making any narrow performance claim.
29
+
30
+ ## Detailed Results
31
+
32
+ | category | operation | shape | library | median ms | mean ms | min ms | max ms | std ms | TS vs NumPy | TS vs TensorFlow | TS vs PyTorch | TS vs JAX | win vs NumPy | win vs TensorFlow | win vs PyTorch | win vs JAX | fastest library | result |
33
+ |---|---|---:|---|---:|---:|---:|---:|---:|---:|---:|---:|---:|---|---|---|---|---|---|
34
+ | elementwise | add | `(1,)` | TensorStudio | 0.0164 | 0.0169 | 0.0159 | 0.0191 | 0.0011 | 0.0391 | n/a | n/a | 0.7797 | no | n/a | n/a | no | NumPy | loss vs NumPy |
35
+ | elementwise | add | `(1,)` | NumPy | 0.0006 | 0.0009 | 0.0006 | 0.0013 | 0.0003 | 0.0391 | n/a | n/a | 0.7797 | no | n/a | n/a | no | NumPy | NumPy baseline |
36
+ | elementwise | add | `(1,)` | JAX CPU dispatch | 0.0128 | 0.0144 | 0.0120 | 0.0215 | 0.0036 | 0.0391 | n/a | n/a | 0.7797 | no | n/a | n/a | no | NumPy | reference |
37
+ | elementwise | sub | `(1,)` | TensorStudio | 0.0166 | 0.0167 | 0.0163 | 0.0171 | 0.0003 | 0.0406 | n/a | n/a | 0.7525 | no | n/a | n/a | no | NumPy | loss vs NumPy |
38
+ | elementwise | sub | `(1,)` | NumPy | 0.0007 | 0.0007 | 0.0007 | 0.0007 | 0.0000 | 0.0406 | n/a | n/a | 0.7525 | no | n/a | n/a | no | NumPy | NumPy baseline |
39
+ | elementwise | sub | `(1,)` | JAX CPU dispatch | 0.0125 | 0.0126 | 0.0120 | 0.0134 | 0.0004 | 0.0406 | n/a | n/a | 0.7525 | no | n/a | n/a | no | NumPy | reference |
40
+ | elementwise | mul | `(1,)` | TensorStudio | 0.0159 | 0.0163 | 0.0159 | 0.0173 | 0.0005 | 0.0431 | n/a | n/a | 0.7596 | no | n/a | n/a | no | NumPy | loss vs NumPy |
41
+ | elementwise | mul | `(1,)` | NumPy | 0.0007 | 0.0007 | 0.0007 | 0.0007 | 0.0000 | 0.0431 | n/a | n/a | 0.7596 | no | n/a | n/a | no | NumPy | NumPy baseline |
42
+ | elementwise | mul | `(1,)` | JAX CPU dispatch | 0.0121 | 0.0123 | 0.0120 | 0.0128 | 0.0003 | 0.0431 | n/a | n/a | 0.7596 | no | n/a | n/a | no | NumPy | reference |
43
+ | elementwise | div | `(1,)` | TensorStudio | 0.0159 | 0.0162 | 0.0158 | 0.0172 | 0.0005 | 0.0446 | n/a | n/a | 0.5782 | no | n/a | n/a | no | NumPy | loss vs NumPy |
44
+ | elementwise | div | `(1,)` | NumPy | 0.0007 | 0.0007 | 0.0007 | 0.0007 | 0.0000 | 0.0446 | n/a | n/a | 0.5782 | no | n/a | n/a | no | NumPy | NumPy baseline |
45
+ | elementwise | div | `(1,)` | JAX CPU dispatch | 0.0092 | 0.0093 | 0.0091 | 0.0097 | 0.0002 | 0.0446 | n/a | n/a | 0.5782 | no | n/a | n/a | no | NumPy | reference |
46
+ | elementwise | chain_relu((x*2+1)/3) | `(1,)` | TensorStudio | 0.0897 | 0.0895 | 0.0854 | 0.0931 | 0.0025 | 0.0628 | n/a | n/a | 1.2298 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
47
+ | elementwise | chain_relu((x*2+1)/3) | `(1,)` | NumPy | 0.0056 | 0.0057 | 0.0055 | 0.0063 | 0.0003 | 0.0628 | n/a | n/a | 1.2298 | no | n/a | n/a | yes | NumPy | NumPy baseline |
48
+ | elementwise | chain_relu((x*2+1)/3) | `(1,)` | JAX CPU dispatch | 0.1103 | 0.1125 | 0.0943 | 0.1328 | 0.0164 | 0.0628 | n/a | n/a | 1.2298 | no | n/a | n/a | yes | NumPy | reference |
49
+ | elementwise | add | `(8,)` | TensorStudio | 0.0160 | 0.0159 | 0.0156 | 0.0161 | 0.0002 | 0.0402 | n/a | n/a | 0.7635 | no | n/a | n/a | no | NumPy | loss vs NumPy |
50
+ | elementwise | add | `(8,)` | NumPy | 0.0006 | 0.0007 | 0.0006 | 0.0007 | 0.0000 | 0.0402 | n/a | n/a | 0.7635 | no | n/a | n/a | no | NumPy | NumPy baseline |
51
+ | elementwise | add | `(8,)` | JAX CPU dispatch | 0.0122 | 0.0122 | 0.0121 | 0.0124 | 0.0001 | 0.0402 | n/a | n/a | 0.7635 | no | n/a | n/a | no | NumPy | reference |
52
+ | elementwise | sub | `(8,)` | TensorStudio | 0.0160 | 0.0160 | 0.0159 | 0.0161 | 0.0001 | 0.0428 | n/a | n/a | 0.7775 | no | n/a | n/a | no | NumPy | loss vs NumPy |
53
+ | elementwise | sub | `(8,)` | NumPy | 0.0007 | 0.0007 | 0.0007 | 0.0008 | 0.0001 | 0.0428 | n/a | n/a | 0.7775 | no | n/a | n/a | no | NumPy | NumPy baseline |
54
+ | elementwise | sub | `(8,)` | JAX CPU dispatch | 0.0124 | 0.0123 | 0.0119 | 0.0127 | 0.0003 | 0.0428 | n/a | n/a | 0.7775 | no | n/a | n/a | no | NumPy | reference |
55
+ | elementwise | mul | `(8,)` | TensorStudio | 0.0161 | 0.0163 | 0.0159 | 0.0169 | 0.0004 | 0.0447 | n/a | n/a | 0.7937 | no | n/a | n/a | no | NumPy | loss vs NumPy |
56
+ | elementwise | mul | `(8,)` | NumPy | 0.0007 | 0.0007 | 0.0007 | 0.0007 | 0.0000 | 0.0447 | n/a | n/a | 0.7937 | no | n/a | n/a | no | NumPy | NumPy baseline |
57
+ | elementwise | mul | `(8,)` | JAX CPU dispatch | 0.0128 | 0.0130 | 0.0126 | 0.0139 | 0.0005 | 0.0447 | n/a | n/a | 0.7937 | no | n/a | n/a | no | NumPy | reference |
58
+ | elementwise | div | `(8,)` | TensorStudio | 0.0161 | 0.0162 | 0.0160 | 0.0168 | 0.0003 | 0.0461 | n/a | n/a | 0.5862 | no | n/a | n/a | no | NumPy | loss vs NumPy |
59
+ | elementwise | div | `(8,)` | NumPy | 0.0007 | 0.0007 | 0.0007 | 0.0008 | 0.0000 | 0.0461 | n/a | n/a | 0.5862 | no | n/a | n/a | no | NumPy | NumPy baseline |
60
+ | elementwise | div | `(8,)` | JAX CPU dispatch | 0.0095 | 0.0095 | 0.0094 | 0.0097 | 0.0001 | 0.0461 | n/a | n/a | 0.5862 | no | n/a | n/a | no | NumPy | reference |
61
+ | elementwise | chain_relu((x*2+1)/3) | `(8,)` | TensorStudio | 0.0842 | 0.0843 | 0.0838 | 0.0852 | 0.0005 | 0.0664 | n/a | n/a | 1.0910 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
62
+ | elementwise | chain_relu((x*2+1)/3) | `(8,)` | NumPy | 0.0056 | 0.0057 | 0.0054 | 0.0062 | 0.0003 | 0.0664 | n/a | n/a | 1.0910 | no | n/a | n/a | yes | NumPy | NumPy baseline |
63
+ | elementwise | chain_relu((x*2+1)/3) | `(8,)` | JAX CPU dispatch | 0.0918 | 0.0917 | 0.0897 | 0.0937 | 0.0014 | 0.0664 | n/a | n/a | 1.0910 | no | n/a | n/a | yes | NumPy | reference |
64
+ | elementwise | add | `(32,)` | TensorStudio | 0.0159 | 0.0160 | 0.0158 | 0.0164 | 0.0003 | 0.0408 | n/a | n/a | 0.7844 | no | n/a | n/a | no | NumPy | loss vs NumPy |
65
+ | elementwise | add | `(32,)` | NumPy | 0.0006 | 0.0007 | 0.0006 | 0.0008 | 0.0001 | 0.0408 | n/a | n/a | 0.7844 | no | n/a | n/a | no | NumPy | NumPy baseline |
66
+ | elementwise | add | `(32,)` | JAX CPU dispatch | 0.0124 | 0.0125 | 0.0122 | 0.0126 | 0.0002 | 0.0408 | n/a | n/a | 0.7844 | no | n/a | n/a | no | NumPy | reference |
67
+ | elementwise | sub | `(32,)` | TensorStudio | 0.0159 | 0.0159 | 0.0158 | 0.0160 | 0.0001 | 0.0460 | n/a | n/a | 0.7733 | no | n/a | n/a | no | NumPy | loss vs NumPy |
68
+ | elementwise | sub | `(32,)` | NumPy | 0.0007 | 0.0007 | 0.0007 | 0.0008 | 0.0000 | 0.0460 | n/a | n/a | 0.7733 | no | n/a | n/a | no | NumPy | NumPy baseline |
69
+ | elementwise | sub | `(32,)` | JAX CPU dispatch | 0.0123 | 0.0123 | 0.0119 | 0.0126 | 0.0002 | 0.0460 | n/a | n/a | 0.7733 | no | n/a | n/a | no | NumPy | reference |
70
+ | elementwise | mul | `(32,)` | TensorStudio | 0.0166 | 0.0167 | 0.0161 | 0.0172 | 0.0005 | 0.0419 | n/a | n/a | 0.7989 | no | n/a | n/a | no | NumPy | loss vs NumPy |
71
+ | elementwise | mul | `(32,)` | NumPy | 0.0007 | 0.0007 | 0.0007 | 0.0007 | 0.0000 | 0.0419 | n/a | n/a | 0.7989 | no | n/a | n/a | no | NumPy | NumPy baseline |
72
+ | elementwise | mul | `(32,)` | JAX CPU dispatch | 0.0133 | 0.0133 | 0.0122 | 0.0141 | 0.0007 | 0.0419 | n/a | n/a | 0.7989 | no | n/a | n/a | no | NumPy | reference |
73
+ | elementwise | div | `(32,)` | TensorStudio | 0.0173 | 0.0173 | 0.0161 | 0.0188 | 0.0009 | 0.0419 | n/a | n/a | 0.5869 | no | n/a | n/a | no | NumPy | loss vs NumPy |
74
+ | elementwise | div | `(32,)` | NumPy | 0.0007 | 0.0008 | 0.0007 | 0.0009 | 0.0001 | 0.0419 | n/a | n/a | 0.5869 | no | n/a | n/a | no | NumPy | NumPy baseline |
75
+ | elementwise | div | `(32,)` | JAX CPU dispatch | 0.0101 | 0.0108 | 0.0094 | 0.0128 | 0.0015 | 0.0419 | n/a | n/a | 0.5869 | no | n/a | n/a | no | NumPy | reference |
76
+ | elementwise | chain_relu((x*2+1)/3) | `(32,)` | TensorStudio | 0.0885 | 0.0890 | 0.0862 | 0.0942 | 0.0027 | 0.0643 | n/a | n/a | 1.0609 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
77
+ | elementwise | chain_relu((x*2+1)/3) | `(32,)` | NumPy | 0.0057 | 0.0059 | 0.0055 | 0.0072 | 0.0006 | 0.0643 | n/a | n/a | 1.0609 | no | n/a | n/a | yes | NumPy | NumPy baseline |
78
+ | elementwise | chain_relu((x*2+1)/3) | `(32,)` | JAX CPU dispatch | 0.0939 | 0.0947 | 0.0913 | 0.1014 | 0.0035 | 0.0643 | n/a | n/a | 1.0609 | no | n/a | n/a | yes | NumPy | reference |
79
+ | elementwise | add | `(128,)` | TensorStudio | 0.0161 | 0.0163 | 0.0160 | 0.0168 | 0.0003 | 0.0448 | n/a | n/a | 0.7905 | no | n/a | n/a | no | NumPy | loss vs NumPy |
80
+ | elementwise | add | `(128,)` | NumPy | 0.0007 | 0.0007 | 0.0007 | 0.0008 | 0.0000 | 0.0448 | n/a | n/a | 0.7905 | no | n/a | n/a | no | NumPy | NumPy baseline |
81
+ | elementwise | add | `(128,)` | JAX CPU dispatch | 0.0128 | 0.0193 | 0.0126 | 0.0396 | 0.0104 | 0.0448 | n/a | n/a | 0.7905 | no | n/a | n/a | no | NumPy | reference |
82
+ | elementwise | sub | `(128,)` | TensorStudio | 0.0161 | 0.0167 | 0.0161 | 0.0191 | 0.0012 | 0.0424 | n/a | n/a | 0.7664 | no | n/a | n/a | no | NumPy | loss vs NumPy |
83
+ | elementwise | sub | `(128,)` | NumPy | 0.0007 | 0.0007 | 0.0007 | 0.0007 | 0.0000 | 0.0424 | n/a | n/a | 0.7664 | no | n/a | n/a | no | NumPy | NumPy baseline |
84
+ | elementwise | sub | `(128,)` | JAX CPU dispatch | 0.0124 | 0.0123 | 0.0121 | 0.0124 | 0.0001 | 0.0424 | n/a | n/a | 0.7664 | no | n/a | n/a | no | NumPy | reference |
85
+ | elementwise | mul | `(128,)` | TensorStudio | 0.0163 | 0.0165 | 0.0160 | 0.0172 | 0.0005 | 0.0435 | n/a | n/a | 0.7971 | no | n/a | n/a | no | NumPy | loss vs NumPy |
86
+ | elementwise | mul | `(128,)` | NumPy | 0.0007 | 0.0007 | 0.0007 | 0.0007 | 0.0000 | 0.0435 | n/a | n/a | 0.7971 | no | n/a | n/a | no | NumPy | NumPy baseline |
87
+ | elementwise | mul | `(128,)` | JAX CPU dispatch | 0.0130 | 0.0144 | 0.0128 | 0.0200 | 0.0028 | 0.0435 | n/a | n/a | 0.7971 | no | n/a | n/a | no | NumPy | reference |
88
+ | elementwise | div | `(128,)` | TensorStudio | 0.0159 | 0.0161 | 0.0159 | 0.0168 | 0.0004 | 0.0465 | n/a | n/a | 0.6165 | no | n/a | n/a | no | NumPy | loss vs NumPy |
89
+ | elementwise | div | `(128,)` | NumPy | 0.0007 | 0.0007 | 0.0007 | 0.0008 | 0.0000 | 0.0465 | n/a | n/a | 0.6165 | no | n/a | n/a | no | NumPy | NumPy baseline |
90
+ | elementwise | div | `(128,)` | JAX CPU dispatch | 0.0098 | 0.0098 | 0.0093 | 0.0106 | 0.0005 | 0.0465 | n/a | n/a | 0.6165 | no | n/a | n/a | no | NumPy | reference |
91
+ | elementwise | chain_relu((x*2+1)/3) | `(128,)` | TensorStudio | 0.0861 | 0.0862 | 0.0847 | 0.0874 | 0.0009 | 0.0646 | n/a | n/a | 1.0971 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
92
+ | elementwise | chain_relu((x*2+1)/3) | `(128,)` | NumPy | 0.0056 | 0.0056 | 0.0055 | 0.0057 | 0.0001 | 0.0646 | n/a | n/a | 1.0971 | no | n/a | n/a | yes | NumPy | NumPy baseline |
93
+ | elementwise | chain_relu((x*2+1)/3) | `(128,)` | JAX CPU dispatch | 0.0944 | 0.0968 | 0.0914 | 0.1065 | 0.0058 | 0.0646 | n/a | n/a | 1.0971 | no | n/a | n/a | yes | NumPy | reference |
94
+ | elementwise | add | `(1024,)` | TensorStudio | 0.0162 | 0.0168 | 0.0159 | 0.0191 | 0.0012 | 0.0734 | n/a | n/a | 1.0326 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
95
+ | elementwise | add | `(1024,)` | NumPy | 0.0012 | 0.0013 | 0.0012 | 0.0017 | 0.0002 | 0.0734 | n/a | n/a | 1.0326 | no | n/a | n/a | yes | NumPy | NumPy baseline |
96
+ | elementwise | add | `(1024,)` | JAX CPU dispatch | 0.0168 | 0.0175 | 0.0164 | 0.0206 | 0.0016 | 0.0734 | n/a | n/a | 1.0326 | no | n/a | n/a | yes | NumPy | reference |
97
+ | elementwise | sub | `(1024,)` | TensorStudio | 0.0164 | 0.0164 | 0.0162 | 0.0167 | 0.0002 | 0.0751 | n/a | n/a | 0.9213 | no | n/a | n/a | no | NumPy | loss vs NumPy |
98
+ | elementwise | sub | `(1024,)` | NumPy | 0.0012 | 0.0012 | 0.0012 | 0.0012 | 0.0000 | 0.0751 | n/a | n/a | 0.9213 | no | n/a | n/a | no | NumPy | NumPy baseline |
99
+ | elementwise | sub | `(1024,)` | JAX CPU dispatch | 0.0151 | 0.0147 | 0.0127 | 0.0169 | 0.0015 | 0.0751 | n/a | n/a | 0.9213 | no | n/a | n/a | no | NumPy | reference |
100
+ | elementwise | mul | `(1024,)` | TensorStudio | 0.0164 | 0.0170 | 0.0163 | 0.0190 | 0.0010 | 0.0836 | n/a | n/a | 0.9017 | no | n/a | n/a | no | NumPy | loss vs NumPy |
101
+ | elementwise | mul | `(1024,)` | NumPy | 0.0014 | 0.0013 | 0.0013 | 0.0014 | 0.0001 | 0.0836 | n/a | n/a | 0.9017 | no | n/a | n/a | no | NumPy | NumPy baseline |
102
+ | elementwise | mul | `(1024,)` | JAX CPU dispatch | 0.0148 | 0.0157 | 0.0134 | 0.0183 | 0.0018 | 0.0836 | n/a | n/a | 0.9017 | no | n/a | n/a | no | NumPy | reference |
103
+ | elementwise | div | `(1024,)` | TensorStudio | 0.0161 | 0.0162 | 0.0160 | 0.0165 | 0.0002 | 0.0662 | n/a | n/a | 0.7117 | no | n/a | n/a | no | NumPy | loss vs NumPy |
104
+ | elementwise | div | `(1024,)` | NumPy | 0.0011 | 0.0011 | 0.0011 | 0.0011 | 0.0000 | 0.0662 | n/a | n/a | 0.7117 | no | n/a | n/a | no | NumPy | NumPy baseline |
105
+ | elementwise | div | `(1024,)` | JAX CPU dispatch | 0.0115 | 0.0111 | 0.0101 | 0.0122 | 0.0008 | 0.0662 | n/a | n/a | 0.7117 | no | n/a | n/a | no | NumPy | reference |
106
+ | elementwise | chain_relu((x*2+1)/3) | `(1024,)` | TensorStudio | 0.0875 | 0.0897 | 0.0860 | 0.0995 | 0.0051 | 0.0866 | n/a | n/a | 1.4800 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
107
+ | elementwise | chain_relu((x*2+1)/3) | `(1024,)` | NumPy | 0.0076 | 0.0075 | 0.0072 | 0.0077 | 0.0002 | 0.0866 | n/a | n/a | 1.4800 | no | n/a | n/a | yes | NumPy | NumPy baseline |
108
+ | elementwise | chain_relu((x*2+1)/3) | `(1024,)` | JAX CPU dispatch | 0.1295 | 0.1280 | 0.1204 | 0.1389 | 0.0069 | 0.0866 | n/a | n/a | 1.4800 | no | n/a | n/a | yes | NumPy | reference |
109
+ | elementwise | add | `(4096,)` | TensorStudio | 0.0173 | 0.0174 | 0.0170 | 0.0179 | 0.0003 | 0.0864 | n/a | n/a | 1.0773 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
110
+ | elementwise | add | `(4096,)` | NumPy | 0.0015 | 0.0015 | 0.0014 | 0.0016 | 0.0001 | 0.0864 | n/a | n/a | 1.0773 | no | n/a | n/a | yes | NumPy | NumPy baseline |
111
+ | elementwise | add | `(4096,)` | JAX CPU dispatch | 0.0186 | 0.0191 | 0.0164 | 0.0223 | 0.0026 | 0.0864 | n/a | n/a | 1.0773 | no | n/a | n/a | yes | NumPy | reference |
112
+ | elementwise | sub | `(4096,)` | TensorStudio | 0.0179 | 0.0191 | 0.0176 | 0.0213 | 0.0017 | 0.0861 | n/a | n/a | 1.1306 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
113
+ | elementwise | sub | `(4096,)` | NumPy | 0.0015 | 0.0016 | 0.0015 | 0.0017 | 0.0001 | 0.0861 | n/a | n/a | 1.1306 | no | n/a | n/a | yes | NumPy | NumPy baseline |
114
+ | elementwise | sub | `(4096,)` | JAX CPU dispatch | 0.0203 | 0.0195 | 0.0176 | 0.0203 | 0.0011 | 0.0861 | n/a | n/a | 1.1306 | no | n/a | n/a | yes | NumPy | reference |
115
+ | elementwise | mul | `(4096,)` | TensorStudio | 0.0177 | 0.0178 | 0.0169 | 0.0192 | 0.0008 | 0.0936 | n/a | n/a | 1.0693 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
116
+ | elementwise | mul | `(4096,)` | NumPy | 0.0017 | 0.0017 | 0.0016 | 0.0019 | 0.0001 | 0.0936 | n/a | n/a | 1.0693 | no | n/a | n/a | yes | NumPy | NumPy baseline |
117
+ | elementwise | mul | `(4096,)` | JAX CPU dispatch | 0.0189 | 0.0197 | 0.0150 | 0.0250 | 0.0041 | 0.0936 | n/a | n/a | 1.0693 | no | n/a | n/a | yes | NumPy | reference |
118
+ | elementwise | div | `(4096,)` | TensorStudio | 0.0172 | 0.0173 | 0.0171 | 0.0174 | 0.0001 | 0.1049 | n/a | n/a | 0.9096 | no | n/a | n/a | no | NumPy | loss vs NumPy |
119
+ | elementwise | div | `(4096,)` | NumPy | 0.0018 | 0.0018 | 0.0016 | 0.0020 | 0.0002 | 0.1049 | n/a | n/a | 0.9096 | no | n/a | n/a | no | NumPy | NumPy baseline |
120
+ | elementwise | div | `(4096,)` | JAX CPU dispatch | 0.0157 | 0.0148 | 0.0114 | 0.0164 | 0.0019 | 0.1049 | n/a | n/a | 0.9096 | no | n/a | n/a | no | NumPy | reference |
121
+ | elementwise | chain_relu((x*2+1)/3) | `(4096,)` | TensorStudio | 0.1057 | 0.1047 | 0.0922 | 0.1179 | 0.0088 | 0.0953 | n/a | n/a | 1.3363 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
122
+ | elementwise | chain_relu((x*2+1)/3) | `(4096,)` | NumPy | 0.0101 | 0.0101 | 0.0098 | 0.0103 | 0.0002 | 0.0953 | n/a | n/a | 1.3363 | no | n/a | n/a | yes | NumPy | NumPy baseline |
123
+ | elementwise | chain_relu((x*2+1)/3) | `(4096,)` | JAX CPU dispatch | 0.1413 | 0.1400 | 0.1302 | 0.1531 | 0.0084 | 0.0953 | n/a | n/a | 1.3363 | no | n/a | n/a | yes | NumPy | reference |
124
+ | elementwise | add | `(16384,)` | TensorStudio | 0.0224 | 0.0225 | 0.0212 | 0.0248 | 0.0013 | 0.1815 | n/a | n/a | 0.8039 | no | n/a | n/a | no | NumPy | loss vs NumPy |
125
+ | elementwise | add | `(16384,)` | NumPy | 0.0041 | 0.0042 | 0.0038 | 0.0049 | 0.0004 | 0.1815 | n/a | n/a | 0.8039 | no | n/a | n/a | no | NumPy | NumPy baseline |
126
+ | elementwise | add | `(16384,)` | JAX CPU dispatch | 0.0180 | 0.0195 | 0.0150 | 0.0263 | 0.0045 | 0.1815 | n/a | n/a | 0.8039 | no | n/a | n/a | no | NumPy | reference |
127
+ | elementwise | sub | `(16384,)` | TensorStudio | 0.0212 | 0.0218 | 0.0210 | 0.0241 | 0.0012 | 0.1779 | n/a | n/a | 1.1192 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
128
+ | elementwise | sub | `(16384,)` | NumPy | 0.0038 | 0.0038 | 0.0037 | 0.0040 | 0.0001 | 0.1779 | n/a | n/a | 1.1192 | no | n/a | n/a | yes | NumPy | NumPy baseline |
129
+ | elementwise | sub | `(16384,)` | JAX CPU dispatch | 0.0238 | 0.0229 | 0.0161 | 0.0283 | 0.0040 | 0.1779 | n/a | n/a | 1.1192 | no | n/a | n/a | yes | NumPy | reference |
130
+ | elementwise | mul | `(16384,)` | TensorStudio | 0.0215 | 0.0220 | 0.0210 | 0.0243 | 0.0012 | 0.1852 | n/a | n/a | 0.9464 | no | n/a | n/a | no | NumPy | loss vs NumPy |
131
+ | elementwise | mul | `(16384,)` | NumPy | 0.0040 | 0.0041 | 0.0038 | 0.0045 | 0.0002 | 0.1852 | n/a | n/a | 0.9464 | no | n/a | n/a | no | NumPy | NumPy baseline |
132
+ | elementwise | mul | `(16384,)` | JAX CPU dispatch | 0.0203 | 0.0199 | 0.0133 | 0.0263 | 0.0054 | 0.1852 | n/a | n/a | 0.9464 | no | n/a | n/a | no | NumPy | reference |
133
+ | elementwise | div | `(16384,)` | TensorStudio | 0.0217 | 0.0221 | 0.0209 | 0.0234 | 0.0009 | 0.2301 | n/a | n/a | 0.6575 | no | n/a | n/a | no | NumPy | loss vs NumPy |
134
+ | elementwise | div | `(16384,)` | NumPy | 0.0050 | 0.0049 | 0.0046 | 0.0054 | 0.0003 | 0.2301 | n/a | n/a | 0.6575 | no | n/a | n/a | no | NumPy | NumPy baseline |
135
+ | elementwise | div | `(16384,)` | JAX CPU dispatch | 0.0143 | 0.0153 | 0.0138 | 0.0200 | 0.0024 | 0.2301 | n/a | n/a | 0.6575 | no | n/a | n/a | no | NumPy | reference |
136
+ | elementwise | chain_relu((x*2+1)/3) | `(16384,)` | TensorStudio | 0.1188 | 0.1189 | 0.1048 | 0.1358 | 0.0122 | 0.3060 | n/a | n/a | 1.6244 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
137
+ | elementwise | chain_relu((x*2+1)/3) | `(16384,)` | NumPy | 0.0364 | 0.0341 | 0.0229 | 0.0400 | 0.0064 | 0.3060 | n/a | n/a | 1.6244 | no | n/a | n/a | yes | NumPy | NumPy baseline |
138
+ | elementwise | chain_relu((x*2+1)/3) | `(16384,)` | JAX CPU dispatch | 0.1930 | 0.2638 | 0.1432 | 0.5748 | 0.1592 | 0.3060 | n/a | n/a | 1.6244 | no | n/a | n/a | yes | NumPy | reference |
139
+ | activations | relu | `(1,)` | TensorStudio | 0.0151 | 0.0151 | 0.0146 | 0.0158 | 0.0005 | 0.1154 | n/a | n/a | 2.9763 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
140
+ | activations | relu | `(1,)` | NumPy | 0.0017 | 0.0018 | 0.0017 | 0.0020 | 0.0001 | 0.1154 | n/a | n/a | 2.9763 | no | n/a | n/a | yes | NumPy | NumPy baseline |
141
+ | activations | relu | `(1,)` | JAX CPU dispatch | 0.0449 | 0.0454 | 0.0447 | 0.0468 | 0.0008 | 0.1154 | n/a | n/a | 2.9763 | no | n/a | n/a | yes | NumPy | reference |
142
+ | activations | sigmoid | `(1,)` | TensorStudio | 0.0149 | 0.0149 | 0.0148 | 0.0150 | 0.0001 | 0.2956 | n/a | n/a | 5.0984 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
143
+ | activations | sigmoid | `(1,)` | NumPy | 0.0044 | 0.0044 | 0.0043 | 0.0045 | 0.0001 | 0.2956 | n/a | n/a | 5.0984 | no | n/a | n/a | yes | NumPy | NumPy baseline |
144
+ | activations | sigmoid | `(1,)` | JAX CPU dispatch | 0.0758 | 0.0756 | 0.0738 | 0.0768 | 0.0011 | 0.2956 | n/a | n/a | 5.0984 | no | n/a | n/a | yes | NumPy | reference |
145
+ | activations | tanh | `(1,)` | TensorStudio | 0.0150 | 0.0150 | 0.0149 | 0.0152 | 0.0001 | 0.0816 | n/a | n/a | 1.9919 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
146
+ | activations | tanh | `(1,)` | NumPy | 0.0012 | 0.0012 | 0.0012 | 0.0013 | 0.0000 | 0.0816 | n/a | n/a | 1.9919 | no | n/a | n/a | yes | NumPy | NumPy baseline |
147
+ | activations | tanh | `(1,)` | JAX CPU dispatch | 0.0300 | 0.0307 | 0.0297 | 0.0327 | 0.0011 | 0.0816 | n/a | n/a | 1.9919 | no | n/a | n/a | yes | NumPy | reference |
148
+ | activations | exp | `(1,)` | TensorStudio | 0.0149 | 0.0149 | 0.0148 | 0.0152 | 0.0001 | 0.0817 | n/a | n/a | 2.0346 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
149
+ | activations | exp | `(1,)` | NumPy | 0.0012 | 0.0012 | 0.0012 | 0.0013 | 0.0000 | 0.0817 | n/a | n/a | 2.0346 | no | n/a | n/a | yes | NumPy | NumPy baseline |
150
+ | activations | exp | `(1,)` | JAX CPU dispatch | 0.0302 | 0.0306 | 0.0299 | 0.0315 | 0.0006 | 0.0817 | n/a | n/a | 2.0346 | no | n/a | n/a | yes | NumPy | reference |
151
+ | activations | log | `(1,)` | TensorStudio | 0.0150 | 0.0151 | 0.0148 | 0.0153 | 0.0002 | 0.0863 | n/a | n/a | 1.9866 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
152
+ | activations | log | `(1,)` | NumPy | 0.0013 | 0.0016 | 0.0012 | 0.0028 | 0.0006 | 0.0863 | n/a | n/a | 1.9866 | no | n/a | n/a | yes | NumPy | NumPy baseline |
153
+ | activations | log | `(1,)` | JAX CPU dispatch | 0.0298 | 0.0305 | 0.0295 | 0.0317 | 0.0009 | 0.0863 | n/a | n/a | 1.9866 | no | n/a | n/a | yes | NumPy | reference |
154
+ | activations | relu | `(8,)` | TensorStudio | 0.0151 | 0.0151 | 0.0150 | 0.0155 | 0.0002 | 0.1135 | n/a | n/a | 3.0652 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
155
+ | activations | relu | `(8,)` | NumPy | 0.0017 | 0.0017 | 0.0017 | 0.0018 | 0.0000 | 0.1135 | n/a | n/a | 3.0652 | no | n/a | n/a | yes | NumPy | NumPy baseline |
156
+ | activations | relu | `(8,)` | JAX CPU dispatch | 0.0462 | 0.0470 | 0.0448 | 0.0515 | 0.0024 | 0.1135 | n/a | n/a | 3.0652 | no | n/a | n/a | yes | NumPy | reference |
157
+ | activations | sigmoid | `(8,)` | TensorStudio | 0.0149 | 0.0150 | 0.0149 | 0.0155 | 0.0002 | 0.3030 | n/a | n/a | 5.0278 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
158
+ | activations | sigmoid | `(8,)` | NumPy | 0.0045 | 0.0045 | 0.0044 | 0.0046 | 0.0000 | 0.3030 | n/a | n/a | 5.0278 | no | n/a | n/a | yes | NumPy | NumPy baseline |
159
+ | activations | sigmoid | `(8,)` | JAX CPU dispatch | 0.0752 | 0.0750 | 0.0740 | 0.0758 | 0.0007 | 0.3030 | n/a | n/a | 5.0278 | no | n/a | n/a | yes | NumPy | reference |
160
+ | activations | tanh | `(8,)` | TensorStudio | 0.0151 | 0.0153 | 0.0151 | 0.0158 | 0.0003 | 0.0814 | n/a | n/a | 2.0133 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
161
+ | activations | tanh | `(8,)` | NumPy | 0.0012 | 0.0013 | 0.0012 | 0.0013 | 0.0000 | 0.0814 | n/a | n/a | 2.0133 | no | n/a | n/a | yes | NumPy | NumPy baseline |
162
+ | activations | tanh | `(8,)` | JAX CPU dispatch | 0.0305 | 0.0304 | 0.0299 | 0.0310 | 0.0004 | 0.0814 | n/a | n/a | 2.0133 | no | n/a | n/a | yes | NumPy | reference |
163
+ | activations | exp | `(8,)` | TensorStudio | 0.0150 | 0.0150 | 0.0149 | 0.0151 | 0.0001 | 0.0853 | n/a | n/a | 2.0180 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
164
+ | activations | exp | `(8,)` | NumPy | 0.0013 | 0.0012 | 0.0012 | 0.0013 | 0.0000 | 0.0853 | n/a | n/a | 2.0180 | no | n/a | n/a | yes | NumPy | NumPy baseline |
165
+ | activations | exp | `(8,)` | JAX CPU dispatch | 0.0302 | 0.0306 | 0.0298 | 0.0326 | 0.0010 | 0.0853 | n/a | n/a | 2.0180 | no | n/a | n/a | yes | NumPy | reference |
166
+ | activations | log | `(8,)` | TensorStudio | 0.0150 | 0.0150 | 0.0149 | 0.0151 | 0.0001 | 0.0862 | n/a | n/a | 2.0175 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
167
+ | activations | log | `(8,)` | NumPy | 0.0013 | 0.0013 | 0.0012 | 0.0015 | 0.0001 | 0.0862 | n/a | n/a | 2.0175 | no | n/a | n/a | yes | NumPy | NumPy baseline |
168
+ | activations | log | `(8,)` | JAX CPU dispatch | 0.0303 | 0.0303 | 0.0302 | 0.0306 | 0.0001 | 0.0862 | n/a | n/a | 2.0175 | no | n/a | n/a | yes | NumPy | reference |
169
+ | activations | relu | `(32,)` | TensorStudio | 0.0148 | 0.0148 | 0.0147 | 0.0150 | 0.0001 | 0.1169 | n/a | n/a | 3.0356 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
170
+ | activations | relu | `(32,)` | NumPy | 0.0017 | 0.0017 | 0.0017 | 0.0018 | 0.0000 | 0.1169 | n/a | n/a | 3.0356 | no | n/a | n/a | yes | NumPy | NumPy baseline |
171
+ | activations | relu | `(32,)` | JAX CPU dispatch | 0.0450 | 0.0453 | 0.0442 | 0.0463 | 0.0008 | 0.1169 | n/a | n/a | 3.0356 | no | n/a | n/a | yes | NumPy | reference |
172
+ | activations | sigmoid | `(32,)` | TensorStudio | 0.0155 | 0.0156 | 0.0150 | 0.0165 | 0.0005 | 0.2860 | n/a | n/a | 4.9227 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
173
+ | activations | sigmoid | `(32,)` | NumPy | 0.0044 | 0.0044 | 0.0044 | 0.0045 | 0.0000 | 0.2860 | n/a | n/a | 4.9227 | no | n/a | n/a | yes | NumPy | NumPy baseline |
174
+ | activations | sigmoid | `(32,)` | JAX CPU dispatch | 0.0761 | 0.0761 | 0.0734 | 0.0788 | 0.0019 | 0.2860 | n/a | n/a | 4.9227 | no | n/a | n/a | yes | NumPy | reference |
175
+ | activations | tanh | `(32,)` | TensorStudio | 0.0152 | 0.0153 | 0.0152 | 0.0153 | 0.0001 | 0.0840 | n/a | n/a | 2.0028 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
176
+ | activations | tanh | `(32,)` | NumPy | 0.0013 | 0.0013 | 0.0013 | 0.0013 | 0.0000 | 0.0840 | n/a | n/a | 2.0028 | no | n/a | n/a | yes | NumPy | NumPy baseline |
177
+ | activations | tanh | `(32,)` | JAX CPU dispatch | 0.0305 | 0.0310 | 0.0302 | 0.0323 | 0.0008 | 0.0840 | n/a | n/a | 2.0028 | no | n/a | n/a | yes | NumPy | reference |
178
+ | activations | exp | `(32,)` | TensorStudio | 0.0149 | 0.0150 | 0.0149 | 0.0152 | 0.0001 | 0.0812 | n/a | n/a | 2.0337 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
179
+ | activations | exp | `(32,)` | NumPy | 0.0012 | 0.0013 | 0.0012 | 0.0014 | 0.0001 | 0.0812 | n/a | n/a | 2.0337 | no | n/a | n/a | yes | NumPy | NumPy baseline |
180
+ | activations | exp | `(32,)` | JAX CPU dispatch | 0.0304 | 0.0305 | 0.0303 | 0.0310 | 0.0003 | 0.0812 | n/a | n/a | 2.0337 | no | n/a | n/a | yes | NumPy | reference |
181
+ | activations | log | `(32,)` | TensorStudio | 0.0152 | 0.0151 | 0.0150 | 0.0153 | 0.0001 | 0.0865 | n/a | n/a | 1.9854 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
182
+ | activations | log | `(32,)` | NumPy | 0.0013 | 0.0013 | 0.0013 | 0.0014 | 0.0000 | 0.0865 | n/a | n/a | 1.9854 | no | n/a | n/a | yes | NumPy | NumPy baseline |
183
+ | activations | log | `(32,)` | JAX CPU dispatch | 0.0301 | 0.0300 | 0.0296 | 0.0302 | 0.0002 | 0.0865 | n/a | n/a | 1.9854 | no | n/a | n/a | yes | NumPy | reference |
184
+ | activations | relu | `(128,)` | TensorStudio | 0.0149 | 0.0149 | 0.0148 | 0.0150 | 0.0001 | 0.1194 | n/a | n/a | 3.0002 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
185
+ | activations | relu | `(128,)` | NumPy | 0.0018 | 0.0019 | 0.0017 | 0.0022 | 0.0002 | 0.1194 | n/a | n/a | 3.0002 | no | n/a | n/a | yes | NumPy | NumPy baseline |
186
+ | activations | relu | `(128,)` | JAX CPU dispatch | 0.0448 | 0.0450 | 0.0444 | 0.0460 | 0.0005 | 0.1194 | n/a | n/a | 3.0002 | no | n/a | n/a | yes | NumPy | reference |
187
+ | activations | sigmoid | `(128,)` | TensorStudio | 0.0158 | 0.0160 | 0.0155 | 0.0168 | 0.0005 | 0.2975 | n/a | n/a | 4.8611 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
188
+ | activations | sigmoid | `(128,)` | NumPy | 0.0047 | 0.0047 | 0.0046 | 0.0048 | 0.0001 | 0.2975 | n/a | n/a | 4.8611 | no | n/a | n/a | yes | NumPy | NumPy baseline |
189
+ | activations | sigmoid | `(128,)` | JAX CPU dispatch | 0.0766 | 0.0760 | 0.0737 | 0.0776 | 0.0015 | 0.2975 | n/a | n/a | 4.8611 | no | n/a | n/a | yes | NumPy | reference |
190
+ | activations | tanh | `(128,)` | TensorStudio | 0.0165 | 0.0167 | 0.0164 | 0.0173 | 0.0003 | 0.0914 | n/a | n/a | 1.8887 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
191
+ | activations | tanh | `(128,)` | NumPy | 0.0015 | 0.0015 | 0.0015 | 0.0017 | 0.0001 | 0.0914 | n/a | n/a | 1.8887 | no | n/a | n/a | yes | NumPy | NumPy baseline |
192
+ | activations | tanh | `(128,)` | JAX CPU dispatch | 0.0312 | 0.0312 | 0.0300 | 0.0329 | 0.0010 | 0.0914 | n/a | n/a | 1.8887 | no | n/a | n/a | yes | NumPy | reference |
193
+ | activations | exp | `(128,)` | TensorStudio | 0.0158 | 0.0159 | 0.0154 | 0.0164 | 0.0003 | 0.0853 | n/a | n/a | 1.9763 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
194
+ | activations | exp | `(128,)` | NumPy | 0.0014 | 0.0014 | 0.0013 | 0.0014 | 0.0000 | 0.0853 | n/a | n/a | 1.9763 | no | n/a | n/a | yes | NumPy | NumPy baseline |
195
+ | activations | exp | `(128,)` | JAX CPU dispatch | 0.0313 | 0.0311 | 0.0302 | 0.0318 | 0.0005 | 0.0853 | n/a | n/a | 1.9763 | no | n/a | n/a | yes | NumPy | reference |
196
+ | activations | log | `(128,)` | TensorStudio | 0.0158 | 0.0159 | 0.0157 | 0.0161 | 0.0002 | 0.0945 | n/a | n/a | 1.9343 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
197
+ | activations | log | `(128,)` | NumPy | 0.0015 | 0.0015 | 0.0014 | 0.0018 | 0.0001 | 0.0945 | n/a | n/a | 1.9343 | no | n/a | n/a | yes | NumPy | NumPy baseline |
198
+ | activations | log | `(128,)` | JAX CPU dispatch | 0.0306 | 0.0310 | 0.0305 | 0.0327 | 0.0009 | 0.0945 | n/a | n/a | 1.9343 | no | n/a | n/a | yes | NumPy | reference |
199
+ | activations | relu | `(1024,)` | TensorStudio | 0.0157 | 0.0156 | 0.0152 | 0.0158 | 0.0003 | 0.1486 | n/a | n/a | 3.7670 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
200
+ | activations | relu | `(1024,)` | NumPy | 0.0023 | 0.0023 | 0.0023 | 0.0024 | 0.0000 | 0.1486 | n/a | n/a | 3.7670 | no | n/a | n/a | yes | NumPy | NumPy baseline |
201
+ | activations | relu | `(1024,)` | JAX CPU dispatch | 0.0593 | 0.0602 | 0.0588 | 0.0645 | 0.0021 | 0.1486 | n/a | n/a | 3.7670 | no | n/a | n/a | yes | NumPy | reference |
202
+ | activations | sigmoid | `(1024,)` | TensorStudio | 0.0201 | 0.0204 | 0.0196 | 0.0212 | 0.0006 | 0.3790 | n/a | n/a | 4.9521 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
203
+ | activations | sigmoid | `(1024,)` | NumPy | 0.0076 | 0.0076 | 0.0072 | 0.0082 | 0.0003 | 0.3790 | n/a | n/a | 4.9521 | no | n/a | n/a | yes | NumPy | NumPy baseline |
204
+ | activations | sigmoid | `(1024,)` | JAX CPU dispatch | 0.0997 | 0.1031 | 0.0925 | 0.1131 | 0.0080 | 0.3790 | n/a | n/a | 4.9521 | no | n/a | n/a | yes | NumPy | reference |
205
+ | activations | tanh | `(1024,)` | TensorStudio | 0.0262 | 0.0262 | 0.0259 | 0.0267 | 0.0003 | 0.1435 | n/a | n/a | 1.2173 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
206
+ | activations | tanh | `(1024,)` | NumPy | 0.0038 | 0.0038 | 0.0036 | 0.0040 | 0.0001 | 0.1435 | n/a | n/a | 1.2173 | no | n/a | n/a | yes | NumPy | NumPy baseline |
207
+ | activations | tanh | `(1024,)` | JAX CPU dispatch | 0.0319 | 0.0321 | 0.0317 | 0.0330 | 0.0005 | 0.1435 | n/a | n/a | 1.2173 | no | n/a | n/a | yes | NumPy | reference |
208
+ | activations | exp | `(1024,)` | TensorStudio | 0.0203 | 0.0204 | 0.0197 | 0.0214 | 0.0006 | 0.1269 | n/a | n/a | 1.5511 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
209
+ | activations | exp | `(1024,)` | NumPy | 0.0026 | 0.0026 | 0.0025 | 0.0027 | 0.0001 | 0.1269 | n/a | n/a | 1.5511 | no | n/a | n/a | yes | NumPy | NumPy baseline |
210
+ | activations | exp | `(1024,)` | JAX CPU dispatch | 0.0314 | 0.0319 | 0.0304 | 0.0347 | 0.0015 | 0.1269 | n/a | n/a | 1.5511 | no | n/a | n/a | yes | NumPy | reference |
211
+ | activations | log | `(1024,)` | TensorStudio | 0.0206 | 0.0208 | 0.0205 | 0.0215 | 0.0004 | 0.1452 | n/a | n/a | 1.4968 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
212
+ | activations | log | `(1024,)` | NumPy | 0.0030 | 0.0031 | 0.0030 | 0.0033 | 0.0001 | 0.1452 | n/a | n/a | 1.4968 | no | n/a | n/a | yes | NumPy | NumPy baseline |
213
+ | activations | log | `(1024,)` | JAX CPU dispatch | 0.0308 | 0.0313 | 0.0307 | 0.0320 | 0.0006 | 0.1452 | n/a | n/a | 1.4968 | no | n/a | n/a | yes | NumPy | reference |
214
+ | activations | relu | `(4096,)` | TensorStudio | 0.0188 | 0.0185 | 0.0167 | 0.0203 | 0.0014 | 0.2069 | n/a | n/a | 3.9500 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
215
+ | activations | relu | `(4096,)` | NumPy | 0.0039 | 0.0042 | 0.0039 | 0.0053 | 0.0006 | 0.2069 | n/a | n/a | 3.9500 | no | n/a | n/a | yes | NumPy | NumPy baseline |
216
+ | activations | relu | `(4096,)` | JAX CPU dispatch | 0.0743 | 0.0753 | 0.0619 | 0.0888 | 0.0093 | 0.2069 | n/a | n/a | 3.9500 | no | n/a | n/a | yes | NumPy | reference |
217
+ | activations | sigmoid | `(4096,)` | TensorStudio | 0.0346 | 0.0361 | 0.0339 | 0.0405 | 0.0025 | 0.3469 | n/a | n/a | 3.2598 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
218
+ | activations | sigmoid | `(4096,)` | NumPy | 0.0120 | 0.0120 | 0.0117 | 0.0122 | 0.0002 | 0.3469 | n/a | n/a | 3.2598 | no | n/a | n/a | yes | NumPy | NumPy baseline |
219
+ | activations | sigmoid | `(4096,)` | JAX CPU dispatch | 0.1127 | 0.1101 | 0.1018 | 0.1167 | 0.0055 | 0.3469 | n/a | n/a | 3.2598 | no | n/a | n/a | yes | NumPy | reference |
220
+ | activations | tanh | `(4096,)` | TensorStudio | 0.0637 | 0.0652 | 0.0623 | 0.0683 | 0.0026 | 0.1835 | n/a | n/a | 0.5505 | no | n/a | n/a | no | NumPy | loss vs NumPy |
221
+ | activations | tanh | `(4096,)` | NumPy | 0.0117 | 0.0121 | 0.0103 | 0.0154 | 0.0017 | 0.1835 | n/a | n/a | 0.5505 | no | n/a | n/a | no | NumPy | NumPy baseline |
222
+ | activations | tanh | `(4096,)` | JAX CPU dispatch | 0.0351 | 0.0351 | 0.0343 | 0.0363 | 0.0008 | 0.1835 | n/a | n/a | 0.5505 | no | n/a | n/a | no | NumPy | reference |
223
+ | activations | exp | `(4096,)` | TensorStudio | 0.0330 | 0.0326 | 0.0312 | 0.0342 | 0.0012 | 0.1949 | n/a | n/a | 1.0498 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
224
+ | activations | exp | `(4096,)` | NumPy | 0.0064 | 0.0068 | 0.0063 | 0.0079 | 0.0006 | 0.1949 | n/a | n/a | 1.0498 | no | n/a | n/a | yes | NumPy | NumPy baseline |
225
+ | activations | exp | `(4096,)` | JAX CPU dispatch | 0.0347 | 0.0351 | 0.0344 | 0.0361 | 0.0007 | 0.1949 | n/a | n/a | 1.0498 | no | n/a | n/a | yes | NumPy | reference |
226
+ | activations | log | `(4096,)` | TensorStudio | 0.0375 | 0.0374 | 0.0370 | 0.0377 | 0.0003 | 0.1958 | n/a | n/a | 0.9606 | no | n/a | n/a | no | NumPy | loss vs NumPy |
227
+ | activations | log | `(4096,)` | NumPy | 0.0073 | 0.0073 | 0.0072 | 0.0074 | 0.0001 | 0.1958 | n/a | n/a | 0.9606 | no | n/a | n/a | no | NumPy | NumPy baseline |
228
+ | activations | log | `(4096,)` | JAX CPU dispatch | 0.0360 | 0.0360 | 0.0354 | 0.0366 | 0.0005 | 0.1958 | n/a | n/a | 0.9606 | no | n/a | n/a | no | NumPy | reference |
229
+ | activations | relu | `(16384,)` | TensorStudio | 0.0234 | 0.0239 | 0.0227 | 0.0258 | 0.0011 | 0.3740 | n/a | n/a | 4.0446 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
230
+ | activations | relu | `(16384,)` | NumPy | 0.0087 | 0.0090 | 0.0087 | 0.0103 | 0.0006 | 0.3740 | n/a | n/a | 4.0446 | no | n/a | n/a | yes | NumPy | NumPy baseline |
231
+ | activations | relu | `(16384,)` | JAX CPU dispatch | 0.0945 | 0.0940 | 0.0797 | 0.1053 | 0.0084 | 0.3740 | n/a | n/a | 4.0446 | no | n/a | n/a | yes | NumPy | reference |
232
+ | activations | sigmoid | `(16384,)` | TensorStudio | 0.0926 | 0.0930 | 0.0901 | 0.0969 | 0.0024 | 0.3705 | n/a | n/a | 1.3238 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
233
+ | activations | sigmoid | `(16384,)` | NumPy | 0.0343 | 0.0349 | 0.0329 | 0.0397 | 0.0025 | 0.3705 | n/a | n/a | 1.3238 | no | n/a | n/a | yes | NumPy | NumPy baseline |
234
+ | activations | sigmoid | `(16384,)` | JAX CPU dispatch | 0.1226 | 0.1251 | 0.1130 | 0.1449 | 0.0121 | 0.3705 | n/a | n/a | 1.3238 | no | n/a | n/a | yes | NumPy | reference |
235
+ | activations | tanh | `(16384,)` | TensorStudio | 0.2135 | 0.2145 | 0.2131 | 0.2186 | 0.0021 | 0.1912 | n/a | n/a | 0.1823 | no | n/a | n/a | no | JAX CPU dispatch | loss vs NumPy |
236
+ | activations | tanh | `(16384,)` | NumPy | 0.0408 | 0.0405 | 0.0398 | 0.0410 | 0.0005 | 0.1912 | n/a | n/a | 0.1823 | no | n/a | n/a | no | JAX CPU dispatch | NumPy baseline |
237
+ | activations | tanh | `(16384,)` | JAX CPU dispatch | 0.0389 | 0.0389 | 0.0375 | 0.0401 | 0.0009 | 0.1912 | n/a | n/a | 0.1823 | no | n/a | n/a | no | JAX CPU dispatch | reference |
238
+ | activations | exp | `(16384,)` | TensorStudio | 0.0806 | 0.0815 | 0.0775 | 0.0876 | 0.0033 | 0.2410 | n/a | n/a | 0.4979 | no | n/a | n/a | no | NumPy | loss vs NumPy |
239
+ | activations | exp | `(16384,)` | NumPy | 0.0194 | 0.0208 | 0.0192 | 0.0234 | 0.0018 | 0.2410 | n/a | n/a | 0.4979 | no | n/a | n/a | no | NumPy | NumPy baseline |
240
+ | activations | exp | `(16384,)` | JAX CPU dispatch | 0.0401 | 0.0408 | 0.0394 | 0.0426 | 0.0013 | 0.2410 | n/a | n/a | 0.4979 | no | n/a | n/a | no | NumPy | reference |
241
+ | activations | log | `(16384,)` | TensorStudio | 0.1035 | 0.1044 | 0.1019 | 0.1101 | 0.0030 | 0.2480 | n/a | n/a | 0.4550 | no | n/a | n/a | no | NumPy | loss vs NumPy |
242
+ | activations | log | `(16384,)` | NumPy | 0.0257 | 0.0258 | 0.0253 | 0.0262 | 0.0004 | 0.2480 | n/a | n/a | 0.4550 | no | n/a | n/a | no | NumPy | NumPy baseline |
243
+ | activations | log | `(16384,)` | JAX CPU dispatch | 0.0471 | 0.0485 | 0.0430 | 0.0568 | 0.0048 | 0.2480 | n/a | n/a | 0.4550 | no | n/a | n/a | no | NumPy | reference |
244
+ | reductions | sum | `(1,)` | TensorStudio | 0.0157 | 0.0159 | 0.0155 | 0.0167 | 0.0005 | 0.1442 | n/a | n/a | 0.7830 | no | n/a | n/a | no | NumPy | loss vs NumPy |
245
+ | reductions | sum | `(1,)` | NumPy | 0.0023 | 0.0027 | 0.0022 | 0.0042 | 0.0008 | 0.1442 | n/a | n/a | 0.7830 | no | n/a | n/a | no | NumPy | NumPy baseline |
246
+ | reductions | sum | `(1,)` | JAX CPU dispatch | 0.0123 | 0.0124 | 0.0122 | 0.0127 | 0.0002 | 0.1442 | n/a | n/a | 0.7830 | no | n/a | n/a | no | NumPy | reference |
247
+ | reductions | mean | `(1,)` | TensorStudio | 0.0157 | 0.0159 | 0.0155 | 0.0164 | 0.0004 | 0.5751 | n/a | n/a | 0.7418 | no | n/a | n/a | no | NumPy | loss vs NumPy |
248
+ | reductions | mean | `(1,)` | NumPy | 0.0091 | 0.0098 | 0.0080 | 0.0116 | 0.0015 | 0.5751 | n/a | n/a | 0.7418 | no | n/a | n/a | no | NumPy | NumPy baseline |
249
+ | reductions | mean | `(1,)` | JAX CPU dispatch | 0.0117 | 0.0120 | 0.0116 | 0.0132 | 0.0006 | 0.5751 | n/a | n/a | 0.7418 | no | n/a | n/a | no | NumPy | reference |
250
+ | reductions | sum | `(8,)` | TensorStudio | 0.0155 | 0.0156 | 0.0154 | 0.0161 | 0.0003 | 0.1530 | n/a | n/a | 0.8472 | no | n/a | n/a | no | NumPy | loss vs NumPy |
251
+ | reductions | sum | `(8,)` | NumPy | 0.0024 | 0.0024 | 0.0022 | 0.0025 | 0.0001 | 0.1530 | n/a | n/a | 0.8472 | no | n/a | n/a | no | NumPy | NumPy baseline |
252
+ | reductions | sum | `(8,)` | JAX CPU dispatch | 0.0131 | 0.0131 | 0.0129 | 0.0134 | 0.0002 | 0.1530 | n/a | n/a | 0.8472 | no | n/a | n/a | no | NumPy | reference |
253
+ | reductions | mean | `(8,)` | TensorStudio | 0.0159 | 0.0163 | 0.0156 | 0.0174 | 0.0006 | 0.5086 | n/a | n/a | 0.7543 | no | n/a | n/a | no | NumPy | loss vs NumPy |
254
+ | reductions | mean | `(8,)` | NumPy | 0.0081 | 0.0081 | 0.0079 | 0.0084 | 0.0001 | 0.5086 | n/a | n/a | 0.7543 | no | n/a | n/a | no | NumPy | NumPy baseline |
255
+ | reductions | mean | `(8,)` | JAX CPU dispatch | 0.0120 | 0.0122 | 0.0118 | 0.0128 | 0.0004 | 0.5086 | n/a | n/a | 0.7543 | no | n/a | n/a | no | NumPy | reference |
256
+ | reductions | sum | `(32,)` | TensorStudio | 0.0160 | 0.0159 | 0.0157 | 0.0161 | 0.0002 | 0.1458 | n/a | n/a | 0.8329 | no | n/a | n/a | no | NumPy | loss vs NumPy |
257
+ | reductions | sum | `(32,)` | NumPy | 0.0023 | 0.0023 | 0.0022 | 0.0024 | 0.0001 | 0.1458 | n/a | n/a | 0.8329 | no | n/a | n/a | no | NumPy | NumPy baseline |
258
+ | reductions | sum | `(32,)` | JAX CPU dispatch | 0.0133 | 0.0132 | 0.0128 | 0.0137 | 0.0004 | 0.1458 | n/a | n/a | 0.8329 | no | n/a | n/a | no | NumPy | reference |
259
+ | reductions | mean | `(32,)` | TensorStudio | 0.0158 | 0.0159 | 0.0157 | 0.0163 | 0.0002 | 0.5215 | n/a | n/a | 0.7968 | no | n/a | n/a | no | NumPy | loss vs NumPy |
260
+ | reductions | mean | `(32,)` | NumPy | 0.0082 | 0.0082 | 0.0080 | 0.0085 | 0.0002 | 0.5215 | n/a | n/a | 0.7968 | no | n/a | n/a | no | NumPy | NumPy baseline |
261
+ | reductions | mean | `(32,)` | JAX CPU dispatch | 0.0126 | 0.0128 | 0.0125 | 0.0135 | 0.0004 | 0.5215 | n/a | n/a | 0.7968 | no | n/a | n/a | no | NumPy | reference |
262
+ | reductions | sum | `(128,)` | TensorStudio | 0.0158 | 0.0160 | 0.0156 | 0.0167 | 0.0004 | 0.1458 | n/a | n/a | 0.9056 | no | n/a | n/a | no | NumPy | loss vs NumPy |
263
+ | reductions | sum | `(128,)` | NumPy | 0.0023 | 0.0024 | 0.0022 | 0.0027 | 0.0002 | 0.1458 | n/a | n/a | 0.9056 | no | n/a | n/a | no | NumPy | NumPy baseline |
264
+ | reductions | sum | `(128,)` | JAX CPU dispatch | 0.0143 | 0.0142 | 0.0137 | 0.0148 | 0.0004 | 0.1458 | n/a | n/a | 0.9056 | no | n/a | n/a | no | NumPy | reference |
265
+ | reductions | mean | `(128,)` | TensorStudio | 0.0156 | 0.0159 | 0.0155 | 0.0170 | 0.0005 | 0.5124 | n/a | n/a | 0.8789 | no | n/a | n/a | no | NumPy | loss vs NumPy |
266
+ | reductions | mean | `(128,)` | NumPy | 0.0080 | 0.0084 | 0.0079 | 0.0097 | 0.0007 | 0.5124 | n/a | n/a | 0.8789 | no | n/a | n/a | no | NumPy | NumPy baseline |
267
+ | reductions | mean | `(128,)` | JAX CPU dispatch | 0.0137 | 0.0138 | 0.0134 | 0.0145 | 0.0004 | 0.5124 | n/a | n/a | 0.8789 | no | n/a | n/a | no | NumPy | reference |
268
+ | reductions | sum | `(1024,)` | TensorStudio | 0.0167 | 0.0168 | 0.0164 | 0.0175 | 0.0004 | 0.1693 | n/a | n/a | 1.2890 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
269
+ | reductions | sum | `(1024,)` | NumPy | 0.0028 | 0.0028 | 0.0026 | 0.0032 | 0.0002 | 0.1693 | n/a | n/a | 1.2890 | no | n/a | n/a | yes | NumPy | NumPy baseline |
270
+ | reductions | sum | `(1024,)` | JAX CPU dispatch | 0.0215 | 0.0231 | 0.0194 | 0.0280 | 0.0035 | 0.1693 | n/a | n/a | 1.2890 | no | n/a | n/a | yes | NumPy | reference |
271
+ | reductions | mean | `(1024,)` | TensorStudio | 0.0166 | 0.0167 | 0.0164 | 0.0169 | 0.0002 | 0.5214 | n/a | n/a | 0.9997 | no | n/a | n/a | no | NumPy | loss vs NumPy |
272
+ | reductions | mean | `(1024,)` | NumPy | 0.0086 | 0.0086 | 0.0083 | 0.0088 | 0.0002 | 0.5214 | n/a | n/a | 0.9997 | no | n/a | n/a | no | NumPy | NumPy baseline |
273
+ | reductions | mean | `(1024,)` | JAX CPU dispatch | 0.0166 | 0.0170 | 0.0131 | 0.0213 | 0.0027 | 0.5214 | n/a | n/a | 0.9997 | no | n/a | n/a | no | NumPy | reference |
274
+ | reductions | sum | `(4096,)` | TensorStudio | 0.0198 | 0.0199 | 0.0194 | 0.0204 | 0.0003 | 0.1856 | n/a | n/a | 0.9947 | no | n/a | n/a | no | NumPy | loss vs NumPy |
275
+ | reductions | sum | `(4096,)` | NumPy | 0.0037 | 0.0037 | 0.0035 | 0.0040 | 0.0002 | 0.1856 | n/a | n/a | 0.9947 | no | n/a | n/a | no | NumPy | NumPy baseline |
276
+ | reductions | sum | `(4096,)` | JAX CPU dispatch | 0.0197 | 0.0201 | 0.0179 | 0.0227 | 0.0019 | 0.1856 | n/a | n/a | 0.9947 | no | n/a | n/a | no | NumPy | reference |
277
+ | reductions | mean | `(4096,)` | TensorStudio | 0.0205 | 0.0209 | 0.0195 | 0.0234 | 0.0013 | 0.4684 | n/a | n/a | 1.0248 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
278
+ | reductions | mean | `(4096,)` | NumPy | 0.0096 | 0.0101 | 0.0095 | 0.0121 | 0.0010 | 0.4684 | n/a | n/a | 1.0248 | no | n/a | n/a | yes | NumPy | NumPy baseline |
279
+ | reductions | mean | `(4096,)` | JAX CPU dispatch | 0.0210 | 0.0208 | 0.0176 | 0.0253 | 0.0029 | 0.4684 | n/a | n/a | 1.0248 | no | n/a | n/a | yes | NumPy | reference |
280
+ | reductions | sum | `(16384,)` | TensorStudio | 0.0335 | 0.0335 | 0.0324 | 0.0347 | 0.0009 | 0.2020 | n/a | n/a | 0.7547 | no | n/a | n/a | no | NumPy | loss vs NumPy |
281
+ | reductions | sum | `(16384,)` | NumPy | 0.0068 | 0.0067 | 0.0066 | 0.0068 | 0.0001 | 0.2020 | n/a | n/a | 0.7547 | no | n/a | n/a | no | NumPy | NumPy baseline |
282
+ | reductions | sum | `(16384,)` | JAX CPU dispatch | 0.0253 | 0.0294 | 0.0239 | 0.0400 | 0.0064 | 0.2020 | n/a | n/a | 0.7547 | no | n/a | n/a | no | NumPy | reference |
283
+ | reductions | mean | `(16384,)` | TensorStudio | 0.0344 | 0.0358 | 0.0328 | 0.0416 | 0.0031 | 0.3819 | n/a | n/a | 0.7749 | no | n/a | n/a | no | NumPy | loss vs NumPy |
284
+ | reductions | mean | `(16384,)` | NumPy | 0.0132 | 0.0135 | 0.0129 | 0.0148 | 0.0007 | 0.3819 | n/a | n/a | 0.7749 | no | n/a | n/a | no | NumPy | NumPy baseline |
285
+ | reductions | mean | `(16384,)` | JAX CPU dispatch | 0.0267 | 0.0263 | 0.0218 | 0.0303 | 0.0035 | 0.3819 | n/a | n/a | 0.7749 | no | n/a | n/a | no | NumPy | reference |
286
+ | reductions | sum_axis1 | `(16, 16)` | TensorStudio | 0.0161 | 0.0162 | 0.0160 | 0.0166 | 0.0002 | 0.1714 | n/a | n/a | 0.8417 | no | n/a | n/a | no | NumPy | loss vs NumPy |
287
+ | reductions | sum_axis1 | `(16, 16)` | NumPy | 0.0028 | 0.0028 | 0.0027 | 0.0029 | 0.0001 | 0.1714 | n/a | n/a | 0.8417 | no | n/a | n/a | no | NumPy | NumPy baseline |
288
+ | reductions | sum_axis1 | `(16, 16)` | JAX CPU dispatch | 0.0136 | 0.0134 | 0.0125 | 0.0141 | 0.0006 | 0.1714 | n/a | n/a | 0.8417 | no | n/a | n/a | no | NumPy | reference |
289
+ | reductions | mean_axis0 | `(16, 16)` | TensorStudio | 0.0105 | 0.0105 | 0.0101 | 0.0110 | 0.0003 | 1.0162 | n/a | n/a | 1.1529 | yes | n/a | n/a | yes | TensorStudio | win vs NumPy |
290
+ | reductions | mean_axis0 | `(16, 16)` | NumPy | 0.0106 | 0.0108 | 0.0101 | 0.0120 | 0.0007 | 1.0162 | n/a | n/a | 1.1529 | yes | n/a | n/a | yes | TensorStudio | NumPy baseline |
291
+ | reductions | mean_axis0 | `(16, 16)` | JAX CPU dispatch | 0.0121 | 0.0121 | 0.0117 | 0.0126 | 0.0003 | 1.0162 | n/a | n/a | 1.1529 | yes | n/a | n/a | yes | TensorStudio | reference |
292
+ | reductions | sum_axis1 | `(64, 64)` | TensorStudio | 0.0190 | 0.0190 | 0.0189 | 0.0192 | 0.0001 | 0.2231 | n/a | n/a | 1.1642 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
293
+ | reductions | sum_axis1 | `(64, 64)` | NumPy | 0.0042 | 0.0044 | 0.0042 | 0.0052 | 0.0004 | 0.2231 | n/a | n/a | 1.1642 | no | n/a | n/a | yes | NumPy | NumPy baseline |
294
+ | reductions | sum_axis1 | `(64, 64)` | JAX CPU dispatch | 0.0221 | 0.0216 | 0.0179 | 0.0236 | 0.0020 | 0.2231 | n/a | n/a | 1.1642 | no | n/a | n/a | yes | NumPy | reference |
295
+ | reductions | mean_axis0 | `(64, 64)` | TensorStudio | 0.0135 | 0.0141 | 0.0130 | 0.0169 | 0.0014 | 0.8762 | n/a | n/a | 1.3580 | no | n/a | n/a | yes | NumPy | loss vs NumPy |
296
+ | reductions | mean_axis0 | `(64, 64)` | NumPy | 0.0118 | 0.0120 | 0.0114 | 0.0130 | 0.0005 | 0.8762 | n/a | n/a | 1.3580 | no | n/a | n/a | yes | NumPy | NumPy baseline |
297
+ | reductions | mean_axis0 | `(64, 64)` | JAX CPU dispatch | 0.0184 | 0.0193 | 0.0166 | 0.0235 | 0.0026 | 0.8762 | n/a | n/a | 1.3580 | no | n/a | n/a | yes | NumPy | reference |
298
+ | reductions | sum_axis1 | `(128, 128)` | TensorStudio | 0.0304 | 0.0303 | 0.0293 | 0.0309 | 0.0006 | 0.2638 | n/a | n/a | 0.8339 | no | n/a | n/a | no | NumPy | loss vs NumPy |
299
+ | reductions | sum_axis1 | `(128, 128)` | NumPy | 0.0080 | 0.0084 | 0.0079 | 0.0099 | 0.0008 | 0.2638 | n/a | n/a | 0.8339 | no | n/a | n/a | no | NumPy | NumPy baseline |
300
+ | reductions | sum_axis1 | `(128, 128)` | JAX CPU dispatch | 0.0253 | 0.0286 | 0.0232 | 0.0376 | 0.0054 | 0.2638 | n/a | n/a | 0.8339 | no | n/a | n/a | no | NumPy | reference |
301
+ | reductions | mean_axis0 | `(128, 128)` | TensorStudio | 0.0242 | 0.0238 | 0.0231 | 0.0243 | 0.0005 | 0.6597 | n/a | n/a | 0.8398 | no | n/a | n/a | no | NumPy | loss vs NumPy |
302
+ | reductions | mean_axis0 | `(128, 128)` | NumPy | 0.0159 | 0.0165 | 0.0157 | 0.0190 | 0.0012 | 0.6597 | n/a | n/a | 0.8398 | no | n/a | n/a | no | NumPy | NumPy baseline |
303
+ | reductions | mean_axis0 | `(128, 128)` | JAX CPU dispatch | 0.0203 | 0.0215 | 0.0160 | 0.0330 | 0.0062 | 0.6597 | n/a | n/a | 0.8398 | no | n/a | n/a | no | NumPy | reference |
304
+ | reductions | sum_axis1 | `(256, 256)` | TensorStudio | 0.0790 | 0.0794 | 0.0787 | 0.0810 | 0.0008 | 0.2844 | n/a | n/a | 0.8837 | no | n/a | n/a | no | NumPy | loss vs NumPy |
305
+ | reductions | sum_axis1 | `(256, 256)` | NumPy | 0.0225 | 0.0225 | 0.0220 | 0.0230 | 0.0003 | 0.2844 | n/a | n/a | 0.8837 | no | n/a | n/a | no | NumPy | NumPy baseline |
306
+ | reductions | sum_axis1 | `(256, 256)` | JAX CPU dispatch | 0.0698 | 0.0727 | 0.0675 | 0.0820 | 0.0055 | 0.2844 | n/a | n/a | 0.8837 | no | n/a | n/a | no | NumPy | reference |
307
+ | reductions | mean_axis0 | `(256, 256)` | TensorStudio | 0.0611 | 0.0612 | 0.0584 | 0.0639 | 0.0017 | 0.5159 | n/a | n/a | 0.4471 | no | n/a | n/a | no | JAX CPU dispatch | loss vs NumPy |
308
+ | reductions | mean_axis0 | `(256, 256)` | NumPy | 0.0315 | 0.0323 | 0.0233 | 0.0427 | 0.0077 | 0.5159 | n/a | n/a | 0.4471 | no | n/a | n/a | no | JAX CPU dispatch | NumPy baseline |
309
+ | reductions | mean_axis0 | `(256, 256)` | JAX CPU dispatch | 0.0273 | 0.0283 | 0.0186 | 0.0438 | 0.0085 | 0.5159 | n/a | n/a | 0.4471 | no | n/a | n/a | no | JAX CPU dispatch | reference |
310
+ | matmul | matmul | `(16, 16)` | TensorStudio | 0.0184 | 0.0193 | 0.0181 | 0.0226 | 0.0017 | 0.1053 | n/a | n/a | 0.7832 | no | n/a | n/a | no | NumPy | loss vs NumPy |
311
+ | matmul | matmul | `(16, 16)` | NumPy | 0.0019 | 0.0020 | 0.0019 | 0.0022 | 0.0001 | 0.1053 | n/a | n/a | 0.7832 | no | n/a | n/a | no | NumPy | NumPy baseline |
312
+ | matmul | matmul | `(16, 16)` | JAX CPU dispatch | 0.0144 | 0.0153 | 0.0099 | 0.0270 | 0.0061 | 0.1053 | n/a | n/a | 0.7832 | no | n/a | n/a | no | NumPy | reference |
313
+ | matmul | matmul | `(64, 64)` | TensorStudio | 0.0970 | 0.1074 | 0.0948 | 0.1474 | 0.0202 | 0.1348 | n/a | n/a | 0.3200 | no | n/a | n/a | no | NumPy | loss vs NumPy |
314
+ | matmul | matmul | `(64, 64)` | NumPy | 0.0131 | 0.0133 | 0.0114 | 0.0160 | 0.0015 | 0.1348 | n/a | n/a | 0.3200 | no | n/a | n/a | no | NumPy | NumPy baseline |
315
+ | matmul | matmul | `(64, 64)` | JAX CPU dispatch | 0.0310 | 0.0313 | 0.0220 | 0.0378 | 0.0057 | 0.1348 | n/a | n/a | 0.3200 | no | n/a | n/a | no | NumPy | reference |
316
+ | matmul | matmul | `(128, 128)` | TensorStudio | 0.3957 | 0.3965 | 0.3798 | 0.4179 | 0.0137 | 0.9076 | n/a | n/a | 0.2945 | no | n/a | n/a | no | JAX CPU dispatch | loss vs NumPy |
317
+ | matmul | matmul | `(128, 128)` | NumPy | 0.3591 | 0.3651 | 0.3213 | 0.3975 | 0.0273 | 0.9076 | n/a | n/a | 0.2945 | no | n/a | n/a | no | JAX CPU dispatch | NumPy baseline |
318
+ | matmul | matmul | `(128, 128)` | JAX CPU dispatch | 0.1165 | 0.1378 | 0.1029 | 0.2331 | 0.0487 | 0.9076 | n/a | n/a | 0.2945 | no | n/a | n/a | no | JAX CPU dispatch | reference |
319
+ | matmul | matmul | `(256, 256)` | TensorStudio | 2.1900 | 2.2223 | 2.0101 | 2.4283 | 0.1504 | 0.2000 | n/a | n/a | 0.1192 | no | n/a | n/a | no | JAX CPU dispatch | loss vs NumPy |
320
+ | matmul | matmul | `(256, 256)` | NumPy | 0.4380 | 0.4569 | 0.4316 | 0.5065 | 0.0297 | 0.2000 | n/a | n/a | 0.1192 | no | n/a | n/a | no | JAX CPU dispatch | NumPy baseline |
321
+ | matmul | matmul | `(256, 256)` | JAX CPU dispatch | 0.2610 | 0.2567 | 0.2377 | 0.2668 | 0.0108 | 0.2000 | n/a | n/a | 0.1192 | no | n/a | n/a | no | JAX CPU dispatch | reference |
322
+ | conv2d | conv2d_3x3_padding1 | `(1, 1, 8, 8)` | TensorStudio | 0.1995 | 0.2075 | 0.1859 | 0.2344 | 0.0188 | 6.2118 | n/a | n/a | 0.5443 | yes | n/a | n/a | no | JAX CPU dispatch | win vs NumPy |
323
+ | conv2d | conv2d_3x3_padding1 | `(1, 1, 8, 8)` | NumPy | 1.2390 | 1.2430 | 1.2333 | 1.2592 | 0.0090 | 6.2118 | n/a | n/a | 0.5443 | yes | n/a | n/a | no | JAX CPU dispatch | NumPy baseline |
324
+ | conv2d | conv2d_3x3_padding1 | `(1, 1, 8, 8)` | JAX CPU dispatch | 0.1086 | 0.1134 | 0.1025 | 0.1430 | 0.0151 | 6.2118 | n/a | n/a | 0.5443 | yes | n/a | n/a | no | JAX CPU dispatch | reference |
325
+ | conv2d | conv2d_3x3_padding1 | `(4, 3, 16, 16)` | TensorStudio | 5.6637 | 5.6840 | 5.5839 | 5.8084 | 0.0751 | 12.2538 | n/a | n/a | 0.0651 | yes | n/a | n/a | no | JAX CPU dispatch | win vs NumPy |
326
+ | conv2d | conv2d_3x3_padding1 | `(4, 3, 16, 16)` | NumPy | 69.4021 | 68.9603 | 62.8922 | 76.2510 | 4.9158 | 12.2538 | n/a | n/a | 0.0651 | yes | n/a | n/a | no | JAX CPU dispatch | NumPy baseline |
327
+ | conv2d | conv2d_3x3_padding1 | `(4, 3, 16, 16)` | JAX CPU dispatch | 0.3686 | 0.3672 | 0.3302 | 0.3899 | 0.0206 | 12.2538 | n/a | n/a | 0.0651 | yes | n/a | n/a | no | JAX CPU dispatch | reference |
328
+ | pooling | max_pool2d_2x2 | `(1, 1, 16, 16)` | TensorStudio | 0.0286 | 0.0284 | 0.0275 | 0.0290 | 0.0005 | 5.8921 | n/a | n/a | n/a | yes | n/a | n/a | n/a | TensorStudio | win vs NumPy |
329
+ | pooling | max_pool2d_2x2 | `(1, 1, 16, 16)` | NumPy | 0.1684 | 0.2084 | 0.1658 | 0.2778 | 0.0510 | 5.8921 | n/a | n/a | n/a | yes | n/a | n/a | n/a | TensorStudio | NumPy baseline |
330
+ | pooling | avg_pool2d_2x2 | `(1, 1, 16, 16)` | TensorStudio | 0.0286 | 0.0289 | 0.0279 | 0.0304 | 0.0008 | 19.4803 | n/a | n/a | n/a | yes | n/a | n/a | n/a | TensorStudio | win vs NumPy |
331
+ | pooling | avg_pool2d_2x2 | `(1, 1, 16, 16)` | NumPy | 0.5569 | 0.5642 | 0.5545 | 0.5938 | 0.0149 | 19.4803 | n/a | n/a | n/a | yes | n/a | n/a | n/a | TensorStudio | NumPy baseline |
332
+ | pooling | max_pool2d_2x2 | `(4, 3, 32, 32)` | TensorStudio | 0.5507 | 0.5455 | 0.5272 | 0.5591 | 0.0123 | 14.9279 | n/a | n/a | n/a | yes | n/a | n/a | n/a | TensorStudio | win vs NumPy |
333
+ | pooling | max_pool2d_2x2 | `(4, 3, 32, 32)` | NumPy | 8.2212 | 8.3594 | 8.0018 | 9.1672 | 0.4250 | 14.9279 | n/a | n/a | n/a | yes | n/a | n/a | n/a | TensorStudio | NumPy baseline |
334
+ | pooling | avg_pool2d_2x2 | `(4, 3, 32, 32)` | TensorStudio | 0.6059 | 0.6015 | 0.5767 | 0.6183 | 0.0142 | 46.3953 | n/a | n/a | n/a | yes | n/a | n/a | n/a | TensorStudio | win vs NumPy |
335
+ | pooling | avg_pool2d_2x2 | `(4, 3, 32, 32)` | NumPy | 28.1123 | 28.2268 | 26.7658 | 29.6040 | 1.2100 | 46.3953 | n/a | n/a | n/a | yes | n/a | n/a | n/a | TensorStudio | NumPy baseline |
336
+ | autograd | scalar_backward | `(1,)` | TensorStudio | 0.1200 | 0.1216 | 0.1155 | 0.1327 | 0.0058 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | TensorStudio | no NumPy reference |
337
+ | autograd | elementwise_backward | `(1,)` | TensorStudio | 0.2975 | 0.2990 | 0.2930 | 0.3050 | 0.0043 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | TensorStudio | no NumPy reference |
338
+ | autograd | scalar_backward | `(128,)` | TensorStudio | 0.2461 | 0.2499 | 0.2437 | 0.2666 | 0.0084 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | TensorStudio | no NumPy reference |
339
+ | autograd | elementwise_backward | `(128,)` | TensorStudio | 0.5992 | 0.6056 | 0.5956 | 0.6330 | 0.0140 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | TensorStudio | no NumPy reference |
340
+ | autograd | scalar_backward | `(1024,)` | TensorStudio | 1.1602 | 1.1805 | 1.1468 | 1.2729 | 0.0468 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | TensorStudio | no NumPy reference |
341
+ | autograd | elementwise_backward | `(1024,)` | TensorStudio | 2.7758 | 2.7763 | 2.7325 | 2.8289 | 0.0349 | n/a | n/a | n/a | n/a | n/a | n/a | n/a | n/a | TensorStudio | no NumPy reference |
342
+ | training_loop | tiny_linear_regression_10_steps | `(32,)` | TensorStudio | 5.2182 | 5.2834 | 5.0684 | 5.6278 | 0.2017 | 0.0307 | n/a | n/a | n/a | no | n/a | n/a | n/a | NumPy | loss vs NumPy |
343
+ | training_loop | tiny_linear_regression_10_steps | `(32,)` | NumPy | 0.1601 | 0.2081 | 0.1590 | 0.4017 | 0.0968 | 0.0307 | n/a | n/a | n/a | no | n/a | n/a | n/a | NumPy | NumPy baseline |
344
+
345
+ Speedup columns are `competitor median / TensorStudio median`; values above 1.0 mean
346
+ TensorStudio was faster for that specific case.
347
+ Win columns say whether that same speedup is above 1.0 for the competitor.