karlsruhegraphgeneration / kagen Goto Github PK
View Code? Open in Web Editor NEWKaGen: Communication-free Massively Distributed Graph Generators
License: Other
KaGen: Communication-free Massively Distributed Graph Generators
License: Other
Currently, graphs are always generated with 64 bit edge and vertex IDs. Would be nice if we had a CMake flag to use 32 bit data types instead.
Currently, we have two header files that are required to use the KaGen library, library_definitions.h
and kagen.h
/ ckagen.h
, since the public library interface (library/
folder) is separate from the core library (kagen/
folder).
IMO it would be nicer if we merged the public library into the core library and moved all public declarations to kagen.h
. This way, we would only have to install a single header file.
Readme says nodes are numbered from 0 to n-1, but they are numbered 1 to n in the output file.
Should I update the README?
Best
Christian
It would be nice to have an option for edge weights based on the distance between adjacent vertices.
Hello,
I'm trying to use your RDG graph generator but it crashes with a segmentation fault.
Here's the output:
$ mpirun -n 2 ./build/app/kagen -gen rdg_3d -n 20
generate graph (n=1048576, k=2, s=1, P=2)
write output...
[danielpc:21924] *** Process received signal ***
[danielpc:21924] Signal: Segmentation fault (11)
[danielpc:21924] Signal code: Address not mapped (1)
[danielpc:21924] Failing at address: 0x7f77db6af000
[danielpc:21924] [ 0] /usr/lib/libpthread.so.0(+0x11a80)[0x7f7807949a80]
[danielpc:21924] [ 1] /usr/lib/libc.so.6(+0xa1104)[0x7f7806ce7104]
[danielpc:21924] [ 2] /usr/lib/openmpi/libopen-pal.so.40(+0x3ee7b)[0x7f7806710e7b]
[danielpc:21924] [ 3] /usr/lib/openmpi/libmpi.so.40(ompi_datatype_sndrcv+0x531)[0x7f7807baffc1]
[danielpc:21924] [ 4] /usr/lib/openmpi/openmpi/mca_coll_basic.so(mca_coll_basic_gatherv_intra+0x14c)[0x7f77f9b3a50c]
[danielpc:21924] [ 5] /usr/lib/openmpi/libmpi.so.40(PMPI_Gatherv+0x342)[0x7f7807bc9ff2]
[danielpc:21924] [ 6] ./build/app/kagen(+0x1df49)[0x5643ec1e2f49]
[danielpc:21924] [ 7] ./build/app/kagen(+0x2e14e)[0x5643ec1f314e]
[danielpc:21924] [ 8] ./build/app/kagen(+0xfdf8)[0x5643ec1d4df8]
[danielpc:21924] [ 9] /usr/lib/libc.so.6(__libc_start_main+0xeb)[0x7f7806c6906b]
[danielpc:21924] [10] ./build/app/kagen(+0x1063a)[0x5643ec1d563a]
[danielpc:21924] *** End of error message ***
-------------------------------------------------------
Primary job terminated normally, but 1 process returned
a non-zero exit code. Per user-direction, the job has been aborted.
-------------------------------------------------------
--------------------------------------------------------------------------
mpirun noticed that process rank 0 with PID 0 on node danielpc exited on signal 11 (Segmentation fault).
--------------------------------------------------------------------------
Executing it on 16 threads or using smaller values for n
also results in a segmentation fault. I'm using g++ 8.1.0, Open MPI 3.1.0, cgal 4.12 and sparsehash 2.0.3.
The RHG generator works fine for me.
Is there something wrong on my end?
Best regards
Hi all,
should we move KaGen into a github orga?
Best
Christian
would be nice to be able to generate random binary trees.
Hello,
I create some function to also store the coordinates of geometric graphs
and use them to visualize them. In the delaunay generator, it looks like
vertices on the one side of space are connected with vertices one the
opposite side; like creating a torus. This does not seem to happen in
the random geometric graphs.
Not sure if this is a bug. This could easily be a mistake on the way I print
the coordinates.
Can you verify/dismiss this behaviour?
Best,
Harry
I don't see why one should be named "directed" and the other as "undirected"
auto edge_list_directed = gen.Generate2DRGG(n, r, k, seed, output);
auto edge_list_undirected = gen.Generate3DRGG(n, r, k, seed, output);
Don't see kagen_interface.h in use outside of the include/CmakeLists.txt that is not used as of now, but still. This should be double.
Currently, using the library also requires one to link against the sampling library and tlx, which makes it hard to use the library without CMake. I think that it would be desirable to have a single self-contained library, either by manually merging the built libraries or just c&p'ing the sampling library + the few tlx headers that we actually need.
I am using KaGen to generate RMAT graphs in hmetis hgr
format. When generating a graph without weights, with the following command:
./KaGen -f hmetis rmat -N 16 -M 19 -a 0.45 -b 0.15 -c 0.25 -o graph -s 1
The hgr file contains every edge twice, e.g.
1 3
...
3 1
Is there a way to only have unique edges outputted?
I assume seed has to go into this line? Would hash(r + config_.seed) do it?
Hi,
I am using KaGen to produce some RMAT graphs in hmetis format. I set the number of nodes to 65536 and edges to 133056 and use the following probabilities 0.450 / 0.150 / 0.250 / 0.150
. When I try to invoke with different seeds, it always outputs the exact same graph.
Example commands:
$ ./KaGen -f hmetis rmat -N 16 -m 133056 -a 0.45 -b 0.15 -c 0.25 -o a -s 12234234
$ ./KaGen -f hmetis rmat -N 16 -m 133056 -a 0.45 -b 0.15 -c 0.25 -o b -s 1
$ diff a.hgr b.hgr
I tried to vary the number of edges, but the issue persists.
Currently, KaGen can only use one thread per MPI process. Since the generators are (mostly) communication free, we could implement additional OpenMPI parallelization without too much hustle.
Hi,
Following build error occurs, when building on Mac with llvm 15:
KaGen/kagen/context.cpp:404:24: error: implicit instantiation of undefined template 'std::basic_istringstream<char>'
std::istringstream toker(options);
^
/opt/homebrew/opt/llvm/bin/../include/c++/v1/iosfwd:140:32: note: template is declared here
class _LIBCPP_TEMPLATE_VIS basic_istringstream;
This can be fixed by
#include <sstream>
in kagen/context.cpp
.
Hi Sebastian,
for some graph classes the seed seems to be ignored (i.e. rhg). I use different seeds but get the same result as a graph.
Best
Christian
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.