38009bfba4a36371f4e08fb89f6dd95bf8965926
On Ubuntu 20.04, in Release mode, gcc fails with this error:
In file included from /usr/include/string.h:495,
from /opt/rocm/include/hsa/hsa_api_trace.h:57,
from ../roctracer/src/util/hsa_rsrc_factory.h:29,
from ../roctracer/src/util/hsa_rsrc_factory.cpp:25:
In function ‘char* strncpy(char*, const char*, size_t)’,
inlined from ‘const util::AgentInfo* util::HsaRsrcFactory::AddAgentInfo(hsa_agent_t)’ at ../roctracer/src/util/hsa_rsrc_factory.cpp:323:12:
/usr/include/x86_64-linux-gnu/bits/string_fortified.h:106:34: error: ‘char* __builtin___strncpy_chk(char*, const char*, long unsigned int, long unsigned int)’ specified bound depends on the length of the source argument [-Werror=stringop-overflow=]
106 | return __builtin___strncpy_chk (__dest, __src, __len, __bos (__dest));
| ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../roctracer/src/util/hsa_rsrc_factory.cpp: In member function ‘const util::AgentInfo* util::HsaRsrcFactory::AddAgentInfo(hsa_agent_t)’:
../roctracer/src/util/hsa_rsrc_factory.cpp:322:39: note: length computed here
322 | const int gfxip_label_len = strlen(agent_info->name) - 2;
| ~~~~~~^~~~~~~~~~~~~~~~~~
The error is caused by the following 2 lines:
const int gfxip_label_len = strlen(agent_info->name) - 2;
strncpy(agent_info->gfxip, agent_info->name, gfxip_label_len);
The size argument to strncpy should not depend on the input string.
Since the terminating character is not considered (the copy is at
most len - 2 bytes), using memcpy is preferable. Also, make sure
the destination does not overflow by clamping the size.
Change-Id: I37c5c45418e7c31a017581b6c16e5d47cd61aec5
ROC-tracer
ROC-tracer library: Runtimes Generic Callback/Activity APIs.
The goal of the implementation is to provide a generic independent from
specific runtime profiler to trace API and asyncronous activity.
The API provides functionality for registering the runtimes API callbacks and
asyncronous activity records pool support.
ROC-TX librray: code annotation evemts API
Includes basic API: roctxMark, roctxRangePush, roctxRangePop.
Usage
rocTracer API:
To use the rocTracer API you need the API header and to link your application with roctracer .so librray:
- the API header: /opt/rocm/roctracer/include/roctracer.h
- the .so library: /opt/rocm/lib/libroctracer64.so
rocTX API:
To use the rocTX API you need the API header and to link your application with roctx .so librray:
- the API header: /opt/rocm/roctracer/include/roctx.h
- the .so library: /opt/rocm/lib/libroctx64.so
The library source tree
- doc - documentation
- inc/roctracer.h - rocTacer library public API header
- inc/roctx.h - rocTX library puiblic API header
- src - Library sources
- core - rocTracer library API sources
- roctx - rocTX library API sources
- util - library utils sources
- test - test suit
- MatrixTranspose - test based on HIP MatrixTranspose sample
Documentation
- API description:
- Code examples:
To build and run test
- ROCm is required
- Python modules requirements: CppHeaderParser, argparse.
To install:
sudo pip install CppHeaderParser argparse
- CLone development branch of roctracer:
git clone -b amd-master https://github.com/ROCm-Developer-Tools/roctracer
- Set environment:
export CMAKE_PREFIX_PATH=/opt/rocm
- To use custom HIP version:
export HIP_PATH=/opt/rocm/hip
- To build roctracer library:
export CMAKE_BUILD_TYPE=<debug|release> # release by default
cd <your path>/roctracer && mkdir build && cd build && cmake -DCMAKE_INSTALL_PREFIX=/opt/rocm .. && make -j <nproc>
- To build and run test:
make mytest
run.sh
- To install:
make install
or
make package && dpkg -i *.deb
Opis
Languages
C++
67.5%
C
20.6%
Python
6.6%
CMake
3.4%
Shell
0.6%
Pozostałe
1.1%