pydftracer 1.0.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pydftracer-1.0.1/CMakeLists.txt +517 -0
- pydftracer-1.0.1/MANIFEST.in +6 -0
- pydftracer-1.0.1/PKG-INFO +142 -0
- pydftracer-1.0.1/README.md +115 -0
- pydftracer-1.0.1/cmake/configure_files/dftracer-config-version.cmake.in +12 -0
- pydftracer-1.0.1/cmake/configure_files/dftracer-config.cmake.build.in +61 -0
- pydftracer-1.0.1/cmake/configure_files/dftracer-config.cmake.install.in +61 -0
- pydftracer-1.0.1/cmake/configure_files/dftracer_config.hpp.in +53 -0
- pydftracer-1.0.1/cmake/configure_files/dftracer_module.lua.in +49 -0
- pydftracer-1.0.1/cmake/modules/SetupCompiler.cmake +245 -0
- pydftracer-1.0.1/cmake/modules/dftracer-utils.cmake +139 -0
- pydftracer-1.0.1/cmake/tests/has_fd.cpp +61 -0
- pydftracer-1.0.1/cmake/tests/has_filesystem.cpp +8 -0
- pydftracer-1.0.1/dependency/CMakeLists.txt +11 -0
- pydftracer-1.0.1/dependency/cpp.requirements.txt +4 -0
- pydftracer-1.0.1/dependency/install_dependency.sh +38 -0
- pydftracer-1.0.1/dfanalyzer/__init__.py +0 -0
- pydftracer-1.0.1/dfanalyzer/main.py +681 -0
- pydftracer-1.0.1/dfanalyzer/plots.py +225 -0
- pydftracer-1.0.1/dftracer/__init__.py +0 -0
- pydftracer-1.0.1/dftracer/logger.py +309 -0
- pydftracer-1.0.1/include/dftracer/core/constants.h +32 -0
- pydftracer-1.0.1/include/dftracer/core/typedef.h +12 -0
- pydftracer-1.0.1/include/dftracer/dftracer.h +129 -0
- pydftracer-1.0.1/pydftracer.egg-info/PKG-INFO +142 -0
- pydftracer-1.0.1/pydftracer.egg-info/SOURCES.txt +55 -0
- pydftracer-1.0.1/pydftracer.egg-info/dependency_links.txt +1 -0
- pydftracer-1.0.1/pydftracer.egg-info/not-zip-safe +1 -0
- pydftracer-1.0.1/pydftracer.egg-info/requires.txt +17 -0
- pydftracer-1.0.1/pydftracer.egg-info/top_level.txt +2 -0
- pydftracer-1.0.1/pyproject.toml +50 -0
- pydftracer-1.0.1/setup.cfg +4 -0
- pydftracer-1.0.1/setup.py +208 -0
- pydftracer-1.0.1/src/dftracer/brahma/posix.cpp +566 -0
- pydftracer-1.0.1/src/dftracer/brahma/posix.h +198 -0
- pydftracer-1.0.1/src/dftracer/brahma/stdio.cpp +81 -0
- pydftracer-1.0.1/src/dftracer/brahma/stdio.h +96 -0
- pydftracer-1.0.1/src/dftracer/core/dftracer_main.cpp +241 -0
- pydftracer-1.0.1/src/dftracer/core/dftracer_main.h +74 -0
- pydftracer-1.0.1/src/dftracer/core/enumeration.h +46 -0
- pydftracer-1.0.1/src/dftracer/core/error.h +30 -0
- pydftracer-1.0.1/src/dftracer/core/macro.h +21 -0
- pydftracer-1.0.1/src/dftracer/core/singleton.h +52 -0
- pydftracer-1.0.1/src/dftracer/df_logger.cpp +5 -0
- pydftracer-1.0.1/src/dftracer/df_logger.h +152 -0
- pydftracer-1.0.1/src/dftracer/dftracer.cpp +141 -0
- pydftracer-1.0.1/src/dftracer/dftracer_preload.cpp +44 -0
- pydftracer-1.0.1/src/dftracer/dftracer_preload.h +12 -0
- pydftracer-1.0.1/src/dftracer/pydftracer.cpp +107 -0
- pydftracer-1.0.1/src/dftracer/utils/configuration_manager.cpp +287 -0
- pydftracer-1.0.1/src/dftracer/utils/configuration_manager.h +35 -0
- pydftracer-1.0.1/src/dftracer/utils/posix_internal.cpp +79 -0
- pydftracer-1.0.1/src/dftracer/utils/posix_internal.h +36 -0
- pydftracer-1.0.1/src/dftracer/utils/utils.cpp +5 -0
- pydftracer-1.0.1/src/dftracer/utils/utils.h +228 -0
- pydftracer-1.0.1/src/dftracer/writer/chrome_writer.cpp +212 -0
- pydftracer-1.0.1/src/dftracer/writer/chrome_writer.h +129 -0
|
@@ -0,0 +1,517 @@
|
|
|
1
|
+
cmake_minimum_required(VERSION 3.4...3.18)
|
|
2
|
+
#------------------------------------------------------------------------------
|
|
3
|
+
# Version information
|
|
4
|
+
#------------------------------------------------------------------------------
|
|
5
|
+
|
|
6
|
+
set(DFTRACER_VERSION_MAJOR "3")
|
|
7
|
+
set(DFTRACER_VERSION_MINOR "0")
|
|
8
|
+
set(DFTRACER_VERSION_PATCH "0")
|
|
9
|
+
set(DFTRACER_PACKAGE ${PROJECT_NAME})
|
|
10
|
+
set(DFTRACER_PACKAGE_NAME ${PROJECT_NAME})
|
|
11
|
+
set(DFTRACER_PACKAGE_VERSION "${DFTRACER_VERSION_MAJOR}.${DFTRACER_VERSION_MINOR}.${DFTRACER_VERSION_PATCH}")
|
|
12
|
+
set(DFTRACER_PACKAGE_VERSION_MAJOR "${DFTRACER_VERSION_MAJOR}.${DFTRACER_VERSION_MINOR}")
|
|
13
|
+
set(DFTRACER_PACKAGE_VERSION_MINOR "${DFTRACER_VERSION_PATCH}")
|
|
14
|
+
set(DFTRACER_PACKAGE_STRING "${DFTRACER_PACKAGE_NAME} ${DFTRACER_PACKAGE_VERSION}")
|
|
15
|
+
set(DFTRACER_PACKAGE_TARNAME "${DFTRACER_PACKAGE}")
|
|
16
|
+
|
|
17
|
+
project(dftracer LANGUAGES C CXX)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
# Convenience defines
|
|
21
|
+
string(TOUPPER "${PROJECT_NAME}" UPPER_PROJECT_NAME)
|
|
22
|
+
string(TOLOWER "${PROJECT_NAME}" LOWER_PROJECT_NAME)
|
|
23
|
+
|
|
24
|
+
#------------------------------------------------------------------------------
|
|
25
|
+
# Internal Includes for header and libraries
|
|
26
|
+
#------------------------------------------------------------------------------
|
|
27
|
+
# Get installation directories -- these get used in various places;
|
|
28
|
+
# best to just make them available
|
|
29
|
+
option (DFTRACER_LIBDIR_AS_LIB OFF)
|
|
30
|
+
if (NOT DFTRACER_LIBDIR_AS_LIB)
|
|
31
|
+
include(GNUInstallDirs)
|
|
32
|
+
endif ()
|
|
33
|
+
#
|
|
34
|
+
if (CMAKE_INSTALL_LIBDIR)
|
|
35
|
+
message(STATUS "CMAKE_INSTALL_LIBDIR ${CMAKE_INSTALL_LIBDIR}")
|
|
36
|
+
set(DFTRACER_LIBDIR ${CMAKE_INSTALL_LIBDIR})
|
|
37
|
+
set(DFTRACER_INSTALL_INCLUDE_DIR
|
|
38
|
+
${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR})
|
|
39
|
+
set(DFTRACER_INSTALL_DOCDIR
|
|
40
|
+
${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DOCDIR})
|
|
41
|
+
set(DFTRACER_INSTALL_SYSCONFDIR
|
|
42
|
+
${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_SYSCONFDIR}/modulefiles)
|
|
43
|
+
else ()
|
|
44
|
+
set(DFTRACER_LIBDIR "lib")
|
|
45
|
+
set(DFTRACER_INSTALL_INCLUDE_DIR "${CMAKE_INSTALL_PREFIX}/include")
|
|
46
|
+
set(DFTRACER_INSTALL_DOCDIR "${CMAKE_INSTALL_PREFIX}/doc")
|
|
47
|
+
set(DFTRACER_INSTALL_SYSCONFDIR "${CMAKE_INSTALL_PREFIX}/etc/modulefiles")
|
|
48
|
+
message(STATUS "DFTRACER_LIBDIR set to ${DFTRACER_LIBDIR}")
|
|
49
|
+
endif ()
|
|
50
|
+
|
|
51
|
+
#------------------------------------------------------------------------------
|
|
52
|
+
# Internal Paths for cmake libraries and Setup install and output Directories
|
|
53
|
+
#------------------------------------------------------------------------------
|
|
54
|
+
# This sets where to look for dependent libraries
|
|
55
|
+
set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} ${CMAKE_BINARY_DIR} ${CMAKE_INSTALL_PREFIX})
|
|
56
|
+
# This sets where to look for dependent library's cmake files
|
|
57
|
+
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules)
|
|
58
|
+
list(APPEND CMAKE_MODULE_PATH ${CMAKE_BINARY_DIR}/${DFTRACER_LIBDIR}/cmake)
|
|
59
|
+
list(APPEND CMAKE_MODULE_PATH ${CMAKE_BINARY_DIR}/share/cmake)
|
|
60
|
+
|
|
61
|
+
#------------------------------------------------------------------------------
|
|
62
|
+
if (NOT DFTRACER_EXTERNALLY_CONFIGURED)
|
|
63
|
+
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin CACHE PATH "Single Directory for all Executables.")
|
|
64
|
+
set(CMAKE_INCLUDE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/include CACHE PATH "Store the headers.")
|
|
65
|
+
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
|
|
66
|
+
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${DFTRACER_LIBDIR} CACHE PATH "Single Directory for all Libraries")
|
|
67
|
+
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${DFTRACER_LIBDIR} CACHE PATH "Single Directory for all static libraries.")
|
|
68
|
+
endif ()
|
|
69
|
+
|
|
70
|
+
include_directories(${CMAKE_BINARY_DIR}/include)
|
|
71
|
+
link_directories(${CMAKE_BINARY_DIR}/${DFTRACER_LIBDIR})
|
|
72
|
+
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src)
|
|
73
|
+
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
|
|
74
|
+
|
|
75
|
+
#-----------------------------------------------------------------------------
|
|
76
|
+
# Targets built within this project are exported at Install time for use
|
|
77
|
+
# by other projects.
|
|
78
|
+
#-----------------------------------------------------------------------------
|
|
79
|
+
if (NOT DFTRACER_EXPORTED_TARGETS)
|
|
80
|
+
set(DFTRACER_EXPORTED_TARGETS "dftracer-targets")
|
|
81
|
+
endif ()
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
include(dftracer-utils)
|
|
85
|
+
#------------------------------------------------------------------------------
|
|
86
|
+
# Build options
|
|
87
|
+
#------------------------------------------------------------------------------
|
|
88
|
+
# option(ENABLE_DFTRACER_DEBUG "Include debugging prints and logging" OFF) # This is not needed as we have CMAKE_BUILD_TYPE
|
|
89
|
+
# This is verbose, maybe an alternate might help simplify
|
|
90
|
+
#option(BUILD_URPC "Build DFTRACER's URPC code" OFF)
|
|
91
|
+
#option(ENABLE_PERFFLOW "Build with PerfFlow Aspect support" OFF)
|
|
92
|
+
#option(ENABLE_UCX_DTL "Build DFTRACER's UCX data transport layer" OFF)
|
|
93
|
+
|
|
94
|
+
# This option is off by default because non-developers should not use
|
|
95
|
+
# this option under normal circumstances.
|
|
96
|
+
option(DFTRACER_WARNINGS_AS_ERRORS "Build with warnings promoted to errors." OFF)
|
|
97
|
+
mark_as_advanced(DFTRACER_WARNINGS_AS_ERRORS)
|
|
98
|
+
|
|
99
|
+
option (DFTRACER_USE_CLANG_LIBCXX OFF)
|
|
100
|
+
if (DFTRACER_USE_CLANG_LIBCXX)
|
|
101
|
+
set (GCC_TOOLCHAIN "")
|
|
102
|
+
endif (DFTRACER_USE_CLANG_LIBCXX)
|
|
103
|
+
|
|
104
|
+
# Options
|
|
105
|
+
option (DFTRACER_DISABLE_HWLOC "Disable HWLOC" On)
|
|
106
|
+
if (NOT DFTRACER_DISABLE_HWLOC)
|
|
107
|
+
set(DFTRACER_HWLOC_ENABLE 1)
|
|
108
|
+
endif()
|
|
109
|
+
option (DFTRACER_BUILD_PYTHON_BINDINGS "Build python bindings." ON)
|
|
110
|
+
set(DFTRACER_PYTHON_EXE "python3" CACHE STRING "Python executable to use for building.")
|
|
111
|
+
set(DFTRACER_PYTHON_SITE $ENV{DFTRACER_PYTHON_SITE} CACHE STRING "Python site packages to use for building.")
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
if (DFTRACER_BUILD_PYTHON_BINDINGS)
|
|
115
|
+
if (DFTRACER_PYTHON_SITE)
|
|
116
|
+
set(PYTHON_SITE_PACKAGES "${DFTRACER_PYTHON_SITE}")
|
|
117
|
+
set(MAIN_PYTHON_SITE_PACKAGES ${PYTHON_SITE_PACKAGES})
|
|
118
|
+
else()
|
|
119
|
+
set(PYTHON_SITE_PACKAGES ${CMAKE_INSTALL_PREFIX})
|
|
120
|
+
execute_process (COMMAND ${DFTRACER_PYTHON_EXE} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())" OUTPUT_VARIABLE MAIN_PYTHON_SITE_PACKAGES OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
121
|
+
endif()
|
|
122
|
+
include_directories(${PYTHON_SITE_PACKAGES}/dftracer/include)
|
|
123
|
+
link_directories(${PYTHON_SITE_PACKAGES}/dftracer/lib)
|
|
124
|
+
endif()
|
|
125
|
+
|
|
126
|
+
# install dependency
|
|
127
|
+
option (DFTRACER_INSTALL_DEPENDENCIES "Install DFTracer dependencies" OFF)
|
|
128
|
+
|
|
129
|
+
# testing
|
|
130
|
+
option (DFTRACER_ENABLE_TESTS "Enable tests for DFTRACER." OFF)
|
|
131
|
+
option (DFTRACER_ENABLE_DLIO_BENCHMARK_TESTS "Enable dlio_benchmark tests" OFF)
|
|
132
|
+
option (DFTRACER_ENABLE_PAPER_TESTS "Enable paper tests" OFF)
|
|
133
|
+
|
|
134
|
+
#------------------------------------------------------------------------------
|
|
135
|
+
# Compiler setup
|
|
136
|
+
#------------------------------------------------------------------------------
|
|
137
|
+
include(ExternalProject)
|
|
138
|
+
# It requires include(GNUInstallDirs) before if that is needed
|
|
139
|
+
include(SetupCompiler)
|
|
140
|
+
|
|
141
|
+
#------------------------------------------------------------------------------
|
|
142
|
+
# Build Type based configurations
|
|
143
|
+
#------------------------------------------------------------------------------
|
|
144
|
+
|
|
145
|
+
if(CMAKE_BUILD_TYPE STREQUAL "")
|
|
146
|
+
set(CMAKE_BUILD_TYPE "Release") # Setting default as Release
|
|
147
|
+
endif()
|
|
148
|
+
|
|
149
|
+
if (NOT DEFINED BUILD_SHARED_LIBS)
|
|
150
|
+
set(BUILD_SHARED_LIBS ON)
|
|
151
|
+
endif ()
|
|
152
|
+
#------------------------------------------------------------------------------
|
|
153
|
+
# Disallow in-source build
|
|
154
|
+
#------------------------------------------------------------------------------
|
|
155
|
+
if ("${CMAKE_CURRENT_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}")
|
|
156
|
+
message(FATAL_ERROR
|
|
157
|
+
"${PROJECT_NAME} requires an out of source Build. "
|
|
158
|
+
"Please create a separate binary directory and run CMake there.")
|
|
159
|
+
endif ()
|
|
160
|
+
#------------------------------------------------------------------------------
|
|
161
|
+
# Set a default build type if none was specified
|
|
162
|
+
#------------------------------------------------------------------------------
|
|
163
|
+
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
|
164
|
+
if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
|
|
165
|
+
message(STATUS "Setting build type to 'RelWithDebInfo' as none was specified.")
|
|
166
|
+
set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING "Choose the type of build." FORCE)
|
|
167
|
+
# Set the possible values of build type for cmake-gui
|
|
168
|
+
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release"
|
|
169
|
+
"MinSizeRel" "RelWithDebInfo")
|
|
170
|
+
endif ()
|
|
171
|
+
#------------------------------------------------------------------------------
|
|
172
|
+
# Dependencies
|
|
173
|
+
#------------------------------------------------------------------------------
|
|
174
|
+
|
|
175
|
+
if (DFTRACER_INSTALL_DEPENDENCIES)
|
|
176
|
+
message(STATUS "[${PROJECT_NAME}] downloading dependencies. Please run make for downloading depedencies and then do reconfigure without dependency flag.")
|
|
177
|
+
message(STATUS "[${PROJECT_NAME}] Installing depedencies at ${CMAKE_INSTALL_PREFIX}")
|
|
178
|
+
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/dependency)
|
|
179
|
+
else()
|
|
180
|
+
# Required Dependencies
|
|
181
|
+
# =============================================================================
|
|
182
|
+
set(DEPENDENCY_LIB "")
|
|
183
|
+
find_package(cpp-logger 1.0.0 REQUIRED)
|
|
184
|
+
if (${cpp-logger_FOUND})
|
|
185
|
+
include_directories(${CPP_LOGGER_INCLUDE_DIRS})
|
|
186
|
+
set(DEPENDENCY_LIB ${DEPENDENCY_LIB} ${CPP_LOGGER_LIBRARIES})
|
|
187
|
+
message(STATUS "[CPP_LOGGER] found cpp-logger at ${CPP_LOGGER_INCLUDE_DIRS}")
|
|
188
|
+
else ()
|
|
189
|
+
message(FATAL_ERROR "-- [CPP_LOGGER] is needed for ${PROJECT_NAME} build")
|
|
190
|
+
endif ()
|
|
191
|
+
find_package(brahma REQUIRED)
|
|
192
|
+
if (${brahma_FOUND})
|
|
193
|
+
message(STATUS "[BRAHMA] found brahma at ${BRAHMA_INCLUDE_DIRS}")
|
|
194
|
+
include_directories(${BRAHMA_INCLUDE_DIRS})
|
|
195
|
+
set(DEPENDENCY_LIB ${DEPENDENCY_LIB} ${BRAHMA_LIBRARIES})
|
|
196
|
+
else ()
|
|
197
|
+
message(FATAL_ERROR "-- [BRAHMA] is needed for ${PROJECT_NAME} build")
|
|
198
|
+
endif ()
|
|
199
|
+
find_package(yaml-cpp REQUIRED)
|
|
200
|
+
if (${yaml-cpp_FOUND})
|
|
201
|
+
message(STATUS "[DFTRACER] found yaml-cpp at ${YAML_CPP_INCLUDE_DIR}")
|
|
202
|
+
include_directories(${YAML_CPP_INCLUDE_DIR})
|
|
203
|
+
set(YAML_CPP_LIBRARY_DIR "${YAML_CPP_CMAKE_DIR}/../../")
|
|
204
|
+
set(DEPENDENCY_LIB ${DEPENDENCY_LIB} -L${YAML_CPP_LIBRARY_DIR} ${YAML_CPP_LIBRARIES})
|
|
205
|
+
else ()
|
|
206
|
+
message(FATAL_ERROR "-- [DFTRACER] yaml-cpp is needed for ${PROJECT_NAME} build")
|
|
207
|
+
endif ()
|
|
208
|
+
|
|
209
|
+
# Optional Dependencies
|
|
210
|
+
# =============================================================================
|
|
211
|
+
if (DFTRACER_BUILD_PYTHON_BINDINGS)
|
|
212
|
+
find_package(pybind11 REQUIRED)
|
|
213
|
+
#add_subdirectory(dependency/py11bind)
|
|
214
|
+
endif()
|
|
215
|
+
if (NOT DFTRACER_DISABLE_HWLOC)
|
|
216
|
+
find_package(HWLOC REQUIRED)
|
|
217
|
+
if (${HWLOC_FOUND})
|
|
218
|
+
include_directories(${HWLOC_INCLUDE_DIRS})
|
|
219
|
+
set(DEPENDENCY_LIB ${DEPENDENCY_LIB} ${HWLOC_LIBRARIES})
|
|
220
|
+
message(STATUS "[DFTRACER] found hwloc at ${HWLOC_INCLUDE_DIRS}")
|
|
221
|
+
else ()
|
|
222
|
+
message(FATAL_ERROR "-- [DFTRACER] hwloc is needed for ${PROJECT_NAME} build with -DDFTRACER_DISABLE_HWLOC-ON option.")
|
|
223
|
+
endif ()
|
|
224
|
+
endif()
|
|
225
|
+
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
|
|
229
|
+
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src)
|
|
230
|
+
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
|
|
231
|
+
set(DFTRACER_PRELOAD_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/dftracer/dftracer_preload.cpp)
|
|
232
|
+
set(DFTRACER_PRELOAD_PRIVATE_INCLUDE ${CMAKE_CURRENT_SOURCE_DIR}/src/dftracer/dftracer_preload.h)
|
|
233
|
+
|
|
234
|
+
set(DFTRACER_CORE_SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/dftracer/brahma/posix.cpp
|
|
235
|
+
${CMAKE_CURRENT_SOURCE_DIR}/src/dftracer/brahma/stdio.cpp
|
|
236
|
+
${CMAKE_CURRENT_SOURCE_DIR}/src/dftracer/writer/chrome_writer.cpp
|
|
237
|
+
${CMAKE_CURRENT_SOURCE_DIR}/src/dftracer/utils/posix_internal.cpp
|
|
238
|
+
${CMAKE_CURRENT_SOURCE_DIR}/src/dftracer/dftracer.cpp
|
|
239
|
+
${CMAKE_CURRENT_SOURCE_DIR}/src/dftracer/core/dftracer_main.cpp
|
|
240
|
+
${CMAKE_CURRENT_SOURCE_DIR}/src/dftracer/utils/configuration_manager.cpp
|
|
241
|
+
${CMAKE_CURRENT_SOURCE_DIR}/src/dftracer/df_logger.cpp
|
|
242
|
+
${CMAKE_CURRENT_SOURCE_DIR}/src/dftracer/utils/utils.cpp)
|
|
243
|
+
set(DFTRACER_CORE_PUBLIC_INCLUDE
|
|
244
|
+
${CMAKE_CURRENT_SOURCE_DIR}/include/dftracer/dftracer.h
|
|
245
|
+
${CMAKE_CURRENT_SOURCE_DIR}/include/dftracer/core/constants.h
|
|
246
|
+
${CMAKE_CURRENT_SOURCE_DIR}/include/dftracer/core/typedef.h)
|
|
247
|
+
set(DFTRACER_CORE_PRIVATE_INCLUDE
|
|
248
|
+
${CMAKE_CURRENT_SOURCE_DIR}/src/dftracer/utils/posix_internal.h
|
|
249
|
+
${CMAKE_CURRENT_SOURCE_DIR}/src/dftracer/utils/utils.h
|
|
250
|
+
${CMAKE_CURRENT_SOURCE_DIR}/src/dftracer/brahma/posix.h
|
|
251
|
+
${CMAKE_CURRENT_SOURCE_DIR}/src/dftracer/brahma/stdio.h
|
|
252
|
+
${CMAKE_CURRENT_SOURCE_DIR}/src/dftracer/core/dftracer_main.h
|
|
253
|
+
${CMAKE_CURRENT_SOURCE_DIR}/src/dftracer/core/macro.h
|
|
254
|
+
${CMAKE_CURRENT_SOURCE_DIR}/src/dftracer/core/singleton.h
|
|
255
|
+
${CMAKE_CURRENT_SOURCE_DIR}/src/dftracer/utils/configuration_manager.h)
|
|
256
|
+
add_library(${PROJECT_NAME} SHARED)
|
|
257
|
+
target_link_libraries(${PROJECT_NAME} ${DEPENDENCY_LIB})
|
|
258
|
+
add_library(${PROJECT_NAME}_preload SHARED)
|
|
259
|
+
target_link_libraries(${PROJECT_NAME}_preload ${DEPENDENCY_LIB} ${PROJECT_NAME})
|
|
260
|
+
if (DFTRACER_BUILD_PYTHON_BINDINGS)
|
|
261
|
+
pybind11_add_module(py${PROJECT_NAME} ${DFTRACER_CORE_SRC} ${CMAKE_CURRENT_SOURCE_DIR}/src/dftracer/pydftracer.cpp)
|
|
262
|
+
target_compile_definitions(py${PROJECT_NAME} PRIVATE VERSION_INFO=${EXAMPLE_VERSION_INFO})
|
|
263
|
+
target_link_libraries(py${PROJECT_NAME} PRIVATE ${DEPENDENCY_LIB})
|
|
264
|
+
endif()
|
|
265
|
+
target_sources(${PROJECT_NAME}
|
|
266
|
+
PRIVATE
|
|
267
|
+
${DFTRACER_CORE_SRC}
|
|
268
|
+
)
|
|
269
|
+
target_sources(${PROJECT_NAME}_preload
|
|
270
|
+
PRIVATE
|
|
271
|
+
${DFTRACER_PRELOAD_SRC}
|
|
272
|
+
)
|
|
273
|
+
target_include_directories(${PROJECT_NAME}
|
|
274
|
+
PRIVATE
|
|
275
|
+
# where the library itself will look for its internal headers
|
|
276
|
+
${CMAKE_CURRENT_SOURCE_DIR}/src
|
|
277
|
+
PUBLIC
|
|
278
|
+
# where top-level project will look for the library's public headers
|
|
279
|
+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
|
280
|
+
# where external projects will look for the library's public headers
|
|
281
|
+
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
|
|
282
|
+
)
|
|
283
|
+
set_target_properties(${PROJECT_NAME}
|
|
284
|
+
PROPERTIES
|
|
285
|
+
DEBUG_OUTPUT_NAME ${PROJECT_NAME}
|
|
286
|
+
RELEASE_OUTPUT_NAME ${PROJECT_NAME}
|
|
287
|
+
MINSIZEREL_OUTPUT_NAME ${PROJECT_NAME}
|
|
288
|
+
RELWITHDEBINFO_OUTPUT_NAME ${PROJECT_NAME}
|
|
289
|
+
VERSION ${DFTRACER_PACKAGE_VERSION}
|
|
290
|
+
SOVERSION ${DFTRACER_PACKAGE_VERSION}
|
|
291
|
+
)
|
|
292
|
+
|
|
293
|
+
dftracer_install_headers("${DFTRACER_CORE_PUBLIC_INCLUDE}")
|
|
294
|
+
install(
|
|
295
|
+
TARGETS ${PROJECT_NAME}
|
|
296
|
+
EXPORT ${DFTRACER_EXPORTED_TARGETS}
|
|
297
|
+
LIBRARY DESTINATION ${DFTRACER_INSTALL_LIB_DIR}
|
|
298
|
+
ARCHIVE DESTINATION ${DFTRACER_INSTALL_LIB_DIR}
|
|
299
|
+
RUNTIME DESTINATION ${DFTRACER_INSTALL_BIN_DIR}
|
|
300
|
+
)
|
|
301
|
+
install(TARGETS ${PROJECT_NAME}
|
|
302
|
+
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
303
|
+
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
|
|
304
|
+
install(TARGETS ${PROJECT_NAME}_preload
|
|
305
|
+
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
306
|
+
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
|
|
307
|
+
|
|
308
|
+
install(
|
|
309
|
+
TARGETS
|
|
310
|
+
${PROJECT_NAME}_preload
|
|
311
|
+
EXPORT
|
|
312
|
+
${DFTRACER_EXPORTED_TARGETS}
|
|
313
|
+
LIBRARY DESTINATION ${DFTRACER_INSTALL_LIB_DIR}
|
|
314
|
+
ARCHIVE DESTINATION ${DFTRACER_INSTALL_LIB_DIR}
|
|
315
|
+
RUNTIME DESTINATION ${DFTRACER_INSTALL_BIN_DIR}
|
|
316
|
+
)
|
|
317
|
+
if (DFTRACER_BUILD_PYTHON_BINDINGS)
|
|
318
|
+
install(TARGETS py${PROJECT_NAME}
|
|
319
|
+
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
320
|
+
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
|
|
321
|
+
file(GENERATE OUTPUT ${CMAKE_BINARY_DIR}/symlink.sh CONTENT "echo -- Installing: symlink ${MAIN_PYTHON_SITE_PACKAGES}/$<TARGET_FILE_NAME:py${PROJECT_NAME}> from ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/$<TARGET_FILE_NAME:py${PROJECT_NAME}>;ln -sf ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/$<TARGET_FILE_NAME:py${PROJECT_NAME}> ${MAIN_PYTHON_SITE_PACKAGES}/$<TARGET_FILE_NAME:py${PROJECT_NAME}>")
|
|
322
|
+
install(CODE "execute_process(
|
|
323
|
+
COMMAND bash -c \"set -e
|
|
324
|
+
chmod +x ${CMAKE_BINARY_DIR}/symlink.sh
|
|
325
|
+
. ${CMAKE_BINARY_DIR}/symlink.sh
|
|
326
|
+
\")")
|
|
327
|
+
endif()
|
|
328
|
+
#cmake_policy(SET CMP0079 NEW) # In case that we need more control over the target building order
|
|
329
|
+
|
|
330
|
+
if(DFTRACER_ENABLE_TESTS)
|
|
331
|
+
message("-- " "[DFTracer] Enabling Testing")
|
|
332
|
+
if(CMAKE_BUILD_TYPE STREQUAL "PROFILE")
|
|
333
|
+
message("-- " "[DFTracer] building with CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE}")
|
|
334
|
+
set(CMAKE_C_FLAGS_PROFILE --coverage)
|
|
335
|
+
set(CMAKE_CXX_FLAGS_PROFILE --coverage)
|
|
336
|
+
endif()
|
|
337
|
+
enable_testing()
|
|
338
|
+
add_subdirectory(test)
|
|
339
|
+
if(CMAKE_BUILD_TYPE STREQUAL "PROFILE")
|
|
340
|
+
get_property(COVERAGE_FILE_LIST GLOBAL PROPERTY COVERAGE_FILES)
|
|
341
|
+
add_custom_command(OUTPUT default.profdata COMMAND llvm-profdata merge -sparse ${COVERAGE_FILE_LIST} -o default.profdata VERBATIM)
|
|
342
|
+
add_custom_target(merged_coverage DEPENDS default.profdata)
|
|
343
|
+
endif()
|
|
344
|
+
endif()
|
|
345
|
+
|
|
346
|
+
#-----------------------------------------------------------------------------
|
|
347
|
+
# Configure the config.cmake file for the build directory
|
|
348
|
+
#-----------------------------------------------------------------------------
|
|
349
|
+
configure_file(
|
|
350
|
+
${CMAKE_CURRENT_SOURCE_DIR}/cmake/configure_files/${PROJECT_NAME}-config.cmake.build.in
|
|
351
|
+
${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/cmake/${PROJECT_NAME}/${PROJECT_NAME}-config.cmake @ONLY
|
|
352
|
+
)
|
|
353
|
+
|
|
354
|
+
configure_file(
|
|
355
|
+
${CMAKE_CURRENT_SOURCE_DIR}/cmake/configure_files/${PROJECT_NAME}-config.cmake.install.in
|
|
356
|
+
${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/cmake/${PROJECT_NAME}/install/${PROJECT_NAME}-config.cmake @ONLY
|
|
357
|
+
)
|
|
358
|
+
install(
|
|
359
|
+
FILES
|
|
360
|
+
${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/cmake/${PROJECT_NAME}/install/${PROJECT_NAME}-config.cmake
|
|
361
|
+
DESTINATION
|
|
362
|
+
${DFTRACER_LIBDIR}/cmake/${PROJECT_NAME}
|
|
363
|
+
)
|
|
364
|
+
#-----------------------------------------------------------------------------
|
|
365
|
+
# Configure the ${PROJECT_NAME}-config-version .cmake file for the install directory
|
|
366
|
+
#-----------------------------------------------------------------------------
|
|
367
|
+
configure_file(
|
|
368
|
+
${CMAKE_CURRENT_SOURCE_DIR}/cmake/configure_files/${PROJECT_NAME}-config-version.cmake.in
|
|
369
|
+
${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/cmake/${PROJECT_NAME}/${PROJECT_NAME}-config-version.cmake @ONLY
|
|
370
|
+
)
|
|
371
|
+
|
|
372
|
+
install(
|
|
373
|
+
FILES
|
|
374
|
+
${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/cmake/${PROJECT_NAME}/${PROJECT_NAME}-config-version.cmake
|
|
375
|
+
DESTINATION
|
|
376
|
+
${DFTRACER_LIBDIR}/cmake/${PROJECT_NAME}
|
|
377
|
+
)
|
|
378
|
+
|
|
379
|
+
export(EXPORT ${DFTRACER_EXPORTED_TARGETS}
|
|
380
|
+
FILE "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/cmake/${PROJECT_NAME}/${PROJECT_NAME}Targets.cmake")
|
|
381
|
+
|
|
382
|
+
# Write the configure file
|
|
383
|
+
configure_file("${CMAKE_SOURCE_DIR}/cmake/configure_files/dftracer_config.hpp.in"
|
|
384
|
+
"${CMAKE_INCLUDE_OUTPUT_DIRECTORY}/dftracer/dftracer_config.hpp" @ONLY)
|
|
385
|
+
|
|
386
|
+
|
|
387
|
+
################################################################
|
|
388
|
+
# Install DFTRACER
|
|
389
|
+
################################################################
|
|
390
|
+
|
|
391
|
+
include(CMakePackageConfigHelpers)
|
|
392
|
+
|
|
393
|
+
# Write the version file. This is independent of build/install tree.
|
|
394
|
+
write_basic_package_version_file(
|
|
395
|
+
DFTRACERConfigVersion.cmake
|
|
396
|
+
VERSION "${DFTRACER_PACKAGE_VERSION}"
|
|
397
|
+
COMPATIBILITY SameMajorVersion)
|
|
398
|
+
|
|
399
|
+
install(FILES
|
|
400
|
+
"${CMAKE_INCLUDE_OUTPUT_DIRECTORY}/dftracer/dftracer_config.hpp"
|
|
401
|
+
DESTINATION
|
|
402
|
+
${DFTRACER_INSTALL_INCLUDE_DIR}/dftracer)
|
|
403
|
+
|
|
404
|
+
install(EXPORT
|
|
405
|
+
${DFTRACER_EXPORTED_TARGETS}
|
|
406
|
+
DESTINATION
|
|
407
|
+
${DFTRACER_LIBDIR}/cmake/${PROJECT_NAME}
|
|
408
|
+
FILE
|
|
409
|
+
${DFTRACER_EXPORTED_TARGETS}.cmake
|
|
410
|
+
)
|
|
411
|
+
|
|
412
|
+
# Install license and readme
|
|
413
|
+
install(FILES
|
|
414
|
+
"${PROJECT_SOURCE_DIR}/LICENSE"
|
|
415
|
+
"${PROJECT_SOURCE_DIR}/README.md"
|
|
416
|
+
DESTINATION
|
|
417
|
+
${DFTRACER_INSTALL_DOCDIR})
|
|
418
|
+
|
|
419
|
+
|
|
420
|
+
###############################################################################
|
|
421
|
+
# Print out configuration summary
|
|
422
|
+
###############################################################################
|
|
423
|
+
|
|
424
|
+
if (CMAKE_HOST_SYSTEM_NAME MATCHES "Linux")
|
|
425
|
+
set(DFTRACER_GNU_LINUX TRUE)
|
|
426
|
+
endif ()
|
|
427
|
+
|
|
428
|
+
# NOTE: message() outputs to stderr by default. We now use a string to
|
|
429
|
+
# maintain this information and then have cmake echo it to stdout. The
|
|
430
|
+
# only side effects are that if you use the CMake GUI, you won't see
|
|
431
|
+
# this output anymore (they only report stderr) and that if you add
|
|
432
|
+
# something to the list, you must remember your newline!
|
|
433
|
+
set(_str "\n== DFTRACER Configuration Summary ==\n\n")
|
|
434
|
+
string(APPEND _str " PROJECT_SOURCE_DIR: ${PROJECT_SOURCE_DIR}\n"
|
|
435
|
+
" PROJECT_BINARY_DIR: ${PROJECT_BINARY_DIR}\n\n"
|
|
436
|
+
" CMAKE_INSTALL_PREFIX: ${CMAKE_INSTALL_PREFIX}\n"
|
|
437
|
+
" CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}\n\n")
|
|
438
|
+
if (CMAKE_BUILD_TYPE MATCHES None)
|
|
439
|
+
string(APPEND _str
|
|
440
|
+
" CXX FLAGS: ${CMAKE_CXX_FLAGS}\n")
|
|
441
|
+
elseif (CMAKE_BUILD_TYPE MATCHES Release)
|
|
442
|
+
string(APPEND _str
|
|
443
|
+
" CXX FLAGS: ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELEASE}\n")
|
|
444
|
+
string(APPEND _str
|
|
445
|
+
" C FLAGS: ${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_RELEASE}\n")
|
|
446
|
+
elseif (CMAKE_BUILD_TYPE MATCHES RelWithDebInfo)
|
|
447
|
+
string(APPEND _str
|
|
448
|
+
" CXX FLAGS: ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELWITHDEBINFO}\n")
|
|
449
|
+
string(APPEND _str
|
|
450
|
+
" C FLAGS: ${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_RELWITHDEBINFO}\n")
|
|
451
|
+
elseif (CMAKE_BUILD_TYPE MATCHES Debug)
|
|
452
|
+
string(APPEND _str
|
|
453
|
+
" CXX FLAGS: ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_DEBUG}\n")
|
|
454
|
+
string(APPEND _str
|
|
455
|
+
" C FLAGS: ${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_DEBUG}\n")
|
|
456
|
+
endif ()
|
|
457
|
+
string(APPEND _str "\n")
|
|
458
|
+
|
|
459
|
+
string(APPEND _str
|
|
460
|
+
" DFTRACER_PACKAGE_VERSION: ${DFTRACER_PACKAGE_VERSION}\n")
|
|
461
|
+
string(APPEND _str
|
|
462
|
+
" DFTRACER_GIT_VERSION: ${DFTRACER_GIT_VERSION}\n")
|
|
463
|
+
string(APPEND _str
|
|
464
|
+
" GLIBC_VERSION: ${GLIBC_VERSION}\n")
|
|
465
|
+
string(APPEND _str
|
|
466
|
+
" DFTRACER_PYTHON_EXE: ${DFTRACER_PYTHON_EXE}\n")
|
|
467
|
+
string(APPEND _str
|
|
468
|
+
" DFTRACER_PYTHON_SITE: ${DFTRACER_PYTHON_SITE}\n")
|
|
469
|
+
string(APPEND _str
|
|
470
|
+
" MAIN_PYTHON_SITE_PACKAGES: ${MAIN_PYTHON_SITE_PACKAGES}\n")
|
|
471
|
+
string(APPEND _str
|
|
472
|
+
" DEPENDENCY_LIB: ${DEPENDENCY_LIB}\n")
|
|
473
|
+
#Print the true/false variables
|
|
474
|
+
append_str_tf(_str
|
|
475
|
+
DFTRACER_GNU_LINUX
|
|
476
|
+
DFTRACER_LIBDIR_AS_LIB
|
|
477
|
+
DFTRACER_USE_CLANG_LIBCXX
|
|
478
|
+
DFTRACER_WARNINGS_AS_ERRORS
|
|
479
|
+
DFTRACER_BUILD_PYTHON_BINDINGS
|
|
480
|
+
DFTRACER_ENABLE_TESTS
|
|
481
|
+
DFTRACER_ENABLE_DLIO_BENCHMARK_TESTS
|
|
482
|
+
DFTRACER_ENABLE_PAPER_TESTS
|
|
483
|
+
)
|
|
484
|
+
string(APPEND _str
|
|
485
|
+
"\n== End DFTRACER Configuration Summary ==\n")
|
|
486
|
+
|
|
487
|
+
# Output to stdout
|
|
488
|
+
execute_process(COMMAND ${CMAKE_COMMAND} -E echo "${_str}")
|
|
489
|
+
set(_str)
|
|
490
|
+
|
|
491
|
+
|
|
492
|
+
###############################################################################
|
|
493
|
+
# Write a basic modulefile
|
|
494
|
+
###############################################################################
|
|
495
|
+
|
|
496
|
+
set(DFTRACER_MODULEFILE_NAME "dftracer-${DFTRACER_PACKAGE_VERSION}.lua")
|
|
497
|
+
# CACHE STRING
|
|
498
|
+
# "The name of the DFTRACER modulefile to install. Must end in .lua.")
|
|
499
|
+
|
|
500
|
+
if (NOT (DFTRACER_MODULEFILE_NAME MATCHES ".+\.lua"))
|
|
501
|
+
message(WARNING
|
|
502
|
+
"DFTRACER_MODULEFILE_NAME must have extension \".lua\". Appending.")
|
|
503
|
+
set(DFTRACER_MODULEFILE_NAME "${DFTRACER_MODULEFILE_NAME}.lua"
|
|
504
|
+
CACHE STRING "" FORCE)
|
|
505
|
+
endif ()
|
|
506
|
+
|
|
507
|
+
configure_file(
|
|
508
|
+
"${CMAKE_SOURCE_DIR}/cmake/configure_files/dftracer_module.lua.in"
|
|
509
|
+
"${CMAKE_BINARY_DIR}/dftracer_module.lua.install"
|
|
510
|
+
@ONLY)
|
|
511
|
+
|
|
512
|
+
install(FILES "${CMAKE_BINARY_DIR}/dftracer_module.lua.install"
|
|
513
|
+
RENAME "${DFTRACER_MODULEFILE_NAME}"
|
|
514
|
+
DESTINATION
|
|
515
|
+
"${DFTRACER_INSTALL_SYSCONFDIR}")
|
|
516
|
+
|
|
517
|
+
endif()
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: pydftracer
|
|
3
|
+
Version: 1.0.1
|
|
4
|
+
Summary: I/O profiler for deep learning python apps. Specifically for dlio_benchmark.
|
|
5
|
+
Home-page: https://github.com/hariharan-devarajan/dftracer
|
|
6
|
+
Author: Hariharan Devarajan (Hari)
|
|
7
|
+
License: UNKNOWN
|
|
8
|
+
Project-URL: Bug Reports, https://github.com/hariharan-devarajan/dftracer/issues
|
|
9
|
+
Project-URL: Source, https://github.com/hariharan-devarajan/dftracer
|
|
10
|
+
Description: [](https://github.com/hariharan-devarajan/dftracer/actions/workflows/ci.yml)
|
|
11
|
+
[](https://coveralls.io/github/hariharan-devarajan/dftracer?branch=dev)
|
|
12
|
+
[](https://dftracer.readthedocs.io/en/latest/?badge=latest)
|
|
13
|
+
|
|
14
|
+
# DFTracer v1.0.1
|
|
15
|
+
A multi-level profiler for capturing application functions and low-level system I/O calls from deep learning workloads.
|
|
16
|
+
|
|
17
|
+
Requirements for profiler
|
|
18
|
+
1. Python > 3.7
|
|
19
|
+
2. pybind11
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
Requirements for analyzer
|
|
23
|
+
1. bokeh>=2.4.2
|
|
24
|
+
2. pybind11
|
|
25
|
+
3. [zindex_py](https://github.com/hariharan-devarajan/zindex.git)
|
|
26
|
+
4. pandas>=2.0.3
|
|
27
|
+
5. dask>=2023.5.0
|
|
28
|
+
6. distributed
|
|
29
|
+
7. numpy>=1.24.3
|
|
30
|
+
8. pyarrow>=12.0.1
|
|
31
|
+
9. rich>=13.6.0
|
|
32
|
+
10. python-intervals>=1.10.0.post1
|
|
33
|
+
11. matplotlib>=3.7.3
|
|
34
|
+
|
|
35
|
+
## Build DFTracer with pip
|
|
36
|
+
|
|
37
|
+
Users can easily install DFTracer using pip. This is the way most python packages are installed.
|
|
38
|
+
This method would work for both native python environments and conda environments.
|
|
39
|
+
|
|
40
|
+
### From source
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
git clone git@github.com:hariharan-devarajan/dftracer.git
|
|
44
|
+
cd dftracer
|
|
45
|
+
# You can skip this for installing the dev branch.
|
|
46
|
+
# for latest stable version use master branch.
|
|
47
|
+
git checkout tags/<Release> -b <Release>
|
|
48
|
+
pip install .
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### From Github
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
DFT_VERSION=dev
|
|
55
|
+
pip install git+https://github.com/hariharan-devarajan/dftracer.git@${DFT_VERSION}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
For more build instructions check [here](https://dftracer.readthedocs.io/en/latest/build.html)
|
|
59
|
+
|
|
60
|
+
Usage
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
from dftracer.logger import dftracer, dft_fn
|
|
64
|
+
log_inst = dftracer.initialize_log(logfile=None, data_dir=None, process_id=-1)
|
|
65
|
+
dft_fn = dft_fn("COMPUTE")
|
|
66
|
+
|
|
67
|
+
# Example of using function decorators
|
|
68
|
+
@dft_fn.log
|
|
69
|
+
def log_events(index):
|
|
70
|
+
sleep(1)
|
|
71
|
+
|
|
72
|
+
# Example of function spawning and implicit I/O calls
|
|
73
|
+
def posix_calls(val):
|
|
74
|
+
index, is_spawn = val
|
|
75
|
+
path = f"{cwd}/data/demofile{index}.txt"
|
|
76
|
+
f = open(path, "w+")
|
|
77
|
+
f.write("Now the file has more content!")
|
|
78
|
+
f.close()
|
|
79
|
+
if is_spawn:
|
|
80
|
+
print(f"Calling spawn on {index} with pid {os.getpid()}")
|
|
81
|
+
log_inst.finalize() # This need to be called to correctly finalize DFTracer.
|
|
82
|
+
else:
|
|
83
|
+
print(f"Not calling spawn on {index} with pid {os.getpid()}")
|
|
84
|
+
|
|
85
|
+
# NPZ calls internally calls POSIX calls.
|
|
86
|
+
def npz_calls(index):
|
|
87
|
+
# print(f"{cwd}/data/demofile2.npz")
|
|
88
|
+
path = f"{cwd}/data/demofile{index}.npz"
|
|
89
|
+
if os.path.exists(path):
|
|
90
|
+
os.remove(path)
|
|
91
|
+
records = np.random.randint(255, size=(8, 8, 1024), dtype=np.uint8)
|
|
92
|
+
record_labels = [0] * 1024
|
|
93
|
+
np.savez(path, x=records, y=record_labels)
|
|
94
|
+
|
|
95
|
+
def main():
|
|
96
|
+
log_events(0)
|
|
97
|
+
npz_calls(1)
|
|
98
|
+
with get_context('spawn').Pool(1, initializer=init) as pool:
|
|
99
|
+
pool.map(posix_calls, ((2, True),))
|
|
100
|
+
log_inst.finalize()
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
if __name__ == "__main__":
|
|
104
|
+
main()
|
|
105
|
+
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
For this example, as the DFTRACER_CPP_INIT do not pass log file or data dir, we need to set ``DFTRACER_LOG_FILE`` and ``DFTRACER_DATA_DIR``.
|
|
109
|
+
By default the DFTracer mode is set to FUNCTION.
|
|
110
|
+
Example of running this configurations are:
|
|
111
|
+
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
# the process id, app_name and .pfw will be appended by the profiler for each app and process.
|
|
115
|
+
# name of final log file is ~/log_file-<APP_NAME>-<PID>.pfw
|
|
116
|
+
DFTRACER_LOG_FILE=~/log_file
|
|
117
|
+
# Colon separated paths for including for profiler
|
|
118
|
+
DFTRACER_DATA_DIR=/dev/shm/:/p/gpfs1/$USER/dataset:$PWD/data
|
|
119
|
+
# Enable profiler
|
|
120
|
+
DFTRACER_ENABLE=1
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
For more example check [Examples](https://dftracer.readthedocs.io/en/latest/examples.html).
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
Keywords: profiler,deep learning,I/O,benchmark,NPZ,pytorch benchmark,tensorflow benchmark
|
|
127
|
+
Platform: UNKNOWN
|
|
128
|
+
Classifier: Development Status :: 3 - Alpha
|
|
129
|
+
Classifier: Intended Audience :: Science/Research
|
|
130
|
+
Classifier: Topic :: Software Development :: Build Tools
|
|
131
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
132
|
+
Classifier: Programming Language :: Python :: 3.7
|
|
133
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
134
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
135
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
136
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
137
|
+
Requires: pybind11
|
|
138
|
+
Requires: setuptools
|
|
139
|
+
Requires-Python: >=3.7
|
|
140
|
+
Description-Content-Type: text/markdown
|
|
141
|
+
Provides-Extra: test
|
|
142
|
+
Provides-Extra: dfanalyzer
|