diff --git a/.gitignore b/.gitignore index 90f986d..352c75f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ bazel-* -.clang-format \ No newline at end of file +.clang-format +cmake-build/ +cmake-local/ diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..bece797 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,631 @@ +cmake_minimum_required(VERSION 3.20) +project(supersim) + +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED True) + +include(FindPkgConfig) + +# zlib +pkg_check_modules(zlib REQUIRED IMPORTED_TARGET zlib) + get_target_property( + ZLIB_INC + PkgConfig::zlib + INTERFACE_INCLUDE_DIRECTORIES +) + +# nlohmann_json +pkg_check_modules(nlohmann_json REQUIRED IMPORTED_TARGET nlohmann_json) + get_target_property( + NLOHMANN_JSON_INC + PkgConfig::nlohmann_json + INTERFACE_INCLUDE_DIRECTORIES +) + +# protobuf +pkg_check_modules(protobuf REQUIRED IMPORTED_TARGET protobuf) + get_target_property( + PROTOBUF_INC + PkgConfig::protobuf + INTERFACE_INCLUDE_DIRECTORIES + ) + +# libprim +pkg_check_modules(libprim REQUIRED IMPORTED_TARGET libprim) + get_target_property( + LIBPRIM_INC + PkgConfig::libprim + INTERFACE_INCLUDE_DIRECTORIES + ) + +# libcolhash +pkg_check_modules(libcolhash REQUIRED IMPORTED_TARGET libcolhash) + get_target_property( + LIBCOLHASH_INC + PkgConfig::libcolhash + INTERFACE_INCLUDE_DIRECTORIES + ) + +# libfactory +pkg_check_modules(libfactory REQUIRED IMPORTED_TARGET libfactory) + get_target_property( + LIBFACTORY_INC + PkgConfig::libfactory + INTERFACE_INCLUDE_DIRECTORIES + ) + +# librnd +pkg_check_modules(librnd REQUIRED IMPORTED_TARGET librnd) + get_target_property( + LIBRND_INC + PkgConfig::librnd + INTERFACE_INCLUDE_DIRECTORIES + ) + +# libmut +pkg_check_modules(libmut REQUIRED IMPORTED_TARGET libmut) + get_target_property( + LIBMUT_INC + PkgConfig::libmut + INTERFACE_INCLUDE_DIRECTORIES + ) + +# libbits +pkg_check_modules(libbits REQUIRED IMPORTED_TARGET libbits) + get_target_property( + LIBBITS_INC + PkgConfig::libbits + INTERFACE_INCLUDE_DIRECTORIES + ) + +# libstrop +pkg_check_modules(libstrop REQUIRED IMPORTED_TARGET libstrop) + get_target_property( + LIBSTROP_INC + PkgConfig::libstrop + INTERFACE_INCLUDE_DIRECTORIES + ) + +# libfio +pkg_check_modules(libfio REQUIRED IMPORTED_TARGET libfio) + get_target_property( + LIBFIO_INC + PkgConfig::libfio + INTERFACE_INCLUDE_DIRECTORIES + ) + +# libsettings +pkg_check_modules(libsettings REQUIRED IMPORTED_TARGET libsettings) + get_target_property( + LIBSETTINGS_INC + PkgConfig::libsettings + INTERFACE_INCLUDE_DIRECTORIES + ) + +# absl +find_package(absl REQUIRED) +get_target_property( + ABSL_BASE_INC + absl::base + INTERFACE_INCLUDE_DIRECTORIES + ) +list(APPEND ABSL_LIBS + absl::bad_any_cast_impl + absl::bad_optional_access + absl::bad_variant_access + absl::base + absl::city + absl::civil_time + absl::cord + absl::debugging_internal + absl::demangle_internal + absl::examine_stack + absl::exponential_biased + absl::failure_signal_handler + absl::flags_commandlineflag_internal + absl::flags_commandlineflag + absl::flags_config + absl::flags_internal + absl::flags_marshalling + absl::flags_parse + absl::flags_private_handle_accessor + absl::flags_program_name + absl::flags_reflection + absl::flags + absl::flags_usage_internal + absl::flags_usage + absl::graphcycles_internal + absl::hash + absl::hashtablez_sampler + absl::int128 + absl::leak_check_disable + absl::leak_check + absl::log_severity + absl::malloc_internal + absl::periodic_sampler + absl::random_distributions + absl::random_internal_distribution_test_util + absl::random_internal_platform + absl::random_internal_pool_urbg + absl::random_internal_randen_hwaes_impl + absl::random_internal_randen_hwaes + absl::random_internal_randen_slow + absl::random_internal_randen + absl::random_internal_seed_material + absl::random_seed_gen_exception + absl::random_seed_sequences + absl::raw_hash_set + absl::raw_logging_internal + absl::scoped_set_env + absl::spinlock_wait + absl::stacktrace + absl::statusor + absl::status + absl::strerror + absl::str_format_internal + absl::strings_internal + absl::strings + absl::symbolize + absl::synchronization + absl::throw_delegate + absl::time + absl::time_zone + ) + +# protobuf +find_package(Protobuf REQUIRED) +get_target_property( + PROTOBUF_INC + protobuf::libprotobuf + INTERFACE_INCLUDE_DIRECTORIES + ) + +# paragraph +pkg_check_modules(paragraph REQUIRED IMPORTED_TARGET libparagraph) + get_target_property( + PARAGRAPH_INC + PkgConfig::paragraph + INTERFACE_INCLUDE_DIRECTORIES + ) + +add_executable( + supersim + ${PROJECT_SOURCE_DIR}/src/main.cc + ${PROJECT_SOURCE_DIR}/src/workload/util.cc + ${PROJECT_SOURCE_DIR}/src/workload/Terminal.cc + ${PROJECT_SOURCE_DIR}/src/workload/Workload.cc + ${PROJECT_SOURCE_DIR}/src/workload/Application.cc + ${PROJECT_SOURCE_DIR}/src/workload/NullTerminal.cc + ${PROJECT_SOURCE_DIR}/src/workload/MessageDistributor.cc + ${PROJECT_SOURCE_DIR}/src/workload/RateMonitor.cc + ${PROJECT_SOURCE_DIR}/src/workload/simplemem/Application.cc + ${PROJECT_SOURCE_DIR}/src/workload/simplemem/ProcessorTerminal.cc + ${PROJECT_SOURCE_DIR}/src/workload/simplemem/MemoryTerminal.cc + ${PROJECT_SOURCE_DIR}/src/workload/simplemem/MemoryOp.cc + ${PROJECT_SOURCE_DIR}/src/workload/blast/Application.cc + ${PROJECT_SOURCE_DIR}/src/workload/blast/BlastTerminal.cc + ${PROJECT_SOURCE_DIR}/src/workload/alltoall/AllToAllTerminal.cc + ${PROJECT_SOURCE_DIR}/src/workload/alltoall/Application.cc + ${PROJECT_SOURCE_DIR}/src/workload/stencil/StencilTerminal.cc + ${PROJECT_SOURCE_DIR}/src/workload/stencil/Application.cc + ${PROJECT_SOURCE_DIR}/src/workload/paragraph/Application.cc + ${PROJECT_SOURCE_DIR}/src/workload/paragraph/GraphTerminal.cc + ${PROJECT_SOURCE_DIR}/src/workload/stream/StreamTerminal.cc + ${PROJECT_SOURCE_DIR}/src/workload/stream/Application.cc + ${PROJECT_SOURCE_DIR}/src/workload/pulse/Application.cc + ${PROJECT_SOURCE_DIR}/src/workload/pulse/PulseTerminal.cc + ${PROJECT_SOURCE_DIR}/src/congestion/BufferOccupancy.cc + ${PROJECT_SOURCE_DIR}/src/congestion/util.cc + ${PROJECT_SOURCE_DIR}/src/congestion/NullSensor.cc + ${PROJECT_SOURCE_DIR}/src/congestion/CongestionSensor.cc + ${PROJECT_SOURCE_DIR}/src/event/Component.cc + ${PROJECT_SOURCE_DIR}/src/event/Simulator.cc + ${PROJECT_SOURCE_DIR}/src/event/VectorQueue.cc + ${PROJECT_SOURCE_DIR}/src/stats/MessageLog.cc + ${PROJECT_SOURCE_DIR}/src/stats/TrafficLog.cc + ${PROJECT_SOURCE_DIR}/src/stats/ChannelLog.cc + ${PROJECT_SOURCE_DIR}/src/stats/InfoLog.cc + ${PROJECT_SOURCE_DIR}/src/stats/RateLog.cc + ${PROJECT_SOURCE_DIR}/src/interface/Interface.cc + ${PROJECT_SOURCE_DIR}/src/interface/standard/MessageReassembler.cc + ${PROJECT_SOURCE_DIR}/src/interface/standard/Interface.cc + ${PROJECT_SOURCE_DIR}/src/interface/standard/PacketReassembler.cc + ${PROJECT_SOURCE_DIR}/src/interface/standard/OutputQueue.cc + ${PROJECT_SOURCE_DIR}/src/interface/standard/Ejector.cc + ${PROJECT_SOURCE_DIR}/src/util/DimensionIterator.cc + ${PROJECT_SOURCE_DIR}/src/arbiter/ComparingArbiter.cc + ${PROJECT_SOURCE_DIR}/src/arbiter/RandomArbiter.cc + ${PROJECT_SOURCE_DIR}/src/arbiter/Arbiter.cc + ${PROJECT_SOURCE_DIR}/src/arbiter/LruArbiter.cc + ${PROJECT_SOURCE_DIR}/src/arbiter/DualStageClassArbiter.cc + ${PROJECT_SOURCE_DIR}/src/arbiter/RandomPriorityArbiter.cc + ${PROJECT_SOURCE_DIR}/src/arbiter/LslpArbiter.cc + ${PROJECT_SOURCE_DIR}/src/allocator/CrSeparableAllocator.cc + ${PROJECT_SOURCE_DIR}/src/allocator/RSeparableAllocator.cc + ${PROJECT_SOURCE_DIR}/src/allocator/WavefrontAllocator.cc + ${PROJECT_SOURCE_DIR}/src/allocator/Allocator.cc + ${PROJECT_SOURCE_DIR}/src/allocator/RcSeparableAllocator.cc + ${PROJECT_SOURCE_DIR}/src/traffic/size/RandomMSD.cc + ${PROJECT_SOURCE_DIR}/src/traffic/size/ProbabilityMSD.cc + ${PROJECT_SOURCE_DIR}/src/traffic/size/ReadWriteMSD.cc + ${PROJECT_SOURCE_DIR}/src/traffic/size/MessageSizeDistribution.cc + ${PROJECT_SOURCE_DIR}/src/traffic/size/SingleMSD.cc + ${PROJECT_SOURCE_DIR}/src/traffic/continuous/BitReverseCTP.cc + ${PROJECT_SOURCE_DIR}/src/traffic/continuous/LocalRandomRemoteAttackCTP.cc + ${PROJECT_SOURCE_DIR}/src/traffic/continuous/UniformRandomCTP.cc + ${PROJECT_SOURCE_DIR}/src/traffic/continuous/BitRotateCTP.cc + ${PROJECT_SOURCE_DIR}/src/traffic/continuous/LoopbackCTP.cc + ${PROJECT_SOURCE_DIR}/src/traffic/continuous/BitTransposeCTP.cc + ${PROJECT_SOURCE_DIR}/src/traffic/continuous/MatrixCTP.cc + ${PROJECT_SOURCE_DIR}/src/traffic/continuous/NeighborCTP.cc + ${PROJECT_SOURCE_DIR}/src/traffic/continuous/RandomExchangeCTP.cc + ${PROJECT_SOURCE_DIR}/src/traffic/continuous/DimRotateCTP.cc + ${PROJECT_SOURCE_DIR}/src/traffic/continuous/DimBisectionStressCTP.cc + ${PROJECT_SOURCE_DIR}/src/traffic/continuous/DimReverseCTP.cc + ${PROJECT_SOURCE_DIR}/src/traffic/continuous/DimComplementReverseCTP.cc + ${PROJECT_SOURCE_DIR}/src/traffic/continuous/ScanCTP.cc + ${PROJECT_SOURCE_DIR}/src/traffic/continuous/UniformRandomQuadrantCTP.cc + ${PROJECT_SOURCE_DIR}/src/traffic/continuous/RandomExchangeQuadrantCTP.cc + ${PROJECT_SOURCE_DIR}/src/traffic/continuous/Swap2CTP.cc + ${PROJECT_SOURCE_DIR}/src/traffic/continuous/GroupAttackCTP.cc + ${PROJECT_SOURCE_DIR}/src/traffic/continuous/TornadoCTP.cc + ${PROJECT_SOURCE_DIR}/src/traffic/continuous/DimTransposeCTP.cc + ${PROJECT_SOURCE_DIR}/src/traffic/continuous/BitComplementCTP.cc + ${PROJECT_SOURCE_DIR}/src/traffic/continuous/RandomBlockOutCTP.cc + ${PROJECT_SOURCE_DIR}/src/traffic/continuous/RandomExchangeNeighborCTP.cc + ${PROJECT_SOURCE_DIR}/src/traffic/continuous/ContinuousTrafficPattern.cc + ${PROJECT_SOURCE_DIR}/src/traffic/continuous/UniformRandomBisectionCTP.cc + ${PROJECT_SOURCE_DIR}/src/traffic/continuous/LocalRemoteRandomCTP.cc + ${PROJECT_SOURCE_DIR}/src/traffic/distribution/DistributionTrafficPattern.cc + ${PROJECT_SOURCE_DIR}/src/traffic/distribution/RandomDTP.cc + ${PROJECT_SOURCE_DIR}/src/architecture/util.cc + ${PROJECT_SOURCE_DIR}/src/architecture/VcScheduler.cc + ${PROJECT_SOURCE_DIR}/src/architecture/Crossbar.cc + ${PROJECT_SOURCE_DIR}/src/architecture/FlitDistributor.cc + ${PROJECT_SOURCE_DIR}/src/architecture/CreditWatcher.cc + ${PROJECT_SOURCE_DIR}/src/architecture/CrossbarScheduler.cc + ${PROJECT_SOURCE_DIR}/src/architecture/PortedDevice.cc + ${PROJECT_SOURCE_DIR}/src/metadata/ZeroMetadataHandler.cc + ${PROJECT_SOURCE_DIR}/src/metadata/MetadataHandler.cc + ${PROJECT_SOURCE_DIR}/src/metadata/LocalTimestampMetadataHandler.cc + ${PROJECT_SOURCE_DIR}/src/metadata/CreationTimestampMetadataHandler.cc + ${PROJECT_SOURCE_DIR}/src/types/CreditSender.cc + ${PROJECT_SOURCE_DIR}/src/types/Flit.cc + ${PROJECT_SOURCE_DIR}/src/types/StatusReceiver.cc + ${PROJECT_SOURCE_DIR}/src/types/Message.cc + ${PROJECT_SOURCE_DIR}/src/types/Packet.cc + ${PROJECT_SOURCE_DIR}/src/types/FlitReceiver.cc + ${PROJECT_SOURCE_DIR}/src/types/Credit.cc + ${PROJECT_SOURCE_DIR}/src/types/FlitSender.cc + ${PROJECT_SOURCE_DIR}/src/types/MessageReceiver.cc + ${PROJECT_SOURCE_DIR}/src/types/CreditReceiver.cc + ${PROJECT_SOURCE_DIR}/src/types/MessageOwner.cc + ${PROJECT_SOURCE_DIR}/src/routing/util.cc + ${PROJECT_SOURCE_DIR}/src/routing/WeightedReduction.cc + ${PROJECT_SOURCE_DIR}/src/routing/InjectionAlgorithm.cc + ${PROJECT_SOURCE_DIR}/src/routing/Reduction.cc + ${PROJECT_SOURCE_DIR}/src/routing/mode.cc + ${PROJECT_SOURCE_DIR}/src/routing/RoutingAlgorithm.cc + ${PROJECT_SOURCE_DIR}/src/routing/RegularNonMinimalWeightFunc.cc + ${PROJECT_SOURCE_DIR}/src/routing/AllMinimalReduction.cc + ${PROJECT_SOURCE_DIR}/src/routing/NonMinimalWeightFunc.cc + ${PROJECT_SOURCE_DIR}/src/routing/LeastCongestedMinimalReduction.cc + ${PROJECT_SOURCE_DIR}/src/router/Router.cc + ${PROJECT_SOURCE_DIR}/src/router/inputqueued/Router.cc + ${PROJECT_SOURCE_DIR}/src/router/inputqueued/OutputQueue.cc + ${PROJECT_SOURCE_DIR}/src/router/inputqueued/InputQueue.cc + ${PROJECT_SOURCE_DIR}/src/router/outputqueued/Router.cc + ${PROJECT_SOURCE_DIR}/src/router/outputqueued/OutputQueue.cc + ${PROJECT_SOURCE_DIR}/src/router/outputqueued/InputQueue.cc + ${PROJECT_SOURCE_DIR}/src/router/outputqueued/Ejector.cc + ${PROJECT_SOURCE_DIR}/src/router/inputoutputqueued/Router.cc + ${PROJECT_SOURCE_DIR}/src/router/inputoutputqueued/OutputQueue.cc + ${PROJECT_SOURCE_DIR}/src/router/inputoutputqueued/InputQueue.cc + ${PROJECT_SOURCE_DIR}/src/router/inputoutputqueued/Ejector.cc + ${PROJECT_SOURCE_DIR}/src/network/Network.cc + ${PROJECT_SOURCE_DIR}/src/network/Channel.cc + ${PROJECT_SOURCE_DIR}/src/network/cube/util.cc + ${PROJECT_SOURCE_DIR}/src/network/common/injection.cc + ${PROJECT_SOURCE_DIR}/src/network/interfaceonly/InjectionAlgorithm.cc + ${PROJECT_SOURCE_DIR}/src/network/interfaceonly/CommonInjectionAlgorithm.cc + ${PROJECT_SOURCE_DIR}/src/network/interfaceonly/Network.cc + ${PROJECT_SOURCE_DIR}/src/network/singlerouter/InjectionAlgorithm.cc + ${PROJECT_SOURCE_DIR}/src/network/singlerouter/DirectRoutingAlgorithm.cc + ${PROJECT_SOURCE_DIR}/src/network/singlerouter/CommonInjectionAlgorithm.cc + ${PROJECT_SOURCE_DIR}/src/network/singlerouter/Network.cc + ${PROJECT_SOURCE_DIR}/src/network/singlerouter/RoutingAlgorithm.cc + ${PROJECT_SOURCE_DIR}/src/network/fattree/util.cc + ${PROJECT_SOURCE_DIR}/src/network/fattree/InjectionAlgorithm.cc + ${PROJECT_SOURCE_DIR}/src/network/fattree/CommonInjectionAlgorithm.cc + ${PROJECT_SOURCE_DIR}/src/network/fattree/Network.cc + ${PROJECT_SOURCE_DIR}/src/network/fattree/RoutingAlgorithm.cc + ${PROJECT_SOURCE_DIR}/src/network/fattree/CommonAncestorRoutingAlgorithm.cc + ${PROJECT_SOURCE_DIR}/src/network/torus/ValiantsRoutingAlgorithm.cc + ${PROJECT_SOURCE_DIR}/src/network/torus/util.cc + ${PROJECT_SOURCE_DIR}/src/network/torus/InjectionAlgorithm.cc + ${PROJECT_SOURCE_DIR}/src/network/torus/DimOrderRoutingAlgorithm.cc + ${PROJECT_SOURCE_DIR}/src/network/torus/CommonInjectionAlgorithm.cc + ${PROJECT_SOURCE_DIR}/src/network/torus/Network.cc + ${PROJECT_SOURCE_DIR}/src/network/torus/RoutingAlgorithm.cc + ${PROJECT_SOURCE_DIR}/src/network/mesh/ValiantsRoutingAlgorithm.cc + ${PROJECT_SOURCE_DIR}/src/network/mesh/util.cc + ${PROJECT_SOURCE_DIR}/src/network/mesh/InjectionAlgorithm.cc + ${PROJECT_SOURCE_DIR}/src/network/mesh/DimOrderRoutingAlgorithm.cc + ${PROJECT_SOURCE_DIR}/src/network/mesh/CommonInjectionAlgorithm.cc + ${PROJECT_SOURCE_DIR}/src/network/mesh/Network.cc + ${PROJECT_SOURCE_DIR}/src/network/mesh/RoutingAlgorithm.cc + ${PROJECT_SOURCE_DIR}/src/network/hyperx/SkippingDimensionsRoutingAlgorithm.cc + ${PROJECT_SOURCE_DIR}/src/network/hyperx/ValiantsRoutingAlgorithm.cc + ${PROJECT_SOURCE_DIR}/src/network/hyperx/util.cc + ${PROJECT_SOURCE_DIR}/src/network/hyperx/InjectionAlgorithm.cc + ${PROJECT_SOURCE_DIR}/src/network/hyperx/DimOrderRoutingAlgorithm.cc + ${PROJECT_SOURCE_DIR}/src/network/hyperx/CommonInjectionAlgorithm.cc + ${PROJECT_SOURCE_DIR}/src/network/hyperx/Network.cc + ${PROJECT_SOURCE_DIR}/src/network/hyperx/RoutingAlgorithm.cc + ${PROJECT_SOURCE_DIR}/src/network/hyperx/MinRoutingAlgorithm.cc + ${PROJECT_SOURCE_DIR}/src/network/hyperx/DalRoutingAlgorithm.cc + ${PROJECT_SOURCE_DIR}/src/network/hyperx/LeastCongestedQueueRoutingAlgorithm.cc + ${PROJECT_SOURCE_DIR}/src/network/hyperx/UgalRoutingAlgorithm.cc + ${PROJECT_SOURCE_DIR}/src/network/butterfly/util.cc + ${PROJECT_SOURCE_DIR}/src/network/butterfly/InjectionAlgorithm.cc + ${PROJECT_SOURCE_DIR}/src/network/butterfly/CommonInjectionAlgorithm.cc + ${PROJECT_SOURCE_DIR}/src/network/butterfly/Network.cc + ${PROJECT_SOURCE_DIR}/src/network/butterfly/DestTagRoutingAlgorithm.cc + ${PROJECT_SOURCE_DIR}/src/network/butterfly/RoutingAlgorithm.cc + ${PROJECT_SOURCE_DIR}/src/network/parkinglot/InjectionAlgorithm.cc + ${PROJECT_SOURCE_DIR}/src/network/parkinglot/CommonInjectionAlgorithm.cc + ${PROJECT_SOURCE_DIR}/src/network/parkinglot/Network.cc + ${PROJECT_SOURCE_DIR}/src/network/parkinglot/RoutingAlgorithm.cc + ${PROJECT_SOURCE_DIR}/src/network/parkinglot/ExitLotRoutingAlgorithm.cc + ${PROJECT_SOURCE_DIR}/src/network/dragonfly/ValiantsRoutingAlgorithm.cc + ${PROJECT_SOURCE_DIR}/src/network/dragonfly/util.cc + ${PROJECT_SOURCE_DIR}/src/network/dragonfly/InjectionAlgorithm.cc + ${PROJECT_SOURCE_DIR}/src/network/dragonfly/CommonInjectionAlgorithm.cc + ${PROJECT_SOURCE_DIR}/src/network/dragonfly/MinimalRoutingAlgorithm.cc + ${PROJECT_SOURCE_DIR}/src/network/dragonfly/Network.cc + ${PROJECT_SOURCE_DIR}/src/network/dragonfly/AdaptiveRoutingAlgorithm.cc + ${PROJECT_SOURCE_DIR}/src/network/dragonfly/RoutingAlgorithm.cc + ${PROJECT_SOURCE_DIR}/src/workload/Application.h + ${PROJECT_SOURCE_DIR}/src/workload/Workload.h + ${PROJECT_SOURCE_DIR}/src/workload/MessageDistributor.h + ${PROJECT_SOURCE_DIR}/src/workload/NullTerminal.h + ${PROJECT_SOURCE_DIR}/src/workload/util.h + ${PROJECT_SOURCE_DIR}/src/workload/Terminal.h + ${PROJECT_SOURCE_DIR}/src/workload/RateMonitor.h + ${PROJECT_SOURCE_DIR}/src/workload/simplemem/Application.h + ${PROJECT_SOURCE_DIR}/src/workload/simplemem/MemoryTerminal.h + ${PROJECT_SOURCE_DIR}/src/workload/simplemem/MemoryOp.h + ${PROJECT_SOURCE_DIR}/src/workload/simplemem/ProcessorTerminal.h + ${PROJECT_SOURCE_DIR}/src/workload/blast/Application.h + ${PROJECT_SOURCE_DIR}/src/workload/blast/BlastTerminal.h + ${PROJECT_SOURCE_DIR}/src/workload/alltoall/Application.h + ${PROJECT_SOURCE_DIR}/src/workload/alltoall/AllToAllTerminal.h + ${PROJECT_SOURCE_DIR}/src/workload/stencil/Application.h + ${PROJECT_SOURCE_DIR}/src/workload/stencil/StencilTerminal.h + ${PROJECT_SOURCE_DIR}/src/workload/paragraph/Application.h + ${PROJECT_SOURCE_DIR}/src/workload/paragraph/GraphTerminal.h + ${PROJECT_SOURCE_DIR}/src/workload/stream/Application.h + ${PROJECT_SOURCE_DIR}/src/workload/stream/StreamTerminal.h + ${PROJECT_SOURCE_DIR}/src/workload/pulse/Application.h + ${PROJECT_SOURCE_DIR}/src/workload/pulse/PulseTerminal.h + ${PROJECT_SOURCE_DIR}/src/congestion/NullSensor.h + ${PROJECT_SOURCE_DIR}/src/congestion/BufferOccupancy.h + ${PROJECT_SOURCE_DIR}/src/congestion/util.h + ${PROJECT_SOURCE_DIR}/src/congestion/CongestionSensor.h + ${PROJECT_SOURCE_DIR}/src/event/VectorQueue.h + ${PROJECT_SOURCE_DIR}/src/event/Component.h + ${PROJECT_SOURCE_DIR}/src/event/Simulator.h + ${PROJECT_SOURCE_DIR}/src/stats/MessageLog.h + ${PROJECT_SOURCE_DIR}/src/stats/RateLog.h + ${PROJECT_SOURCE_DIR}/src/stats/TrafficLog.h + ${PROJECT_SOURCE_DIR}/src/stats/InfoLog.h + ${PROJECT_SOURCE_DIR}/src/stats/ChannelLog.h + ${PROJECT_SOURCE_DIR}/src/interface/Interface.h + ${PROJECT_SOURCE_DIR}/src/interface/standard/PacketReassembler.h + ${PROJECT_SOURCE_DIR}/src/interface/standard/Interface.h + ${PROJECT_SOURCE_DIR}/src/interface/standard/Ejector.h + ${PROJECT_SOURCE_DIR}/src/interface/standard/OutputQueue.h + ${PROJECT_SOURCE_DIR}/src/interface/standard/MessageReassembler.h + ${PROJECT_SOURCE_DIR}/src/util/DimensionIterator.h + ${PROJECT_SOURCE_DIR}/src/util/DimensionalArray.h + ${PROJECT_SOURCE_DIR}/src/arbiter/Arbiter.h + ${PROJECT_SOURCE_DIR}/src/arbiter/LruArbiter.h + ${PROJECT_SOURCE_DIR}/src/arbiter/LslpArbiter.h + ${PROJECT_SOURCE_DIR}/src/arbiter/RandomArbiter.h + ${PROJECT_SOURCE_DIR}/src/arbiter/ComparingArbiter.h + ${PROJECT_SOURCE_DIR}/src/arbiter/DualStageClassArbiter.h + ${PROJECT_SOURCE_DIR}/src/arbiter/RandomPriorityArbiter.h + ${PROJECT_SOURCE_DIR}/src/allocator/RcSeparableAllocator.h + ${PROJECT_SOURCE_DIR}/src/allocator/WavefrontAllocator.h + ${PROJECT_SOURCE_DIR}/src/allocator/RSeparableAllocator.h + ${PROJECT_SOURCE_DIR}/src/allocator/Allocator.h + ${PROJECT_SOURCE_DIR}/src/allocator/CrSeparableAllocator.h + ${PROJECT_SOURCE_DIR}/src/traffic/size/ReadWriteMSD.h + ${PROJECT_SOURCE_DIR}/src/traffic/size/MessageSizeDistribution.h + ${PROJECT_SOURCE_DIR}/src/traffic/size/RandomMSD.h + ${PROJECT_SOURCE_DIR}/src/traffic/size/ProbabilityMSD.h + ${PROJECT_SOURCE_DIR}/src/traffic/size/SingleMSD.h + ${PROJECT_SOURCE_DIR}/src/traffic/continuous/UniformRandomQuadrantCTP.h + ${PROJECT_SOURCE_DIR}/src/traffic/continuous/UniformRandomBisectionCTP.h + ${PROJECT_SOURCE_DIR}/src/traffic/continuous/BitReverseCTP.h + ${PROJECT_SOURCE_DIR}/src/traffic/continuous/UniformRandomCTP.h + ${PROJECT_SOURCE_DIR}/src/traffic/continuous/RandomBlockOutCTP.h + ${PROJECT_SOURCE_DIR}/src/traffic/continuous/DimBisectionStressCTP.h + ${PROJECT_SOURCE_DIR}/src/traffic/continuous/LocalRandomRemoteAttackCTP.h + ${PROJECT_SOURCE_DIR}/src/traffic/continuous/NeighborCTP.h + ${PROJECT_SOURCE_DIR}/src/traffic/continuous/RandomExchangeCTP.h + ${PROJECT_SOURCE_DIR}/src/traffic/continuous/LoopbackCTP.h + ${PROJECT_SOURCE_DIR}/src/traffic/continuous/MatrixCTP.h + ${PROJECT_SOURCE_DIR}/src/traffic/continuous/BitTransposeCTP.h + ${PROJECT_SOURCE_DIR}/src/traffic/continuous/LocalRemoteRandomCTP.h + ${PROJECT_SOURCE_DIR}/src/traffic/continuous/DimReverseCTP.h + ${PROJECT_SOURCE_DIR}/src/traffic/continuous/Swap2CTP.h + ${PROJECT_SOURCE_DIR}/src/traffic/continuous/BitRotateCTP.h + ${PROJECT_SOURCE_DIR}/src/traffic/continuous/RandomExchangeQuadrantCTP.h + ${PROJECT_SOURCE_DIR}/src/traffic/continuous/TornadoCTP.h + ${PROJECT_SOURCE_DIR}/src/traffic/continuous/BitComplementCTP.h + ${PROJECT_SOURCE_DIR}/src/traffic/continuous/DimComplementReverseCTP.h + ${PROJECT_SOURCE_DIR}/src/traffic/continuous/ScanCTP.h + ${PROJECT_SOURCE_DIR}/src/traffic/continuous/GroupAttackCTP.h + ${PROJECT_SOURCE_DIR}/src/traffic/continuous/RandomExchangeNeighborCTP.h + ${PROJECT_SOURCE_DIR}/src/traffic/continuous/ContinuousTrafficPattern.h + ${PROJECT_SOURCE_DIR}/src/traffic/continuous/DimRotateCTP.h + ${PROJECT_SOURCE_DIR}/src/traffic/continuous/DimTransposeCTP.h + ${PROJECT_SOURCE_DIR}/src/traffic/distribution/RandomDTP.h + ${PROJECT_SOURCE_DIR}/src/traffic/distribution/DistributionTrafficPattern.h + ${PROJECT_SOURCE_DIR}/src/architecture/CrossbarScheduler.h + ${PROJECT_SOURCE_DIR}/src/architecture/util.h + ${PROJECT_SOURCE_DIR}/src/architecture/FlitDistributor.h + ${PROJECT_SOURCE_DIR}/src/architecture/VcScheduler.h + ${PROJECT_SOURCE_DIR}/src/architecture/PortedDevice.h + ${PROJECT_SOURCE_DIR}/src/architecture/CreditWatcher.h + ${PROJECT_SOURCE_DIR}/src/architecture/Crossbar.h + ${PROJECT_SOURCE_DIR}/src/metadata/LocalTimestampMetadataHandler.h + ${PROJECT_SOURCE_DIR}/src/metadata/CreationTimestampMetadataHandler.h + ${PROJECT_SOURCE_DIR}/src/metadata/MetadataHandler.h + ${PROJECT_SOURCE_DIR}/src/metadata/ZeroMetadataHandler.h + ${PROJECT_SOURCE_DIR}/src/types/CreditSender.h + ${PROJECT_SOURCE_DIR}/src/types/Credit.h + ${PROJECT_SOURCE_DIR}/src/types/FlitSender.h + ${PROJECT_SOURCE_DIR}/src/types/MessageOwner.h + ${PROJECT_SOURCE_DIR}/src/types/Packet.h + ${PROJECT_SOURCE_DIR}/src/types/FlitReceiver.h + ${PROJECT_SOURCE_DIR}/src/types/Message.h + ${PROJECT_SOURCE_DIR}/src/types/StatusReceiver.h + ${PROJECT_SOURCE_DIR}/src/types/Flit.h + ${PROJECT_SOURCE_DIR}/src/types/MessageReceiver.h + ${PROJECT_SOURCE_DIR}/src/types/CreditReceiver.h + ${PROJECT_SOURCE_DIR}/src/routing/Reduction.h + ${PROJECT_SOURCE_DIR}/src/routing/util.h + ${PROJECT_SOURCE_DIR}/src/routing/mode.h + ${PROJECT_SOURCE_DIR}/src/routing/InjectionAlgorithm.h + ${PROJECT_SOURCE_DIR}/src/routing/WeightedReduction.h + ${PROJECT_SOURCE_DIR}/src/routing/LeastCongestedMinimalReduction.h + ${PROJECT_SOURCE_DIR}/src/routing/AllMinimalReduction.h + ${PROJECT_SOURCE_DIR}/src/routing/NonMinimalWeightFunc.h + ${PROJECT_SOURCE_DIR}/src/routing/RoutingAlgorithm.h + ${PROJECT_SOURCE_DIR}/src/router/Router.h + ${PROJECT_SOURCE_DIR}/src/router/inputqueued/Router.h + ${PROJECT_SOURCE_DIR}/src/router/inputqueued/OutputQueue.h + ${PROJECT_SOURCE_DIR}/src/router/inputqueued/InputQueue.h + ${PROJECT_SOURCE_DIR}/src/router/outputqueued/Router.h + ${PROJECT_SOURCE_DIR}/src/router/outputqueued/Ejector.h + ${PROJECT_SOURCE_DIR}/src/router/outputqueued/OutputQueue.h + ${PROJECT_SOURCE_DIR}/src/router/outputqueued/InputQueue.h + ${PROJECT_SOURCE_DIR}/src/router/inputoutputqueued/Router.h + ${PROJECT_SOURCE_DIR}/src/router/inputoutputqueued/Ejector.h + ${PROJECT_SOURCE_DIR}/src/router/inputoutputqueued/OutputQueue.h + ${PROJECT_SOURCE_DIR}/src/router/inputoutputqueued/InputQueue.h + ${PROJECT_SOURCE_DIR}/src/network/Channel.h + ${PROJECT_SOURCE_DIR}/src/network/Network.h + ${PROJECT_SOURCE_DIR}/src/network/cube/util.h + ${PROJECT_SOURCE_DIR}/src/network/common/injection.h + ${PROJECT_SOURCE_DIR}/src/network/interfaceonly/CommonInjectionAlgorithm.h + ${PROJECT_SOURCE_DIR}/src/network/interfaceonly/InjectionAlgorithm.h + ${PROJECT_SOURCE_DIR}/src/network/interfaceonly/Network.h + ${PROJECT_SOURCE_DIR}/src/network/singlerouter/CommonInjectionAlgorithm.h + ${PROJECT_SOURCE_DIR}/src/network/singlerouter/InjectionAlgorithm.h + ${PROJECT_SOURCE_DIR}/src/network/singlerouter/DirectRoutingAlgorithm.h + ${PROJECT_SOURCE_DIR}/src/network/singlerouter/Network.h + ${PROJECT_SOURCE_DIR}/src/network/singlerouter/RoutingAlgorithm.h + ${PROJECT_SOURCE_DIR}/src/network/fattree/CommonInjectionAlgorithm.h + ${PROJECT_SOURCE_DIR}/src/network/fattree/util.h + ${PROJECT_SOURCE_DIR}/src/network/fattree/InjectionAlgorithm.h + ${PROJECT_SOURCE_DIR}/src/network/fattree/CommonAncestorRoutingAlgorithm.h + ${PROJECT_SOURCE_DIR}/src/network/fattree/Network.h + ${PROJECT_SOURCE_DIR}/src/network/fattree/RoutingAlgorithm.h + ${PROJECT_SOURCE_DIR}/src/network/torus/CommonInjectionAlgorithm.h + ${PROJECT_SOURCE_DIR}/src/network/torus/DimOrderRoutingAlgorithm.h + ${PROJECT_SOURCE_DIR}/src/network/torus/util.h + ${PROJECT_SOURCE_DIR}/src/network/torus/InjectionAlgorithm.h + ${PROJECT_SOURCE_DIR}/src/network/torus/ValiantsRoutingAlgorithm.h + ${PROJECT_SOURCE_DIR}/src/network/torus/Network.h + ${PROJECT_SOURCE_DIR}/src/network/torus/RoutingAlgorithm.h + ${PROJECT_SOURCE_DIR}/src/network/mesh/CommonInjectionAlgorithm.h + ${PROJECT_SOURCE_DIR}/src/network/mesh/DimOrderRoutingAlgorithm.h + ${PROJECT_SOURCE_DIR}/src/network/mesh/util.h + ${PROJECT_SOURCE_DIR}/src/network/mesh/InjectionAlgorithm.h + ${PROJECT_SOURCE_DIR}/src/network/mesh/ValiantsRoutingAlgorithm.h + ${PROJECT_SOURCE_DIR}/src/network/mesh/Network.h + ${PROJECT_SOURCE_DIR}/src/network/mesh/RoutingAlgorithm.h + ${PROJECT_SOURCE_DIR}/src/network/hyperx/CommonInjectionAlgorithm.h + ${PROJECT_SOURCE_DIR}/src/network/hyperx/DimOrderRoutingAlgorithm.h + ${PROJECT_SOURCE_DIR}/src/network/hyperx/DalRoutingAlgorithm.h + ${PROJECT_SOURCE_DIR}/src/network/hyperx/MinRoutingAlgorithm.h + ${PROJECT_SOURCE_DIR}/src/network/hyperx/UgalRoutingAlgorithm.h + ${PROJECT_SOURCE_DIR}/src/network/hyperx/util.h + ${PROJECT_SOURCE_DIR}/src/network/hyperx/SkippingDimensionsRoutingAlgorithm.h + ${PROJECT_SOURCE_DIR}/src/network/hyperx/InjectionAlgorithm.h + ${PROJECT_SOURCE_DIR}/src/network/hyperx/ValiantsRoutingAlgorithm.h + ${PROJECT_SOURCE_DIR}/src/network/hyperx/LeastCongestedQueueRoutingAlgorithm.h + ${PROJECT_SOURCE_DIR}/src/network/hyperx/Network.h + ${PROJECT_SOURCE_DIR}/src/network/hyperx/RoutingAlgorithm.h + ${PROJECT_SOURCE_DIR}/src/network/butterfly/CommonInjectionAlgorithm.h + ${PROJECT_SOURCE_DIR}/src/network/butterfly/DestTagRoutingAlgorithm.h + ${PROJECT_SOURCE_DIR}/src/network/butterfly/util.h + ${PROJECT_SOURCE_DIR}/src/network/butterfly/InjectionAlgorithm.h + ${PROJECT_SOURCE_DIR}/src/network/butterfly/Network.h + ${PROJECT_SOURCE_DIR}/src/network/butterfly/RoutingAlgorithm.h + ${PROJECT_SOURCE_DIR}/src/network/parkinglot/CommonInjectionAlgorithm.h + ${PROJECT_SOURCE_DIR}/src/network/parkinglot/InjectionAlgorithm.h + ${PROJECT_SOURCE_DIR}/src/network/parkinglot/ExitLotRoutingAlgorithm.h + ${PROJECT_SOURCE_DIR}/src/network/parkinglot/Network.h + ${PROJECT_SOURCE_DIR}/src/network/parkinglot/RoutingAlgorithm.h + ${PROJECT_SOURCE_DIR}/src/network/dragonfly/CommonInjectionAlgorithm.h + ${PROJECT_SOURCE_DIR}/src/network/dragonfly/AdaptiveRoutingAlgorithm.h + ${PROJECT_SOURCE_DIR}/src/network/dragonfly/util.h + ${PROJECT_SOURCE_DIR}/src/network/dragonfly/InjectionAlgorithm.h + ${PROJECT_SOURCE_DIR}/src/network/dragonfly/MinimalRoutingAlgorithm.h + ${PROJECT_SOURCE_DIR}/src/network/dragonfly/ValiantsRoutingAlgorithm.h + ${PROJECT_SOURCE_DIR}/src/network/dragonfly/Network.h + ${PROJECT_SOURCE_DIR}/src/network/dragonfly/RoutingAlgorithm.h + ${PROJECT_SOURCE_DIR}/src/util/DimensionalArray.tcc + ${PROJECT_SOURCE_DIR}/src/network/hyperx/util.tcc + ) + +target_include_directories( + supersim + PUBLIC + ${PROJECT_SOURCE_DIR}/src + ${ZLIB_INC} + ${NLOHMANN_JSON_INC} + ${PARAGRAPH_INC} + ${PROTOBUF_INC} + ${COM_GOOGLE_ABSL_INC} + ${LIBPRIM_INC} + ${LIBCOLHASH_INC} + ${LIBFACTORY_INC} + ${LIBRND_INC} + ${LIBMUT_INC} + ${LIBBITS_INC} + ${LIBSTROP_INC} + ${LIBFIO_INC} + ${LIBSETTINGS_INC} + ) + +target_link_libraries( + supersim + PkgConfig::zlib + PkgConfig::nlohmann_json + PkgConfig::paragraph + PkgConfig::protobuf + PkgConfig::libprim + PkgConfig::libcolhash + PkgConfig::libfactory + PkgConfig::librnd + PkgConfig::libmut + PkgConfig::libbits + PkgConfig::libstrop + PkgConfig::libfio + PkgConfig::libsettings + "${ABSL_LIBS}" + PkgConfig::protobuf + PkgConfig::paragraph + ) + +include(GNUInstallDirs) + +install( + TARGETS + supersim + ) diff --git a/build_with_spack_cmake.sh b/build_with_spack_cmake.sh new file mode 100755 index 0000000..d7faae2 --- /dev/null +++ b/build_with_spack_cmake.sh @@ -0,0 +1,146 @@ +#!/bin/bash + +set -e + +# Gets the directory location of this script +SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" + +function prereqs() { + echo "Before running this script, you must follow the directions here:" + echo "https://github.com/nicspack/nicspack/" +} + +# Tests for spack existence +if ! which spack; then + prereqs + exit -1 +fi + +# Parses command line arguments +SPACK_TARGET=$(spack spec zlib | grep arch | tr '-' ' ' | awk '{print $NF}') +CLEAN= +function help() { + echo "usage: $0 " + echo " -h,--help - show this message and exit" + echo " -t=,--target= - set the spack target architecture" + echo " -c,--clean - clean before building" +} +for i in "$@"; do + case $i in + -h|--help) + help + exit 0 + ;; + -t=*|--target=*) + SPACK_TARGET="${i#*=}" + shift + ;; + -c|--clean) + CLEAN="YES" + shift + ;; + *) + echo "unknown argument: $i" + help + exit -1 + esac +done +echo "SPACK_TARGET=${SPACK_TARGET}" +echo "CLEAN=${CLEAN}" + +# Ensure dependencies are installed +BRANCH=cmake +SUPERSIM_SPEC="supersim@${BRANCH} target=${SPACK_TARGET}" +echo "SUPERSIM_SPEC=${SUPERSIM_SPEC}" +# Ensures all dependencies are installed +if ! spack install --only dependencies ${SUPERSIM_SPEC}; then + prereqs + exit -1 +fi + +# Saves the full spec to a tmp file for later parsing +spack spec ${SUPERSIM_SPEC} > /tmp/supersim_spec_${BRANCH} + +# Extracts the exact spec of a dependency then returns the install directory +function location() { + local spec=$(grep "\^${1}@" /tmp/supersim_spec_${BRANCH} | sed 's/\s.*^//g') + spack location -i ${spec} +} + +function add_to_install_rpath() { + if [[ ";$INSTALL_RPATH;" != *";$1;"* ]]; then + INSTALL_RPATH="$1;${INSTALL_RPATH}" + fi +} +function add_to_prefix_path() { + if [[ ";$PREFIX_PATH;" != *";$1;"* ]]; then + PREFIX_PATH="$1;${PREFIX_PATH}" + fi +} + +BUILD_DIR=${SCRIPT_DIR}/cmake-build +INSTALL_DIR=${SCRIPT_DIR}/cmake-local + +INSTALL_RPATH="${INSTALL_DIR}/lib;${INSTALL_DIR}/lib64;" +add_to_install_rpath $(location protobuf)/lib +add_to_install_rpath $(location abseil-cpp)/lib +add_to_install_rpath $(location libprim)/lib +add_to_install_rpath $(location libcolhash)/lib +add_to_install_rpath $(location libfactory)/lib +add_to_install_rpath $(location librnd)/lib +add_to_install_rpath $(location libmut)/lib +add_to_install_rpath $(location libbits)/lib +add_to_install_rpath $(location libstrop)/lib +add_to_install_rpath $(location libfio)/lib +add_to_install_rpath $(location libsettings)/lib +add_to_install_rpath $(location nlohmann-json)/lib +add_to_install_rpath $(location zlib)/lib +add_to_install_rpath $(location paragraph-core)/lib +echo "INSTALL_RPATH:" +echo "$INSTALL_RPATH" +echo "" + +PREFIX_PATH="" +add_to_prefix_path $(location protobuf) +add_to_prefix_path $(location abseil-cpp) +add_to_prefix_path $(location libprim) +add_to_prefix_path $(location libcolhash) +add_to_prefix_path $(location libfactory) +add_to_prefix_path $(location librnd) +add_to_prefix_path $(location libmut) +add_to_prefix_path $(location libbits) +add_to_prefix_path $(location libstrop) +add_to_prefix_path $(location libfio) +add_to_prefix_path $(location libsettings) +add_to_prefix_path $(location nlohmann-json) +add_to_prefix_path $(location zlib) +add_to_prefix_path $(location paragraph-core) +echo "PREFIX_PATH:" +echo "$PREFIX_PATH" +echo "" + +CMAKE_DIR=$(spack location -i cmake) +CMAKE=${CMAKE_DIR}/bin/cmake + +if [[ ! -z "${CLEAN}" ]]; then + rm -rf ${BUILD_DIR} ${INSTALL_DIR} +fi + +mkdir -p ${BUILD_DIR} +cd ${BUILD_DIR} +${CMAKE} \ + -G 'Unix Makefiles' \ + -DCMAKE_INSTALL_PREFIX:STRING=${INSTALL_DIR} \ + -DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo \ + -DCMAKE_INTERPROCEDURAL_OPTIMIZATION:BOOL=OFF \ + -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON \ + -DCMAKE_INSTALL_RPATH_USE_LINK_PATH:BOOL=OFF \ + -DCMAKE_INSTALL_RPATH:STRING=${INSTALL_RPATH} \ + -DCMAKE_PREFIX_PATH:STRING=${PREFIX_PATH} \ + .. +make -j $(nproc) all +make install + +echo "" +echo "Build successful :)" +echo ""