Giter Site home page Giter Site logo

geminigraph's Introduction

Gemini

A computation-centric distributed graph processing system.

Quick Start

Gemini uses MPI for inter-process communication and libnuma for NUMA-aware memory allocation. A compiler supporting OpenMP and C++11 features (e.g. lambda expressions, multi-threading, etc.) is required.

Implementations of five graph analytics applications (PageRank, Connected Components, Single-Source Shortest Paths, Breadth-First Search, Betweenness Centrality) are inclulded in the toolkits/ directory.

To build:

make

The input parameters of these applications are as follows:

./toolkits/pagerank [path] [vertices] [iterations]
./toolkits/cc [path] [vertices]
./toolkits/sssp [path] [vertices] [root]
./toolkits/bfs [path] [vertices] [root]
./toolkits/bc [path] [vertices] [root]

[path] gives the path of an input graph, i.e. a file stored on a shared file system, consisting of |E| <source vertex id, destination vertex id, edge data> tuples in binary. [vertices] gives the number of vertices |V|. Vertex IDs are represented with 32-bit integers and edge data can be omitted for unweighted graphs (e.g. the above applications except SSSP). Note: CC makes the input graph undirected by adding a reversed edge to the graph for each loaded one; SSSP uses float as the type of weights.

If Slurm is installed on the cluster, you may run jobs like this, e.g. 20 iterations of PageRank on the twitter-2010 graph:

srun -N 8 ./toolkits/pagerank /path/to/twitter-2010.binedgelist 41652230 20

Resources

Xiaowei Zhu, Wenguang Chen, Weimin Zheng, and Xiaosong Ma. Gemini: A Computation-Centric Distributed Graph Processing System. 12th USENIX Symposium on Operating Systems Design and Implementation (OSDI '16).

geminigraph's People

Contributors

blealtan avatar coolerzxw avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

geminigraph's Issues

what`s the rusults mean?

I get the results of cc shows as follow:
active(0)>=325557
active(1)>=64774
active(2)>=23313
active(3)>=958
active(4)>=1
exec_time=0.013219(s)
components = 278905
active(0)>=325557
active(1)>=65181
active(2)>=23192
active(3)>=957
active(4)>=1
exec_time=0.011986(s)
components = 278905
what`s it stand for ?

may the gcc not surpported

image
my gcc's version is 11.2.1. when the process end, it will raise a segment fault. following the code , it found that freeing curr or next buffers will return a pointer of type T, the compiler may access the mem, resulting in a segment.

image

modify the return value as void。

Error result while performing BFS algorithm

Error result while performing BFS algorithm.
Input data :# nodes: 3997962 ===> output : found_vertices = 1655427.
Input data :# nodes: 2394385 ===> output : found_vertices = 1
Why is the number of input nodes inconsistent with the number of output nodes?

Segmentation fault

Hi! I'm learning to use Gemini and having problems.
I downloaded data from #22 and when I run mpirun -n 1 ./sssp scale16_s.bin 65536 39, it returns

===================================================================================
= BAD TERMINATION OF ONE OF YOUR APPLICATION PROCESSES
= PID 13556 RUNNING AT siyuan-Alienware-m15-R6
= EXIT CODE: 139
= CLEANING UP REMAINING PROCESSES
= YOU CAN IGNORE THE BELOW CLEANUP MESSAGES

YOUR APPLICATION TERMINATED WITH THE EXIT STRING: Segmentation fault (signal 11)
This typically refers to a problem with your application.
Please see the FAQ page for debugging suggestions

Then I tried gdb:
(gdb) run scale16_s.bin 65536 39
Starting program: /home/user/Documents/GeminiGraph-master/toolkits/sssp scale16_s.bin 65536 39
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff7fabf0f in numa_bitmask_equal () from /lib/x86_64-linux-gnu/libnuma.so.1
(gdb) where
#0 0x00007ffff7fabf0f in numa_bitmask_equal () from /lib/x86_64-linux-gnu/libnuma.so.1
#1 0x00007ffff7facab3 in numa_set_interleave_mask () from /lib/x86_64-linux-gnu/libnuma.so.1
#2 0x0000555555557b9f in Graph::init (this=0x5555555b35a0) at /home/user/Documents/GeminiGraph-master/core/graph.hpp:169
#3 Graph::Graph (this=0x5555555b35a0) at /home/user/Documents/GeminiGraph-master/core/graph.hpp:148
#4 main (argc=, argv=) at /home/user/Documents/GeminiGraph-master/core/graph.hpp:143

Is there anyone can help me? Thanks a lot!

Stealing part is missing

GeminiGraph/core/graph.hpp

Lines 1847 to 1848 in 170e7d3

thread_state[thread_id]->status = STEALING;
reducer += local_reducer;

Hi Xiaowei,
I notice that the stealing operation is missing in the line mentioned above.
I wonder if the possible reason is since this part of the code is using pull-based operation, so task stealing could only have minor effects?

Thanks

Distributed algorithm segmentation fault (using SLURM + MVAPICH2)

Hi,

I'm using MVAPICH 2.3b and SLURM 17.11.4
(with MUNGE, MariaDB, OpenSSL, PAM, etc....) on CentOS 7.4

I use three nodes. (Intel Xeon CPU cluster)
sun07 is the master, which has slurmctld and slurmd daemon process,
and sun08, sun09 are slaves, which only have slurmd daemon process.

MVAPICH compiling & installing was conducted by
./configure --with-pmi=pmi2 --with-pm=slurm
as mentioned on the MVAPICH2 manual.
(http://mvapich.cse.ohio-state.edu/static/media/mvapich/mvapich2-2.3b-userguide.pdf)

I tested linux command hostname and mpi_hello.c.
(https://computing.llnl.gov/tutorials/mpi/samples/C/mpi_hello.c)

[heeyong@sun07 ~] srun -n 3 hostname
srun: job88 queued and waiting for resources
srun: job88 has been allocated resources
sun07
sun08
sun09
[heeyong@sun07 ~] srun -n 3 ./mpi_hello
srun: job 89 queued and waiting for resources
srun: job 89 has been allocated resources
Hello from task 0 on sun07!
MASTER: Number of MPI tasks is: 3
Hello from task 2 on sun09!
Hello from task 1 on sun08!

Those two tests were perfectly worked in multi-node situation.

However, If I run command like this:

[heeyong@sun07 gemini]$ srun -n 3 ./toolkits/pagerank /path/to/twitter-2010.binedgelist 41652230 20
srun: job 95 queued and waiting for resources
srun: job 95 has been allocated resources
[sun09:mpi_rank_2][error_sighandler] Caught error: Segmentation fault (signal 11)
srun: error: sun09: task 2: Segmentation fault (core dumped)
srun: error: sun08: task 1: Segmentation fault (core dumped)

and no response anymore.

I'm sure that I clearly compiled and executed Gemini on the same MVAPICH version,
like you mentioned at #2

Finally, I traced manually (using printf) and
I found that the program stucks at 1082~1102 line of core/graph.hpp

What is the problem...?

Mbind: Bad address error

While executing SSSP using mpi "mpiexec -np 16 toolkits/sssp sample_data/soc-Slashdot0811_tabSep_sssp.txt.bin 77360 0" it gives Mbind: Bad address error.

If the number processes less than 10 "mpiexec -np 10" then it does not create this error. Also, if we give number of edges instead of number of vertices in the command it does not give this error.
image

A confusion about the Co-Scheduling of Gemini

Hi, I am trying to implement several graph algorithms for an experimental research and meet some problem.

Firstly, we define a concept named seperable.
A main computing function f is seperable iff f(A union B) = f(f(A),f(B)), e.g., sum, min, max are seperable, while min color, h-index are non-seperable.

In my understanding, the design of Co-Scheduling of Computation can well support the seperable type of algorithm, while it is not very suitable for non-seperable computing in just a process_edge.

Taking the graph coloring algorithm as an example, we have to maintain a temporal vertex_array to store the min color which have not been used in all neighbors for every vertex because a super step is divided into p mini-steps, and it will lead to a huge space overhead.

But if there's no mini-steps and the system just process vertices one by one, we only need to maintain such a temporal vertex_array for every machine rather than vertex, which may significantly reduce the space cost.

I am not sure whether my understanding is correct or have something overlooked. Looking forward to your views.

Thank you very much.

`numa_set_interleave_mask` problem

Hi,xiaowei, I'm trying to run pagerank on scale16_s.bin, which from here from issue #6 , but I get a segment fault, it looks like following. I think the numa_set_interleave_mask() function which was called in your init() function in file core/graph.hpp:174 causes this problem, because when I comment out this line code, the program run correctly , get no error and print the result.

Here is detail information:
OS:Ubuntu 18.04
gcc version: 7.5.0
opemmp version : Open MPI 2.1.1 (Language: C++)
slurm version: 17.11.2
cpu infomation:

Architecture:        x86_64
CPU op-mode(s):      32-bit, 64-bit
Byte Order:          Little Endian
CPU(s):              24
On-line CPU(s) list: 0-23
Thread(s) per core:  2
Core(s) per socket:  6
Socket(s):           2
NUMA node(s):        2
Vendor ID:           GenuineIntel
CPU family:          6
Model:               62
Model name:          Intel(R) Xeon(R) CPU E5-2620 v2 @ 2.10GHz
Stepping:            4
CPU MHz:             1200.597
CPU max MHz:         2600.0000
CPU min MHz:         1200.0000
BogoMIPS:            4200.13
Virtualization:      VT-x
L1d cache:           32K
L1i cache:           32K
L2 cache:            256K
L3 cache:            15360K
NUMA node0 CPU(s):   0-5,12-17
NUMA node1 CPU(s):   6-11,18-23
Flags:               fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm cpuid_fault epb pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid fsgsbase smep erms xsaveopt dtherm ida arat pln pts md_clear flush_l1d

I use this command,
srun -N 2 ./toolkits/pagerank ./data/scale16_s.bin 65536 20

I have 1 node named ca33 as control machine and 2 nodes named ca97 and ca100 for computing, I get this error.


WARNING: There is at least non-excluded one OpenFabrics device found,
but there are no active ports detected (or Open MPI was unable to use
them). This is most certainly not what you wanted. Check your
cables, subnet manager configuration, etc. The openib BTL will be
ignored for this job.
Local host: ca97

[ca100:15129] *** Process received signal ***
[ca100:15129] Signal: Segmentation fault (11)
[ca100:15129] Signal code: Address not mapped (1)
[ca100:15129] Failing at address: (nil)
[ca100:15129] [ 0] /lib/x86_64-linux-gnu/libpthread.so.0(+0x12980)[0x7f8e3c1c9980]
[ca100:15129] [ 1] /usr/lib/x86_64-linux-gnu/libnuma.so.1(numa_bitmask_equal+0xd)[0x7f8e3d0b592d]
[ca100:15129] [ 2] /usr/lib/x86_64-linux-gnu/libnuma.so.1(numa_set_interleave_mask+0x13)[0x7f8e3d0b64e3]
[ca100:15129] [ 3] /home/yinwei/dev/GeminiGraph/./toolkits/pagerank(+0xd2f9)[0x5582c2c632f9]
[ca100:15129] [ 4] /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xe7)[0x7f8e3bde7bf7]
[ca100:15129] [ 5] /home/yinwei/dev/GeminiGraph/./toolkits/pagerank(+0xd8ba)[0x5582c2c638ba]
[ca100:15129] *** End of error message ***
[ca97:17078] *** Process received signal ***
[ca97:17078] Signal: Segmentation fault (11)
[ca97:17078] Signal code: Address not mapped (1)
[ca97:17078] Failing at address: (nil)
[ca97:17078] [ 0] /lib/x86_64-linux-gnu/libpthread.so.0(+0x12980)[0x7f0c137b7980]
[ca97:17078] [ 1] /usr/lib/x86_64-linux-gnu/libnuma.so.1(numa_bitmask_equal+0xd)[0x7f0c146a392d]
[ca97:17078] [ 2] /usr/lib/x86_64-linux-gnu/libnuma.so.1(numa_set_interleave_mask+0x13)[0x7f0c146a44e3]
[ca97:17078] [ 3] /home/yinwei/dev/GeminiGraph/./toolkits/pagerank(+0xd2f9)[0x55739a4a72f9]
[ca97:17078] [ 4] /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xe7)[0x7f0c133d5bf7]
[ca97:17078] [ 5] /home/yinwei/dev/GeminiGraph/./toolkits/pagerank(+0xd8ba)[0x55739a4a78ba]
[ca97:17078] *** End of error message ***
srun: error: ca100: task 1: Segmentation fault
srun: error: ca97: task 0: Segmentation fault (core dumped)

when I comment out this line core/graph.hpp:174, make and run again, it will get no error. i don't know why.

WARNING: There is at least non-excluded one OpenFabrics device found,
but there are no active ports detected (or Open MPI was unable to use
them). This is most certainly not what you wanted. Check your
cables, subnet manager configuration, etc. The openib BTL will be
ignored for this job.
Local host: ca97

edge_data_size:0
unit_size:4
edge_unit_size:8
vertices size is 65536
edges size is 2728272
iterations is 20
delta(0)=1.000000
delta(1)=1.201973
delta(2)=0.299845
delta(3)=0.121878
delta(4)=0.053445
delta(5)=0.023630
delta(6)=0.010217
delta(7)=0.004646
delta(8)=0.001908
delta(9)=0.000956
delta(10)=0.000324
delta(11)=0.000227
delta(12)=0.000150
delta(13)=0.000127
delta(14)=0.000108
delta(15)=0.000092
delta(16)=0.000078
delta(17)=0.000066
delta(18)=0.000056
delta(19)=0.000048
exec_time=0.105598(s)
pr_sum=47355.429527
pr[4]=1348.359586
delta(0)=1.000000
delta(1)=1.201973
delta(2)=0.299845
delta(3)=0.121878
delta(4)=0.053445
delta(5)=0.023630
delta(6)=0.010217
delta(7)=0.004646
delta(8)=0.001908
delta(9)=0.000956
delta(10)=0.000324
delta(11)=0.000227
delta(12)=0.000150
delta(13)=0.000127
delta(14)=0.000108
delta(15)=0.000092
delta(16)=0.000078
delta(17)=0.000066
delta(18)=0.000056
delta(19)=0.000048
exec_time=0.102557(s)
pr_sum=47355.429527
pr[4]=1348.359586
delta(0)=1.000000
delta(1)=1.201973
delta(2)=0.299845
delta(3)=0.121878
delta(4)=0.053445
delta(5)=0.023630
delta(6)=0.010217
delta(7)=0.004646
delta(8)=0.001908
delta(9)=0.000956
delta(10)=0.000324
delta(11)=0.000227
delta(12)=0.000150
delta(13)=0.000127
delta(14)=0.000108
delta(15)=0.000092
delta(16)=0.000078
delta(17)=0.000066
delta(18)=0.000056
delta(19)=0.000048
exec_time=0.107026(s)
pr_sum=47355.429527
pr[4]=1348.359586
delta(0)=1.000000
delta(1)=1.201973
delta(2)=0.299845
delta(3)=0.121878
delta(4)=0.053445
delta(5)=0.023630
delta(6)=0.010217
delta(7)=0.004646
delta(8)=0.001908
delta(9)=0.000956
delta(10)=0.000324
delta(11)=0.000227
delta(12)=0.000150
delta(13)=0.000127
delta(14)=0.000108
delta(15)=0.000092
delta(16)=0.000078
delta(17)=0.000066
delta(18)=0.000056
delta(19)=0.000048
exec_time=0.091182(s)
pr_sum=47355.429527
pr[4]=1348.359586
delta(0)=1.000000
delta(1)=1.201973
delta(2)=0.299845
delta(3)=0.121878
delta(4)=0.053445
delta(5)=0.023630
delta(6)=0.010217
delta(7)=0.004646
delta(8)=0.001908
delta(9)=0.000956
delta(10)=0.000324
delta(11)=0.000227
delta(12)=0.000150
delta(13)=0.000127
delta(14)=0.000108
delta(15)=0.000092
delta(16)=0.000078
delta(17)=0.000066
delta(18)=0.000056
delta(19)=0.000048
exec_time=0.083132(s)
pr_sum=47355.429527
pr[4]=1348.359586
delta(0)=1.000000
delta(1)=1.201973
delta(2)=0.299845
delta(3)=0.121878
delta(4)=0.053445
delta(5)=0.023630
delta(6)=0.010217
delta(7)=0.004646
delta(8)=0.001908
delta(9)=0.000956
delta(10)=0.000324
delta(11)=0.000227
delta(12)=0.000150
delta(13)=0.000127
delta(14)=0.000108
delta(15)=0.000092
delta(16)=0.000078
delta(17)=0.000066
delta(18)=0.000056
delta(19)=0.000048
exec_time=0.077558(s)
pr_sum=47355.429527
pr[4]=1348.359586
edge_data_size:0
unit_size:4
edge_unit_size:8
vertices size is 65536
edges size is 2728272
iterations is 20
delta(0)=1.000000
delta(1)=1.201973
delta(2)=0.299845
delta(3)=0.121878
delta(4)=0.053445
delta(5)=0.023630
delta(6)=0.010217
delta(7)=0.004646
delta(8)=0.001908
delta(9)=0.000956
delta(10)=0.000324
delta(11)=0.000227
delta(12)=0.000150
delta(13)=0.000127
delta(14)=0.000108
delta(15)=0.000092
delta(16)=0.000078
delta(17)=0.000066
delta(18)=0.000056
delta(19)=0.000048
exec_time=0.098069(s)
pr_sum=47355.429527
pr[4]=1348.359586
delta(0)=1.000000
delta(1)=1.201973
delta(2)=0.299845
delta(3)=0.121878
delta(4)=0.053445
delta(5)=0.023630
delta(6)=0.010217
delta(7)=0.004646
delta(8)=0.001908
delta(9)=0.000956
delta(10)=0.000324
delta(11)=0.000227
delta(12)=0.000150
delta(13)=0.000127
delta(14)=0.000108
delta(15)=0.000092
delta(16)=0.000078
delta(17)=0.000066
delta(18)=0.000056
delta(19)=0.000048
exec_time=0.113920(s)
pr_sum=47355.429527
pr[4]=1348.359586
delta(0)=1.000000
delta(1)=1.201973
delta(2)=0.299845
delta(3)=0.121878
delta(4)=0.053445
delta(5)=0.023630
delta(6)=0.010217
delta(7)=0.004646
delta(8)=0.001908
delta(9)=0.000956
delta(10)=0.000324
delta(11)=0.000227
delta(12)=0.000150
delta(13)=0.000127
delta(14)=0.000108
delta(15)=0.000092
delta(16)=0.000078
delta(17)=0.000066
delta(18)=0.000056
delta(19)=0.000048
exec_time=0.087034(s)
pr_sum=47355.429527
pr[4]=1348.359586
delta(0)=1.000000
delta(1)=1.201973
delta(2)=0.299845
delta(3)=0.121878
delta(4)=0.053445
delta(5)=0.023630
delta(6)=0.010217
delta(7)=0.004646
delta(8)=0.001908
delta(9)=0.000956
delta(10)=0.000324
delta(11)=0.000227
delta(12)=0.000150
delta(13)=0.000127
delta(14)=0.000108
delta(15)=0.000092
delta(16)=0.000078
delta(17)=0.000066
delta(18)=0.000056
delta(19)=0.000048
exec_time=0.091063(s)
pr_sum=47355.429527
pr[4]=1348.359586
delta(0)=1.000000
delta(1)=1.201973
delta(2)=0.299845
delta(3)=0.121878
delta(4)=0.053445
delta(5)=0.023630
delta(6)=0.010217
delta(7)=0.004646
delta(8)=0.001908
delta(9)=0.000956
delta(10)=0.000324
delta(11)=0.000227
delta(12)=0.000150
delta(13)=0.000127
delta(14)=0.000108
delta(15)=0.000092
delta(16)=0.000078
delta(17)=0.000066
delta(18)=0.000056
delta(19)=0.000048
exec_time=0.093679(s)
pr_sum=47355.429527
pr[4]=1348.359586
delta(0)=1.000000
delta(1)=1.201973
delta(2)=0.299845
delta(3)=0.121878
delta(4)=0.053445
delta(5)=0.023630
delta(6)=0.010217
delta(7)=0.004646
delta(8)=0.001908
delta(9)=0.000956
delta(10)=0.000324
delta(11)=0.000227
delta(12)=0.000150
delta(13)=0.000127
delta(14)=0.000108
delta(15)=0.000092
delta(16)=0.000078
delta(17)=0.000066
delta(18)=0.000056
delta(19)=0.000048
exec_time=0.079862(s)
pr_sum=47355.429527
pr[4]=1348.359586

Application crash with big input file

Hello,

I'm trying to run bfs program on twitter2010 input file. I've already converted the file to binary format. Here is the command that I use to run it on 8 nodes on a cluster:

mpirun -n 8 -ppn 32 ./bfs binary-input 41652230 1

But, the program keeps crashing with the following crash report (assertion false when getting partition id):
thread support level provided by MPI: MPI_THREAD_MULTIPLE
|V| = 41652230, |E| = 1468365182
|V'_0| = 2871296 |E^dense_0| = 314202346
|V'_1_0| = 782336 |E^dense_1_0| = 68485950
|V'_1_1| = 417792 |E^dense_1_1| = 95272979
|V'_2_0| = 552960 |E^dense_2_0| = 87563884
|V'_1| = 2260992 |E^dense_1| = 348123055
|V'_1_2| = 282624 |E^dense_1_2| = 105132766
|V'_1_3| = 778240 |E^dense_1_3| = 79231360
|V'_2_1| = 745472 |E^dense_2_1| = 76757359
|V'_3_0| = 1236992 |E^dense_3_0| = 49314395
|V'_2| = 3674112 |E^dense_2| = 269440472
|V'_2_2| = 1200128 |E^dense_2_2| = 51701577
|V'_4_0| = 1421312 |E^dense_4_0| = 38844553
|V'_5_0| = 1556480 |E^dense_5_0| = 31613706
|V'_2_3| = 1175552 |E^dense_2_3| = 53417652
|V'_3_1| = 1318912 |E^dense_3_1| = 44771383
|V'_6_0| = 1814528 |E^dense_6_0| = 17051275
|V'_7_0| = 1921024 |E^dense_7_0| = 11060460
|V'_4_1| = 1380352 |E^dense_4_1| = 41268721
|V'_5_1| = 1642496 |E^dense_5_1| = 26588527
|V'_3_2| = 1290240 |E^dense_3_2| = 46229979
|V'_3| = 5206016 |E^dense_3| = 183329976
|V'_3_3| = 1359872 |E^dense_3_3| = 43014219
|V'_6_1| = 1835008 |E^dense_6_1| = 16113070
|V'_7_1| = 1912832 |E^dense_7_1| = 11805510
|V'_4_2| = 1507328 |E^dense_4_2| = 34311730
|V'_5_2| = 1740800 |E^dense_5_2| = 21402872
|V'_5_3| = 1757184 |E^dense_5_3| = 20574020
|V'_4_3| = 1552384 |E^dense_4_3| = 32206979
|V'_7_2| = 1908736 |E^dense_7_2| = 12035589
|V'_6_2| = 1843200 |E^dense_6_2| = 15618443
|V'_4| = 5861376 |E^dense_4| = 146631983
|V'_7_3| = 1953798 |E^dense_7_3| = 9622540
|V'_6_3| = 1892352 |E^dense_6_3| = 13151337
|V'_5| = 6696960 |E^dense_5| = 100179125
|V'_6| = 7385088 |E^dense_6| = 61934125
|V'_7| = 7696390 |E^dense_7| = 44524099
|V'_0_0| = 290816 |E^dense_0_0| = 102384936
|V'_0_1| = 749568 |E^dense_0_1| = 73477386
|V'_0_2| = 778240 |E^dense_0_2| = 74985272
|V'_0_3| = 1052672 |E^dense_0_3| = 63354752
machine(0) got 282171224 sparse mode edges
machine(1) got 366424013 sparse mode edges
machine(2) got 283360301 sparse mode edges
machine(7) got 77415901 sparse mode edges
machine(4) got 151005424 sparse mode edges
machine(6) got 42193162 sparse mode edges
machine(3) got 199526445 sparse mode edges
machine(5) got 66268712 sparse mode edges
part(6) E_0 has 9226041 sparse mode edges
part(0) E_0 has 70879848 sparse mode edges
part(1) E_0 has 66134242 sparse mode edges
part(7) E_0 has 20213634 sparse mode edges
part(5) E_0 has 22681242 sparse mode edges
part(2) E_0 has 99424748 sparse mode edges
part(3) E_0 has 56731545 sparse mode edges
part(4) E_0 has 45628992 sparse mode edges
part(6) E_1 has 8678768 sparse mode edges
part(0) E_1 has 84465081 sparse mode edges
part(1) E_1 has 97583787 sparse mode edges
part(7) E_1 has 29199875 sparse mode edges
part(5) E_1 has 17777695 sparse mode edges
part(3) E_1 has 41391694 sparse mode edges
part(2) E_1 has 62480568 sparse mode edges
part(4) E_1 has 37207897 sparse mode edges
part(6) E_2 has 9294606 sparse mode edges
part(0) E_2 has 59707870 sparse mode edges
part(7) E_2 has 18791129 sparse mode edges
part(1) E_2 has 116830284 sparse mode edges
part(5) E_2 has 14059701 sparse mode edges
part(3) E_2 has 52855250 sparse mode edges
part(2) E_2 has 61966627 sparse mode edges
part(4) E_2 has 38301424 sparse mode edges
part(7) E_3 has 9211263 sparse mode edges
part(6) E_3 has 14993747 sparse mode edges
part(0) E_3 has 67118425 sparse mode edges
part(1) E_3 has 85875700 sparse mode edges
part(5) E_3 has 11750074 sparse mode edges
part(2) E_3 has 59488358 sparse mode edges
part(4) E_3 has 29867110 sparse mode edges
part(3) E_3 has 48547956 sparse mode edges
number of partitions: 8, vertex_id: 41652230
bfs: /home/GeminiGraph/core/graph.hpp:339: int Graph::get_partition_id(VertexId) [with EdgeData = Empty; VertexId = unsigned int]: Assertion `false' failed.

===================================================================================
= BAD TERMINATION OF ONE OF YOUR APPLICATION PROCESSES
= PID 29421 RUNNING AT node01
= EXIT CODE: 6
= CLEANING UP REMAINING PROCESSES
= YOU CAN IGNORE THE BELOW CLEANUP MESSAGES

YOUR APPLICATION TERMINATED WITH THE EXIT STRING: Aborted (signal 6)
This typically refers to a problem with your application.
Please see the FAQ page for debugging suggestions

*note: The program runs correctly for smaller input (LiveJournal).

Any help would be greatly appreciated.
Thanks

What files does it need?

I have downloaded the graph files from here

I used cnr-2000 file which has 325557 nodes (vertices) and I get the following output (error) for pagerank:

./pagerank ./cnr-2000.graph 325557 10
thread support level provided by MPI: MPI_THREAD_SERIALIZED
edge_data_size = 0, unit_size = 4, edge_unit_size = 8
threads=1*4
interleave on 0
|V| = 325557, |E| = 145605
Before SEEK <-- I put these in the core/graph.hpp
AFTER SEEK <-- I put these in the core/graph.hpp
BEFORE sync src = 1112356484 <-- I put these in the core/graph.hpp
BEFORE sync src = 188557346 <-- I put these in the core/graph.hpp
[my_pc:16578] *** Process received signal ***
[my_pc:16578] Signal: Segmentation fault (11)
[my_pc:16578] Signal code: Address not mapped (1)
[my_pc:16578] Failing at address: 0x7f18466f9a10
Segmentation fault (core dumped)

Seems like there are at least two problems:

  1. It estimates that the number of Edges is 145605, whereas on the database website it says that arcs (edges) are 3216152

  2. src = 1112356484 <-- is certainly out of bounds and therefore there is a segmentation fault.

Any idea what is going on and how to fix it?

Or perhaps GeminiGraph needs some other format in which the graph is stored. Could you please specify as to what that format is?

Newbee question

./toolkits/sssp [path] [vertices] [root]
waht`s dose [root] mean?

Number of cpus

Hi,

I'm using Gemini and find out that the number of threads is set to the number of hardware threads. This is suboptimal in my experiment. It's better to set it to an entire core.

Can you confirm if it will work OK if I set number of threads to number of cores or is there any side effect ?

Consistency check for partition boundaries failed

Hi, I'm trying to run PageRank over two MPI (MPICH v4.0.2) hosts, with two NUMA nodes each. The input graph is very large (>4B vertices) therefore I converted Gemini to use uint64_t vertex IDs. Everything seems to work fine until the locality chunking phase and the subsequent computation of partition offsets.

At that point Gemini fails on the assertion at line 854 in core/graph.hpp, and indeed by adding some debug prints I can see that the two machines have computed different partition offsets for NUMA node 1.

I was able to avoid this failure by adding an MPI_Allreduce call before the MPI_Allreduce call which sets up the global_partition_offset array, which uses MPI_MAX to immediately store the max computed partition offsets directly into the local partition offset array. However I am not sure if this is entirely correct.

Any ideas on a possible cause for the issue (also is my solution correct) ?

Note: I have forked the repo so you can take a look at my modifications.

Questions about the message passing and thread

When I read the code, I find out that in dense mode, the message passing seems like socket to socket. For example, the buffered message in 2nd socket in partition 3 will be passed to the 2nd socket in partition in socket 2. And then the reduce is seemed processed in each socket locally, without any communication with other sockets.
What if a vertex in the 2nd socket in partition 3 has an outgoing edge which points to a vertex that belongs to a vertex in the 1st socket in partition 2. Since the message will only be passed to the 2nd socket in partition 2, how does it know there is an edge in the 1st socket that should processed?

Could u give me an example of edgelist

I tried to a lot to create an input but failed. I wonder if I made a mistake with the format of the input.

[xywsxp:35275] *** Process received signal ***
[xywsxp:35275] Signal: Segmentation fault (11)
[xywsxp:35275] Signal code: Address not mapped (1)
[xywsxp:35275] Failing at address: (nil)
[xywsxp:35275] [ 0] /lib/x86_64-linux-gnu/libpthread.so.0(+0x153c0)[0x7fe044cdd3c0]
[xywsxp:35275] [ 1] /lib/x86_64-linux-gnu/libnuma.so.1(numa_bitmask_equal+0xf)[0x7fe045071f0f]
[xywsxp:35275] [ 2] /lib/x86_64-linux-gnu/libnuma.so.1(numa_set_interleave_mask+0x13)[0x7fe045072ab3]
[xywsxp:35275] [ 3] ./toolkits/sssp(+0xee37)[0x557a38517e37]
[xywsxp:35275] [ 4] /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf3)[0x7fe044afd0b3]
[xywsxp:35275] [ 5] ./toolkits/sssp(+0xf32e)[0x557a3851832e]
[xywsxp:35275] *** End of error message ***
[1] 35275 segmentation fault (core dumped) ./toolkits/sssp data 1000 123

run distributed algorithms

Hi
I try to run distributed algorithms on the cluster by the following input:
srun -N 8 ./toolkits/bfs /path/to/twitter-2010.binedgelist 41652230 20

but it seems each machine independently runs the algorithm by itself and the final outputs are the eight repeated results with the same runtime as the single machine. In my view, the distributed version should save running time.

So is there a way to run distributed algorithm as stated in the paper?

Thanks for that!

Thanks for that!
Ok so what I did is that I wrote a simple C program that reads from the graph an ASCII file and writes it into a binary file, as required by Gemini.

Here is that code: here
The file src/ASCII2Bin.c contains the converter
The file data/scale16_s.mm is the input to it, it has 65535 vertices and 1818848 edges

When I run: mpirun -n 1 ./sssp ./scale16_s.bin 65535 39

It seems to estimate the number of edges correctly. Further it gives the following output and halts with this error message:

thread support level provided by MPI: MPI_THREAD_SERIALIZED
thread-0 bound to socket-0
thread-3 bound to socket-0
thread-2 bound to socket-0
thread-1 bound to socket-0
threads=1*4
interleave on 0
|V| = 65535, |E| = 1818848
|V'_0| = 65535 |E^dense_0| = 1818761
|V'_0_0| = 65535 |E^dense_0_0| = 1818761
sssp: /home/user/codes/GeminiGraph-master/core/graph.hpp:336: int Graph::get_partition_id(VertexId) [with EdgeData = float; VertexId = unsigned int]: Assertion `false' failed.
[mypc:22558] *** Process received signal ***
[mypc:22558] Signal: Aborted (6)
[mypc:22558] Signal code: (-6)
[mypc:22558] [ 0] /lib/x86_64-linux-gnu/libpthread.so.0(+0x10330)[0x7f3e91e51330]
[mypc:22558] [ 1] /lib/x86_64-linux-gnu/libc.so.6(gsignal+0x37)[0x7f3e91ab2c37]
[mypc:22558] [ 2] /lib/x86_64-linux-gnu/libc.so.6(abort+0x148)[0x7f3e91ab6028]
[mypc:22558] [ 3] /lib/x86_64-linux-gnu/libc.so.6(+0x2fbf6)[0x7f3e91aabbf6]
[mypc:22558] [ 4] /lib/x86_64-linux-gnu/libc.so.6(+0x2fca2)[0x7f3e91aabca2]
[mypc:22558] [ 5] ./sssp[0x4125bc]
[mypc:22558] [ 6] ./sssp[0x409b5d]
[mypc:22558] [ 7] /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf5)[0x7f3e91a9df45]
[mypc:22558] [ 8] ./sssp[0x409cef]
[mypc:22558] *** End of error message ***

mpirun noticed that process rank 0 with PID 22558 on node tulip exited on signal 6 (Aborted).

Originally posted by @bibrakc in #6 (comment)

SSSP with different results

I run SSSP with com-friendster dataset.
It seems weird that different results occur at 5th and 6th iteration.
I checked the results of other iteration which are exact with other tools.

This snapshot shows two trials but it happens every time. Is 5/6th iteration using some heuristic ways? Why?
example

btw what is the meaning of distance[64037984]? what is 64037984?

Preprocessing crashes

My simple MPI hello world program with AllReduce works. But the following run doesn't work. Is it because MPI_THREAD_SERIALIZED?

$ mpirun -n 2 ./pagerank ../../inputs/soc-LiveJournal1.txt.bsnap 4847571 1
thread support level provided by MPI: MPI_THREAD_SERIALIZED
|V| = 4847571, |E| = 68475391
|V'_0| = 1261568 |E^dense_0| = 43518651
|V'_1| = 3586003 |E^dense_1| = 24956740
|V'_0_0| = 1261568 |E^dense_0_0| = 43518651
|V'_1_0| = 3586003 |E^dense_1_0| = 24956740
[yuxing-desk:01757] *** Process received signal ***
[yuxing-desk:01757] Signal: Segmentation fault (11)
[yuxing-desk:01757] Signal code: Address not mapped (1)
[yuxing-desk:01757] Failing at address: 0x14ec650
[yuxing-desk:01757] [ 0] /lib/x86_64-linux-gnu/libpthread.so.0(+0x11390)[0x7ff406b0d390]
[yuxing-desk:01757] [ 1] /usr/lib/openmpi/lib/openmpi/mca_pml_ob1.so(mca_pml_ob1_recv_request_progress_frag+0x59)[0x7ff3f98dbc19]
[yuxing-desk:01757] [ 2] /usr/lib/openmpi/lib/openmpi/mca_btl_vader.so(mca_btl_vader_poll_handle_frag+0x93)[0x7ff3fa344813]
[yuxing-desk:01757] [ 3] /usr/lib/openmpi/lib/openmpi/mca_btl_vader.so(+0x3abe)[0x7ff3fa344abe]
[yuxing-desk:01757] [ 4] /usr/lib/libopen-pal.so.13(opal_progress+0x4a)[0x7ff40602d1ea]
[yuxing-desk:01757] [ 5] /usr/lib/openmpi/lib/openmpi/mca_pml_ob1.so(mca_pml_ob1_send+0x4c5)[0x7ff3f98d5745]
[yuxing-desk:01757] [ 6] /usr/lib/libmpi.so.12(PMPI_Send+0x14b)[0x7ff40753ccdb]
[yuxing-desk:01757] [ 7] ./pagerank[0x4151dd]
[yuxing-desk:01757] [ 8] ./pagerank[0x409db3]
[yuxing-desk:01757] [ 9] /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf0)[0x7ff406752830]
[yuxing-desk:01757] [10] ./pagerank[0x409f79]
[yuxing-desk:01757] *** End of error message ***
--------------------------------------------------------------------------
mpirun noticed that process rank 1 with PID 1757 on node yuxing-desk exited on signal 11 (Segmentation fault).
--------------------------------------------------------------------------

run error and questions about data format

Hi, i'm studying the brilliant system.
After deploying the system ,i got error 'Segmentation fault (core dumped)' when i tried to run it . Is there any suggestion for this error ?
More else, where can i got the file 'twitter-2010.binedgelist'? If it is possibile , Would you please offer some test files in this project so that users could run this system more conveniently without worrying the data format.
Thanks

Segmentation Fault when running graph algorithms

Hi I am trying to run the graph algorithms in the toolkits on cit-Patents but I keep getting the following error :

[hennessy:05177] *** Process received signal ***
[hennessy:05177] Signal: Segmentation fault (11)
[hennessy:05177] Signal code: Invalid permissions (2)
[hennessy:05177] Failing at address: 0x7f1ad8050d04
[hennessy:05177] [ 0] /lib/x86_64-linux-gnu/libpthread.so.0(+0x11390)[0x7f1af0ee9390]
[hennessy:05177] [ 1] ./cc[0x415077]
[hennessy:05177] [ 2] ./cc[0x40a332]
[hennessy:05177] [ 3] /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf0)[0x7f1af0b2e830]
[hennessy:05177] [ 4] ./cc[0x4099b9]
[hennessy:05177] *** End of error message ***
Segmentation fault (core dumped)

The command I am running is
./pagerank /path/to/cit-patents.binedgelist 3774768

Any help would be appreciated!

Application gets stuck

I am trying to use Gemini for graph processing on a single server. It gives this warning:

" A high-performance Open MPI point-to-point messaging module
was unable to find any relevant network interfaces"

and then the program gets stuck (most likely outcome). Sometimes the program proceeds forward after this warning and execution finishes but that happens like 1 in 10 times. As I wish to run multiple experiments, I intend to use scripts and with the application getting stuck more often than not, it is difficult. Please let me know how to resolve this.

Can I directly run it using mpi

Hi, I am trying to run the system via:
mpirun -n 4 toolkits/cc ../datasets/google/graph.bin 875713

However, it does not behave like it is running using 4 threads as I would have expected, as it is slower than directly running:
toolkits/cc ../datasets/google/graph.bin 875713 (I think this is the single-thread case, no?)

Any suggestion on running using mpi, instead of slurm, as suggested. It is a bit of headache installing slurm on our cluster.

Thank you very much.

make: *** [toolkits/bc] Error 1

Hi, I am studying the system, Gemini.

When I make the file, some errors occur and I don't know how to do with it.

The errors are as follow:

[root@node18 GeminiGraph-master]# make
mpicxx -O3 -Wall -std=c++11 -g -fopenmp -march=native -I/home/sbb/GeminiGraph-master  -o toolkits/bc toolkits/bc.cpp -lnuma
In file included from toolkits/bc.cpp:20:0:
/home/sbb/GeminiGraph-master/core/graph.hpp:1407:27: error: ‘std::function’ has not been declared
   R process_vertices(std::function<R(VertexId)> process, Bitmap * active) {
                           ^~~~~~~~
/home/sbb/GeminiGraph-master/core/graph.hpp:1407:35: error: expected ‘,’ or ‘...’ before ‘<’ token
   R process_vertices(std::function<R(VertexId)> process, Bitmap * active) {
                                   ^
/home/sbb/GeminiGraph-master/core/graph.hpp:1493:24: error: ‘std::function’ has not been declared
   R process_edges(std::function<void(VertexId)> sparse_signal, std::function<R(VertexId, M, VertexAdjList<EdgeData>)> sparse_slot, std::function<void(VertexId, VertexAdjList<EdgeData>)> dense_signal, std::function<R(VertexId, M)> dense_slot, Bitmap * active, Bitmap * dense_selective = nullptr) {
                        ^~~~~~~~
/home/sbb/GeminiGraph-master/core/graph.hpp:1493:32: error: expected ‘,’ or ‘...’ before ‘<’ token
   R process_edges(std::function<void(VertexId)> sparse_signal, std::function<R(VertexId, M, VertexAdjList<EdgeData>)> sparse_slot, std::function<void(VertexId, VertexAdjList<EdgeData>)> dense_signal, std::function<R(VertexId, M)> dense_slot, Bitmap * active, Bitmap * dense_selective = nullptr) {
                                ^
/home/sbb/GeminiGraph-master/core/graph.hpp: In member function ‘R Graph<EdgeData>::process_vertices(int)’:
/home/sbb/GeminiGraph-master/core/graph.hpp:1431:30: error: ‘active’ was not declared in this scope
         unsigned long word = active->data[WORD_OFFSET(v_i)];
                              ^~~~~~
/home/sbb/GeminiGraph-master/core/graph.hpp:1431:30: note: suggested alternative: ‘ctime’
         unsigned long word = active->data[WORD_OFFSET(v_i)];
                              ^~~~~~
                              ctime
/home/sbb/GeminiGraph-master/core/graph.hpp:1434:30: error: there are no arguments to ‘process’ that depend on a template parameter, so a declaration of ‘process’ must be available [-fpermissive]
             local_reducer += process(v_i);
                              ^~~~~~~
/home/sbb/GeminiGraph-master/core/graph.hpp:1434:30: note: (if you use ‘-fpermissive’, G++ will accept your code, but allowing the use of an undeclared name is deprecated)
/home/sbb/GeminiGraph-master/core/graph.hpp:1446:32: error: ‘active’ was not declared in this scope
           unsigned long word = active->data[WORD_OFFSET(v_i)];
                                ^~~~~~
/home/sbb/GeminiGraph-master/core/graph.hpp:1446:32: note: suggested alternative: ‘ctime’
           unsigned long word = active->data[WORD_OFFSET(v_i)];
                                ^~~~~~
                                ctime
/home/sbb/GeminiGraph-master/core/graph.hpp:1449:32: error: there are no arguments to ‘process’ that depend on a template parameter, so a declaration of ‘process’ must be available [-fpermissive]
               local_reducer += process(v_i);
                                ^~~~~~~
In file included from toolkits/bc.cpp:20:0:
/home/sbb/GeminiGraph-master/core/graph.hpp: In member function ‘R Graph<EdgeData>::process_edges(int)’:
/home/sbb/GeminiGraph-master/core/graph.hpp:1506:7: error: ‘active’ was not declared in this scope
       active
       ^~~~~~
/home/sbb/GeminiGraph-master/core/graph.hpp:1506:7: note: suggested alternative: ‘ctime’
       active
       ^~~~~~
       ctime
/home/sbb/GeminiGraph-master/core/graph.hpp:1546:13: error: there are no arguments to ‘sparse_signal’ that depend on a template parameter, so a declaration of ‘sparse_signal’ must be available [-fpermissive]
             sparse_signal(v_i);
             ^~~~~~~~~~~~~
/home/sbb/GeminiGraph-master/core/graph.hpp:1665:11: error: ‘dense_selective’ was not declared in this scope
       if (dense_selective!=nullptr && partitions>1) {
           ^~~~~~~~~~~~~~~
toolkits/bc.cpp: In function ‘void compute(Graph<Empty>*, VertexId)’:
toolkits/bc.cpp:91:5: error: no matching function for call to ‘Graph<Empty>::process_edges<VertexId, double>(compute(Graph<Empty>*, VertexId)::<lambda(VertexId)>, compute(Graph<Empty>*, VertexId)::<lambda(VertexId, double, VertexAdjList<Empty>)>, compute(Graph<Empty>*, VertexId)::<lambda(VertexId, VertexAdjList<Empty>)>, compute(Graph<Empty>*, VertexId)::<lambda(VertexId, double)>, VertexSubset*&, VertexSubset*&)’
     );
     ^
In file included from toolkits/bc.cpp:20:0:
/home/sbb/GeminiGraph-master/core/graph.hpp:1493:5: note: candidate: template<class R, class M> R Graph<EdgeData>::process_edges(int) [with R = R; M = M; EdgeData = Empty]
   R process_edges(std::function<void(VertexId)> sparse_signal, std::function<R(VertexId, M, VertexAdjList<EdgeData>)> sparse_slot, std::function<void(VertexId, VertexAdjList<EdgeData>)> dense_signal, std::function<R(VertexId, M)> dense_slot, Bitmap * active, Bitmap * dense_selective = nullptr) {
     ^~~~~~~~~~~~~
/home/sbb/GeminiGraph-master/core/graph.hpp:1493:5: note:   template argument deduction/substitution failed:
toolkits/bc.cpp:91:5: note:   candidate expects 1 argument, 6 provided
     );
     ^
toolkits/bc.cpp:98:5: error: no matching function for call to ‘Graph<Empty>::process_vertices<VertexId>(compute(Graph<Empty>*, VertexId)::<lambda(VertexId)>, VertexSubset*&)’
     );
     ^
In file included from toolkits/bc.cpp:20:0:
/home/sbb/GeminiGraph-master/core/graph.hpp:1407:5: note: candidate: template<class R> R Graph<EdgeData>::process_vertices(int) [with R = R; EdgeData = Empty]
   R process_vertices(std::function<R(VertexId)> process, Bitmap * active) {
     ^~~~~~~~~~~~~~~~
/home/sbb/GeminiGraph-master/core/graph.hpp:1407:5: note:   template argument deduction/substitution failed:
toolkits/bc.cpp:98:5: note:   candidate expects 1 argument, 2 provided
     );
     ^
toolkits/bc.cpp:111:3: error: no matching function for call to ‘Graph<Empty>::process_vertices<VertexId>(compute(Graph<Empty>*, VertexId)::<lambda(VertexId)>, VertexSubset*&)’
   );
   ^
In file included from toolkits/bc.cpp:20:0:
/home/sbb/GeminiGraph-master/core/graph.hpp:1407:5: note: candidate: template<class R> R Graph<EdgeData>::process_vertices(int) [with R = R; EdgeData = Empty]
   R process_vertices(std::function<R(VertexId)> process, Bitmap * active) {
     ^~~~~~~~~~~~~~~~
/home/sbb/GeminiGraph-master/core/graph.hpp:1407:5: note:   template argument deduction/substitution failed:
toolkits/bc.cpp:111:3: note:   candidate expects 1 argument, 2 provided
   );
   ^
toolkits/bc.cpp:120:3: error: no matching function for call to ‘Graph<Empty>::process_vertices<VertexId>(compute(Graph<Empty>*, VertexId)::<lambda(VertexId)>, Bitmap*&)’
   );
   ^
In file included from toolkits/bc.cpp:20:0:
/home/sbb/GeminiGraph-master/core/graph.hpp:1407:5: note: candidate: template<class R> R Graph<EdgeData>::process_vertices(int) [with R = R; EdgeData = Empty]
   R process_vertices(std::function<R(VertexId)> process, Bitmap * active) {
     ^~~~~~~~~~~~~~~~
/home/sbb/GeminiGraph-master/core/graph.hpp:1407:5: note:   template argument deduction/substitution failed:
toolkits/bc.cpp:120:3: note:   candidate expects 1 argument, 2 provided
   );
   ^
toolkits/bc.cpp:157:5: error: no matching function for call to ‘Graph<Empty>::process_edges<VertexId, double>(compute(Graph<Empty>*, VertexId)::<lambda(VertexId)>, compute(Graph<Empty>*, VertexId)::<lambda(VertexId, double, VertexAdjList<Empty>)>, compute(Graph<Empty>*, VertexId)::<lambda(VertexId, VertexAdjList<Empty>)>, compute(Graph<Empty>*, VertexId)::<lambda(VertexId, double)>, Bitmap*&, VertexSubset*&)’
     );
     ^
In file included from toolkits/bc.cpp:20:0:
/home/sbb/GeminiGraph-master/core/graph.hpp:1493:5: note: candidate: template<class R, class M> R Graph<EdgeData>::process_edges(int) [with R = R; M = M; EdgeData = Empty]
   R process_edges(std::function<void(VertexId)> sparse_signal, std::function<R(VertexId, M, VertexAdjList<EdgeData>)> sparse_slot, std::function<void(VertexId, VertexAdjList<EdgeData>)> dense_signal, std::function<R(VertexId, M)> dense_slot, Bitmap * active, Bitmap * dense_selective = nullptr) {
     ^~~~~~~~~~~~~
/home/sbb/GeminiGraph-master/core/graph.hpp:1493:5: note:   template argument deduction/substitution failed:
toolkits/bc.cpp:157:5: note:   candidate expects 1 argument, 6 provided
     );
     ^
toolkits/bc.cpp:167:5: error: no matching function for call to ‘Graph<Empty>::process_vertices<VertexId>(compute(Graph<Empty>*, VertexId)::<lambda(VertexId)>, Bitmap*&)’
     );
     ^
In file included from toolkits/bc.cpp:20:0:
/home/sbb/GeminiGraph-master/core/graph.hpp:1407:5: note: candidate: template<class R> R Graph<EdgeData>::process_vertices(int) [with R = R; EdgeData = Empty]
   R process_vertices(std::function<R(VertexId)> process, Bitmap * active) {
     ^~~~~~~~~~~~~~~~
/home/sbb/GeminiGraph-master/core/graph.hpp:1407:5: note:   template argument deduction/substitution failed:
toolkits/bc.cpp:167:5: note:   candidate expects 1 argument, 2 provided
     );
     ^
toolkits/bc.cpp:176:3: error: no matching function for call to ‘Graph<Empty>::process_vertices<VertexId>(compute(Graph<Empty>*, VertexId)::<lambda(VertexId)>, VertexSubset*&)’
   );
   ^
In file included from toolkits/bc.cpp:20:0:
/home/sbb/GeminiGraph-master/core/graph.hpp:1407:5: note: candidate: template<class R> R Graph<EdgeData>::process_vertices(int) [with R = R; EdgeData = Empty]
   R process_vertices(std::function<R(VertexId)> process, Bitmap * active) {
     ^~~~~~~~~~~~~~~~
/home/sbb/GeminiGraph-master/core/graph.hpp:1407:5: note:   template argument deduction/substitution failed:
toolkits/bc.cpp:176:3: note:   candidate expects 1 argument, 2 provided
   );
   ^
toolkits/bc.cpp: In function ‘void compute_compact(Graph<Empty>*, VertexId)’:
toolkits/bc.cpp:227:3: error: no matching function for call to ‘Graph<Empty>::process_vertices<VertexId>(compute_compact(Graph<Empty>*, VertexId)::<lambda(VertexId)>, VertexSubset*&)’
   );
   ^
In file included from toolkits/bc.cpp:20:0:
/home/sbb/GeminiGraph-master/core/graph.hpp:1407:5: note: candidate: template<class R> R Graph<EdgeData>::process_vertices(int) [with R = R; EdgeData = Empty]
   R process_vertices(std::function<R(VertexId)> process, Bitmap * active) {
     ^~~~~~~~~~~~~~~~
/home/sbb/GeminiGraph-master/core/graph.hpp:1407:5: note:   template argument deduction/substitution failed:
toolkits/bc.cpp:227:3: note:   candidate expects 1 argument, 2 provided
   );
   ^
toolkits/bc.cpp:276:5: error: no matching function for call to ‘Graph<Empty>::process_edges<VertexId, double>(compute_compact(Graph<Empty>*, VertexId)::<lambda(VertexId)>, compute_compact(Graph<Empty>*, VertexId)::<lambda(VertexId, double, VertexAdjList<Empty>)>, compute_compact(Graph<Empty>*, VertexId)::<lambda(VertexId, VertexAdjList<Empty>)>, compute_compact(Graph<Empty>*, VertexId)::<lambda(VertexId, double)>, VertexSubset*&, VertexSubset*&)’
     );
     ^
In file included from toolkits/bc.cpp:20:0:
/home/sbb/GeminiGraph-master/core/graph.hpp:1493:5: note: candidate: template<class R, class M> R Graph<EdgeData>::process_edges(int) [with R = R; M = M; EdgeData = Empty]
   R process_edges(std::function<void(VertexId)> sparse_signal, std::function<R(VertexId, M, VertexAdjList<EdgeData>)> sparse_slot, std::function<void(VertexId, VertexAdjList<EdgeData>)> dense_signal, std::function<R(VertexId, M)> dense_slot, Bitmap * active, Bitmap * dense_selective = nullptr) {
     ^~~~~~~~~~~~~
/home/sbb/GeminiGraph-master/core/graph.hpp:1493:5: note:   template argument deduction/substitution failed:
toolkits/bc.cpp:276:5: note:   candidate expects 1 argument, 6 provided
     );
     ^
toolkits/bc.cpp:284:5: error: no matching function for call to ‘Graph<Empty>::process_vertices<VertexId>(compute_compact(Graph<Empty>*, VertexId)::<lambda(VertexId)>, VertexSubset*&)’
     );
     ^
In file included from toolkits/bc.cpp:20:0:
/home/sbb/GeminiGraph-master/core/graph.hpp:1407:5: note: candidate: template<class R> R Graph<EdgeData>::process_vertices(int) [with R = R; EdgeData = Empty]
   R process_vertices(std::function<R(VertexId)> process, Bitmap * active) {
     ^~~~~~~~~~~~~~~~
/home/sbb/GeminiGraph-master/core/graph.hpp:1407:5: note:   template argument deduction/substitution failed:
toolkits/bc.cpp:284:5: note:   candidate expects 1 argument, 2 provided
     );
     ^
toolkits/bc.cpp:296:3: error: no matching function for call to ‘Graph<Empty>::process_vertices<VertexId>(compute_compact(Graph<Empty>*, VertexId)::<lambda(VertexId)>, VertexSubset*&)’
   );
   ^
In file included from toolkits/bc.cpp:20:0:
/home/sbb/GeminiGraph-master/core/graph.hpp:1407:5: note: candidate: template<class R> R Graph<EdgeData>::process_vertices(int) [with R = R; EdgeData = Empty]
   R process_vertices(std::function<R(VertexId)> process, Bitmap * active) {
     ^~~~~~~~~~~~~~~~
/home/sbb/GeminiGraph-master/core/graph.hpp:1407:5: note:   template argument deduction/substitution failed:
toolkits/bc.cpp:296:3: note:   candidate expects 1 argument, 2 provided
   );
   ^
toolkits/bc.cpp:308:3: error: no matching function for call to ‘Graph<Empty>::process_vertices<VertexId>(compute_compact(Graph<Empty>*, VertexId)::<lambda(VertexId)>, VertexSubset*&)’
   );
   ^
In file included from toolkits/bc.cpp:20:0:
/home/sbb/GeminiGraph-master/core/graph.hpp:1407:5: note: candidate: template<class R> R Graph<EdgeData>::process_vertices(int) [with R = R; EdgeData = Empty]
   R process_vertices(std::function<R(VertexId)> process, Bitmap * active) {
     ^~~~~~~~~~~~~~~~
/home/sbb/GeminiGraph-master/core/graph.hpp:1407:5: note:   template argument deduction/substitution failed:
toolkits/bc.cpp:308:3: note:   candidate expects 1 argument, 2 provided
   );
   ^
toolkits/bc.cpp:316:3: error: no matching function for call to ‘Graph<Empty>::process_vertices<VertexId>(compute_compact(Graph<Empty>*, VertexId)::<lambda(VertexId)>, VertexSubset*&)’
   );
   ^
In file included from toolkits/bc.cpp:20:0:
/home/sbb/GeminiGraph-master/core/graph.hpp:1407:5: note: candidate: template<class R> R Graph<EdgeData>::process_vertices(int) [with R = R; EdgeData = Empty]
   R process_vertices(std::function<R(VertexId)> process, Bitmap * active) {
     ^~~~~~~~~~~~~~~~
/home/sbb/GeminiGraph-master/core/graph.hpp:1407:5: note:   template argument deduction/substitution failed:
toolkits/bc.cpp:316:3: note:   candidate expects 1 argument, 2 provided
   );
   ^
toolkits/bc.cpp:353:5: error: no matching function for call to ‘Graph<Empty>::process_edges<VertexId, double>(compute_compact(Graph<Empty>*, VertexId)::<lambda(VertexId)>, compute_compact(Graph<Empty>*, VertexId)::<lambda(VertexId, double, VertexAdjList<Empty>)>, compute_compact(Graph<Empty>*, VertexId)::<lambda(VertexId, VertexAdjList<Empty>)>, compute_compact(Graph<Empty>*, VertexId)::<lambda(VertexId, double)>, VertexSubset*&, VertexSubset*&)’
     );
     ^
In file included from toolkits/bc.cpp:20:0:
/home/sbb/GeminiGraph-master/core/graph.hpp:1493:5: note: candidate: template<class R, class M> R Graph<EdgeData>::process_edges(int) [with R = R; M = M; EdgeData = Empty]
   R process_edges(std::function<void(VertexId)> sparse_signal, std::function<R(VertexId, M, VertexAdjList<EdgeData>)> sparse_slot, std::function<void(VertexId, VertexAdjList<EdgeData>)> dense_signal, std::function<R(VertexId, M)> dense_slot, Bitmap * active, Bitmap * dense_selective = nullptr) {
     ^~~~~~~~~~~~~
/home/sbb/GeminiGraph-master/core/graph.hpp:1493:5: note:   template argument deduction/substitution failed:
toolkits/bc.cpp:353:5: note:   candidate expects 1 argument, 6 provided
     );
     ^
toolkits/bc.cpp:365:5: error: no matching function for call to ‘Graph<Empty>::process_vertices<VertexId>(compute_compact(Graph<Empty>*, VertexId)::<lambda(VertexId)>, VertexSubset*&)’
     );
     ^
In file included from toolkits/bc.cpp:20:0:
/home/sbb/GeminiGraph-master/core/graph.hpp:1407:5: note: candidate: template<class R> R Graph<EdgeData>::process_vertices(int) [with R = R; EdgeData = Empty]
   R process_vertices(std::function<R(VertexId)> process, Bitmap * active) {
     ^~~~~~~~~~~~~~~~
/home/sbb/GeminiGraph-master/core/graph.hpp:1407:5: note:   template argument deduction/substitution failed:
toolkits/bc.cpp:365:5: note:   candidate expects 1 argument, 2 provided
     );
     ^
toolkits/bc.cpp:373:5: error: no matching function for call to ‘Graph<Empty>::process_vertices<VertexId>(compute_compact(Graph<Empty>*, VertexId)::<lambda(VertexId)>, VertexSubset*&)’
     );
     ^
In file included from toolkits/bc.cpp:20:0:
/home/sbb/GeminiGraph-master/core/graph.hpp:1407:5: note: candidate: template<class R> R Graph<EdgeData>::process_vertices(int) [with R = R; EdgeData = Empty]
   R process_vertices(std::function<R(VertexId)> process, Bitmap * active) {
     ^~~~~~~~~~~~~~~~
/home/sbb/GeminiGraph-master/core/graph.hpp:1407:5: note:   template argument deduction/substitution failed:
toolkits/bc.cpp:373:5: note:   candidate expects 1 argument, 2 provided
     );
     ^
toolkits/bc.cpp:382:3: error: no matching function for call to ‘Graph<Empty>::process_vertices<VertexId>(compute_compact(Graph<Empty>*, VertexId)::<lambda(VertexId)>, VertexSubset*&)’
   );
   ^
In file included from toolkits/bc.cpp:20:0:
/home/sbb/GeminiGraph-master/core/graph.hpp:1407:5: note: candidate: template<class R> R Graph<EdgeData>::process_vertices(int) [with R = R; EdgeData = Empty]
   R process_vertices(std::function<R(VertexId)> process, Bitmap * active) {
     ^~~~~~~~~~~~~~~~
/home/sbb/GeminiGraph-master/core/graph.hpp:1407:5: note:   template argument deduction/substitution failed:
toolkits/bc.cpp:382:3: note:   candidate expects 1 argument, 2 provided
   );
   ^
In file included from toolkits/bc.cpp:20:0:
/home/sbb/GeminiGraph-master/core/graph.hpp: In instantiation of ‘void Graph<EdgeData>::emit(VertexId, M) [with M = double; EdgeData = Empty; VertexId = unsigned int]’:
toolkits/bc.cpp:56:40:   required from here
/home/sbb/GeminiGraph-master/core/graph.hpp:1486:38: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     if (local_send_buffer[t_i]->count==local_send_buffer_limit) {
In file included from /home/sbb/GeminiGraph-master/core/mpi.hpp:22:0,
                 from /home/sbb/GeminiGraph-master/core/graph.hpp:39,
                 from toolkits/bc.cpp:20:
/home/sbb/GeminiGraph-master/core/graph.hpp: In instantiation of ‘void Graph<EdgeData>::gather_vertex_array(T*, int) [with T = double; EdgeData = Empty]’:
toolkits/bc.cpp:184:45:   required from here
/home/sbb/GeminiGraph-master/core/graph.hpp:320:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         assert(length == sizeof(T) * (partition_offset[i + 1] - partition_offset[i]));
                       ^
In file included from toolkits/bc.cpp:20:0:
/home/sbb/GeminiGraph-master/core/graph.hpp: In instantiation of ‘T* Graph<EdgeData>::dealloc_vertex_array(T*) [with T = double; EdgeData = Empty]’:
toolkits/bc.cpp:192:43:   required from here
/home/sbb/GeminiGraph-master/core/graph.hpp:242:3: warning: no return statement in function returning non-void [-Wreturn-type]
   }
   ^
/home/sbb/GeminiGraph-master/core/graph.hpp: In instantiation of ‘void Graph<EdgeData>::load_directed(std::__cxx11::string, VertexId) [with EdgeData = Empty; std::__cxx11::string = std::__cxx11::basic_string<char>; VertexId = unsigned int]’:
toolkits/bc.cpp:417:51:   required from here
/home/sbb/GeminiGraph-master/core/graph.hpp:806:38: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
       if (bytes_to_read - read_bytes > edge_unit_size * CHUNKSIZE) {
/home/sbb/GeminiGraph-master/core/graph.hpp:817:18: warning: unused variable ‘dst’ [-Wunused-variable]
         VertexId dst = read_edge_buffer[e_i].dst;
                  ^~~
/home/sbb/GeminiGraph-master/core/graph.hpp: In instantiation of ‘Graph<EdgeData>::load_directed(std::__cxx11::string, VertexId)::<lambda()> [with EdgeData = Empty]’:
/home/sbb/GeminiGraph-master/core/graph.hpp:967:11:   required from ‘struct Graph<EdgeData>::load_directed(std::__cxx11::string, VertexId) [with EdgeData = Empty; std::__cxx11::string = std::__cxx11::basic_string<char>; VertexId = unsigned int]::<lambda()>’
/home/sbb/GeminiGraph-master/core/graph.hpp:936:19:   required from ‘void Graph<EdgeData>::load_directed(std::__cxx11::string, VertexId) [with EdgeData = Empty; std::__cxx11::string = std::__cxx11::basic_string<char>; VertexId = unsigned int]’
toolkits/bc.cpp:417:51:   required from here
/home/sbb/GeminiGraph-master/core/graph.hpp:955:32: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
           for (EdgeId e_i=0;e_i<recv_edges;e_i++) {
                             ~~~^~~~~~~~~~~
/home/sbb/GeminiGraph-master/core/graph.hpp: In instantiation of ‘void Graph<EdgeData>::load_directed(std::__cxx11::string, VertexId) [with EdgeData = Empty; std::__cxx11::string = std::__cxx11::basic_string<char>; VertexId = unsigned int]’:
toolkits/bc.cpp:417:51:   required from here
/home/sbb/GeminiGraph-master/core/graph.hpp:977:40: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         if (bytes_to_read - read_bytes > edge_unit_size * CHUNKSIZE) {
/home/sbb/GeminiGraph-master/core/graph.hpp: In instantiation of ‘Graph<EdgeData>::load_directed(std::__cxx11::string, VertexId)::<lambda()> [with EdgeData = Empty]’:
/home/sbb/GeminiGraph-master/core/graph.hpp:1062:20:   required from ‘struct Graph<EdgeData>::load_directed(std::__cxx11::string, VertexId) [with EdgeData = Empty; std::__cxx11::string = std::__cxx11::basic_string<char>; VertexId = unsigned int]::<lambda()>’
/home/sbb/GeminiGraph-master/core/graph.hpp:1045:19:   required from ‘void Graph<EdgeData>::load_directed(std::__cxx11::string, VertexId) [with EdgeData = Empty; std::__cxx11::string = std::__cxx11::basic_string<char>; VertexId = unsigned int]’
toolkits/bc.cpp:417:51:   required from here
/home/sbb/GeminiGraph-master/core/graph.hpp:1064:11: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
           for (EdgeId e_i=0;e_i<recv_edges;e_i++) {
           ^~~
/home/sbb/GeminiGraph-master/core/graph.hpp: In instantiation of ‘void Graph<EdgeData>::load_directed(std::__cxx11::string, VertexId) [with EdgeData = Empty; std::__cxx11::string = std::__cxx11::basic_string<char>; VertexId = unsigned int]’:
toolkits/bc.cpp:417:51:   required from here
/home/sbb/GeminiGraph-master/core/graph.hpp:1084:40: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         if (bytes_to_read - read_bytes > edge_unit_size * CHUNKSIZE) {
/home/sbb/GeminiGraph-master/core/graph.hpp: In instantiation of ‘Graph<EdgeData>::load_directed(std::__cxx11::string, VertexId)::<lambda()> [with EdgeData = Empty]’:
/home/sbb/GeminiGraph-master/core/graph.hpp:1164:11:   required from ‘struct Graph<EdgeData>::load_directed(std::__cxx11::string, VertexId) [with EdgeData = Empty; std::__cxx11::string = std::__cxx11::basic_string<char>; VertexId = unsigned int]::<lambda()>’
/home/sbb/GeminiGraph-master/core/graph.hpp:1134:19:   required from ‘void Graph<EdgeData>::load_directed(std::__cxx11::string, VertexId) [with EdgeData = Empty; std::__cxx11::string = std::__cxx11::basic_string<char>; VertexId = unsigned int]’
toolkits/bc.cpp:417:51:   required from here
/home/sbb/GeminiGraph-master/core/graph.hpp:1153:32: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
           for (EdgeId e_i=0;e_i<recv_edges;e_i++) {
                             ~~~^~~~~~~~~~~
/home/sbb/GeminiGraph-master/core/graph.hpp: In instantiation of ‘void Graph<EdgeData>::load_directed(std::__cxx11::string, VertexId) [with EdgeData = Empty; std::__cxx11::string = std::__cxx11::basic_string<char>; VertexId = unsigned int]’:
toolkits/bc.cpp:417:51:   required from here
/home/sbb/GeminiGraph-master/core/graph.hpp:1174:40: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         if (bytes_to_read - read_bytes > edge_unit_size * CHUNKSIZE) {
/home/sbb/GeminiGraph-master/core/graph.hpp: In instantiation of ‘Graph<EdgeData>::load_directed(std::__cxx11::string, VertexId)::<lambda()> [with EdgeData = Empty]’:
/home/sbb/GeminiGraph-master/core/graph.hpp:1259:20:   required from ‘struct Graph<EdgeData>::load_directed(std::__cxx11::string, VertexId) [with EdgeData = Empty; std::__cxx11::string = std::__cxx11::basic_string<char>; VertexId = unsigned int]::<lambda()>’
/home/sbb/GeminiGraph-master/core/graph.hpp:1242:19:   required from ‘void Graph<EdgeData>::load_directed(std::__cxx11::string, VertexId) [with EdgeData = Empty; std::__cxx11::string = std::__cxx11::basic_string<char>; VertexId = unsigned int]’
toolkits/bc.cpp:417:51:   required from here
/home/sbb/GeminiGraph-master/core/graph.hpp:1261:11: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
           for (EdgeId e_i=0;e_i<recv_edges;e_i++) {
           ^~~
/home/sbb/GeminiGraph-master/core/graph.hpp: In instantiation of ‘void Graph<EdgeData>::load_directed(std::__cxx11::string, VertexId) [with EdgeData = Empty; std::__cxx11::string = std::__cxx11::basic_string<char>; VertexId = unsigned int]’:
toolkits/bc.cpp:417:51:   required from here
/home/sbb/GeminiGraph-master/core/graph.hpp:1281:40: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         if (bytes_to_read - read_bytes > edge_unit_size * CHUNKSIZE) {
In file included from /home/sbb/GeminiGraph-master/core/graph.hpp:35:0,
                 from toolkits/bc.cpp:20:
/home/sbb/GeminiGraph-master/core/atomic.hpp: In instantiation of ‘bool cas(T*, T, T) [with T = double]’:
/home/sbb/GeminiGraph-master/core/atomic.hpp:50:16:   required from ‘void write_add(T*, T) [with T = double]’
toolkits/bc.cpp:65:43:   required from here
/home/sbb/GeminiGraph-master/core/atomic.hpp:27:53: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     return __sync_bool_compare_and_swap((long*)ptr, *((long*)&old_val), *((long*)&new_val));
                                                     ^~~~~~~~~~~~~~~~~~
/home/sbb/GeminiGraph-master/core/atomic.hpp:27:73: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     return __sync_bool_compare_and_swap((long*)ptr, *((long*)&old_val), *((long*)&new_val));
                                                                         ^~~~~~~~~~~~~~~~~~
/home/sbb/GeminiGraph-master/core/atomic.hpp:29:52: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     return __sync_bool_compare_and_swap((int*)ptr, *((int*)&old_val), *((int*)&new_val));
                                                    ^~~~~~~~~~~~~~~~~
/home/sbb/GeminiGraph-master/core/atomic.hpp:29:71: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
     return __sync_bool_compare_and_swap((int*)ptr, *((int*)&old_val), *((int*)&new_val));
                                                                       ^~~~~~~~~~~~~~~~~
make: *** [toolkits/bc] Error 1

Could you offer some advice please?

Thanks,

Can VertexID type be 64bit integer?

Hi, I am studying the system, Gemini.

I found that, by default, Gemini uses uint32_t as a VertexID type.

Will it be enough to change the typedef statement for VertexID type in 'core/type.hpp'?

Did you run some tests for its valid operation when VertexID type == int64_t ?

Thanks,

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.