Commit Graph

18 Commits

Author SHA1 Message Date
Ioannis Assiouras 0e023d1a0a SWDEV-463865 - symbol renamings to prevent conflicts in static build
Change-Id: Id7fbb638c1088c23df52fee877cd790d637b1ffb


[ROCm/clr commit: b8c2ac4de4]
2024-06-06 04:05:55 -04:00
Ioannis Assiouras 62b3d8f59b SWDEV-412496 - treat USE_PROF_API to always be true
Change-Id: I77cfac409215a33d11228a0f2da9ffba63c3d73a


[ROCm/clr commit: cb7776ef07]
2023-07-21 04:42:57 -04:00
Laurent Morichetti 7919db9760 SWDEV-351980 - Consolidate registration tables in the roctracer library
Remove the api_callbacks_table_t that was holding the API activities and
user callbacks. Instead use a single roctracer callback (TracerCallback)
used to report both API activities and callbacks.

Remove the hipInitActivityCallback that was setting the ROCtracer
callback and memory pool for asynchronous activities as it did not
allow disctinct pools to be used for each activity.  Instead, use
hipRegisterTracerCallback to set the single roctracer callback.

Change-Id: I4c10f04f29a6e4cce8caf15db3016c3f72c86b04


[ROCm/clr commit: 82bce811ee]
2022-09-21 02:41:39 -04:00
Laurent Morichetti d4cf83b5d2 SWDEV-351980 - Remove IS_PROFILER_ON
The CallbacksTable::is_enabled() can simply be implemented by checking
if enabled_api_count is > 0. The ROCclr does not use IS_PROFILER_ON
to report asynchronous activities.

Change-Id: Iab3d034357e51282bf2c453b2ac5c9726786b9eb


[ROCm/clr commit: eeddffc1b1]
2022-09-21 02:41:29 -04:00
Laurent Morichetti 472b3f3155 SWDEV-351980 - Move hip_api_data and record to the HIP function's stack
Since the hip_api_data and record are only needed at the HIP function's
scope, there is no need to allocate/free them in the ROCtracer activity
callback, they can reside on the HIP function's stack frame.

This solves an issue with the thread local stacks of records the tracer
maintains that are destroyed first (before any global destructor) on
process exit, making it impossible to use HIP functions in global
destructors when the profiler is enabled.

Change-Id: Ib1d70124d009a44dc1f08d41edff95e5f9f84369


[ROCm/clr commit: 85fd969253]
2022-09-21 02:41:15 -04:00
Laurent Morichetti fae60db2ff SWDEV-351980 - Use std::shared_mutex
Replace the custom reader/writer lock with the standard implementation
available in C++17.

Change-Id: I46013b821f13a023a16094830b7f45c4bacf11cb


[ROCm/clr commit: 008aa1c2e1]
2022-08-18 21:55:31 -04:00
Laurent Morichetti 7edb46802d Improve hip_prof_api.h's readability
- Don't pass uint32_t arguments by reference.
- Use nullptr instead of NULL.
- Don't add frivolous typedefs.
- Use correct types when available instead of generic integral types.
- Make all roctracer callbacks extern "C" to prepare for a future change
  that will be removing their declaration from hip_runtime_api.h.
- Rename cb/sem sync and release functions -> reader_lock/writer_lock
  acquire and release.

Change-Id: If203fee077d421a9782fcd34607a413b8c3dcfc8


[ROCm/clr commit: 9f09ca929e]
2022-08-01 17:11:50 -07:00
Laurent Morichetti 4816acb0b2 Fix a race condition when setting the callbacks
When acquiring the reader's lock (sem_sync()...sem_release()), it is
possible for a writer to squeeze by if the reader goes into sync_wait().
The writer could re-acquire the entry.sync between entry.sem > 0 and
entry.sync = 0.

void sync_wait(uint32_t id) {
    sem_decrement(id);
    while (entry(id).sync.load()) {}
    // <--- HERE
    sem_increment(id);
}

This could result in both the reader and the writer accessing
{ callback, arg } at the same time, and the reader could read
inconsistent data, for example: { new callback, old arg }.

The solution is to re-test entry.sync when returning from sync_wait():

void sem_sync(uint32_t id) {
    sem_increment(id);
-   if (entry(id).sync.load() == true) sync_wait(id);
+   while (entry(id).sync.load() == true) sync_wait(id);
}

Change-Id: I22f74f4cb9a5f027aac8aa4ed3e633acc19df4b8


[ROCm/clr commit: 6f78083f2a]
2022-08-01 20:03:10 -04:00
Laurent Morichetti ae091a2320 Fix a build failure on Windows
Terse static_assert is only available starting with c++17. Add the
message argument since HIP is not compiled using c++17.

Change-Id: I77bc7ddb635e50ac3e6744d73c8751dc8299087e


[ROCm/clr commit: 73ee1afb17]
2021-08-11 21:25:49 -07:00
Ammar ELWazir efc02f62d0 SWDEV-294248 (Fixing Race Conditions):
Fixing race conditions that happened when enabling trace-period feature on the following code:
#include <hip/hip_runtime.h>
__global__ void
kernel ()
{
}
int
main (int argc, char **argv)
{
  for (size_t i = 0; i < 10000; ++i) {
    hipLaunchKernelGGL (kernel, 1, 1, 0, 0);
    hipDeviceSynchronize ();
  }
  return 0;
}

Change-Id: I6d2407ad06ecd602b93f53970859e1f4b67072e8


[ROCm/clr commit: 0670e49806]
2021-08-11 11:06:10 -04:00
agunashe fae697b4d6 SWDEV-293742 - Update copyrights end year for hipamd
Change-Id: I08f620f84563a9214b59f1b943ed091b67229eab


[ROCm/clr commit: d9d9e81acb]
2021-07-09 12:08:39 -04:00
Christophe Paquot e3a6104868 SWDEV-281658 - Preserve the callback IDs enum ordering
This change addresses the rocprofiler and HIP backward compatibility
issues. Before this patch, each time the hip_prof_str.h header was
generated, the ordering of the callbacks IDs changed, causing
incompatibilities between tools compiled with the old header and
runtimes compiled with the new headers (or vice versa).

To make the API callback IDs stable, the previous version of the header
is read to extract the enum values so that the same values can be
assigned in the new header.

Also, to make diffing different versions of the hip_prof_str.h easier
to read, all other sections (types, macros, helper functions) are now
alphabetically ordered.

If an update to the checked-in hip_prof_str.h file is required, the
cmake build is aborted and a message printed on stderr. The build will
not be successful until the checked-in hip_prof_str.h and the generated
hip_prof_str.h match.

Change-Id: I38b920e601185f7365a76a6584df91a7e8a11798


[ROCm/clr commit: d208afcb36]
2021-07-09 11:17:09 -04:00
Christophe Paquot 81c1c4048e SWDEV-281658 - Fix compilation warnings
In file included from /extra/lmoriche/hip-vdi/hip/rocclr/hip_internal.hpp:25,
                 from /extra/lmoriche/hip-vdi/hip/rocclr/hip_hmm.cpp:22:
/extra/lmoriche/hip-vdi/hip/rocclr/hip_prof_api.h: In constructor ‘api_callbacks_table_t::api_callbacks_table_t()’:
/extra/lmoriche/hip-vdi/hip/rocclr/hip_prof_api.h:72:59: warning: ‘void* memset(void*, int, size_t)’ clearing an object of type ‘struct api_callbacks_table_t::hip_cb_table_t’ with no trivial copy-assignment; use value-initialization instead [-Wclass-memaccess]
   72 |      memset(&callbacks_table_, 0, sizeof(callbacks_table_));
      |                                                           ^
/extra/lmoriche/hip-vdi/hip/rocclr/hip_prof_api.h:67:10: note: ‘struct api_callbacks_table_t::hip_cb_table_t’ declared here
   67 |   struct hip_cb_table_t {
      |          ^~~~~~~~~~~~~~

Address the above warning by providing default initialization of the
api_callbacks_table_t::hip_cb_table_t class members.

Change-Id: I69ea7c390c28cf3f8aec57f23566d6a3061a0365


[ROCm/clr commit: 0f7a47a95f]
2021-06-18 07:03:35 -07:00
Aleksey 36c4392b34 SWDEV-284883 - QMCPACK hangs when using rocprof --trace-period
Workaraund fix race condition in api_callbacks_spawner_t destructor.

Change-Id: I77d61492dfa484c3e477805c6f314a00dbb6cc32


[ROCm/clr commit: 4f0bf535c4]
2021-06-17 00:24:56 -04:00
Rahul Garg dd95d3d23c ROCMOPS-1956 - Push restructured code to hipamd
hipamd will have AMD's ROCCLR based HIP backend implementation

Change-Id: Id7de9634519b4ce46fca71a1b61f3d5b1e3fc459


[ROCm/clr commit: 19c84bc604]
2021-06-07 21:42:44 +00:00
Tao Sang 6227f3fae2 Remove hip-hcc codes: Part one
Remove hip-hcc codes from hip code base
Simplify hip CMakeLists.txt to exclude hip-hcc
Simplify cmake cmd for hip-rocclr building
Some minor fixes

Change-Id: I1ae357ecfd638d6c25bca293c1724b026be21ecd


[ROCm/clr commit: 1cba7ec965]
2020-12-09 15:49:47 -05:00
Evgeny 266d2fd9c8 tracing layer unifying with hcc: removing API_ID_ANY
[ROCm/clr commit: ed29c10394]
2019-10-08 19:09:43 -05:00
Evgeny 214c01e6bf prof layer includes refactoring
[ROCm/clr commit: c6600ba26b]
2019-06-11 20:13:29 -05:00