memory.cpp 1.6 KB
Newer Older
W
wangguibao 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
#include "common/inner_common.h"
#include "framework/memory.h"

namespace baidu {
namespace paddle_serving {
namespace predictor {

int MempoolWrapper::initialize() {
    if (THREAD_KEY_CREATE(&_bspec_key, NULL) != 0) {
        LOG(ERROR) << "unable to create thread_key of thrd_data";
        return -1;
    }
    if (THREAD_SETSPECIFIC(_bspec_key, NULL) != 0) {
        LOG(ERROR) << "failed initialize bsepecific key to null";
        return -1;
    }

    return 0;
}

int MempoolWrapper::thread_initialize() {
    _region.init();
    im::Mempool* p_mempool = new (std::nothrow) im::Mempool(&_region);
    if (p_mempool == NULL) {
        LOG(ERROR) << "Failed create thread mempool";
        return -1;
    }

    if (THREAD_SETSPECIFIC(_bspec_key, p_mempool) != 0) {
        LOG(ERROR) << "unable to set the thrd_data";
        delete p_mempool;
        return -1;
    } 

    LOG(WARNING) << "Succ thread initialize mempool wrapper";
    return 0;
}

int MempoolWrapper::thread_clear() {
    im::Mempool* p_mempool = (im::Mempool*) THREAD_GETSPECIFIC(
            _bspec_key);
    if (p_mempool) {
        p_mempool->release_block();
        _region.reset(); 
    }

    return 0;
}

void* MempoolWrapper::malloc(size_t size) {
    im::Mempool* p_mempool = (im::Mempool*) THREAD_GETSPECIFIC(
            _bspec_key);
        if (!p_mempool) {
            LOG(WARNING) << "Cannot malloc memory:" << size
                << ", since mempool is not thread initialized";
            return NULL;
        }
        return p_mempool->malloc(size);
}

} // predictor
} // paddle_serving
} // baidu