| 41 | namespace cuda { |
| 42 | |
| 43 | WorkspaceBundle SVDForwardImpl::get_workspace_bundle( |
| 44 | size_t block_cnt, size_t m, size_t n, size_t dtype_size, void* raw_ptr) { |
| 45 | const size_t max_mn = std::max(m, n); |
| 46 | const size_t min_mn = std::min(m, n); |
| 47 | SmallVector<size_t> ws_sizes = { |
| 48 | block_cnt * m * n * dtype_size, // copy of src |
| 49 | get_cusolver_buffer_size(max_mn, min_mn) * dtype_size, |
| 50 | sizeof(int) // devInfo |
| 51 | }; |
| 52 | if (m > n) { |
| 53 | ws_sizes.push_back(block_cnt * max_mn * max_mn * dtype_size); |
| 54 | ws_sizes.push_back(block_cnt * min_mn * min_mn * dtype_size); |
| 55 | } |
| 56 | return {raw_ptr, std::move(ws_sizes), handle()->alignment_requirement()}; |
| 57 | } |
| 58 | |
| 59 | size_t SVDForwardImpl::get_cusolver_buffer_size(size_t m, size_t n) { |
| 60 | int lwork; |
no test coverage detected