The roctracer-tests package contains all the roctracer test binaries
and scripts needed to run the testsuite outside of the build directory.
Change-Id: Id11f862fb4bdb2425d68f455074172c38814ec92
The ROCR now detects already loaded tool libraries and calls OnLoad/
OnUnload in the order specified with HSA_AMD_TOOL_ORDER.
It is no longer necessary to set the HSA_TOOLS_LIB environment variable
to load the roctracer API. The roctracer tool library should be
pre-loaded with LD_PRELOAD.
Change-Id: I6de1b1bd4f93caa08d3554aad2376d242c74fb7e
Enabling the new methodology of ROCP_STATS_OPT of getting HIP activities while the application is running
Change-Id: I94b3311b0740db804643dba0e4f77c1f9de0319b
In file included from roctracer/src/roctracer/tracker.h:24,
from roctracer/src/roctracer/roctracer.cpp:44:
/opt/rocm/hsa/include/hsa/amd_hsa_signal.h:26:246: note: ‘#pragma message: amd_hsa_signal.h has moved to ...’
26 | ssage("amd_hsa_signal.h has moved to ...")
| ^
Change-Id: I38d151d836688083a4fdb0e86a04fc40923a369f
The same information can be generated from the hcc_ops_trace.txt file,
so in a later commit, will add a stage to the tblextr.py script to
generate the .csv files when ROCP_STATS_OPT=1.
Change-Id: I3d1575e096bedf98c66068d9a4ca141421e5bb9d
Some records may need to point to data with the same lifetime as the
records themselves. One solution is to store the data at the end of
the memory pool buffer. Records in the buffer grow up, and the data
grows down. When the buffer is flushed both records and data are
recycled.
Change-Id: I278fa84478236bf895f7c2d152d47d4256987392
Prevents cmake errors for the HIP targets such as:
HIP_ARCHITECTURES is empty for target "MatrixTranspose".
Change-Id: I352916f6dccd22576e8b1482a41e2099b6d8a8d9
The roctracer_load, roctracer_unload, and roctrace_flush_buf functions
are not part of the ROCtracer API, and should not be exposed in the API
header file, but keep the functions in the library for backward
compatibility.
Add src/roctracer/backward_compat.cpp to implement retired functions.
Add test/app/backward_compat_test.cpp to test that the retired functions
are still accessible in the latest roctracer library.
Change-Id: I4c94310a7bfccfeae9384dac5db18fc79b4c5b17
Add symbol versioning to the roctracer64 and roctx64 library, and only
expose the OnLoad and OnUnload tracer_tool symbols.
Change-Id: I7f160fc3e568567fd1146ff5b9c0aef3bdcccf53
Add custom_commands to generate the HSA code objects
Remove the configure time file generation and add custom commands to
generate them at build time.
Change-Id: I167dd9befc6c73f32224935eaab74510922b26f4
This should be enabled at the command line during the cmake configure
step (-DCMAKE_VERBOSE_MAKEFILE=True).
Verbose output can also be enabled during the build by setting the
VERBOSE=1 GNU make variable, or using the -v Ninja option.
Change-Id: Ie842c900c83c8f9f1c3ab4119e3bbc7931d371f5
Optimizing trace period to use std::threads as well as std::chrono sleep instead of sleep and usleep and catching up corner cases for ending before the trace period duration and some cosmetic clean up
Change-Id: Ia99f346bf71a3faad5dfdfc8d7a08f6c2b2cc0b9
The test (MatrixTranspose) and the tracer tool both write to stdout
which sometime causes a trace corruption.
Change the test to emit info messages to stderr instead of stdout,
leaving stdout for the tracer tool's exclusive use.
Change-Id: I18047dbcd9039b70dd24ef6e7e8e9d89b40bedd2
Removing unused definitions and compile options
Using cmake variables to set the options needed
Changing the visibility to make it specific for the targets
Change-Id: I80cf0997cd28897d5a06a58c7225ba40dfc51e2d
Using std::thread instead of pthreads and also atomic_bool to identify the end of the flush function so that the unload_tool can wait for it
Change-Id: Iea00d7e16c65d51db2d222e8b42f03f9caeb2067
The range message stack is mirrored in case ranges are pushed or popped
while tracing is stopped (by the tracer tool?). When a stop event is
reported, the tracer tool emits RangePop events by unwinding the stack,
then when the start event is reported, it emits RangePush events again
by unwinding the stack. The issue is that the RangePush events should
be emitted in reverse order.
For example:
RangePush(M1); RangePush(M2); \
TracerStop; RangePop; RangePop; \
...; \
TracerStart; RangePush(M2); RangePush(M1); \ <- In the wrong order
RangePop; RangePop;
It could be fixed by reversing the stack in RangeStackIterate but is it
worth it? The roctx range markers are supposed to be unintrusive so that
they can be left in the application even when it isn't being traced.
Simplifying the roctx API and reducing its added latency by removing
the range message stack mirroring seems like the better choise.
TODO: A future change should make roctx events immune to tracer start
and tracer stop requests. Or simply remove roctracer_start/stop.
Change-Id: Ie4d76afb5ce8d263848dcf1b599af394db56ddab
System clock timestamps should only come from a single source:
util::timestamp_ns(). Externally, this function is exposed as
roctracer_get_timestamp() (used by the tracer tool).
Removed the now unused HSA Runtime Utilities which were never part
of the ROCtracer API.
Change-Id: I044b7f4da60fd8fdb771b0c877622a3143f0e815
hsa_rsrc_factory was only used to enumerate the agents types and pools.
The pools don't seem to be used by bin/mem_manager.py, so I only
ported the agent enumeration using hsa_iterate_agents.
Change-Id: Idd586aa13db303cf92962a6392771b7bf38b758f
1) The Entry's state was published after making the record avaiable,
so a thread flushing the records could see an unitialized record.
2) data_ and write_pointer_ could become out of sync. write_pointer_
could be indexing into another buffer than what data_ was pointing
to.
3) GetEntry could get a nullptr free_buffer_ because multiple threads
could acquire the work_mutex_ before the work_thread_ could wake up,
or between allocate_worker's loop iterations.
Change-Id: I6f0a015557888eeeaa75a8bce7fde8de276d11dd
A trace buffer is used to efficiently store synchronous event records
so that they can be processed later, possibly in a different thread,
when the buffer is flushed. This helps reduce the latency added by
tracing API calls.
The API does not need to use trace buffers as synchronous events are
directly reported to the client with callbacks, and asynchronous events
(activities) are saved in memory pools.
The implentation of HSA asynchronous memory copy activities was using
a trace buffer shared with the tracer tool to write the records to a
file (async_copy_trace.txt), instead of using a memory pool and
reporting the activity to the client.
Removed the asynchronous memory copies trace buffer, and updated
hsa_async_copy_handler to use the pool specified when the activity
was enabled.
Updated the tracer tool to read HSA_OP_ID_COPY records out of the
default memory pool and write them to async_copy_trace.txt.
Move trace_buffer.h to test/tool as tracer_tool.cpp is now the only
file using it.
Change-Id: Ida95aba2eaf3c3f2a979ed6c2b060374017b7424
This test stresses the concurrent writing of trace buffer records while
frequently allocating new storage to hold the records.
Due to race conditions, this test fails with the current trace buffer
implementation.
Change-Id: I0b77c64005e776319bf21f1ee1e6d7c99ddccfff
Removing DEBUG_TRACES and the unnecessary use of roctracer_op_string, made the MS app reporting 78 to 81 stable samples per second, depending on the type of the trace, while the main app without rocprof reports 100 to 106. More detailed numbers will be posted in the ticket.
Change-Id: Ifbc529278cea54dd23e6086aa9b9ea2df952d5dd