Merge rabit
This commit is contained in:
26
rabit/guide/Makefile
Normal file
26
rabit/guide/Makefile
Normal file
@@ -0,0 +1,26 @@
|
||||
export CC = gcc
|
||||
export CXX = g++
|
||||
export MPICXX = mpicxx
|
||||
export LDFLAGS= -pthread -lm -L../lib
|
||||
export CFLAGS = -Wall -O3 -msse2 -std=c++11 -Wno-unknown-pragmas -fPIC -fopenmp -I../include
|
||||
|
||||
.PHONY: clean all lib libmpi
|
||||
BIN = basic.rabit broadcast.rabit
|
||||
MOCKBIN= lazy_allreduce.mock
|
||||
|
||||
all: $(BIN)
|
||||
basic.rabit: basic.cc lib ../lib/librabit.a
|
||||
broadcast.rabit: broadcast.cc lib ../lib/librabit.a
|
||||
lazy_allreduce.mock: lazy_allreduce.cc lib ../lib/librabit.a
|
||||
|
||||
$(BIN) :
|
||||
$(CXX) $(CFLAGS) -o $@ $(filter %.cpp %.o %.c %.cc %.a, $^) $(LDFLAGS)
|
||||
|
||||
$(MOCKBIN) :
|
||||
$(CXX) $(CFLAGS) -std=c++11 -o $@ $(filter %.cpp %.o %.c %.cc, $^) $(LDFLAGS) -lrabit_mock
|
||||
|
||||
$(OBJ) :
|
||||
$(CXX) -c $(CFLAGS) -o $@ $(firstword $(filter %.cpp %.c %.cc, $^) )
|
||||
|
||||
clean:
|
||||
$(RM) $(OBJ) $(BIN) $(MOCKBIN) *~ ../src/*~
|
||||
1
rabit/guide/README
Normal file
1
rabit/guide/README
Normal file
@@ -0,0 +1 @@
|
||||
See tutorial at ../doc/guide.md
|
||||
35
rabit/guide/basic.cc
Normal file
35
rabit/guide/basic.cc
Normal file
@@ -0,0 +1,35 @@
|
||||
/*!
|
||||
* Copyright (c) 2014 by Contributors
|
||||
* \file basic.cc
|
||||
* \brief This is an example demonstrating what is Allreduce
|
||||
*
|
||||
* \author Tianqi Chen
|
||||
*/
|
||||
#define _CRT_SECURE_NO_WARNINGS
|
||||
#define _CRT_SECURE_NO_DEPRECATE
|
||||
#include <vector>
|
||||
#include <rabit/rabit.h>
|
||||
using namespace rabit;
|
||||
int main(int argc, char *argv[]) {
|
||||
int N = 3;
|
||||
if (argc > 1) {
|
||||
N = atoi(argv[1]);
|
||||
}
|
||||
std::vector<int> a(N);
|
||||
rabit::Init(argc, argv);
|
||||
for (int i = 0; i < N; ++i) {
|
||||
a[i] = rabit::GetRank() + i;
|
||||
}
|
||||
printf("@node[%d] before-allreduce: a={%d, %d, %d}\n",
|
||||
rabit::GetRank(), a[0], a[1], a[2]);
|
||||
// allreduce take max of each elements in all processes
|
||||
Allreduce<op::Max>(&a[0], N);
|
||||
printf("@node[%d] after-allreduce-max: a={%d, %d, %d}\n",
|
||||
rabit::GetRank(), a[0], a[1], a[2]);
|
||||
// second allreduce that sums everything up
|
||||
Allreduce<op::Sum>(&a[0], N);
|
||||
printf("@node[%d] after-allreduce-sum: a={%d, %d, %d}\n",
|
||||
rabit::GetRank(), a[0], a[1], a[2]);
|
||||
rabit::Finalize();
|
||||
return 0;
|
||||
}
|
||||
27
rabit/guide/basic.py
Executable file
27
rabit/guide/basic.py
Executable file
@@ -0,0 +1,27 @@
|
||||
#!/usr/bin/python
|
||||
"""
|
||||
demo python script of rabit
|
||||
"""
|
||||
from __future__ import print_function
|
||||
from builtins import range
|
||||
import os
|
||||
import sys
|
||||
import numpy as np
|
||||
# import rabit, the tracker script will setup the lib path correctly
|
||||
# for normal run without tracker script, add following line
|
||||
# sys.path.append(os.path.dirname(__file__) + '/../python')
|
||||
import rabit
|
||||
|
||||
rabit.init()
|
||||
n = 3
|
||||
rank = rabit.get_rank()
|
||||
a = np.zeros(n)
|
||||
for i in range(n):
|
||||
a[i] = rank + i
|
||||
|
||||
print('@node[%d] before-allreduce: a=%s' % (rank, str(a)))
|
||||
a = rabit.allreduce(a, rabit.MAX)
|
||||
print('@node[%d] after-allreduce-max: a=%s' % (rank, str(a)))
|
||||
a = rabit.allreduce(a, rabit.SUM)
|
||||
print('@node[%d] after-allreduce-sum: a=%s' % (rank, str(a)))
|
||||
rabit.finalize()
|
||||
16
rabit/guide/broadcast.cc
Normal file
16
rabit/guide/broadcast.cc
Normal file
@@ -0,0 +1,16 @@
|
||||
#include <rabit/rabit.h>
|
||||
using namespace rabit;
|
||||
const int N = 3;
|
||||
int main(int argc, char *argv[]) {
|
||||
rabit::Init(argc, argv);
|
||||
std::string s;
|
||||
if (rabit::GetRank() == 0) s = "hello world";
|
||||
printf("@node[%d] before-broadcast: s=\"%s\"\n",
|
||||
rabit::GetRank(), s.c_str());
|
||||
// broadcast s from node 0 to all other nodes
|
||||
rabit::Broadcast(&s, 0);
|
||||
printf("@node[%d] after-broadcast: s=\"%s\"\n",
|
||||
rabit::GetRank(), s.c_str());
|
||||
rabit::Finalize();
|
||||
return 0;
|
||||
}
|
||||
23
rabit/guide/broadcast.py
Executable file
23
rabit/guide/broadcast.py
Executable file
@@ -0,0 +1,23 @@
|
||||
#!/usr/bin/python
|
||||
"""
|
||||
demo python script of rabit
|
||||
"""
|
||||
from __future__ import print_function
|
||||
import os
|
||||
import sys
|
||||
# add path to wrapper
|
||||
# for normal run without tracker script, add following line
|
||||
# sys.path.append(os.path.dirname(__file__) + '/../wrapper')
|
||||
import rabit
|
||||
|
||||
rabit.init()
|
||||
n = 3
|
||||
rank = rabit.get_rank()
|
||||
s = None
|
||||
if rank == 0:
|
||||
s = {'hello world':100, 2:3}
|
||||
print('@node[%d] before-broadcast: s=\"%s\"' % (rank, str(s)))
|
||||
s = rabit.broadcast(s, 0)
|
||||
|
||||
print('@node[%d] after-broadcast: s=\"%s\"' % (rank, str(s)))
|
||||
rabit.finalize()
|
||||
34
rabit/guide/lazy_allreduce.cc
Normal file
34
rabit/guide/lazy_allreduce.cc
Normal file
@@ -0,0 +1,34 @@
|
||||
/*!
|
||||
* Copyright (c) 2014 by Contributors
|
||||
* \file basic.cc
|
||||
* \brief This is an example demonstrating what is Allreduce
|
||||
*
|
||||
* \author Tianqi Chen
|
||||
*/
|
||||
#include <rabit/rabit.h>
|
||||
|
||||
using namespace rabit;
|
||||
const int N = 3;
|
||||
int main(int argc, char *argv[]) {
|
||||
int a[N] = {0};
|
||||
rabit::Init(argc, argv);
|
||||
// lazy preparation function
|
||||
auto prepare = [&]() {
|
||||
printf("@node[%d] run prepare function\n", rabit::GetRank());
|
||||
for (int i = 0; i < N; ++i) {
|
||||
a[i] = rabit::GetRank() + i;
|
||||
}
|
||||
};
|
||||
printf("@node[%d] before-allreduce: a={%d, %d, %d}\n",
|
||||
rabit::GetRank(), a[0], a[1], a[2]);
|
||||
// allreduce take max of each elements in all processes
|
||||
Allreduce<op::Max>(&a[0], N, prepare);
|
||||
printf("@node[%d] after-allreduce-sum: a={%d, %d, %d}\n",
|
||||
rabit::GetRank(), a[0], a[1], a[2]);
|
||||
// rum second allreduce
|
||||
Allreduce<op::Sum>(&a[0], N);
|
||||
printf("@node[%d] after-allreduce-max: a={%d, %d, %d}\n",
|
||||
rabit::GetRank(), a[0], a[1], a[2]);
|
||||
rabit::Finalize();
|
||||
return 0;
|
||||
}
|
||||
31
rabit/guide/lazy_allreduce.py
Executable file
31
rabit/guide/lazy_allreduce.py
Executable file
@@ -0,0 +1,31 @@
|
||||
#!/usr/bin/python
|
||||
"""
|
||||
demo python script of rabit: Lazy preparation function
|
||||
"""
|
||||
import os
|
||||
import sys
|
||||
import numpy as np
|
||||
# import rabit, the tracker script will setup the lib path correctly
|
||||
# for normal run without tracker script, add following line
|
||||
# sys.path.append(os.path.dirname(__file__) + '/../wrapper')
|
||||
import rabit
|
||||
|
||||
|
||||
# use mock library so that we can run failure test
|
||||
rabit.init(lib = 'mock')
|
||||
n = 3
|
||||
rank = rabit.get_rank()
|
||||
a = np.zeros(n)
|
||||
|
||||
def prepare(a):
|
||||
print('@node[%d] run prepare function' % rank)
|
||||
# must take in reference and modify the reference
|
||||
for i in xrange(n):
|
||||
a[i] = rank + i
|
||||
|
||||
print('@node[%d] before-allreduce: a=%s' % (rank, str(a)))
|
||||
a = rabit.allreduce(a, rabit.MAX, prepare_fun = prepare)
|
||||
print('@node[%d] after-allreduce-max: a=%s' % (rank, str(a)))
|
||||
a = rabit.allreduce(a, rabit.SUM)
|
||||
print('@node[%d] after-allreduce-sum: a=%s' % (rank, str(a)))
|
||||
rabit.finalize()
|
||||
Reference in New Issue
Block a user