| 118 | } |
| 119 | |
| 120 | void RelayoutForwardImpl::exec( |
| 121 | _megdnn_tensor_in src, _megdnn_tensor_out dst, Handle* src_handle) { |
| 122 | bool cross_dev = false; |
| 123 | |
| 124 | // check whether cross device copy |
| 125 | if (src_handle && src_handle != handle()) { |
| 126 | megcoreDeviceHandle_t dev; |
| 127 | megcoreGetDeviceHandle(src_handle->megcore_computing_handle(), &dev); |
| 128 | megcorePlatform_t plat; |
| 129 | megcoreGetPlatform(dev, &plat); |
| 130 | megdnn_assert( |
| 131 | plat == megcorePlatformROCM, |
| 132 | "only relayout between rocm devices are supported"); |
| 133 | int dst_dev_id = -1, src_dev_id = -1; |
| 134 | megcoreGetDeviceID(dev, &src_dev_id); |
| 135 | |
| 136 | megcoreGetDeviceHandle(this->handle()->megcore_computing_handle(), &dev); |
| 137 | megcoreGetDeviceID(dev, &dst_dev_id); |
| 138 | |
| 139 | megdnn_assert(src_dev_id >= 0 && dst_dev_id >= 0); |
| 140 | cross_dev = src_dev_id != dst_dev_id; |
| 141 | } |
| 142 | Param param{src, dst, this}; |
| 143 | if (!param.try_copy_contig() && !param.try_copy_2d() && |
| 144 | !param.try_copy_last_contig()) { |
| 145 | megdnn_assert(!cross_dev, "cross-device general non-contig copy unsupported"); |
| 146 | param.copy_general(); |
| 147 | } |
| 148 | } |
| 149 | |
| 150 | // vim: syntax=cpp.doxygen |
nothing calls this directly
no test coverage detected