MCPcopy Create free account
hub / github.com/clab/dynet / copy_elements

Method copy_elements

dynet/tensor.cc:202–229  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

200}
201
202void TensorTools::copy_elements(Tensor& v, const Tensor& v_src) {
203 if (v.device->type == DeviceType::CPU) {
204 if (v_src.device->type == DeviceType::CPU) {
205 memcpy(v.v, v_src.v, sizeof(real) * v.d.size());
206#if HAVE_CUDA
207 } else if (v_src.device->type == DeviceType::GPU) {
208 CUDA_CHECK(cudaSetDevice(((Device_GPU*)v_src.device)->cuda_device_id));
209 cudaMemcpyAsync(v.v, v_src.v, sizeof(real) * v.d.size(), cudaMemcpyDeviceToHost);
210#endif
211 } else { throw std::runtime_error("Bad device type"); }
212#if HAVE_CUDA
213 } else if (v.device->type == DeviceType::GPU) {
214 if (v_src.device->type == DeviceType::CPU) {
215 CUDA_CHECK(cudaSetDevice(((Device_GPU*)v.device)->cuda_device_id));
216 cudaMemcpyAsync(v.v, v_src.v, sizeof(real) * v.d.size(), cudaMemcpyHostToDevice);
217 } else {
218 if (v.device == v_src.device) {
219 CUDA_CHECK(cudaSetDevice(((Device_GPU*)v.device)->cuda_device_id));
220 cudaMemcpyAsync(v.v, v_src.v, sizeof(real) * v.d.size(), cudaMemcpyDeviceToDevice);
221 } else {
222 cudaMemcpyPeerAsync(v.v, ((Device_GPU*)v.device)->cuda_device_id,
223 v_src.v, ((Device_GPU*)v_src.device)->cuda_device_id,
224 sizeof(real) * v.d.size());
225 }
226 }
227#endif
228 } else { throw std::runtime_error("Bad device type"); }
229}
230
231void TensorTools::zero(Tensor& d) {
232#if HAVE_CUDA

Callers

nothing calls this directly

Calls 1

sizeMethod · 0.45

Tested by

no test coverage detected