7e6e33cfce
* Initial Implementation: include
* Initial Implementation: lib details (#11)
* Initial Implementation: lib details
* Initial Implementation: lib (#12)
* Initial Implementation: lib
* Initial Implementation: source (#13)
* Initial Implementation: source
* Initial Implementation: samples (#14)
* Initial Implementation: samples
* Initial Implementation: tests (#15)
* Initial Implementation: tests
* Initial Implementation: scripts (#16)
* Initial Implementation: scripts
* Initial Implementation: cmake (#17)
* Initial Implementation: cmake
* Initial Implementation: top-level files (#18)
* Initial Implementation: top-level files
- clang-format
- clang-tidy
- cmake-format
- ignore build and cache directories
- main CMakeLists.txt
- pyproject.toml (python formatting)
- VERSION file
* Initial Implementation: workflow (#19)
* Fix unused variable
- rocprofiler_register_warn_level
[ROCm/rocprofiler-register commit: fa4295db6b]
73 lines
1.4 KiB
C++
73 lines
1.4 KiB
C++
|
|
#include <dlfcn.h>
|
|
#include <pthread.h>
|
|
#include <string>
|
|
#include <thread>
|
|
#include <vector>
|
|
|
|
#include "common/fwd.hpp"
|
|
|
|
void
|
|
run(const std::string& name, pthread_barrier_t* _barrier)
|
|
{
|
|
if(_barrier) pthread_barrier_wait(_barrier);
|
|
|
|
if(hip_init_fn)
|
|
{
|
|
if(_barrier) pthread_barrier_wait(_barrier);
|
|
hip_init_fn();
|
|
}
|
|
|
|
if(hsa_init_fn)
|
|
{
|
|
if(_barrier) pthread_barrier_wait(_barrier);
|
|
hsa_init_fn();
|
|
}
|
|
|
|
if(roctxRangePush_fn)
|
|
{
|
|
if(_barrier) pthread_barrier_wait(_barrier);
|
|
roctxRangePush_fn(name.c_str());
|
|
}
|
|
|
|
if(roctxRangePop_fn)
|
|
{
|
|
if(_barrier) pthread_barrier_wait(_barrier);
|
|
roctxRangePop_fn(name.c_str());
|
|
}
|
|
}
|
|
|
|
void
|
|
run_threads(unsigned long n)
|
|
{
|
|
auto threads = std::vector<std::thread>{};
|
|
auto names = std::vector<std::string>{};
|
|
|
|
for(unsigned long i = 0; i < n; ++i)
|
|
names.emplace_back(std::string{ "thread-" } + std::to_string(i));
|
|
|
|
auto _barrier = pthread_barrier_t{};
|
|
pthread_barrier_init(&_barrier, nullptr, n);
|
|
|
|
for(unsigned long i = 0; i < n; ++i)
|
|
threads.emplace_back(run, names.at(i), &_barrier);
|
|
|
|
for(auto& itr : threads)
|
|
itr.join();
|
|
|
|
pthread_barrier_destroy(&_barrier);
|
|
}
|
|
|
|
int
|
|
main(int argc, char** argv)
|
|
{
|
|
unsigned long n = 4;
|
|
if(argc > 1) n = std::stoul(argv[1]);
|
|
|
|
resolve_symbols<ROCP_REG_TEST_HIP | ROCP_REG_TEST_ROCTX>();
|
|
|
|
run_threads(n);
|
|
|
|
return 0;
|
|
}
|