Coder Social home page Coder Social logo

hwcpipe's Introduction

About

HWCPipe is a utility that allows applications to sample performance counters from Arm® Immortalis™ and Arm Mali™ GPUs. This information allows developers to profile and optimize their application workload using their existing in-house performance tooling, and gives the ability to display performance data live in the application user interface.

The HWCPipe 2.x series is a major rewrite of the library, capable of exposing all of the public performance counters accessible in the Arm Streamline profiler. This version of the library is not API compatible with the 1.x series, and no longer supports Arm CPU performance counters.

Supported devices

This library aims to support all Arm GPU products from the Mali-T700 series onwards, ensuring developers have coverage of the vast majority of smartphones with Arm GPUs that are in use today. If you find a device with an Arm GPU which does not work, or gives inaccurate results, please open an Issue on the GitHub issue tracker.

This library only supports devices using the Arm commercial driver.

License

This project is licensed under the MIT license. By downloading any component from this repository you acknowledge that you accept terms specified in the LICENSE.md file.

Building

The HWCPipe library is designed to be embedded into existing CMake build process. Clone the GitHub repository and add it as a subdirectory to your CMakeLists.txt. A single library target, called hwcpipe, is made available for you to link to your project.

For example, your CMakeLists.txt could contain:

add_subdirectory(external/hwcpipe)
target_link_libraries(my_project hwcpipe)

Building the example

A small example demonstrating the API usage is provided in the examples folder. To build the example enable the HWCPIPE_BUILD_EXAMPLES CMake build option.

cmake -DHWCPIPE_BUILD_EXAMPLES=ON -B build .

Support

If you have issues with the library itself, please raise them in the project's GitHub issue tracker.

If you have any questions about Arm GPUs, application development for Arm GPUs, or general mobile graphics development or technology please submit them on the Arm Community graphics forums.


Copyright © 2023, Arm Limited and contributors. All rights reserved.

hwcpipe's People

Contributors

akastix avatar antonio-caggiano-arm avatar attilioprovenzano-arm avatar bengaineyarm avatar ilelann avatar joseemilio-arm avatar markbarnett-arm avatar ming4883 avatar per-mathisen-arm avatar ryanoshea-arm avatar sm-powell avatar solidpixel avatar steffenlarsen avatar wasimabbas-arm avatar zandrofargnoli avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

hwcpipe's Issues

Add derived counters

Most usable counter definitions are implemented or estimated based on expressions combining multiple counter values and/or constants. We want to enable third-party users to use the same expressions we use in our internal tooling, so this enhancement covers adding the infrastructure and data tables to do that.

No compatibility with panfrost/lima drivers in armbian?

Hi,
I am using several Single Board Computers (RockPro64, Rock64, BananaPi), including Mali GPUs (400, T860). I am trying to use HWCPipe to access the GPU counters. However, the armbian version I am using does not show the "/dev/mali0" or "/dev/mali" devices. Instead, it shows "/dev/dri/card0 and 1".

I have tried to modify "./vendor/arm/mali/mali_profiler.h" with the other GPU directory but HWCPipe is not able to use it. It returns:
HWCPipe [INFO] : Mali profiler initialization failed: Failed to check version.

Does anyone have some idea of how I could use HWCPipe in armbian? I have also tried to install the "mali" kernel module but without success so far.

The value of hwcpipe::device::constants.gpu_id is error

The result of hwcpipe::gpu::get_device_number() does not match with the value of hwcpipe::device::constants.gpu_id ,but the value of the fw_version matches with hwcpipe::gpu::get_device_number()。I tested hwcpipe's tag 2.1.0 branch on Dimensity8050.

My code is here.

void show_gpu_info(int gpu_id)
{
    hwcpipe::gpu gpu(gpu_id);
    hwcpipe::device::constants constants = gpu.get_constants();

    spdlog::info("gpu_id: {}", constants.gpu_id);
    spdlog::info("gpu_id: {}", constants.fw_version);
    spdlog::info("gpu_id: {}", gpu.get_device_number());

    spdlog::info("bus_width: {}", constants.axi_bus_width);
    spdlog::info("num_shader_cores: {}", constants.num_shader_cores);
    spdlog::info("shader_core_mask: {}", constants.shader_core_mask);
    spdlog::info("num_l2_slices: {}", constants.num_l2_slices);
    spdlog::info("l2_slice_size: {}", constants.l2_slice_size);
    spdlog::info("num_exec_engines: {}", constants.num_exec_engines);

    spdlog::info("tile_size: {}", constants.tile_size);
    spdlog::info("warp_width: {}", constants.warp_width);
}

Log is here

[2023-09-10 20:46:48.140] [info] gpu_id: 36992
[2023-09-10 20:46:48.140] [info] gpu_id: 0
[2023-09-10 20:46:48.140] [info] gpu_id: 0
[2023-09-10 20:46:48.140] [info] bus_width: 128
[2023-09-10 20:46:48.140] [info] num_shader_cores: 9
[2023-09-10 20:46:48.140] [info] shader_core_mask: 6684775
[2023-09-10 20:46:48.140] [info] num_l2_slices: 4
[2023-09-10 20:46:48.141] [info] l2_slice_size: 262144
[2023-09-10 20:46:48.141] [info] num_exec_engines: 1
[2023-09-10 20:46:48.141] [info] tile_size: 16
[2023-09-10 20:46:48.141] [info] warp_width: 16

Remove exceptions

Most game builds build without exceptions, so we should avoid using them here.

Could not identify Mali-G52

I use Huawei nova 6 se, Mali-G52, get an error "Could not identify GPU", try to print product_id is "b1a1545d". is it not supported?

Remove string tables from base interface

The current design uses string tables in the base API, which are relatively large (and growing) if you want a library to support all Mali GPUs.

We've had multiple requests to move the string mapping to a separate file, and use something much simpler (e.g. numeric event IDs) in the base interface.

Release version

Hi,
There will be any release version? Should we consider the current source code as stable?

Thank you,
Saulo

Change to use a C99 API

Would be great to have a C99 api. It would make interop with other languages (C# for example) much easier. Is it something that could be added in the future?

How can I get warp size?

I want to calculate the OverDraw, but it needs the warp size. How can I get the warp size through hwcpipe?

perf_event_open failed. Counter ID: PERF_COUNT_HW_CPU_CYCLES

Hello, when I use your code to compile and run on Android device, it prompts me:

perf_event_open failed. Counter ID: PERF_COUNT_HW_CPU_CYCLES
PMU profiler initialization failed: PMU counters not available.

How to solve this problem? Thank you very much!
My device is Redmi Note 10 Pro (Mali GPU G77MC)
I ensure that this command is executed successfully:
ADB shell setprop security perf_harden 0
I want to know how to compile and run hwpipe correctly on Android devices.
I downloaded Android NDK to my Linux system and specified the Android tool chain in cmake.
I don't know whether my compilation method is correct. Thank you very much!

More, I found about this issue:
in

 void PmuCounter::open(const perf_event_attr &perf_config)
_fd = syscall(__NR_perf_event_open, &perf_config, 0, -1, -1, 0);

the _fd = -1

How to implement MaliFragOverdraw?

Fragments per pixel. This expression computes the number of fragments shaded per output pixel. High levels of overdraw can be a significant processing cost, especially when rendering to a high-resolution framebuffer. Note that this expression assumes a 16x16 tile size is used during shading. For render passes using more than 256 bits per pixel the tile size will be dynamically reduced and this assumption will be invalid.

PmuProfiler segfaults on Hikey960

I'm trying to run this on a Hikey960 with the following backtrace:

#0  0x0000ffffbf06e20c in std::_Hashtable<hwcpipe::CpuCounter, std::pair<hwcpipe::CpuCounter const, PmuEventInfo>, std::allocator<std::pair<hwcpipe::CpuCounter const, PmuEventInfo> >, std::__detail::_Select1st, std::equal_to<hwcpipe::CpuCounter>, hwcpipe::CpuCounterHash, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<true, false, true> >::_M_find_before_node (this=0xffffbf6cfa40 <hwcpipe::pmu_mappings>, __n=0, __k=@0xbd1868: hwcpipe::CpuCounter::Cycles, __code=0) at /home/user/linaro/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/include/c++/7.4.1/bits/hashtable.h:1544
#1  0x0000ffffbf06d5f4 in std::_Hashtable<hwcpipe::CpuCounter, std::pair<hwcpipe::CpuCounter const, PmuEventInfo>, std::allocator<std::pair<hwcpipe::CpuCounter const, PmuEventInfo> >, std::__detail::_Select1st, std::equal_to<hwcpipe::CpuCounter>, hwcpipe::CpuCounterHash, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<true, false, true> >::_M_find_node (this=0xffffbf6cfa40 <hwcpipe::pmu_mappings>, __bkt=0, __key=@0xbd1868: hwcpipe::CpuCounter::Cycles, __c=0) at /home/user/linaro/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/include/c++/7.4.1/bits/hashtable.h:642
#2  0x0000ffffbf06ccec in std::_Hashtable<hwcpipe::CpuCounter, std::pair<hwcpipe::CpuCounter const, PmuEventInfo>, std::allocator<std::pair<hwcpipe::CpuCounter const, PmuEventInfo> >, std::__detail::_Select1st, std::equal_to<hwcpipe::CpuCounter>, hwcpipe::CpuCounterHash, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<true, false, true> >::find (this=0xffffbf6cfa40 <hwcpipe::pmu_mappings>, __k=@0xbd1868: hwcpipe::CpuCounter::Cycles) at /home/user/linaro/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/include/c++/7.4.1/bits/hashtable.h:1441
#3  0x0000ffffbf06c3c8 in std::unordered_map<hwcpipe::CpuCounter, PmuEventInfo, hwcpipe::CpuCounterHash, std::equal_to<hwcpipe::CpuCounter>, std::allocator<std::pair<hwcpipe::CpuCounter const, PmuEventInfo> > >::find (this=0xffffbf6cfa40 <hwcpipe::pmu_mappings>, __x=@0xbd1868: hwcpipe::CpuCounter::Cycles) at /home/user/linaro/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/include/c++/7.4.1/bits/unordered_map.h:924
#4  0x0000ffffbf06a4fc in hwcpipe::PmuProfiler::PmuProfiler (this=0xbd1cd0, enabled_counters=std::unordered_set with 17 elements = {...}) at external/hwcpipe/vendor/arm/pmu/pmu_profiler.cpp:58
#5  0x0000ffffbf035c78 in hwcpipe::HWCPipe::create_profilers (this=0xbce178, enabled_cpu_counters=std::unordered_set with 17 elements = {...}, enabled_gpu_counters=std::unordered_set with 27 elements = {...}) at external/hwcpipe/hwcpipe.cpp:177
#6  0x0000ffffbf0357c8 in hwcpipe::HWCPipe::HWCPipe (this=0xbce178, enabled_cpu_counters=std::unordered_set with 0 elements, enabled_gpu_counters=std::unordered_set with 0 elements) at external/hwcpipe/hwcpipe.cpp:89

When constructing the HWCPipe object it is given a full list of all the counters in cpu_counter_names and gpu_counter_names. If I only pass the GPU counter set, i.e. leave the CPU counter set empty, it collects the Mali counters just fine.

It was cross-compiled from Ubuntu 18.04.4 LTS (GNU/Linux 4.15.0-109-generic x86_64) using Linaro 7.4.1.

PMU counters not available

12-15 18:04:32.028 24817 24817 V HWCPipe : perf_event_open failed. Counter ID: PERF_COUNT_HW_BRANCH_MISSES
12-15 18:04:32.028 24817 24817 V HWCPipe : perf_event_open failed. Counter ID: PERF_COUNT_HW_BRANCH_INSTRUCTIONS
12-15 18:04:32.028 24817 24817 V HWCPipe : perf_event_open failed. Counter ID: PERF_COUNT_HW_CACHE_MISSES
12-15 18:04:32.028 24817 24817 V HWCPipe : perf_event_open failed. Counter ID: PERF_COUNT_HW_CACHE_REFERENCES
12-15 18:04:32.028 24817 24817 V HWCPipe : perf_event_open failed. Counter ID: PERF_COUNT_HW_INSTRUCTIONS
12-15 18:04:32.028 24817 24817 V HWCPipe : perf_event_open failed. Counter ID: PERF_COUNT_HW_CPU_CYCLES
12-15 18:04:32.028 24817 24817 V HWCPipe : PMU profiler initialization failed: PMU counters not available.

build example error: 'device/product_id.hpp' file not found

➜ build git:(main) make
[ 50%] Building CXX object CMakeFiles/api-example.dir/api_example.cpp.o
/Users/xxx/work/HWCPipe/examples/api_example.cpp:7:10: fatal error: 'device/product_id.hpp' file not found
#include <device/product_id.hpp>
^~~~~~~~~~~~~~~~~~~~~~~
1 error generated.
make[2]: *** [CMakeFiles/api-example.dir/api_example.cpp.o] Error 1
make[1]: *** [CMakeFiles/api-example.dir/all] Error 2
make: *** [all] Error 2

Android graphics mem drops when HWCPipe is enabled

Hi there, we are using HwcPipe analyzing GPU performance of our game, and we found that on the MTK 9200 chip, a sudden GPU memory drop occurs after calling start_sampling(). This issue was not observed on other platforms, including the MTK 9300.

image

Our device: Vivo X90

Support for hw_ver_ 4

I have a device with Mali T720 and this check fails!

if (hw_ver_ < 5)
	{
	    std::cout << __LINE__ << "/" << __func__ << " " << hw_ver_ << "\n" ;
		throw std::runtime_error("Unsupported HW version.");
	}

if (hw_ver_ < 5)

Were we planning to add support for hw_ver < 5?

Expose configuration constants through the HWCPipe interface

There are a number of useful configuration properties which could be exposed, which are not directly accessible via counters. Some of these are runtime queries exposed by the Mali driver, and some are static constants which will need to be hard coded into the library as they are not queryable.

Platform configuration:

  • Shader core count
  • L2 slice count
  • L2 slice size

Design configuration:

  • Warp size

Library throws exceptions

HWCPipe throws exceptions as the way to notify about errors.
This library is designed primarily for game development and a standard de-facto in game development is to have no exceptions.
So when I build it and link dynamically it crashes on unhandled exceptions.
Would be nice if it could report errors as error code instead

Need specific ARM device required?

I compiled and run on my android devices, got following error :(

PMU profiler initialization failed: PMU counters not available.
Mali profiler initialization failed: Failed to get HW info.

Does this library need run on specific arm device?

Could I get total cycles of gpu?

I want get total cycles of gpu, so I can calculate gpu's usage/utilization = gpu_active_cycles/total_cycles.
Or maybe I'm wrong, Please tell me how to obtain GPU usage/utilization information.

Identify big.LITTLE clusters?

Hi!

From this project, libGPUInfo was created and we are very thankful for that!

But we've hit another problem: Identifying big.LITTLE systems on Android.

More specifically we need to estimate how many threads we should create and leave out the little cores (for two reasons: a. bugs and b. algorithms that assume all cores takes more or less the same time).

Of course on Android we (unfortunately) cannot set the thread affinity to a CPU core, thus knowing this information is half the battle; we can only hope that if we create 4 threads on a 4+4 system, the 4 threads will be scheduled on the 4 big cpus (or the 4 little ones). But we can be certain that by creating 8 threads, we will always be limited by the little cores*.

* Ultimately we expose the setting to the user to allow an override on the number of CPU cores to use. However it's nice to autodetect an ideal number that works best out of the box for most systems.

Thus what we'd need is something like this:

struct CpuCluster
{
	uint32_t numCores;
        // The range is in range [0; num_clusters)
        // Where 0 is slowest cluster, and num_clusters - 1 the fastest cluster
	uint32_t perfMetric; 
};

std::vector<CpuCluster> getClusterConfig();

So far looking in all of https://github.com/ARM-software I can see that ARM itself parses the output of /proc/cpuinfo and match the CPU info model names with known model names if big cores ('A15', 'A57', 'A72', 'A73'). That is:

  1. Not future proof.
  2. Doesn't work on Android (cpuinfo on android returns "ARMv8 Processor rev 0 (v8l)" for one cluster and "ARMv8 Processor rev 1 (v8l)" for the other cluster.

Another solution is to parse cpuinfo and identify different model/revision/etc as different clusters. However for example the POCO F2 Pro contains 3 clusters, but following this method only 2 clusters are identified because the 2 Mid and the 1 High core are all the same A77 CPU running at different speeds. CPU-Z runs into this issue.

So far what we're doing is parsing the output of /sys/devices/system/cpu/cpu*/cpufreq/scaling_available_frequencies and grouping CPUs with the same set.

Then sorting them by /sys/devices/system/cpu/cpu*/cpufreq/cpuinfo_max_freq. If 2 clusters have the same max freq, then assumes lower CPU idx is little, higher is big core. It's not fully reliable because it assumes:

  1. Clusters don't have the same scaling_available_frequencies
  2. Their max frequency determines their performance
  3. Their CPU order is relevant

It would be nice if ARM had an official ABI on Android so that his information can be fetched reliably and be future proof. Intel has such library.

Cheers

Failed setting hwcnt reader ioctl.

Hello.
When I was using huawei p40, I found that the mali profiler could not be initialized successfully. I see the following error "Failed setting hwcnt reader ioctl." is output. Is this an error caused by the huawei p40 kernel limitation? If not, how should I solve the problem?

phone mobile:huawei p40
platform:Android 10
log:

2021-04-13 09:33:38.115 26614-26614/~ V/HWCPipe: Mali profiler initialization failed: Failed setting hwcnt reader ioctl.```

Support Mali GPU Frequency and Usage counters

Currently, I think it is not possible for Mali to get GPU Frequency by reading sysfs on Android 10+.
Could you please manage to expose these metrics?

The standardized path in Android for GPU Frequency is, /sys/kernel/gpu/gpu_clock.

These counters are very important for Game performance tuning.

Can i use hwcpipe with 'taskset' instruction?

Hi, I have a question about using hwcpipe with taskset.
I used hwcpipe following readme, but couldn't get CPU cycle when using with taskset.
My code is below.

h.run();
for(int i=0;i<1;i++)
measurements = h.sample();
TFLITE_MINIMAL_CHECK(interpreter->Invoke() == kTfLiteOk);
h.stop();
...
const auto &counter=measurements.cpu->find(hwcpipe::CpuCounter::Instructions);
std::cout << "cycle-float: " << counter->second.get() << std::endl;

After that, I entered 'adb shell taskset 1 [myfile]' and got 0.
When i entered 'adb shell taskset 20 [myfile]', the output was correct.
Can i use hwcpipe with taskset?
Or am i wrong?

Exception "Could not sample hardware counters." thrown for Mali-T760 MP8

I run a lot of device farm tests and have seen this exception thrown by MaliProfiler::sample_counters() on the Samsung Galaxy S6, the Samsung Galaxy S6 Edge, and the Samsung Galaxy Note 5, all running Android 7.0. These devices all have the same GPU, the Mali-T760MP8.

Please advise & many thanks.

Split CPU and GPU instrumentation

Currently we have a single library which does both CPU and GPU instrumentation, despite the two being quite different. For v2.0 we want to design the library so that the backend components are completely decoupled, and buildable in isolation.

build errors

I am running on Windows10, MSVC 2022
I downloaded and built the cmakelists file and it generated a hwcpipe.sln for MSVC. The solution has 2 projects, device and hwcpipe, when building the solution I am getting 228 errors. This seems to be a Linux project as it is asking for Linux include files. Can this library be built for Windows10?

Use of "std::vector" with "const std::pair"

I am trying to compile with gnu g++ 6.2.1 (armv7l), to test HWCPipe in a non-Android platform.

and a small modification were necessary:
mali_counter.h:
65: - const std::vector<const std::pair<const char *, const char *>> _jm_counter_names {
65: + const std::vector<std::pair<const char *, const char *>> _jm_counter_names {
69: - const std::vector<const std::pair<const char *, const char *>> _mmu_counter_names {
69: + const std::vector<std::pair<const char *, const char *>> _mmu_counter_names {

Because of error:
[ 8s] from /home/abuild/rpmbuild/BUILD/HWCPipe-0.0.1/src/mali_counter.cpp:24:
[ 8s] /usr/lib/gcc/armv7l-tizen-linux-gnueabi/6.2.1/include/c++/bits/stl_construct.h: In instantiation of 'void std::_Construct(_T1*, _Args&& ...) [with _T1 = const std::pair<const char*, const char*>; _Args = {const std::pair<const char*, const char*>&}]':
[ 8s] /usr/lib/gcc/armv7l-tizen-linux-gnueabi/6.2.1/include/c++/bits/stl_uninitialized.h:75:18: required from 'static _ForwardIterator std::__uninitialized_copy<_TrivialValueTypes>::__uninit_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = const std::pair<const char*, const char*>; _ForwardIterator = const std::pair<const char, const char*>; bool _TrivialValueTypes = false]'
[ 8s] /usr/lib/gcc/armv7l-tizen-linux-gnueabi/6.2.1/include/c++/bits/stl_uninitialized.h:126:15: required from '_ForwardIterator std::uninitialized_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = const std::pair<const char
, const char*>; _ForwardIterator = const std::pair<const char, const char*>]'
[ 8s] /usr/lib/gcc/armv7l-tizen-linux-gnueabi/6.2.1/include/c++/bits/stl_uninitialized.h:281:37: required from '_ForwardIterator std::__uninitialized_copy_a(_InputIterator, _InputIterator, _ForwardIterator, std::allocator<_Tp>&) [with _InputIterator = const std::pair<const char
, const char*>; _ForwardIterator = const std::pair<const char, const char*>; _Tp = const std::pair<const char, const char*>]'
[ 8s] /usr/lib/gcc/armv7l-tizen-linux-gnueabi/6.2.1/include/c++/bits/stl_vector.h:1288:33: required from 'void std::vector<_Tp, _Alloc>::_M_range_initialize(_ForwardIterator, _ForwardIterator, std::forward_iterator_tag) [with _ForwardIterator = const std::pair<const char*, const char*>; _Tp = const std::pair<const char, const char*>; _Alloc = std::allocator<const std::pair<const char*, const char*> >]'
[ 8s] /usr/lib/gcc/armv7l-tizen-linux-gnueabi/6.2.1/include/c++/bits/stl_vector.h:379:2: required from 'std::vector<_Tp, _Alloc>::vector(std::initializer_list<_Tp>, const allocator_type&) [with _Tp = const std::pair<const char*, const char*>; _Alloc = std::allocator<const std::pair<const char*, const char*> >; std::vector<_Tp, _Alloc>::allocator_type = std::allocator<const std::pair<const char*, const char*> >]'
[ 8s] /home/abuild/rpmbuild/BUILD/HWCPipe-0.0.1/src/mali_counter.h:68:26: required from here
[ 8s] /usr/lib/gcc/armv7l-tizen-linux-gnueabi/6.2.1/include/c++/bits/stl_construct.h:75:13: error: invalid static_cast from type 'const std::pair<const char*, const char*>' to type 'void'
[ 8s] { ::new(static_cast<void*>(__p)) _T1(std::forward<_Args>(__args)...); }
[ 8s] ^~~~~~~~~~~~~~~~~~~~~~~
[ 8s] src/CMakeFiles/hwcpipe.dir/build.make:89: recipe for target 'src/CMakeFiles/hwcpipe.dir/mali_counter.cpp.o' failed

May you consider to change the "const std::pair" to "std:pair"?

thx

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.