Abstract
最近在跑SlabHash
的代码,在配置环境的时候遇到了很多问题,特此记录一下。希望遇到相同问题的小伙伴可以参考下,谢谢!
Introduction
论文地址:A Dynamic Hash Table for the GPU | IEEE Conference Publication | IEEE Xplore
代码地址:owensgroup/SlabHash: A warp-oriented dynamic hash table for GPUs (github.com)
Run Code
整个运行代码的流程如下:
1. 在服务器上 git clone git@github.com:owensgroup/SlabHash.git
2. cd SlabHash
3. mkdir build && cd build
4. cmake ..
5. make
我是在上面某几步运行过程中遇到的困难!
Problem 1
首先我说下自己遇到的问题:
- 直接运行代码
Run Code
,会显示一些函数库没有,而且以前没有接触过CMake
相关的项目,所以不知道怎么办。 - 代码中给出的
GPU compute capability
和实验室的服务器是不搭配的,所以需要自行去查看,然后去配置。
Solve 1
-
在
linux
中,通过命令nvidia-smi
查看显卡版本:
-
进入NVIDIA官网:[CUDA GPUs - Compute Capability | NVIDIA Developer(https://developer.nvidia.com/cuda-gpus))查看和自己的显卡相匹配的算力:
- 查看和自己服务器相关的算力
- 在
CMakeLists.txt
中修改代码
Problem 2
ThirdParty
下面的googletest
和 rapidjson
和是空文件夹,显示缺少组件!
SlabHash
下的SlabHash
是空文件夹。
Solve 2
需要上述两个文件自行下载并且放到文件夹里。
同理需要把SlabHash
下的SlabHash
下载并放到文件夹中
//在目录SlabHash下
git clone git@github.com:Tencent/rapidjson.git
git clone git@github.com:google/googletest.git
mv googletest ThirdParty
mv rapidjson ThirdParty
git clone git@github.com:owensgroup/SlabAlloc.git
Problem 3
问题描述:
上面说,参数数量和函数的数量不匹配!
CMake Error : set_target_properties called with incorrect number of arguments.
然后我去查看CMakeError.log
,提示是:
显示pthread
不是Linux
下默认多线程的库,所以需要手动链接?如何手动链接呢
到底是哪里出了问题?我自己一头雾水😵
Solve 3
我去了googletest
的github
,其中有一条issue
是:
CMake Error : set_target_properties called with incorrect number of arguments.
提问者认为可能是个Bug? 按照文中的方法:CMake Error : set_target_properties called with incorrect number of arguments. · Issue #3509 · google/googletest (github.com),我也没有解决。
在网上查询(摸鱼)两天的时间,看了好多方法,也尝试了许多方法,简单列举几条,其中有:
-
在
googletest/googletest
中建立build
文件夹 进行cmake ..
,我照做了还是出错…😅 -
加上pthread库的动态连接
SET(LIBRARIES -pthread #记得加-横线 )
-
stackoverflow上的解决办法:cmake - set_target_properties called with incorrect number of arguments? - Stack Overflow
统统没用…我是废物😭真的有点崩溃,这个问题卡我的时间最长,主要是大家遇到的问题也不适用我!
最终的解决方法:
说出来有点搞笑,我baidu
了下这句话的用法,是打印出gtest
的版本,我的猜想是:这两段话应该可以注释掉
最终和我的猜想一样!解决问题!cmake
成功
Problem 4
error: namespace "std" has no member "shuffle"
Solve 4:
在cmap_test.cu
中加入:
std::shuffle comes from algorithm
Add
#include <algorithm>
因为 Linux 是不会自动加入一些函数库的。
Conclusion
大功告成!可以运行代码了:
# model 0
python3 ../bench/bencher.py -m 0 -d 0
# model 1
python3 ../bench/bencher.py -m 1 -d 0
# model 2
python3 ../bench/bencher.py -m 2 -d 0
# model 3
python3 ../bench/bencher.py -m 3 -d 0