COMBINATORIAL_BLAS 1.6
 
Loading...
Searching...
No Matches
util.cpp
Go to the documentation of this file.
1/*
2//@HEADER
3// *****************************************************************************
4//
5// HPCGraph: Graph Computation on High Performance Computing Systems
6// Copyright (2016) Sandia Corporation
7//
8// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
9// the U.S. Government retains certain rights in this software.
10//
11// Redistribution and use in source and binary forms, with or without
12// modification, are permitted provided that the following conditions are
13// met:
14//
15// 1. Redistributions of source code must retain the above copyright
16// notice, this list of conditions and the following disclaimer.
17//
18// 2. Redistributions in binary form must reproduce the above copyright
19// notice, this list of conditions and the following disclaimer in the
20// documentation and/or other materials provided with the distribution.
21//
22// 3. Neither the name of the Corporation nor the names of the
23// contributors may be used to endorse or promote products derived from
24// this software without specific prior written permission.
25//
26// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
27// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
29// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
30// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
31// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
32// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
33// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
34// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
35// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
36// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37//
38// Questions? Contact George M. Slota (gmslota@sandia.gov)
39// Siva Rajamanickam (srajama@sandia.gov)
40// Kamesh Madduri (madduri@cse.psu.edu)
41//
42// *****************************************************************************
43//@HEADER
44*/
45
46#include <mpi.h>
47#include <omp.h>
48#include <stdio.h>
49#include <string.h>
50#include <stdint.h>
51#include <stdlib.h>
52
53#include "util.h"
54
55extern int procid, nprocs;
56extern bool verbose, debug, verify;
57
58void throw_err(char const* err_message)
59{
60 fprintf(stderr, "Error: %s\n", err_message);
61 MPI_Abort(MPI_COMM_WORLD, 1);
62}
63
64void throw_err(char const* err_message, int32_t task)
65{
66 fprintf(stderr, "Task %d Error: %s\n", task, err_message);
67 MPI_Abort(MPI_COMM_WORLD, 1);
68}
69
70void throw_err(char const* err_message, int32_t task, int32_t thread)
71{
72 fprintf(stderr, "Task %d Thread %d Error: %s\n", task, thread, err_message);
73 MPI_Abort(MPI_COMM_WORLD, 1);
74}
75
76void quicksort_dec(uint64_t* arr1, uint64_t* arr2, int64_t left, int64_t right)
77{
78 int64_t i = left;
79 int64_t j = right;
80 uint64_t temp; uint64_t temp2;
81 uint64_t pivot = arr1[(left + right) / 2];
82
83 while (i <= j)
84 {
85 while (arr1[i] > pivot) {i++;}
86 while (arr1[j] < pivot) {j--;}
87
88 if (i <= j)
89 {
90 temp = arr1[i];
91 arr1[i] = arr1[j];
92 arr1[j] = temp;
93 temp2 = arr2[i];
94 arr2[i] = arr2[j];
95 arr2[j] = temp2;
96 ++i;
97 --j;
98 }
99 }
100
101 if (j > left)
102 quicksort_dec(arr1, arr2, left, j);
103 if (i < right)
104 quicksort_dec(arr1, arr2, i, right);
105}
106
107
108uint64_t* str_to_array(char *input_list_str, uint64_t* num)
109{
110 char *cp = strtok(input_list_str, ",");
111 if (cp == NULL) {
112 return (uint64_t*)malloc((*num)*sizeof(uint64_t));
113 }
114
115 int64_t my_index = -1;
116 uint64_t n;
117 if (sscanf(cp, "%lu", &n) == 1) {
118 my_index = (int64_t)*num;
119 *num += 1;
120 } else {
121 printf("Invalid integer token '%s'\n", cp);
122 }
123 uint64_t *array = str_to_array(NULL, num);
124 if (my_index >= 0) {
125 array[my_index] = n;
126 }
127 return array;
128}
long int64_t
Definition compat.h:21
signed int int32_t
Definition stdint.h:77
unsigned __int64 uint64_t
Definition stdint.h:90
void quicksort_dec(uint64_t *arr1, uint64_t *arr2, int64_t left, int64_t right)
Definition util.cpp:76
int procid
Definition main.cpp:55
bool debug
Definition util.cpp:56
bool verify
Definition util.cpp:56
void throw_err(char const *err_message)
Definition util.cpp:58
bool verbose
Definition main.cpp:56
uint64_t * str_to_array(char *input_list_str, uint64_t *num)
Definition util.cpp:108
int nprocs
Definition util.cpp:55