参考:
- http://netsyslab.ece.ubc.ca/wiki/index.php/Totem
- https://docs.google.com/document/d/1LdsNqHHeMBc-6VAoT-pUwibRdZxKA4FRmOrS9WxJHq8/pub
运行环境:
1. TBB(Intel Threading Building Blocks):
On ubuntu, it can be installed via apt-get as follows: “sudo apt-get install libtbb-dev
”
2. GTEST (Google C++ Testing Framework):
-
安装到路径:/usr/src/
sudo apt-get install libgtest-dev
-
由CMakeLists.txt生成Makefile文件(没有cmake请先安装)
sudo cmake .
(或者cmake CMakeLists.txt
)
- 执行以下命令,生成两个静态库:libgtest.a 和 libgtest_main.a
sudo make
-
将静态库拷贝到系统目录:
sudo cp libgtest*.a /usr/local/lib
-
环境变量:
export GTEST=/usr/src/gtest/
编译报错及改正:
1、…/totem/totem_comkernel.cuh(163): error: function “atomicAdd(double *, double)” has already been defined
CUDA版本导致。cuda 8.0 提供了对atomicAdd的定义,但atomicAdd在之前的cuda toolkit中并未出现,因此一些程序自定义了atomicAdd函数。
#if !defined(__CUDA_ARCH__) || __CUDA_ARCH__ >= 600 //CUDA 8.0 has defined it
#else
inline __device__ double atomicAdd(double* address, double val) {
unsigned long long int* address_as_ull = (unsigned long long int*)address;
unsigned long long int old = *address_as_ull, assumed;
do {
assumed = old;
old = atomicCAS(address_as_ull, assumed,
__double_as_longlong(val + __longlong_as_double(assumed)));
} while (assumed != old);
return __longlong_as_double(old);
}
#endif
2、error: for statement expected before ‘}’ token
for (vid_t v = 0; v < graph->vertex_count; v++) {