Ver Fonte

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

Michael Vines há 6 anos atrás
pai
commit
5683282c94
4 ficheiros alterados com 63 adições e 50 exclusões
  1. 0 23
      build-perf-libs.sh
  2. 2 4
      ci/test-stable.sh
  3. 16 3
      core/build.rs
  4. 45 20
      fetch-perf-libs.sh

+ 0 - 23
build-perf-libs.sh

@@ -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

+ 2 - 4
ci/test-stable.sh

@@ -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

+ 16 - 3
core/build.rs

@@ -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,

+ 45 - 20
fetch-perf-libs.sh

@@ -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