Fix MixedVector

revert-13637-optimize-opyreader
Yu Yang 7 years ago
parent 6d2c6f96f1
commit e1913bc5d8

@ -28,31 +28,27 @@ class COWPtr {
private: private:
RefPtr m_sp; RefPtr m_sp;
void detach() {
T* tmp = m_sp.get();
if (!(tmp == nullptr || m_sp.unique())) {
m_sp = RefPtr(new T(*tmp));
}
}
public: public:
COWPtr() : m_sp(nullptr) {} COWPtr() : m_sp(nullptr) {}
explicit COWPtr(T* t) : m_sp(t) {} explicit COWPtr(T* t) : m_sp(t) {}
explicit COWPtr(const RefPtr& refptr) : m_sp(refptr) {}
const T& Data() const { return operator*(); } const T& Data() const { return *m_sp; }
T* MutableData() { return operator->(); } T* MutableData() {
DetachIfNotUnique();
return m_sp.get();
}
const T& operator*() const { return *m_sp; } void DetachIfNotUnique() {
T& operator*() { T* tmp = m_sp.get();
detach(); if (!(tmp == nullptr || m_sp.unique())) {
return *m_sp; Detach();
}
} }
const T* operator->() const { return m_sp.operator->(); }
T* operator->() { void Detach() {
detach(); T* tmp = m_sp.get();
return m_sp.operator->(); m_sp = RefPtr(new T(*tmp));
} }
}; };
} // namespace details } // namespace details

File diff suppressed because it is too large Load Diff

@ -127,10 +127,8 @@ class LookupTableGradCUDAKernel : public framework::OpKernel<T> {
auto gpu_place = boost::get<platform::CUDAPlace>(context.GetPlace()); auto gpu_place = boost::get<platform::CUDAPlace>(context.GetPlace());
// TODO(yuyang18): Strange code here. // TODO(yuyang18): Strange code here.
memory::Copy(platform::CPUPlace(), memory::Copy(gpu_place, new_rows.CUDAMutableData(context.GetPlace()),
new_rows.CUDAMutableData(context.GetPlace()), gpu_place, gpu_place, ids_data, ids_num * sizeof(int64_t), stream);
ids_data, ids_num * sizeof(int64_t), stream);
d_table->set_rows(new_rows); d_table->set_rows(new_rows);
auto *d_table_value = d_table->mutable_value(); auto *d_table_value = d_table->mutable_value();

@ -89,7 +89,7 @@ class SGDOpCUDAKernel : public framework::OpKernel<T> {
PADDLE_ENFORCE_EQ(in_height, out_dims[0]); PADDLE_ENFORCE_EQ(in_height, out_dims[0]);
auto& in_value = grad->value(); auto& in_value = grad->value();
framework::Vector<int64_t> in_rows(grad->rows()); auto& in_rows = grad->rows();
int64_t in_row_numel = in_value.numel() / in_rows.size(); int64_t in_row_numel = in_value.numel() / in_rows.size();
PADDLE_ENFORCE_EQ(in_row_numel, param_out->numel() / in_height); PADDLE_ENFORCE_EQ(in_row_numel, param_out->numel() / in_height);

Loading…
Cancel
Save