htrdr

Solving radiative transfer in heterogeneous media
git clone git://git.meso-star.fr/htrdr.git
Log | Files | Refs | README | LICENSE

commit 9c12d6d512caea604a7d6145c896952095f2de90
parent 1807f98fa916bc5af092607e21e84b00499910af
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Fri, 14 Dec 2018 12:34:56 +0100

Merge branch 'release_0.0.2'

Diffstat:
Mcmake/CMakeLists.txt | 2+-
Msrc/htrdr.c | 8+++++++-
Msrc/htrdr.h | 1+
Msrc/htrdr_sky.c | 47+++++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 56 insertions(+), 2 deletions(-)

diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt @@ -60,7 +60,7 @@ include_directories( ################################################################################ set(VERSION_MAJOR 0) set(VERSION_MINOR 0) -set(VERSION_PATCH 1) +set(VERSION_PATCH 2) set(VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}) set(HTRDR_ARGS_DEFAULT_CAMERA_POS "0,0,0") diff --git a/src/htrdr.c b/src/htrdr.c @@ -459,6 +459,9 @@ htrdr_init htrdr->width = args->image.definition[0]; htrdr->height = args->image.definition[1]; + res = mem_init_regular_allocator(&htrdr->svx_allocator); + if(res != RES_OK) goto error; + res = init_mpi(htrdr); if(res != RES_OK) goto error; @@ -485,7 +488,7 @@ htrdr_init } res = svx_device_create - (&htrdr->logger, htrdr->allocator, args->verbose, &htrdr->svx); + (&htrdr->logger, &htrdr->svx_allocator, args->verbose, &htrdr->svx); if(res != RES_OK) { htrdr_log_err(htrdr, "%s: could not create the Star-VoXel device -- %s.\n", @@ -589,6 +592,9 @@ htrdr_release(struct htrdr* htrdr) } str_release(&htrdr->output_name); logger_release(&htrdr->logger); + + ASSERT(MEM_ALLOCATED_SIZE(&htrdr->svx_allocator) == 0); + mem_shutdown_regular_allocator(&htrdr->svx_allocator); } res_T diff --git a/src/htrdr.h b/src/htrdr.h @@ -78,6 +78,7 @@ struct htrdr { struct logger logger; struct mem_allocator* allocator; + struct mem_allocator svx_allocator; struct mem_allocator* lifo_allocators; /* Per thread lifo allocator */ }; diff --git a/src/htrdr_sky.c b/src/htrdr_sky.c @@ -207,6 +207,51 @@ struct htrdr_sky { /******************************************************************************* * Helper function ******************************************************************************/ +static void +log_svx_memory_usage(struct htrdr* htrdr) +{ + char dump[128]; + char* dst = dump; + size_t available_space = sizeof(dump); + const size_t KILO_BYTE = 1024; + const size_t MEGA_BYTE = 1024*KILO_BYTE; + const size_t GIGA_BYTE = 1024*MEGA_BYTE; + size_t ngigas, nmegas, nkilos, memsz, len; + ASSERT(htrdr); + + memsz = MEM_ALLOCATED_SIZE(&htrdr->svx_allocator); + + if((ngigas = memsz / GIGA_BYTE) != 0) { + len = (size_t)snprintf(dst, available_space, + "%lu GB ", (unsigned long)ngigas); + CHK(len < available_space); + dst += len; + available_space -= len; + memsz -= ngigas * GIGA_BYTE; + } + if((nmegas = memsz / MEGA_BYTE) != 0) { + len = (size_t)snprintf(dst, available_space, + "%lu MB ", (unsigned long)nmegas); + CHK(len < available_space); + dst += len; + available_space -= len; + memsz -= nmegas * MEGA_BYTE; + } + if((nkilos = memsz / KILO_BYTE) != 0) { + len = (size_t)snprintf(dst, available_space, + "%lu KB ", (unsigned long)nkilos); + dst += len; + available_space -= len; + memsz -= nkilos * KILO_BYTE; + } + if(memsz) { + len = (size_t)snprintf(dst, available_space, + "%lu Byte%s", (unsigned long)memsz, memsz > 1 ? "s" : ""); + CHK(len < available_space); + } + htrdr_log(htrdr, "SVX memory usage: %s\n", dump); +} + /* Transform pos from world to cloud space */ static INLINE double* world_to_cloud @@ -1709,6 +1754,8 @@ htrdr_sky_create if(res != RES_OK) goto error; } + log_svx_memory_usage(htrdr); + exit: *out_sky = sky; return res;