#include "caffe2/core/context.h" #include #if defined(_MSC_VER) #include #endif namespace caffe2 { uint32_t RandomNumberSeed() { // Originally copied from folly::randomNumberSeed (at 418ad4) // modified to use chrono instead of sys/time.h static std::atomic seedInput(0); auto tv = std::chrono::system_clock::now().time_since_epoch(); uint64_t usec = static_cast( std::chrono::duration_cast(tv).count()); uint32_t tv_sec = usec / 1000000; uint32_t tv_usec = usec % 1000000; const uint32_t kPrime0 = 51551; const uint32_t kPrime1 = 61631; const uint32_t kPrime2 = 64997; const uint32_t kPrime3 = 111857; return kPrime0 * (seedInput++) + kPrime1 * static_cast(getpid()) + kPrime2 * tv_sec + kPrime3 * tv_usec; } namespace { inline void CopyBytesImpl(size_t nbytes, const void* src, void* dst) { if (nbytes == 0) { return; } CAFFE_ENFORCE(src); CAFFE_ENFORCE(dst); memcpy(dst, src, nbytes); } void CopyBytesWrapper( size_t nbytes, const void* src, Device src_device, void* dst, Device dst_device) { CopyBytesImpl(nbytes, src, dst); } } // namespace void CPUContext::CopyBytesSameDevice( size_t nbytes, const void* src, void* dst) { CopyBytesImpl(nbytes, src, dst); } } // namespace caffe2 namespace at { REGISTER_CONTEXT(DeviceType::CPU, caffe2::CPUContext); REGISTER_COPY_BYTES_FUNCTION( DeviceType::CPU, DeviceType::CPU, caffe2::CopyBytesWrapper); } // namespace at