Giter VIP home page Giter VIP logo

autoperf's Introduction

Build Status Crates.io docs.rs/autoperf

autoperf

autoperf simplifies the instrumentation of programs with performance counters on Intel machines. Rather than trying to learn how to measure every event and manually programming event values in counter registers or perf, you can use autoperf which will repeatedly run your program until it has measured every single performance event on your machine. autoperf tries to compute a schedule that maximizes the amount of events measured per run, and minimizes the total number of runs while avoiding multiplexing of events on counters.


Background

Performance monitoring units typically distinguish between performance events and counters. Events refer to observations on the micro-architectural level (e.g., a TLB miss, a page-walk etc.), whereas counters are hardware registers that count the occurrence of events. The figure on the right shows the number of different observable events for different Intel micro-architectures. Note that current systems provide a very large choice of possible events to monitor. The number of measurable counters per PMU is limited (typically from two to eight). For example, if the same events are measured on all PMUs on a SkylakeX (Xeon Gold 5120) machine, we can only observe a maximum of 48 different events (without sampling). autoperf simplifies the process of fully measuring and recording every performance event for a given program. In our screen session above, recorded on a SkylakeX machine with ~3500 distinct events, we can see how autoperf automatically runs a program 1357 times while measuring and recording a different set of events in every run.

Installation

autoperf is known to work with Ubuntu 18.04 on Skylake and IvyBridge/SandyBridge architectures. All Intel architectures should work, please file a bug request if it doesn't. autoperf builds on perf from the Linux project and a few other libraries that can be installed using:

$ sudo apt-get update
$ sudo apt-get install likwid cpuid hwloc numactl util-linux

To run the example analysis scripts, you'll need these python3 libraries:

$ pip3 install ascii_graph matplotlib pandas argparse numpy

You'll also need the nightly version of the rust compiler which is best installed using rustup:

$ curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain nightly
$ source $HOME/.cargo/env

autoperf is published on crates.io, so once you have rust and cargo installed, you can get it directly from there:

$ cargo +nightly install autoperf

Or alternatively, clone and build the repository yourself:

$ git clone https://github.com/gz/autoperf.git
$ cd autoperf
$ cargo build --release
$ ./target/release/autoperf --help

autoperf uses perf internally to interface with Linux and the performance counter hardware. perf recommends that the following settings are disabled. Therefore, autoperf will check the values of those configurations and refuse to start if they are not set like below:

sudo sh -c 'echo 0 >> /proc/sys/kernel/kptr_restrict'
sudo sh -c 'echo 0 > /proc/sys/kernel/nmi_watchdog'
sudo sh -c 'echo -1 > /proc/sys/kernel/perf_event_paranoid'

Usage

autoperf has a few commands, use --help to get a better overview of all the options.

Profiling

The profile command instruments a single program by running it multiple times until every performance event is measured. For example,

$ autoperf profile sleep 2

will repeatedly run sleep 2 while measuring different performance events with performance counters every time. Once completed, you will find an out folder with many csv files that contain measurements from individual runs.

Aggregating results

To combine all those runs into a single CSV result file you can use the aggregate command:

$ autoperf aggregate ./out

This will do some sanity checking and produce a results.csv (reduced example) file which contains all the measured data.

Analyze results

Performance events are measured individually on every core (and other monitoring units). The timeseries.py can aggregate events by taking the average, stddef, min, max etc. and producing a time-series matrix (see a reduced example).

python3 analyze/profile/timeseries.py ./out

Now you have all the data, so you can start asking some questions. As an example, the following script tells you how events were correlated when your program was running:

$ python3 analyze/profile/correlation.py ./out
$ open out/correlation_heatmap.png

Event correlation for the autoperf profile sleep 2 command above looks like this (every dot represents the correlation of the timeseries between two measured performance events, this is from a Skylake machine with around 1700 non-zero event measurement): Correlation Heatmap

You can look at individual events too:

python3 analyze/profile/event_detail.py --resultdir ./out --features AVG.OFFCORE_RESPONSE.ALL_RFO.L3_MISS.REMOTE_HIT_FORWARD

Plot events

There are more scripts in the analyze folder to better work with the captured data-sets. Have a look.

What do I use this for?

autoperf allows you to quickly gather lots of performance (or training) data and reason about it quantitatively. For example, we initially developed autoperf to build ML classifiers that the Barrelfish scheduler could use for detecting application slowdown and make better scheduling decisions. autoperf can gather that data to generate such classifiers without requiring domain knowledge about events, aside from how to measure them.

You can read more about our experiments here:

Last but not least, autoperf can potentially be useful in many other scenarios:

  • Find out what performance events are relevant for your workload
  • Analyzing and finding performance issues in your code or with different versions of your code
  • Generate classifiers to detect hardware exploits (side channels/spectre/meltdown etc.)
  • ...

autoperf's People

Contributors

gz 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

Watchers

 avatar  avatar  avatar  avatar

autoperf's Issues

Correlation.py and event_detail.py script

I have successfully generated data in the out file, but I encounter following error while using event_detail script:
File "pandas/_libs/index.pyx", line 70, in pandas._libs.index.IndexEngine.get_loc
File "pandas/_libs/index.pyx", line 101, in pandas._libs.index.IndexEngine.get_loc
File "pandas/_libs/hashtable_class_helper.pxi", line 1675, in pandas._libs.hashtable.PyObjectHashTable.get_item
File "pandas/_libs/hashtable_class_helper.pxi", line 1683, in pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError: 'AVG.OFFCORE_RESPONSE.ALL_RFO.L3_MISS.REMOTE_HIT_FORWARD'

The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/nivedita/Documents/Sem4/GITHUB/autoperf-master/analyze/profile/event_detail.py", line 68, in
make_plot(args.dir, args.features)
File "/home/nivedita/Documents/Sem4/GITHUB/autoperf-master/analyze/profile/event_detail.py", line 56, in make_plot
plot_events(df, features, filename, from_directory)
File "/home/nivedita/Documents/Sem4/GITHUB/autoperf-master/analyze/profile/event_detail.py", line 37, in plot_events
ax1.plot(df[feature], label=feature)
File "/home/nivedita/.local/lib/python3.6/site-packages/pandas/core/frame.py", line 2906, in getitem
indexer = self.columns.get_loc(key)
File "/home/nivedita/.local/lib/python3.6/site-packages/pandas/core/indexes/base.py", line 2900, in get_loc
raise KeyError(key) from err
KeyError: 'AVG.OFFCORE_RESPONSE.ALL_RFO.L3_MISS.REMOTE_HIT_FORWARD'

Moreover, I encountered assertion error while running correlation.py script.

Is there something that I am missing out. Please let me know.
Kindly, answer these queries as well:

  1. Can I analyze multiple codes using autoperf in separate command window. Will it affect my results?
  2. Will there be any affect of background process on the tool? What will be the effect, what can I do to avoid that?

autoperf in 2022 on cascade lake cpu

Describe the bug
I want to use autoperf for my master thesis where I look into the performance of applications with a focus on special hardware-parts. I want to profile a small program on my DUT but autoperf does not produce all of the csv-files. I think it has something to do with the cascade-lake-cpu and autoperf trying to add "fc_mask" to the perf command for "uncore_iio_free_running_5". There are two error-messages that are most important for this issue:

[2022-04-21T13:27:34Z ERROR autoperf::profile] perf command: perf stat -aA -I 250 -x \';\' -o out/1_stat.csv 
-e uncore_m2m_1/name=uncore_m2m_1.UNC_M2M_VERT_RING_BL_IN_USE.DN_EVEN,event=0xaa,umask=0x4/S 
-e uncore_m2m_0/name=uncore_m2m_0.UNC_M2M_VERT_RING_BL_IN_USE.DN_EVEN,event=0xaa,umask=0x4/S 
-e uncore_cha_1/name=uncore_cha_1.UNC_H_HITME_MISS.READ_OR_INV,event=0x60,umask=0x80/S 
-e uncore_cha_8/name=uncore_cha_8.UNC_H_HITME_MISS.READ_OR_INV,event=0x60,umask=0x80/S 
-e uncore_cha_6/name=uncore_cha_6.UNC_H_HITME_MISS.READ_OR_INV,event=0x60,umask=0x80/S 
-e uncore_cha_4/name=uncore_cha_4.UNC_H_HITME_MISS.READ_OR_INV,event=0x60,umask=0x80/S 
-e uncore_cha_2/name=uncore_cha_2.UNC_H_HITME_MISS.READ_OR_INV,event=0x60,umask=0x80/S 
-e uncore_cha_0/name=uncore_cha_0.UNC_H_HITME_MISS.READ_OR_INV,event=0x60,umask=0x80/S 
-e uncore_cha_9/name=uncore_cha_9.UNC_H_HITME_MISS.READ_OR_INV,event=0x60,umask=0x80/S 
-e uncore_cha_7/name=uncore_cha_7.UNC_H_HITME_MISS.READ_OR_INV,event=0x60,umask=0x80/S 
-e uncore_cha_5/name=uncore_cha_5.UNC_H_HITME_MISS.READ_OR_INV,event=0x60,umask=0x80/S 
-e uncore_cha_3/name=uncore_cha_3.UNC_H_HITME_MISS.READ_OR_INV,event=0x60,umask=0x80/S 
-e uncore_m3upi_0/name=uncore_m3upi_0.UNC_M3UPI_TxC_BL_FLQ_INSERTS.VN0_RSP,event=0x2e,umask=0x8/S 
-e uncore_m3upi_1/name=uncore_m3upi_1.UNC_M3UPI_TxC_BL_FLQ_INSERTS.VN0_RSP,event=0x2e,umask=0x8/S 
-e uncore_iio_free_running_5/name=uncore_iio_free_running_5.UNC_IIO_TXN_REQ_BY_CPU.CFG_READ.PART1,event=0xc1,umask=0x40,fc_mask=0x7,ch_mask=0x2/S 
-e uncore_iio_free_running_3/name=uncore_iio_free_running_3.UNC_IIO_TXN_REQ_BY_CPU.CFG_READ.PART1,event=0xc1,umask=0x40,fc_mask=0x7,ch_mask=0x2/S 
-e uncore_iio_free_running_1/name=uncore_iio_free_running_1.UNC_IIO_TXN_REQ_BY_CPU.CFG_READ.PART1,event=0xc1,umask=0x40,fc_mask=0x7,ch_mask=0x2/S 
-e uncore_iio_4/name=uncore_iio_4.UNC_IIO_TXN_REQ_BY_CPU.CFG_READ.PART1,event=0xc1,umask=0x40,fc_mask=0x7,ch_mask=0x2/S 
-e uncore_iio_2/name=uncore_iio_2.UNC_IIO_TXN_REQ_BY_CPU.CFG_READ.PART1,event=0xc1,umask=0x40,fc_mask=0x7,ch_mask=0x2/S 
-e uncore_iio_0/name=uncore_iio_0.UNC_IIO_TXN_REQ_BY_CPU.CFG_READ.PART1,event=0xc1,umask=0x40,fc_mask=0x7,ch_mask=0x2/S 
-e uncore_iio_free_running_4/name=uncore_iio_free_running_4.UNC_IIO_TXN_REQ_BY_CPU.CFG_READ.PART1,event=0xc1,umask=0x40,fc_mask=0x7,ch_mask=0x2/S 
-e uncore_iio_free_running_2/name=uncore_iio_free_running_2.UNC_IIO_TXN_REQ_BY_CPU.CFG_READ.PART1,event=0xc1,umask=0x40,fc_mask=0x7,ch_mask=0x2/S 
-e uncore_iio_5/name=uncore_iio_5.UNC_IIO_TXN_REQ_BY_CPU.CFG_READ.PART1,event=0xc1,umask=0x40,fc_mask=0x7,ch_mask=0x2/S 
-e uncore_iio_free_running_0/name=uncore_iio_free_running_0.UNC_IIO_TXN_REQ_BY_CPU.CFG_READ.PART1,event=0xc1,umask=0x40,fc_mask=0x7,ch_mask=0x2/S 
-e uncore_iio_3/name=uncore_iio_3.UNC_IIO_TXN_REQ_BY_CPU.CFG_READ.PART1,event=0xc1,umask=0x40,fc_mask=0x7,ch_mask=0x2/S 
-e uncore_iio_1/name=uncore_iio_1.UNC_IIO_TXN_REQ_BY_CPU.CFG_READ.PART1,event=0xc1,umask=0x40,fc_mask=0x7,ch_mask=0x2/S 
-e cpu/name=OFFCORE_RESPONSE.PF_L3_RFO.L3_MISS.REMOTE_HIT_FORWARD,event=0xb7,umask=0x1,offcore_rsp=0x83fc00100/S 
-e uncore_imc_5/name=uncore_imc_5.UNC_M_WR_CAS_RANK1.BANK9,event=0xb9,umask=0x9/S 
-e uncore_imc_3/name=uncore_imc_3.UNC_M_WR_CAS_RANK1.BANK9,event=0xb9,umask=0x9/S 
-e uncore_imc_1/name=uncore_imc_1.UNC_M_WR_CAS_RANK1.BANK9,event=0xb9,umask=0x9/S 
-e uncore_imc_4/name=uncore_imc_4.UNC_M_WR_CAS_RANK1.BANK9,event=0xb9,umask=0x9/S 
-e uncore_imc_2/name=uncore_imc_2.UNC_M_WR_CAS_RANK1.BANK9,event=0xb9,umask=0x9/S 
-e uncore_imc_0/name=uncore_imc_0.UNC_M_WR_CAS_RANK1.BANK9,event=0xb9,umask=0x9/S 
-e cpu/name=OFFCORE_RESPONSE.PF_L3_DATA_RD.L3_MISS.REMOTE_HIT_FORWARD,event=0xbb,umask=0x1,offcore_rsp=0x83fc00080/S 
-e uncore_cha_1/name=uncore_cha_1.UNC_CHA_TOR_INSERTS.ALL_MISS,event=0x35,umask=0x25/S 
-e uncore_cha_8/name=uncore_cha_8.UNC_CHA_TOR_INSERTS.ALL_MISS,event=0x35,umask=0x25/S 
-e uncore_cha_6/name=uncore_cha_6.UNC_CHA_TOR_INSERTS.ALL_MISS,event=0x35,umask=0x25/S 
-e uncore_cha_4/name=uncore_cha_4.UNC_CHA_TOR_INSERTS.ALL_MISS,event=0x35,umask=0x25/S 
-e uncore_cha_2/name=uncore_cha_2.UNC_CHA_TOR_INSERTS.ALL_MISS,event=0x35,umask=0x25/S 
-e uncore_cha_0/name=uncore_cha_0.UNC_CHA_TOR_INSERTS.ALL_MISS,event=0x35,umask=0x25/S 
-e uncore_cha_9/name=uncore_cha_9.UNC_CHA_TOR_INSERTS.ALL_MISS,event=0x35,umask=0x25/S 
-e uncore_cha_7/name=uncore_cha_7.UNC_CHA_TOR_INSERTS.ALL_MISS,event=0x35,umask=0x25/S 
-e uncore_cha_5/name=uncore_cha_5.UNC_CHA_TOR_INSERTS.ALL_MISS,event=0x35,umask=0x25/S 
-e uncore_cha_3/name=uncore_cha_3.UNC_CHA_TOR_INSERTS.ALL_MISS,event=0x35,umask=0x25/S 
-e uncore_cha_1/name=uncore_cha_1.UNC_CHA_LLC_LOOKUP.WRITE,event=0x34,umask=0x5/S 
-e uncore_cha_8/name=uncore_cha_8.UNC_CHA_LLC_LOOKUP.WRITE,event=0x34,umask=0x5/S 
-e uncore_cha_6/name=uncore_cha_6.UNC_CHA_LLC_LOOKUP.WRITE,event=0x34,umask=0x5/S 
-e uncore_cha_4/name=uncore_cha_4.UNC_CHA_LLC_LOOKUP.WRITE,event=0x34,umask=0x5/S 
-e uncore_cha_2/name=uncore_cha_2.UNC_CHA_LLC_LOOKUP.WRITE,event=0x34,umask=0x5/S 
-e uncore_cha_0/name=uncore_cha_0.UNC_CHA_LLC_LOOKUP.WRITE,event=0x34,umask=0x5/S 
-e uncore_cha_9/name=uncore_cha_9.UNC_CHA_LLC_LOOKUP.WRITE,event=0x34,umask=0x5/S 
-e uncore_cha_7/name=uncore_cha_7.UNC_CHA_LLC_LOOKUP.WRITE,event=0x34,umask=0x5/S 
-e uncore_cha_5/name=uncore_cha_5.UNC_CHA_LLC_LOOKUP.WRITE,event=0x34,umask=0x5/S 
-e uncore_cha_3/name=uncore_cha_3.UNC_CHA_LLC_LOOKUP.WRITE,event=0x34,umask=0x5/S 
-e uncore_upi_1/name=uncore_upi_1.UNC_UPI_TxL_HDR_MATCH.NCB,event=0x4,umask=0xe/S 
-e uncore_upi_0/name=uncore_upi_0.UNC_UPI_TxL_HDR_MATCH.NCB,event=0x4,umask=0xe/S 
-e uncore_irp_3/name=uncore_irp_3.UNC_I_SNOOP_RESP.SNPCODE,event=0x12,umask=0x10/S 
-e uncore_irp_1/name=uncore_irp_1.UNC_I_SNOOP_RESP.SNPCODE,event=0x12,umask=0x10/S 
-e uncore_irp_4/name=uncore_irp_4.UNC_I_SNOOP_RESP.SNPCODE,event=0x12,umask=0x10/S 
-e uncore_irp_2/name=uncore_irp_2.UNC_I_SNOOP_RESP.SNPCODE,event=0x12,umask=0x10/S 
-e uncore_irp_0/name=uncore_irp_0.UNC_I_SNOOP_RESP.SNPCODE,event=0x12,umask=0x10/S 
-e uncore_irp_5/name=uncore_irp_5.UNC_I_SNOOP_RESP.SNPCODE,event=0x12,umask=0x10/S 
-e uncore_ubox/name=uncore_ubox.UNC_U_EVENT_MSG.IPI_RCVD,event=0x42,umask=0x4/S 
-e uncore_cha_1/name=uncore_cha_1.UNC_CHA_UPI_CREDIT_OCCUPANCY.VN0_BL_NCB,event=0x3b,umask=0x40/S 
-e uncore_cha_8/name=uncore_cha_8.UNC_CHA_UPI_CREDIT_OCCUPANCY.VN0_BL_NCB,event=0x3b,umask=0x40/S 
-e uncore_cha_6/name=uncore_cha_6.UNC_CHA_UPI_CREDIT_OCCUPANCY.VN0_BL_NCB,event=0x3b,umask=0x40/S 
-e uncore_cha_4/name=uncore_cha_4.UNC_CHA_UPI_CREDIT_OCCUPANCY.VN0_BL_NCB,event=0x3b,umask=0x40/S 
-e uncore_cha_2/name=uncore_cha_2.UNC_CHA_UPI_CREDIT_OCCUPANCY.VN0_BL_NCB,event=0x3b,umask=0x40/S 
-e uncore_cha_0/name=uncore_cha_0.UNC_CHA_UPI_CREDIT_OCCUPANCY.VN0_BL_NCB,event=0x3b,umask=0x40/S 
-e uncore_cha_9/name=uncore_cha_9.UNC_CHA_UPI_CREDIT_OCCUPANCY.VN0_BL_NCB,event=0x3b,umask=0x40/S 
-e uncore_cha_7/name=uncore_cha_7.UNC_CHA_UPI_CREDIT_OCCUPANCY.VN0_BL_NCB,event=0x3b,umask=0x40/S 
-e uncore_cha_5/name=uncore_cha_5.UNC_CHA_UPI_CREDIT_OCCUPANCY.VN0_BL_NCB,event=0x3b,umask=0x40/S 
-e uncore_cha_3/name=uncore_cha_3.UNC_CHA_UPI_CREDIT_OCCUPANCY.VN0_BL_NCB,event=0x3b,umask=0x40/S 
-e uncore_iio_free_running_5/name=uncore_iio_free_running_5.UNC_IIO_VTD_ACCESS.TLB1_MISS,event=0x41,umask=0x80/S 
-e uncore_iio_free_running_3/name=uncore_iio_free_running_3.UNC_IIO_VTD_ACCESS.TLB1_MISS,event=0x41,umask=0x80/S 
-e uncore_iio_free_running_1/name=uncore_iio_free_running_1.UNC_IIO_VTD_ACCESS.TLB1_MISS,event=0x41,umask=0x80/S 
-e uncore_iio_4/name=uncore_iio_4.UNC_IIO_VTD_ACCESS.TLB1_MISS,event=0x41,umask=0x80/S 
-e uncore_iio_2/name=uncore_iio_2.UNC_IIO_VTD_ACCESS.TLB1_MISS,event=0x41,umask=0x80/S 
-e uncore_iio_0/name=uncore_iio_0.UNC_IIO_VTD_ACCESS.TLB1_MISS,event=0x41,umask=0x80/S 
-e uncore_iio_free_running_4/name=uncore_iio_free_running_4.UNC_IIO_VTD_ACCESS.TLB1_MISS,event=0x41,umask=0x80/S 
-e uncore_iio_free_running_2/name=uncore_iio_free_running_2.UNC_IIO_VTD_ACCESS.TLB1_MISS,event=0x41,umask=0x80/S 
-e uncore_iio_5/name=uncore_iio_5.UNC_IIO_VTD_ACCESS.TLB1_MISS,event=0x41,umask=0x80/S 
-e uncore_iio_free_running_0/name=uncore_iio_free_running_0.UNC_IIO_VTD_ACCESS.TLB1_MISS,event=0x41,umask=0x80/S 
-e uncore_iio_3/name=uncore_iio_3.UNC_IIO_VTD_ACCESS.TLB1_MISS,event=0x41,umask=0x80/S 
-e uncore_iio_1/name=uncore_iio_1.UNC_IIO_VTD_ACCESS.TLB1_MISS,event=0x41,umask=0x80/S 
-e uncore_pcu/name=uncore_pcu.UNC_P_FREQ_MAX_LIMIT_THERMAL_CYCLES,event=0x4/S 
-e uncore_ubox/name=uncore_ubox.UNC_U_PHOLD_CYCLES.ASSERT_TO_ACK,event=0x45,umask=0x1/S echo 2 got unknown exit status was: exit status: 129

when running the command from the next step. (FYI: I edited some linebreaks on the -e in to make it more readable)

And when I run the command directly on my machine:

     0.250336972'CPU0'253.38'msec'cpu-clock'253383915'100.00'1.014'CPUs utilized
     0.250336972'CPU1'253.41'msec'cpu-clock'253406764'100.00'1.014'CPUs utilized
     0.250336972'CPU2'253.43'msec'cpu-clock'253433508'100.00'1.014'CPUs utilized
     0.250336972'CPU3'253.47'msec'cpu-clock'253465354'100.00'1.014'CPUs utilized
     0.250336972'CPU4'253.50'msec'cpu-clock'253504899'100.00'1.014'CPUs utilized
     0.250336972'CPU5'253.55'msec'cpu-clock'253550015'100.00'1.014'CPUs utilized
     0.250336972'CPU6'253.57'msec'cpu-clock'253573284'100.00'1.014'CPUs utilized
     0.250336972'CPU7'253.61'msec'cpu-clock'253614609'100.00'1.014'CPUs utilized
     0.250336972'CPU8'253.65'msec'cpu-clock'253646531'100.00'1.015'CPUs utilized
     0.250336972'CPU9'253.69'msec'cpu-clock'253692290'100.00'1.015'CPUs utilized
     0.250336972'CPU10'253.73'msec'cpu-clock'253728630'100.00'1.015'CPUs utilized
     0.250336972'CPU11'253.77'msec'cpu-clock'253771684'100.00'1.015'CPUs utilized
     0.250336972'CPU12'253.83'msec'cpu-clock'253828433'100.00'1.015'CPUs utilized
     0.250336972'CPU13'253.86'msec'cpu-clock'253858548'100.00'1.015'CPUs utilized
     0.250336972'CPU14'253.89'msec'cpu-clock'253894896'100.00'1.016'CPUs utilized
     0.250336972'CPU15'253.93'msec'cpu-clock'253925943'100.00'1.016'CPUs utilized
     0.250336972'CPU16'253.96'msec'cpu-clock'253955767'100.00'1.016'CPUs utilized
     0.250336972'CPU17'253.99'msec'cpu-clock'253993320'100.00'1.016'CPUs utilized
     0.250336972'CPU18'254.02'msec'cpu-clock'254023594'100.00'1.016'CPUs utilized
     0.250336972'CPU19'254.04'msec'cpu-clock'254042196'100.00'1.016'CPUs utilized
     0.250336972'CPU20'254.07'msec'cpu-clock'254068500'100.00'1.016'CPUs utilized
     0.250336972'CPU21'254.11'msec'cpu-clock'254112012'100.00'1.016'CPUs utilized
     0.250336972'CPU22'254.15'msec'cpu-clock'254151445'100.00'1.017'CPUs utilized
     0.250336972'CPU23'254.19'msec'cpu-clock'254192292'100.00'1.017'CPUs utilized
     0.250336972'CPU24'254.23'msec'cpu-clock'254233082'100.00'1.017'CPUs utilized
     0.250336972'CPU25'254.28'msec'cpu-clock'254284899'100.00'1.017'CPUs utilized
     0.250336972'CPU26'254.32'msec'cpu-clock'254318610'100.00'1.017'CPUs utilized
     0.250336972'CPU27'254.38'msec'cpu-clock'254375920'100.00'1.018'CPUs utilized
     0.250336972'CPU28'254.42'msec'cpu-clock'254417661'100.00'1.018'CPUs utilized
     0.250336972'CPU29'254.46'msec'cpu-clock'254460412'100.00'1.018'CPUs utilized
     0.250336972'CPU30'254.51'msec'cpu-clock'254505361'100.00'1.018'CPUs utilized
     0.250336972'CPU31'254.55'msec'cpu-clock'254545200'100.00'1.018'CPUs utilized
     0.250336972'CPU32'254.59'msec'cpu-clock'254588953'100.00'1.018'CPUs utilized
     0.250336972'CPU33'254.63'msec'cpu-clock'254627548'100.00'1.019'CPUs utilized
     0.250336972'CPU34'254.61'msec'cpu-clock'254611511'100.00'1.018'CPUs utilized
     0.250336972'CPU35'254.58'msec'cpu-clock'254580472'100.00'1.018'CPUs utilized
     0.250336972'CPU36'254.55'msec'cpu-clock'254550147'100.00'1.018'CPUs utilized
     0.250336972'CPU37'254.51'msec'cpu-clock'254507023'100.00'1.018'CPUs utilized
     0.250336972'CPU38'254.45'msec'cpu-clock'254454388'100.00'1.018'CPUs utilized
     0.250336972'CPU39'254.41'msec'cpu-clock'254413817'100.00'1.018'CPUs utilized
     0.250336972'CPU0'5''context-switches'253382550'100.00'19.733'/sec
     0.250336972'CPU1'5''context-switches'253405650'100.00'19.731'/sec
     0.250336972'CPU2'3''context-switches'253433022'100.00'11.837'/sec
     0.250336972'CPU3'3''context-switches'253464804'100.00'11.836'/sec
     0.250336972'CPU4'3''context-switches'253504897'100.00'11.834'/sec
     0.250336972'CPU5'5''context-switches'253549701'100.00'19.720'/sec
     0.250336972'CPU6'5''context-switches'253573316'100.00'19.718'/sec
     0.250336972'CPU7'3''context-switches'253614289'100.00'11.829'/sec
     0.250336972'CPU8'3''context-switches'253645915'100.00'11.827'/sec
     0.250336972'CPU9'3''context-switches'253691972'100.00'11.825'/sec
     0.250336972'CPU10'3''context-switches'253728482'100.00'11.824'/sec
     0.250336972'CPU11'3''context-switches'253773216'100.00'11.822'/sec
     0.250336972'CPU12'21''context-switches'253827935'100.00'82.733'/sec
     0.250336972'CPU13'3''context-switches'253857756'100.00'11.818'/sec
     0.250336972'CPU14'3''context-switches'253894388'100.00'11.816'/sec
     0.250336972'CPU15'3''context-switches'253925218'100.00'11.814'/sec
     0.250336972'CPU16'3''context-switches'253955436'100.00'11.813'/sec
     0.250336972'CPU17'3''context-switches'253993041'100.00'11.811'/sec
     0.250336972'CPU18'3''context-switches'254022485'100.00'11.810'/sec
     0.250336972'CPU19'3''context-switches'254040402'100.00'11.809'/sec
     0.250336972'CPU20'5''context-switches'254069457'100.00'19.680'/sec
     0.250336972'CPU21'6''context-switches'254112060'100.00'23.612'/sec
     0.250336972'CPU22'3''context-switches'254151635'100.00'11.804'/sec
     0.250336972'CPU23'3''context-switches'254192801'100.00'11.802'/sec
     0.250336972'CPU24'5''context-switches'254233395'100.00'19.667'/sec
     0.250336972'CPU25'3''context-switches'254285361'100.00'11.798'/sec
     0.250336972'CPU26'3''context-switches'254318919'100.00'11.796'/sec
     0.250336972'CPU27'3''context-switches'254376153'100.00'11.794'/sec
     0.250336972'CPU28'3''context-switches'254418061'100.00'11.792'/sec
     0.250336972'CPU29'5''context-switches'254460933'100.00'19.649'/sec
     0.250336972'CPU30'3''context-switches'254505827'100.00'11.788'/sec
     0.250336972'CPU31'3''context-switches'254545575'100.00'11.786'/sec
     0.250336972'CPU32'3''context-switches'254589255'100.00'11.784'/sec
     0.250336972'CPU33'3''context-switches'254627901'100.00'11.782'/sec
     0.250336972'CPU34'3''context-switches'254610516'100.00'11.783'/sec
     0.250336972'CPU35'3''context-switches'254579341'100.00'11.784'/sec
     0.250336972'CPU36'3''context-switches'254548912'100.00'11.786'/sec
     0.250336972'CPU37'3''context-switches'254505671'100.00'11.788'/sec
     0.250336972'CPU38'5''context-switches'254453648'100.00'19.650'/sec
     0.250336972'CPU39'5''context-switches'254411504'100.00'19.653'/sec
     0.250336972'CPU0'1''cpu-migrations'253381598'100.00'3.947'/sec
     0.250336972'CPU1'1''cpu-migrations'253405027'100.00'3.946'/sec
     0.250336972'CPU2'1''cpu-migrations'253432499'100.00'3.946'/sec
     0.250336972'CPU3'1''cpu-migrations'253464138'100.00'3.945'/sec
     0.250336972'CPU4'1''cpu-migrations'253504696'100.00'3.945'/sec
     0.250336972'CPU5'1''cpu-migrations'253548775'100.00'3.944'/sec
     0.250336972'CPU6'1''cpu-migrations'253572827'100.00'3.944'/sec
     0.250336972'CPU7'1''cpu-migrations'253613564'100.00'3.943'/sec
     0.250336972'CPU8'1''cpu-migrations'253645312'100.00'3.942'/sec
     0.250336972'CPU9'1''cpu-migrations'253691353'100.00'3.942'/sec
     0.250336972'CPU10'1''cpu-migrations'253728320'100.00'3.941'/sec
     0.250336972'CPU11'1''cpu-migrations'253773435'100.00'3.941'/sec
     0.250336972'CPU12'1''cpu-migrations'253826875'100.00'3.940'/sec
     0.250336972'CPU13'1''cpu-migrations'253857244'100.00'3.939'/sec
     0.250336972'CPU14'1''cpu-migrations'253893497'100.00'3.939'/sec
     0.250336972'CPU15'1''cpu-migrations'253924520'100.00'3.938'/sec
     0.250336972'CPU16'1''cpu-migrations'253954425'100.00'3.938'/sec
     0.250336972'CPU17'1''cpu-migrations'253992327'100.00'3.937'/sec
     0.250336972'CPU18'1''cpu-migrations'254021586'100.00'3.937'/sec
     0.250336972'CPU19'1''cpu-migrations'254039223'100.00'3.936'/sec
     0.250336972'CPU20'1''cpu-migrations'254069317'100.00'3.936'/sec
     0.250336972'CPU21'1''cpu-migrations'254111520'100.00'3.935'/sec
     0.250336972'CPU22'1''cpu-migrations'254151421'100.00'3.935'/sec
     0.250336972'CPU23'1''cpu-migrations'254192412'100.00'3.934'/sec
     0.250336972'CPU24'1''cpu-migrations'254233340'100.00'3.933'/sec
     0.250336972'CPU25'1''cpu-migrations'254284769'100.00'3.933'/sec
     0.250336972'CPU26'1''cpu-migrations'254318707'100.00'3.932'/sec
     0.250336972'CPU27'1''cpu-migrations'254375347'100.00'3.931'/sec
     0.250336972'CPU28'1''cpu-migrations'254417587'100.00'3.931'/sec
     0.250336972'CPU29'1''cpu-migrations'254460418'100.00'3.930'/sec
     0.250336972'CPU30'1''cpu-migrations'254505333'100.00'3.929'/sec
     0.250336972'CPU31'1''cpu-migrations'254545365'100.00'3.929'/sec
     0.250336972'CPU32'1''cpu-migrations'254588844'100.00'3.928'/sec
     0.250336972'CPU33'1''cpu-migrations'254627424'100.00'3.927'/sec
     0.250336972'CPU34'1''cpu-migrations'254609951'100.00'3.928'/sec
     0.250336972'CPU35'1''cpu-migrations'254578898'100.00'3.928'/sec
     0.250336972'CPU36'1''cpu-migrations'254548252'100.00'3.929'/sec
     0.250336972'CPU37'1''cpu-migrations'254505084'100.00'3.929'/sec
     0.250336972'CPU38'1''cpu-migrations'254453223'100.00'3.930'/sec
     0.250336972'CPU39'1''cpu-migrations'254410081'100.00'3.931'/sec
     0.250336972'CPU0'0''page-faults'253380625'100.00'0.000'/sec
     0.250336972'CPU1'0''page-faults'253404508'100.00'0.000'/sec
     0.250336972'CPU2'0''page-faults'253431891'100.00'0.000'/sec
     0.250336972'CPU3'0''page-faults'253463551'100.00'0.000'/sec
     0.250336972'CPU4'0''page-faults'253504682'100.00'0.000'/sec
     0.250336972'CPU5'0''page-faults'253547845'100.00'0.000'/sec
     0.250336972'CPU6'0''page-faults'253572565'100.00'0.000'/sec
     0.250336972'CPU7'0''page-faults'253613055'100.00'0.000'/sec
     0.250336972'CPU8'0''page-faults'253644856'100.00'0.000'/sec
     0.250336972'CPU9'0''page-faults'253690850'100.00'0.000'/sec
     0.250336972'CPU10'0''page-faults'253727835'100.00'0.000'/sec
     0.250336972'CPU11'0''page-faults'253773613'100.00'0.000'/sec
     0.250336972'CPU12'0''page-faults'253825949'100.00'0.000'/sec
     0.250336972'CPU13'0''page-faults'253856146'100.00'0.000'/sec
     0.250336972'CPU14'0''page-faults'253893073'100.00'0.000'/sec
     0.250336972'CPU15'0''page-faults'253924071'100.00'0.000'/sec
     0.250336972'CPU16'0''page-faults'253953728'100.00'0.000'/sec
     0.250336972'CPU17'0''page-faults'253991608'100.00'0.000'/sec
     0.250336972'CPU18'0''page-faults'254020992'100.00'0.000'/sec
     0.250336972'CPU19'0''page-faults'254037872'100.00'0.000'/sec
     0.250336972'CPU20'0''page-faults'254069309'100.00'0.000'/sec
     0.250336972'CPU21'0''page-faults'254111180'100.00'0.000'/sec
     0.250336972'CPU22'0''page-faults'254150946'100.00'0.000'/sec
     0.250336972'CPU23'0''page-faults'254192175'100.00'0.000'/sec
     0.250336972'CPU24'0''page-faults'254233219'100.00'0.000'/sec
     0.250336972'CPU25'0''page-faults'254284327'100.00'0.000'/sec
     0.250336972'CPU26'0''page-faults'254318643'100.00'0.000'/sec
     0.250336972'CPU27'0''page-faults'254374950'100.00'0.000'/sec
     0.250336972'CPU28'0''page-faults'254416897'100.00'0.000'/sec
     0.250336972'CPU29'0''page-faults'254459858'100.00'0.000'/sec
     0.250336972'CPU30'0''page-faults'254504863'100.00'0.000'/sec
     0.250336972'CPU31'0''page-faults'254545125'100.00'0.000'/sec
     0.250336972'CPU32'0''page-faults'254588396'100.00'0.000'/sec
     0.250336972'CPU33'0''page-faults'254626763'100.00'0.000'/sec
     0.250336972'CPU34'0''page-faults'254609295'100.00'0.000'/sec
     0.250336972'CPU35'0''page-faults'254578272'100.00'0.000'/sec
     0.250336972'CPU36'0''page-faults'254547890'100.00'0.000'/sec
     0.250336972'CPU37'0''page-faults'254504449'100.00'0.000'/sec
     0.250336972'CPU38'0''page-faults'254452645'100.00'0.000'/sec
     0.250336972'CPU39'0''page-faults'254408704'100.00'0.000'/sec
     0.250336972'CPU0'322896''cycles'253373543'100.00'0.001'GHz
     0.250336972'CPU1'552890''cycles'253397356'100.00'0.002'GHz
     0.250336972'CPU2'157846''cycles'253424729'100.00'0.001'GHz
     0.250336972'CPU3'135269''cycles'253456979'100.00'0.001'GHz
     0.250336972'CPU4'265940''cycles'253501712'100.00'0.001'GHz
     0.250336972'CPU5'133968''cycles'253540769'100.00'0.001'GHz
     0.250336972'CPU6'196795''cycles'253569355'100.00'0.001'GHz
     0.250336972'CPU7'88479''cycles'253606044'100.00'0.000'GHz
     0.250336972'CPU8'90582''cycles'253637839'100.00'0.000'GHz
     0.250336972'CPU9'126860''cycles'253683537'100.00'0.001'GHz
     0.250336972'CPU10'102766''cycles'253721075'100.00'0.000'GHz
     0.250336972'CPU11'360853''cycles'253770386'100.00'0.001'GHz
     0.250336972'CPU12'708656''cycles'253818979'100.00'0.003'GHz
     0.250336972'CPU13'89732''cycles'253848558'100.00'0.000'GHz
     0.250336972'CPU14'103195''cycles'253886182'100.00'0.000'GHz
     0.250336972'CPU15'102310''cycles'253917140'100.00'0.000'GHz
     0.250336972'CPU16'100509''cycles'253946409'100.00'0.000'GHz
     0.250336972'CPU17'101410''cycles'253984249'100.00'0.000'GHz
     0.250336972'CPU18'124465''cycles'254013776'100.00'0.000'GHz
     0.250336972'CPU19'150702''cycles'254030304'100.00'0.001'GHz
     0.250336972'CPU20'177209''cycles'254063043'100.00'0.001'GHz
     0.250336972'CPU21'206835''cycles'254104920'100.00'0.001'GHz
     0.250336972'CPU22'277082''cycles'254144553'100.00'0.001'GHz
     0.250336972'CPU23'102421''cycles'254185694'100.00'0.000'GHz
     0.250336972'CPU24'550177''cycles'254230657'100.00'0.002'GHz
     0.250336972'CPU25'94379''cycles'254278016'100.00'0.000'GHz
     0.250336972'CPU26'193472''cycles'254315642'100.00'0.001'GHz
     0.250336972'CPU27'105738''cycles'254368667'100.00'0.000'GHz
     0.250336972'CPU28'100077''cycles'254410528'100.00'0.000'GHz
     0.250336972'CPU29'274433''cycles'254453379'100.00'0.001'GHz
     0.250336972'CPU30'95374''cycles'254498076'100.00'0.000'GHz
     0.250336972'CPU31'721243''cycles'254538713'100.00'0.003'GHz
     0.250336972'CPU32'169377''cycles'254579319'100.00'0.001'GHz
     0.250336972'CPU33'93736''cycles'254620589'100.00'0.000'GHz
     0.250336972'CPU34'111501''cycles'254602156'100.00'0.000'GHz
     0.250336972'CPU35'110685''cycles'254570739'100.00'0.000'GHz
     0.250336972'CPU36'108921''cycles'254540372'100.00'0.000'GHz
     0.250336972'CPU37'108387''cycles'254496890'100.00'0.000'GHz
     0.250336972'CPU38'181390''cycles'254445145'100.00'0.001'GHz
     0.250336972'CPU39'267655''cycles'254400748'100.00'0.001'GHz

And when I only run a part of the command:

perf stat -aA -I 250 -x ';' -o out/1_stat.csv \
-e uncore_iio_free_running_5/name=uncore_iio_free_running_5.UNC_IIO_TXN_REQ_BY_CPU.CFG_READ.PART1,event=0xc1,umask=0x40,fc_mask=0x7
echo 2
event syntax error: '..x40,fc_mask=0x7'
                                  \___ parser error
Run 'perf list' for a list of valid events

 Usage: perf stat [<options>] [<command>]

    -e, --event <event>   event selector. use 'perf list' to list available events
2

To Reproduce
Steps to reproduce the behavior:

  1. Run autoperf with ./target/release/autoperf profile echo 2 on a cascade lake cpu

Machine (please complete the following information):

  • Linux version: Linux 5.15.0-25-generic #25-Ubuntu SMP Wed Mar 30 15:54:22 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
  • Machine:
    cpuidout.txt
  • perf version: perf version 5.15.30
  • autoperf version: 0.2 but my fork where I updated two or three dependencies to compile it and fixed one or two things.
  • output of:
breakpoint   intel_bts	power	      uncore_cha_1  uncore_cha_5  uncore_cha_9	uncore_iio_3		   uncore_iio_free_running_1  uncore_iio_free_running_5  uncore_imc_3  uncore_irp_1  uncore_irp_5     uncore_m2pcie_1  uncore_ubox
cpu	     intel_pt	software      uncore_cha_2  uncore_cha_6  uncore_iio_0	uncore_iio_4		   uncore_iio_free_running_2  uncore_imc_0		 uncore_imc_4  uncore_irp_2  uncore_m2m_0     uncore_m3upi_0   uncore_upi_0
cstate_core  kprobe	tracepoint    uncore_cha_3  uncore_cha_7  uncore_iio_1	uncore_iio_5		   uncore_iio_free_running_3  uncore_imc_1		 uncore_imc_5  uncore_irp_3  uncore_m2m_1     uncore_m3upi_1   uncore_upi_1
cstate_pkg   msr	uncore_cha_0  uncore_cha_4  uncore_cha_8  uncore_iio_2	uncore_iio_free_running_0  uncore_iio_free_running_4  uncore_imc_2		 uncore_irp_0  uncore_irp_4  uncore_m2pcie_0  uncore_pcu       uprobe

Additional context
I forked autoperf to try and make it compileable (and partly useable) again. That worked, I can make a pr if you want to.
I would be more than happy to fix these things myself (and make a pr) if you would point me into the right direction.

Also I would be happy to learn how to mention your work/autoperf if I end up using it.

Aggregate fails on my computer.

Describe the bug

Aggregate fails with the following error.

thread 'main' panicked at 'Can't decode line Failed converting '100,00' from str..', /home/paul/.cargo/registry/src/github.com-1ecc6299db9ec823/autoperf-0.9.2/src/aggregate.rs:204:25
note: Run with `RUST_BACKTRACE=1` environment varia

I work on linux and may have a partial french locale. (using comma as decimal separator.)

Here is a sample of one of the csv file in output.

# started on Thu May  2 10:04:18 2019

     0.250269405 ;CPU0 ;312998921 ; ;OFFCORE_REQUESTS_OUTSTANDING.DEMAND_RFO ;250166318 ;100,00 ; ;
     0.250269405 ;CPU1 ;152645003 ; ;OFFCORE_REQUESTS_OUTSTANDING.DEMAND_RFO ;250161346 ;100,00 ; ;
     0.250269405 ;CPU2 ;15724529 ; ;OFFCORE_REQUESTS_OUTSTANDING.DEMAND_RFO ;250155188 ;100,00 ; ;
     0.250269405 ;CPU3 ;145700633 ; ;OFFCORE_REQUESTS_OUTSTANDING.DEMAND_RFO ;250150265 ;100,00 ; ;
     0.250269405 ;CPU4 ;381577068 ; ;OFFCORE_REQUESTS_OUTSTANDING.DEMAND_RFO ;250186825 ;100,00 ; ;
     0.250269405 ;CPU5 ;182555600 ; ;OFFCORE_REQUESTS_OUTSTANDING.DEMAND_RFO ;250186021 ;100,00 ; ;
     0.250269405 ;CPU6 ;6933341 ; ;OFFCORE_REQUESTS_OUTSTANDING.DEMAND_RFO ;250182045 ;100,00 ; ;
     0.250269405 ;CPU7 ;39118411 ; ;OFFCORE_REQUESTS_OUTSTANDING.DEMAND_RFO ;250178195 ;100,00 ; ;
     0.462766311 ;CPU0 ;7313894 ; ;OFFCORE_REQUESTS_OUTSTANDING.DEMAND_RFO ;212509412 ;100,00 ; ;
     0.462766311 ;CPU1 ;419256212 ; ;OFFCORE_REQUESTS_OUTSTANDING.DEMAND_RFO ;212511132 ;100,00 ; ;

Machine (please complete the following information):

  • Linux version: Linux paul-laptop 4.18.0-16-generic #17-Ubuntu SMP Fri Feb 8 00:06:57 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
  • perf version: perf version 4.18.20
  • autoperf version: autoperf 0.2
  • output of: breakpoint cstate_core i915 kprobe power tracepoint uncore_cbox_0 uncore_cbox_2 uprobe
    cpu cstate_pkg intel_pt msr software uncore_arb uncore_cbox_1 uncore_cbox_3

Aggregate failling.

Describe the bug

When running autoperf aggreate I get the following error

[2019-05-02T03:15:18Z ERROR autoperf::aggregate] "./out/10_stat.csv": Event 'MEM_LOAD_RETIRED.L1_MISS' was not measured correctly with perf. This is a bug, please report it!
[2019-05-02T03:15:18Z ERROR autoperf::aggregate] "./out/14_stat.csv": Event 'FRONTEND_RETIRED.LATENCY_GE_512' was not measured correctly with perf. This is a bug, please report it!
[2019-05-02T03:15:18Z ERROR autoperf::aggregate] "./out/24_stat.csv": Event 'BR_INST_RETIRED.FAR_BRANCH' was not measured correctly with perf. This is a bug, please report it!
[2019-05-02T03:15:18Z ERROR autoperf::aggregate] "./out/35_stat.csv": Event 'MEM_LOAD_RETIRED.L3_HIT' was not measured correctly with perf. This is a bug, please report it!
...

Machine (please complete the following information):
-Linux version: Linux paul-laptop 4.18.0-16-generic #17-Ubuntu SMP Fri Feb 8 00:06:57 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
-perf version: perf version 4.18.20
-autoperf version: autoperf 0.2
-output of: breakpoint cstate_core i915 kprobe power tracepoint uncore_cbox_0 uncore_cbox_2 uprobe cpu cstate_pkg intel_pt msr software uncore_arb uncore_cbox_1 uncore_cbox_3

  • Machine: attached
  • output of: ls /sys/bus/event_source/devices/
breakpoint  cstate_core  i915      kprobe  power     tracepoint  uncore_cbox_0  uncore_cbox_2  uprobe
cpu         cstate_pkg   intel_pt  msr     software  uncore_arb  uncore_cbox_1  uncore_cbox_3

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.