diff options
| author | Birte Kristina Friesel <derf@finalrewind.org> | 2025-05-14 13:43:55 +0200 | 
|---|---|---|
| committer | Birte Kristina Friesel <derf@finalrewind.org> | 2025-05-14 13:43:55 +0200 | 
| commit | 4052d7b4c0e1a59419f07642b9a33088f5745d28 (patch) | |
| tree | 23fb0907d1ffad55331e0e8fcf71ac2d876f4851 /BFS/support/graph.h | |
| parent | aed00e149b8a3677a89416eaa112ea6c5249150b (diff) | |
BFS: AspectC++ (and behaviour model) support
Diffstat (limited to 'BFS/support/graph.h')
| -rw-r--r-- | BFS/support/graph.h | 133 | 
1 files changed, 0 insertions, 133 deletions
| diff --git a/BFS/support/graph.h b/BFS/support/graph.h deleted file mode 100644 index 2a19f67..0000000 --- a/BFS/support/graph.h +++ /dev/null @@ -1,133 +0,0 @@ - -#ifndef _GRAPH_H_ -#define _GRAPH_H_ - -#include <assert.h> -#include <stdio.h> - -#include "common.h" -#include "utils.h" - -struct COOGraph { -	uint32_t numNodes; -	uint32_t numEdges; -	uint32_t *nodeIdxs; -	uint32_t *neighborIdxs; -}; - -struct CSRGraph { -	uint32_t numNodes; -	uint32_t numEdges; -	uint32_t *nodePtrs; -	uint32_t *neighborIdxs; -}; - -static struct COOGraph readCOOGraph(const char *fileName) -{ - -	struct COOGraph cooGraph; - -	// Initialize fields -	FILE *fp = fopen(fileName, "r"); -	uint32_t numNodes, numCols; -	assert(fscanf(fp, "%u", &numNodes)); -	assert(fscanf(fp, "%u", &numCols)); -	if (numNodes == numCols) { -		cooGraph.numNodes = numNodes; -	} else { -		PRINT_WARNING -		    ("    Adjacency matrix is not square. Padding matrix to be square."); -		cooGraph.numNodes = (numNodes > numCols) ? numNodes : numCols; -	} -	if (cooGraph.numNodes % 64 != 0) { -		PRINT_WARNING -		    ("    Adjacency matrix dimension is %u which is not a multiple of 64 nodes.", -		     cooGraph.numNodes); -		cooGraph.numNodes += (64 - cooGraph.numNodes % 64); -		PRINT_WARNING -		    ("        Padding to %u which is a multiple of 64 nodes.", -		     cooGraph.numNodes); -	} -	assert(fscanf(fp, "%u", &cooGraph.numEdges)); -	cooGraph.nodeIdxs = -	    (uint32_t *) malloc(cooGraph.numEdges * sizeof(uint32_t)); -	cooGraph.neighborIdxs = -	    (uint32_t *) malloc(cooGraph.numEdges * sizeof(uint32_t)); - -	// Read the neighborIdxs -	for (uint32_t edgeIdx = 0; edgeIdx < cooGraph.numEdges; ++edgeIdx) { -		uint32_t nodeIdx; -		assert(fscanf(fp, "%u", &nodeIdx)); -		cooGraph.nodeIdxs[edgeIdx] = nodeIdx; -		uint32_t neighborIdx; -		assert(fscanf(fp, "%u", &neighborIdx)); -		cooGraph.neighborIdxs[edgeIdx] = neighborIdx; -	} - -	return cooGraph; - -} - -static void freeCOOGraph(struct COOGraph cooGraph) -{ -	free(cooGraph.nodeIdxs); -	free(cooGraph.neighborIdxs); -} - -static struct CSRGraph coo2csr(struct COOGraph cooGraph) -{ - -	struct CSRGraph csrGraph; - -	// Initialize fields -	csrGraph.numNodes = cooGraph.numNodes; -	csrGraph.numEdges = cooGraph.numEdges; -	csrGraph.nodePtrs = -	    (uint32_t *) -	    calloc(ROUND_UP_TO_MULTIPLE_OF_2(csrGraph.numNodes + 1), -		   sizeof(uint32_t)); -	csrGraph.neighborIdxs = -	    (uint32_t *) -	    malloc(ROUND_UP_TO_MULTIPLE_OF_8 -		   (csrGraph.numEdges * sizeof(uint32_t))); - -	// Histogram nodeIdxs -	for (uint32_t i = 0; i < cooGraph.numEdges; ++i) { -		uint32_t nodeIdx = cooGraph.nodeIdxs[i]; -		csrGraph.nodePtrs[nodeIdx]++; -	} - -	// Prefix sum nodePtrs -	uint32_t sumBeforeNextNode = 0; -	for (uint32_t nodeIdx = 0; nodeIdx < csrGraph.numNodes; ++nodeIdx) { -		uint32_t sumBeforeNode = sumBeforeNextNode; -		sumBeforeNextNode += csrGraph.nodePtrs[nodeIdx]; -		csrGraph.nodePtrs[nodeIdx] = sumBeforeNode; -	} -	csrGraph.nodePtrs[csrGraph.numNodes] = sumBeforeNextNode; - -	// Bin the neighborIdxs -	for (uint32_t i = 0; i < cooGraph.numEdges; ++i) { -		uint32_t nodeIdx = cooGraph.nodeIdxs[i]; -		uint32_t neighborListIdx = csrGraph.nodePtrs[nodeIdx]++; -		csrGraph.neighborIdxs[neighborListIdx] = -		    cooGraph.neighborIdxs[i]; -	} - -	// Restore nodePtrs -	for (uint32_t nodeIdx = csrGraph.numNodes - 1; nodeIdx > 0; --nodeIdx) { -		csrGraph.nodePtrs[nodeIdx] = csrGraph.nodePtrs[nodeIdx - 1]; -	} -	csrGraph.nodePtrs[0] = 0; - -	return csrGraph; - -} - -static void freeCSRGraph(struct CSRGraph csrGraph) -{ -	free(csrGraph.nodePtrs); -	free(csrGraph.neighborIdxs); -} - -#endif | 
