| 1107 | |
| 1108 | #if defined(PADDLE_WITH_CUDA) |
| 1109 | static PyObject* eager_api_async_read(PyObject* self, |
| 1110 | PyObject* args, |
| 1111 | PyObject* kwargs) { |
| 1112 | EAGER_TRY |
| 1113 | auto& src = GetTensorFromArgs("async_read", "src", args, 0, false); |
| 1114 | auto& dst = GetTensorFromArgs("async_read", "dst", args, 1, false); |
| 1115 | auto& index = GetTensorFromArgs("async_read", "index", args, 2, false); |
| 1116 | auto& buffer = GetTensorFromArgs("async_read", "buffer", args, 3, false); |
| 1117 | auto& offset = GetTensorFromArgs("async_read", "offset", args, 4, false); |
| 1118 | auto& count = GetTensorFromArgs("async_read", "count", args, 5, false); |
| 1119 | const phi::distributed::ProcessMesh* mesh = nullptr; |
| 1120 | if (InputsContainDistTensor(&mesh, src, dst, index, buffer, offset, count)) { |
| 1121 | ConvertAllInputsToDistTensor(mesh, src, dst, index, buffer, offset, count); |
| 1122 | } |
| 1123 | |
| 1124 | { |
| 1125 | eager_gil_scoped_release guard; |
| 1126 | EagerSetDeviceId(); |
| 1127 | PADDLE_ENFORCE_EQ( |
| 1128 | src.is_gpu_pinned(), |
| 1129 | true, |
| 1130 | common::errors::InvalidArgument("Required `src` device should be " |
| 1131 | "CUDAPinnedPlace, but received %d.", |
| 1132 | src.place())); |
| 1133 | PADDLE_ENFORCE_EQ( |
| 1134 | dst.is_gpu(), |
| 1135 | true, |
| 1136 | common::errors::InvalidArgument( |
| 1137 | "Required `dst` device should be CUDAPlace, but received %d.", |
| 1138 | dst.place())); |
| 1139 | PADDLE_ENFORCE_EQ( |
| 1140 | index.is_cpu(), |
| 1141 | true, |
| 1142 | common::errors::InvalidArgument( |
| 1143 | "Required `index` device should be CPUPlace, but received %d.", |
| 1144 | index.place())); |
| 1145 | PADDLE_ENFORCE_EQ(buffer.is_gpu_pinned(), |
| 1146 | true, |
| 1147 | common::errors::InvalidArgument( |
| 1148 | "Required `buffer` device should be CUDAPinnedPlace, " |
| 1149 | "but received %d.", |
| 1150 | buffer.place())); |
| 1151 | PADDLE_ENFORCE_EQ( |
| 1152 | offset.is_cpu(), |
| 1153 | true, |
| 1154 | common::errors::InvalidArgument( |
| 1155 | "Required `offset` device should be CPUPlace, but received %d.", |
| 1156 | offset.place())); |
| 1157 | PADDLE_ENFORCE_EQ( |
| 1158 | count.is_cpu(), |
| 1159 | true, |
| 1160 | common::errors::InvalidArgument( |
| 1161 | "Required `count` device should be CPUPlace, but received %d.", |
| 1162 | count.place())); |
| 1163 | |
| 1164 | auto& src_tensor = src; |
| 1165 | auto* dst_tensor = &dst; |
| 1166 | auto& index_tensor = index; |
nothing calls this directly
no test coverage detected