gem5-dev@gem5.org

The gem5 Developer List

View all threads

[S] Change in gem5/gem5[develop]: gpu-compute: Remove use of 'std::random_shuffle'

BB
Bobby Bruce (Gerrit)
Tue, May 9, 2023 10:40 PM

Bobby Bruce has uploaded this change for review. (
https://gem5-review.googlesource.com/c/public/gem5/+/70418?usp=email )

Change subject: gpu-compute: Remove use of 'std::random_shuffle'
......................................................................

gpu-compute: Remove use of 'std::random_shuffle'

This was deprecated in C++14 and removed in C++17. This has been
replaced with std::random. This has been implemented to ensure
reproducible results despite (pseudo)random behavior.

Change-Id: Idd52bc997547c7f8c1be88f6130adff8a37b4116

M src/cpu/testers/gpu_ruby_test/address_manager.cc
1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/src/cpu/testers/gpu_ruby_test/address_manager.cc
b/src/cpu/testers/gpu_ruby_test/address_manager.cc
index 37f7420..533184d 100644
--- a/src/cpu/testers/gpu_ruby_test/address_manager.cc
+++ b/src/cpu/testers/gpu_ruby_test/address_manager.cc
@@ -32,6 +32,7 @@
#include "cpu/testers/gpu_ruby_test/address_manager.hh"

#include <algorithm>
+#include <random>

#include "base/intmath.hh"
#include "base/logging.hh"
@@ -52,14 +53,21 @@
numNormalLocs = numAtomicLocs * numLocsPerAtomic;

  // generate random address map
  • unsigned shuffle_seed = randAddressMap.size();
    randAddressMap.resize(numAtomicLocs + numNormalLocs);
    for (Location i = 0; i < numAtomicLocs + numNormalLocs; ++i) {
    // all addresses are sizeof(Value) (i.e., 4-byte) aligned
    randAddressMap[i] = (Addr)((i + 128) << floorLog2(sizeof(Value)));
  •    shuffle_seed += randAddressMap[i];
    }
    
  • // randomly shuffle randAddressMap
  • std::random_shuffle(randAddressMap.begin(), randAddressMap.end());
  • // randomly shuffle randAddressMap. Seed is determined by the
    addressmap

  • // properties so should produce identical shuffles for same input.

  • std::shuffle(

  •    randAddressMap.begin(),
    
  •    randAddressMap.end(),
    
  •    std::default_random_engine(shuffle_seed)
    
  • );

    // initialize atomic locations
    // first and last normal location per atomic location

--
To view, visit
https://gem5-review.googlesource.com/c/public/gem5/+/70418?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gem5-review.googlesource.com/settings?usp=email

Gerrit-MessageType: newchange
Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: Idd52bc997547c7f8c1be88f6130adff8a37b4116
Gerrit-Change-Number: 70418
Gerrit-PatchSet: 1
Gerrit-Owner: Bobby Bruce bbruce@ucdavis.edu

Bobby Bruce has uploaded this change for review. ( https://gem5-review.googlesource.com/c/public/gem5/+/70418?usp=email ) Change subject: gpu-compute: Remove use of 'std::random_shuffle' ...................................................................... gpu-compute: Remove use of 'std::random_shuffle' This was deprecated in C++14 and removed in C++17. This has been replaced with std::random. This has been implemented to ensure reproducible results despite (pseudo)random behavior. Change-Id: Idd52bc997547c7f8c1be88f6130adff8a37b4116 --- M src/cpu/testers/gpu_ruby_test/address_manager.cc 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/cpu/testers/gpu_ruby_test/address_manager.cc b/src/cpu/testers/gpu_ruby_test/address_manager.cc index 37f7420..533184d 100644 --- a/src/cpu/testers/gpu_ruby_test/address_manager.cc +++ b/src/cpu/testers/gpu_ruby_test/address_manager.cc @@ -32,6 +32,7 @@ #include "cpu/testers/gpu_ruby_test/address_manager.hh" #include <algorithm> +#include <random> #include "base/intmath.hh" #include "base/logging.hh" @@ -52,14 +53,21 @@ numNormalLocs = numAtomicLocs * numLocsPerAtomic; // generate random address map + unsigned shuffle_seed = randAddressMap.size(); randAddressMap.resize(numAtomicLocs + numNormalLocs); for (Location i = 0; i < numAtomicLocs + numNormalLocs; ++i) { // all addresses are sizeof(Value) (i.e., 4-byte) aligned randAddressMap[i] = (Addr)((i + 128) << floorLog2(sizeof(Value))); + shuffle_seed += randAddressMap[i]; } - // randomly shuffle randAddressMap - std::random_shuffle(randAddressMap.begin(), randAddressMap.end()); + // randomly shuffle randAddressMap. Seed is determined by the addressmap + // properties so should produce identical shuffles for same input. + std::shuffle( + randAddressMap.begin(), + randAddressMap.end(), + std::default_random_engine(shuffle_seed) + ); // initialize atomic locations // first and last normal location per atomic location -- To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/70418?usp=email To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings?usp=email Gerrit-MessageType: newchange Gerrit-Project: public/gem5 Gerrit-Branch: develop Gerrit-Change-Id: Idd52bc997547c7f8c1be88f6130adff8a37b4116 Gerrit-Change-Number: 70418 Gerrit-PatchSet: 1 Gerrit-Owner: Bobby Bruce <bbruce@ucdavis.edu>