DistVec& operator=(const DistVec & vec){ assert(offset < (info.is_square() ? 2*data_size: data_size)); if (mi.x_offset == -1 && mi.y_offset == -1){ mi.y_offset = vec.offset; } mi.r_offset = offset; assert(prev_offset < data_size); mi.prev_offset = prev_offset; if (mi.d == 0.0) mi.d=1.0; transpose = vec.transpose; end = vec.end; start = vec.start; mi.start = start; mi.end = end; graphchi_engine<VertexDataType, EdgeDataType> engine(training, nshards, false, m); engine.set_disable_vertexdata_storage(); engine.set_modifies_inedges(false); engine.set_modifies_outedges(false); Axb program; engine.run(program, 1); debug_print(name); mi.reset_offsets(); return *this; }
void init_math(graph_type * _pgraph, bipartite_graph_descriptor & _info, double ortho_repeats = 3, bool update_function = false){ pgraph = _pgraph; info = _info; mi.reset_offsets(); mi.update_function = update_function; mi.ortho_repeats = ortho_repeats; }
DistVec& DistVec::operator=(DistMat &mat){ mi.r_offset = offset; assert(prev_offset < data_size); mi.prev_offset = prev_offset; transpose = mat.transpose; mi.start = info.get_start_node(!transpose); mi.end = info.get_end_node(!transpose); //graphchi_engine<VertexDataType, EdgeDataType> engine(training, nshards, false, m); //set_engine_flags(engine); //Axb program; pengine->run(program, 1); debug_print(name); mi.reset_offsets(); mat.transpose = false; return *this; }
DistVec& DistVec::operator=(DistMat &mat){ mi.r_offset = offset; assert(prev_offset < data_size); mi.prev_offset = prev_offset; transpose = mat.transpose; mi.start = info.get_start_node(!transpose); mi.end = info.get_end_node(!transpose); graphchi_engine<VertexDataType, EdgeDataType> engine(training, nshards, false, m); engine.set_disable_vertexdata_storage(); Axb program; engine.set_modifies_inedges(false); engine.set_modifies_outedges(false); engine.run(program, 1); debug_print(name); mi.reset_offsets(); mat.transpose = false; return *this; }
DistDouble DistVec::operator*(const DistVec & vec){ mi.y_offset = offset; mi.b_offset = vec.offset; if (mi.d == 0) mi.d = 1.0; assert(mi.y_offset >=0 && mi.b_offset >= 0); double val = 0; for (int i=start; i< end; i++){ assert(false);//not yet //TODO const vertex_data * data = &pgraph->vertex_data(i); //TODO double * pv = (double*)&data->pvec[0]; //TODO val += mi.d* pv[mi.y_offset] * pv[mi.b_offset]; } mi.reset_offsets(); DistDouble mval; mval.val = val; return mval; }
DistDouble DistVec::operator*(const DistVec & vec){ mi.y_offset = offset; mi.b_offset = vec.offset; if (mi.d == 0) mi.d = 1.0; assert(mi.y_offset >=0 && mi.b_offset >= 0); double val = 0; for (int i=start; i< end; i++){ const vertex_data * data = &latent_factors_inmem[i]; double * pv = (double*)&data->pvec[0]; // if (y_offset >= 0 && b_offset == -1) //val += pv[y_offset] * pv[y_offset]; val += mi.d* pv[mi.y_offset] * pv[mi.b_offset]; } mi.reset_offsets(); DistDouble mval; mval.val = val; return mval; }
DistVec& DistVec::operator=(DistMat &mat){ mi.r_offset = offset; assert(prev_offset < data_size); mi.prev_offset = prev_offset; transpose = mat.transpose; mi.start = info.get_start_node(!transpose); mi.end = info.get_end_node(!transpose); INITIALIZE_TRACER(Axbtrace, "Axb update function"); BEGIN_TRACEPOINT(Axbtrace); pcurrent = this; int old_start = start; int old_end = end; start = mi.start; end = mi.end; start_engine(); start = old_start; end = old_end; END_TRACEPOINT(Axbtrace); debug_print(name); mi.reset_offsets(); mat.transpose = false; return *this; }
DistVec& operator=(const DistVec & vec){ assert(offset < (info.is_square() ? 2*data_size: data_size)); if (mi.x_offset == -1 && mi.y_offset == -1){ mi.y_offset = vec.offset; } mi.r_offset = offset; assert(prev_offset < data_size); mi.prev_offset = prev_offset; if (mi.d == 0.0) mi.d=1.0; transpose = vec.transpose; end = vec.end; start = vec.start; mi.start = start; mi.end = end; //graphchi_engine<VertexDataType, EdgeDataType> engine(training, nshards, false, m); //set_engine_flags(engine); //Axb program; pengine->run(program, 1); debug_print(name); mi.reset_offsets(); return *this; }
DistVec& DistVec::operator=(const DistVec & vec){ assert(offset < (info.is_square() ? 2*data_size: data_size)); if (mi.x_offset == -1 && mi.y_offset == -1){ mi.y_offset = vec.offset; } mi.r_offset = offset; assert(prev_offset < data_size); mi.prev_offset = prev_offset; if (mi.d == 0.0) mi.d=1.0; transpose = vec.transpose; end = vec.end; start = vec.start; mi.start = start; mi.end = end; INITIALIZE_TRACER(Axbtrace2, "Update function Axb"); BEGIN_TRACEPOINT(Axbtrace2); pcurrent = (DistVec*)&vec; start_engine(); debug_print(name); mi.reset_offsets(); return *this; }
void init_math(bipartite_graph_descriptor & _info, double ortho_repeats = 3){ info = _info; mi.reset_offsets(); mi.ortho_repeats = ortho_repeats; }