59#define HC_NOT_VISITED 18446744073709551615
60#define HC_VISITED 18446744073709551614
69 if (
debug) { printf(
"Task %d run_harmonic() start\n",
procid); }
72 MPI_Barrier(MPI_COMM_WORLD);
73 elt = omp_get_wtime();
81 if (root_index !=
NULL_KEY && root_index < g->n_local)
89#pragma omp parallel default(shared)
101 printf(
"Task %d Distance %u run_harmonic() GQ: %li, TQ: %u\n",
105#pragma omp for schedule(guided) nowait
106 for (
int64_t i = 0; i <
q->queue_size; ++i)
113 distances[vert_index] = distance;
124 if (in_index < g->n_local)
147 elt = omp_get_wtime() - elt;
148 printf(
"Task %d run_harmonic() time %9.6f (s)\n",
procid, elt);
150 if (
debug) { printf(
"Task %d run_harmonic() success\n",
procid); }
156 uint64_t* input_list,
double* centralities,
159 if (
verbose) printf(
"Task %d centralities to %s\n",
procid, output_file);
163 std::ofstream outfile;
164 outfile.open(output_file);
166 outfile <<
"Vertex, Centrality" << std::endl;
168 for (
uint64_t i = 0; i < num_to_output; ++i)
169 outfile << input_list[i] <<
"," << centralities[i] << std::endl;
174 if (
verbose) printf(
"Task %d done writing centralities\n",
procid);
184 if (distances[i] > 0 &&
187 my_hc += (1.0 / (double)distances[i]);
191 double global_hc = 0.0;
192 MPI_Allreduce(&my_hc, &global_hc, 1, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD);
195 printf(
"Vertex %lu - Harmonic Centrality %lf\n", root, global_hc);
204 if (
debug) { printf(
"Task %d harmonic_dist() start\n",
procid); }
206 MPI_Barrier(MPI_COMM_WORLD);
207 double elt = omp_get_wtime();
210 double* centralities = (
double*)malloc(num_to_output*
sizeof(
double));
212 for (
uint64_t i = 0; i < num_to_output; ++i)
219 MPI_Barrier(MPI_COMM_WORLD);
220 elt = omp_get_wtime() - elt;
221 if (
procid == 0) printf(
"Harmonic time %9.6f (s)\n", elt);
224 harmonic_output(g, num_to_output, input_list, centralities, output_file);
229 if (
debug) printf(
"Task %d harmonic_dist() success\n",
procid);
Mac OS X ATTR com apple quarantine q
void init_thread_queue(thread_queue_t *tq)
void clear_thread_queue(thread_queue_t *tq)
void empty_queue(thread_queue_t *tq, queue_data_t *q)
void add_vid_to_queue(thread_queue_t *tq, queue_data_t *q, uint64_t vertex_id)
void exchange_verts(dist_graph_t *g, mpi_data_t *comm, queue_data_t *q)
void add_vid_to_send(thread_queue_t *tq, queue_data_t *q, uint64_t vertex_id)
void empty_send(thread_queue_t *tq, queue_data_t *q)
#define in_vertices(g, n)
uint64_t get_value(fast_map *map, uint64_t key)
int harmonic_dist(dist_graph_t *g, mpi_data_t *comm, queue_data_t *q, char *output_file, uint64_t num_to_output, uint64_t *input_list)
int harmonic_output(dist_graph_t *g, uint64_t num_to_output, uint64_t *input_list, double *centralities, char *output_file)
double harmonic_calc(dist_graph_t *g, uint64_t *distances, uint64_t root)
int run_harmonic(dist_graph_t *g, mpi_data_t *comm, queue_data_t *q, uint64_t *distances, uint64_t root)
unsigned __int64 uint64_t
uint64_t global_queue_size