
Figure 1
Connection between the main object types in Ocean.
Table 1
Comparison between different packages providing tensor functionality.
| Numpy | CuPy | Caffe | PyTorch | TensorFlow | MXNet | ArrayFire | Ocean | |
|---|---|---|---|---|---|---|---|---|
| Multiple device types | ✗ | ✗ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Automatic type casting | ✓ | ✓ | ✗ | ✗ | ✗ | ✗ | ✓ | ✓ |
| Unified tensor type | ✓ | ✓ | ✗ | ✓ | ✓ | ✓ | ✓ | ✓ |
| Complex data types | ✓ | ✓ | ✗ | ✗ | ✓ | ✗ | ✓ | ✓ |
| Flexible tensor strides | ✓ | ✓ | ✗ | ✓ | ✗ | ✗ | ✗ | ✓ |
| Tensor overlap detection | ✓ | ✗ | ✗ | ✓ | ✓ | ✗ | ✗ | ✓ |

Figure 2
In-place QR factorization functions with (a) individual column updates in Q, and (b) multi-column rank-one matrix updates of Q; along with (c) the calling script, and (d) the output annotated with comments. Note that Ocean supports vector inner and outer products of the form u.T*v and u*v.T.

Figure 3
Layered design of the Ocean Tensor Package. The current version implements the core modules for CPU and GPU, based on BLAS, cuBLAS, and the Solid foundation library, along with the Python language binding.
