| 119 | */ |
| 120 | template <class F, class Pack, class... Ts> |
| 121 | static auto rocblas_invoke(F f, Pack p, Ts... xs) |
| 122 | { |
| 123 | return p([=](auto... ws) { |
| 124 | auto status = f(ws..., xs...); |
| 125 | if(status != rocblas_status_success and status != rocblas_status_invalid_value) |
| 126 | { |
| 127 | if(status == rocblas_status_perf_degraded) |
| 128 | { |
| 129 | std::cerr << "WARNING: degraded perf. in rocBLAS call" << std::endl; |
| 130 | } |
| 131 | else |
| 132 | MIGRAPHX_THROW("rocblas_invoke: rocBLAS call failed with status " + |
| 133 | std::to_string(status)); |
| 134 | } |
| 135 | return status; |
| 136 | }); |
| 137 | } |
| 138 | |
| 139 | static bool is_transposed(const shape& s) |
| 140 | { |