Update to solana-perf-libs v0.14.0, with support for both CUDA 10.0 and 10.1

This commit is contained in:
Michael Vines 2019-06-18 08:24:41 -07:00
parent 44967abd1c
commit 5683282c94
4 changed files with 63 additions and 50 deletions

View File

@ -1,23 +0,0 @@
#!/usr/bin/env bash
#
# Builds perf-libs from the upstream source and installs them into the correct
# location in the tree
#
set -e
cd "$(dirname "$0")"
if [[ -d target/perf-libs ]]; then
echo "target/perf-libs/ already exists, to continue run:"
echo "$ rm -rf target/perf-libs"
exit 1
fi
(
set -x
git clone git@github.com:solana-labs/solana-perf-libs.git target/perf-libs
cd target/perf-libs
make -j"$(nproc)"
make DESTDIR=. install
)
./fetch-perf-libs.sh

View File

@ -60,9 +60,7 @@ test-stable-perf)
# Run root package tests with these features
ROOT_FEATURES=
if [[ $(uname) = Darwin ]]; then
./build-perf-libs.sh
else
if [[ $(uname) = Linux ]]; then
# Enable persistence mode to keep the CUDA kernel driver loaded, avoiding a
# lengthy and unexpected delay the first time CUDA is involved when the driver
# is not yet loaded.
@ -72,7 +70,7 @@ test-stable-perf)
./fetch-perf-libs.sh
# shellcheck source=/dev/null
source ./target/perf-libs/env.sh
ROOT_FEATURES=$ROOT_FEATURES,cuda
ROOT_FEATURES=cuda
fi
# Run root package library tests

View File

@ -12,7 +12,12 @@ fn main() {
let manifest_dir = env::var("CARGO_MANIFEST_DIR").unwrap();
let mut path = Path::new(&manifest_dir);
path = path.parent().unwrap();
path.join(Path::new("target/perf-libs"))
let mut path = path.join(Path::new("target/perf-libs"));
path.push(
env::var("SOLANA_PERF_LIBS_CUDA")
.unwrap_or_else(|err| panic!("SOLANA_PERF_LIBS_CUDA not defined: {}", err)),
);
path
};
let perf_libs_dir = perf_libs_dir.to_str().unwrap();
@ -26,8 +31,16 @@ fn main() {
});
println!("cargo:rerun-if-changed={}", perf_libs_dir);
println!("cargo:rustc-link-search=native={}", perf_libs_dir);
println!("cargo:rerun-if-changed={}/libcuda-crypt.a", perf_libs_dir);
println!("cargo:rustc-link-lib=static=cuda-crypt");
if cfg!(windows) {
println!("cargo:rerun-if-changed={}/libcuda-crypt.dll", perf_libs_dir);
} else if cfg!(target_os = "macos") {
println!(
"cargo:rerun-if-changed={}/libcuda-crypt.dylib",
perf_libs_dir
);
} else {
println!("cargo:rerun-if-changed={}/libcuda-crypt.so", perf_libs_dir);
}
let cuda_home = match env::var("CUDA_HOME") {
Ok(cuda_home) => cuda_home,

View File

@ -1,6 +1,6 @@
#!/usr/bin/env bash
PERF_LIBS_VERSION=v0.13.2
PERF_LIBS_VERSION=v0.14.0
set -e
cd "$(dirname "$0")"
@ -20,37 +20,39 @@ if [[ ! -f target/perf-libs/.$PERF_LIBS_VERSION ]]; then
(
set -x
cd target/perf-libs
curl https://solana-perf.s3.amazonaws.com/$PERF_LIBS_VERSION/x86_64-unknown-linux-gnu/solana-perf.tgz | tar zxvf -
curl -L --retry 5 --retry-delay 2 --retry-connrefused -o solana-perf.tgz \
https://github.com/solana-labs/solana-perf-libs/releases/download/$PERF_LIBS_VERSION/solana-perf.tgz
tar zxvf solana-perf.tgz
rm -f solana-perf.tgz
touch .$PERF_LIBS_VERSION
)
fi
cat > target/perf-libs/env.sh <<'EOF'
write_env() {
rm -f target/perf-libs/env.sh
cat >> target/perf-libs/env.sh <<EOF
export CUDA_HOME="$CUDA_HOME"
export SOLANA_PERF_LIBS_CUDA="$SOLANA_PERF_LIBS_CUDA"
EOF
cat >> target/perf-libs/env.sh <<'EOF'
SOLANA_PERF_LIBS="$(cd $(dirname "${BASH_SOURCE[0]}"); pwd)"
echo "solana-perf-libs version: $(cat $SOLANA_PERF_LIBS/solana-perf-HEAD.txt)"
if [[ -r "$SOLANA_PERF_LIBS"/solana-perf-CUDA_HOME.txt ]]; then
CUDA_HOME=$(cat "$SOLANA_PERF_LIBS"/solana-perf-CUDA_HOME.txt)
else
CUDA_HOME=/usr/local/cuda
fi
echo CUDA_HOME="$CUDA_HOME"
export CUDA_HOME="$CUDA_HOME"
echo LD_LIBRARY_PATH="$SOLANA_PERF_LIBS:$CUDA_HOME/lib64:$LD_LIBRARY_PATH"
export LD_LIBRARY_PATH="$SOLANA_PERF_LIBS:$CUDA_HOME/lib64:$LD_LIBRARY_PATH"
echo LD_LIBRARY_PATH="$SOLANA_PERF_LIBS/$SOLANA_PERF_LIBS_CUDA:$CUDA_HOME/lib64:$LD_LIBRARY_PATH"
export LD_LIBRARY_PATH="$SOLANA_PERF_LIBS/$SOLANA_PERF_LIBS_CUDA:$CUDA_HOME/lib64:$LD_LIBRARY_PATH"
echo PATH="$SOLANA_PERF_LIBS:$CUDA_HOME/bin:$PATH"
export PATH="$SOLANA_PERF_LIBS:$CUDA_HOME/bin:$PATH"
echo PATH="$SOLANA_PERF_LIBS/$SOLANA_PERF_LIBS_CUDA:$CUDA_HOME/bin:$PATH"
export PATH="$SOLANA_PERF_LIBS/$SOLANA_PERF_LIBS_CUDA:$CUDA_HOME/bin:$PATH"
if [[ -r "$CUDA_HOME"/version.txt && -r $SOLANA_PERF_LIBS/cuda-version.txt ]]; then
if ! diff "$CUDA_HOME"/version.txt "$SOLANA_PERF_LIBS"/cuda-version.txt > /dev/null; then
if [[ -r "$CUDA_HOME"/version.txt && -r $SOLANA_PERF_LIBS/$SOLANA_PERF_LIBS_CUDA/cuda-version.txt ]]; then
if ! diff "$CUDA_HOME"/version.txt "$SOLANA_PERF_LIBS/$SOLANA_PERF_LIBS_CUDA"/cuda-version.txt > /dev/null; then
echo ==============================================
echo "Warning: possible CUDA version mismatch with $CUDA_HOME"
echo
echo "Expected version: $(cat "$SOLANA_PERF_LIBS"/cuda-version.txt)"
echo "Expected version: $(cat "$SOLANA_PERF_LIBS/$SOLANA_PERF_LIBS_CUDA"/cuda-version.txt)"
echo "Detected version: $(cat "$CUDA_HOME"/version.txt)"
echo ==============================================
fi
@ -60,7 +62,30 @@ else
echo ==============================================
fi
EOF
echo
echo "source $PWD/target/perf-libs/env.sh to setup environment"
exit 0
}
for cuda in $(cd target/perf-libs; find . -maxdepth 1 -type d -regex './cuda-.*' | sort -r); do
cuda=$(basename "$cuda")
CUDA_HOME=/usr/local/$cuda
SOLANA_PERF_LIBS_CUDA=$cuda
[[ -d $CUDA_HOME ]] || {
echo "$cuda not detected: $CUDA_HOME directory does not exist"
continue
}
[[ -r $CUDA_HOME/version.txt ]] || {
echo "$cuda not detected: $CUDA_HOME/version.txt does not exist"
continue
}
echo
cat "$CUDA_HOME/version.txt"
echo "CUDA_HOME=$CUDA_HOME"
write_env
done
echo
echo "source $PWD/target/perf-libs/env.sh to setup environment"
exit 0
echo No supported CUDA versions detected
exit 1