diff --git a/mojitos.c b/mojitos.c index ffc9869f616063ad653a54bb5fb06606263fbbf8..3c34a0f35afa6ccb5f97c08de0f6a1a3b654a6e6 100644 --- a/mojitos.c +++ b/mojitos.c @@ -210,7 +210,7 @@ int main(int argc, char **argv) { get_load(load_values); // RAPL initialization - rapl_t rapl=NULL; + _rapl_t* rapl=NULL; size_t rapl_size=0; uint64_t * rapl_values=NULL; uint64_t * tmp_rapl_values=NULL; @@ -218,8 +218,10 @@ int main(int argc, char **argv) { rapl = init_rapl(nbzones, rapl_zones); // prepare rapl data stores rapl_size = rapl->nbpackages*rapl->nbzones * sizeof(uint64_t); - rapl_values = malloc(rapl_size); - tmp_rapl_values = malloc(rapl_size); + //rapl_values = malloc(rapl_size); + rapl_values = calloc(sizeof(char), rapl_size); + //tmp_rapl_values = malloc(rapl_size); + tmp_rapl_values = calloc(sizeof(char), rapl_size); // initialize with dummy values get_rapl(rapl_values, rapl); } diff --git a/rapl.c b/rapl.c index 3cc0b02fc0f4b3297f22550cc43f9b0e0b2e56a6..da171da9d1b1e9a2e99d28f53c2120d3dbc14335 100644 --- a/rapl.c +++ b/rapl.c @@ -20,12 +20,14 @@ #include <stdio.h> #include <stdlib.h> +#include <string.h> + #include "rapl.h" #define MAX_LEN_NAME 100 -rapl_t init_rapl(const uint32_t nb_zones, const int *rapl_zones) { +_rapl_t* init_rapl(const uint32_t nb_zones, const int *rapl_zones) { // get number of processor sockets - rapl_t rapl = malloc(sizeof(struct _rapl_t)); + _rapl_t* rapl = malloc(sizeof(struct _rapl_t)); rapl->nbzones = nb_zones; rapl->zones = rapl_zones; @@ -41,12 +43,15 @@ rapl_t init_rapl(const uint32_t nb_zones, const int *rapl_zones) { exit(-1); } - rapl->names = malloc(sizeof(char*)* rapl->nbzones*rapl->nbpackages); + rapl->names = malloc(sizeof(char*) * (rapl->nbzones) * (rapl->nbpackages) ); + char _name[MAX_LEN_NAME+1]; + for (int package = 0; package < rapl->nbpackages; package++) { for(int zone=0; zone<rapl->nbzones; zone++) { - rapl->names[package*rapl->nbzones+zone]=malloc(MAX_LEN_NAME); powercap_rapl_get_name(&rapl->pkgs[package], rapl_zones[zone], - rapl->names[package*rapl->nbzones+zone], MAX_LEN_NAME); + _name, MAX_LEN_NAME); + rapl->names[package*rapl->nbzones+zone] = malloc(sizeof(char) * (strlen(_name)+1)); + strcpy(rapl->names[package*rapl->nbzones+zone], _name); } } return rapl; @@ -55,7 +60,7 @@ rapl_t init_rapl(const uint32_t nb_zones, const int *rapl_zones) { // values [zone + package *nbzones] microjoules -void get_rapl(uint64_t *values, rapl_t rapl) { +void get_rapl(uint64_t *values, _rapl_t* rapl) { for (int package = 0; package < rapl->nbpackages; package++) { for(int zone=0; zone<rapl->nbzones; zone++) { powercap_rapl_get_energy_uj(&rapl->pkgs[package], rapl->zones[zone], &values[package*rapl->nbzones+zone]); @@ -63,7 +68,7 @@ void get_rapl(uint64_t *values, rapl_t rapl) { } } -void clean_rapl(rapl_t rapl) { +void clean_rapl(_rapl_t* rapl) { for (int package = 0; package < rapl->nbpackages; package++) { if (powercap_rapl_destroy(&rapl->pkgs[package])) perror("powercap_rapl_destroy"); diff --git a/rapl.h b/rapl.h index 62b2484f9453417924d375c1fbe20885a8c8c482..1af8cf408f25c92d65538f26c423a10da6367c1d 100644 --- a/rapl.h +++ b/rapl.h @@ -30,6 +30,8 @@ struct _rapl_t { typedef struct _rapl_t* rapl_t; -rapl_t init_rapl(const uint32_t nb_zones, const int *rapl_zones); -void get_rapl(uint64_t *values, rapl_t rapl); -void clean_rapl(rapl_t rapl); +typedef struct _rapl_t _rapl_t; + +_rapl_t* init_rapl(const uint32_t nb_zones, const int *rapl_zones); +void get_rapl(uint64_t *values, _rapl_t* rapl); +void clean_rapl(_rapl_t* rapl);