in para_graph_sampler/graph_engine/backend/ParallelSampler.cpp [94:139]
void ParallelSampler::write_PPR_to_binary_file(
std::string name_out_neighs,
std::string name_out_scores,
int k,
float alpha,
float epsilon
) {
if (name_out_neighs.length() == 0 || name_out_scores.length() == 0) {
std::cout << "NOT writing PPR to output file! " << std::endl;
return;
}
std::ofstream out_neighs(name_out_neighs, std::ios::out | std::ios::binary);
if (out_neighs.is_open()) {
out_neighs.write((char*)&alpha, sizeof(alpha));
out_neighs.write((char*)&epsilon, sizeof(epsilon));
out_neighs.write((char*)&k, sizeof(k));
auto _size_full = static_cast<unsigned int>(top_ppr_neighs.size());
out_neighs.write((char*)&_size_full, sizeof(_size_full));
for (auto& nvec : top_ppr_neighs) {
auto _size = static_cast<unsigned int>(nvec.size());
// Consider new format (if memory becomes bottleneck): size, root, neigh1, neigh2, ...
out_neighs.write((char*)&_size, sizeof(_size));
for (auto nn : nvec) {
out_neighs.write((char*)&nn, sizeof(nn));
}
}
out_neighs.close();
}
std::ofstream out_scores(name_out_scores, std::ios::out | std::ios::binary);
if (out_scores.is_open()) {
out_scores.write((char*)&alpha, sizeof(alpha));
out_scores.write((char*)&epsilon, sizeof(epsilon));
out_scores.write((char*)&k, sizeof(k));
auto _size_full = static_cast<unsigned int>(top_ppr_scores.size());
out_scores.write((char*)&_size_full, sizeof(_size_full));
for (auto& svec : top_ppr_scores) {
auto _size = static_cast<unsigned int>(svec.size());
out_scores.write((char*)&_size, sizeof(_size));
for (auto ns : svec) {
out_scores.write((char*)&ns, sizeof(ns));
}
}
out_scores.close();
}
std::cout << "written ppr to files: " << name_out_neighs << " and " << name_out_scores << std::endl;
}