Skip to content

OpenCVメモリ使用量計測

atinfinity edited this page May 4, 2015 · 6 revisions

OpenCVメモリ使用量計測

はじめに

Hacking OpenCV for fun and profitというブログ記事にて「OpenCVを拡張したメモリ使用量計測方法」が紹介されていたので,ここではその機能について紹介します.

使い方

  1. OpenCVメモリ使用量計測機能が入ったソースを取得する
  2. 必要な箇所をマージする(後程追記します)
  3. CMakeオプションENABLE_MEMORY_SNAPSHOTSをONにしてOpenCVをビルドする
  4. OpenCVを利用したプログラム中で計測したい箇所をMEASURE_MEMORYマクロで囲む

MEASURE_MEMORYマクロの処理内容

#define MEASURE_MEMORY(x) { \
    size_t memOnStart = cv::memorySnapshot().allocatedMemory; x;\
    size_t memOnEnd  = cv::memorySnapshot().allocatedMemory;     \
    std::cout << #x << "," << "\t" << memOnStart / (1024.0*1024.0) << "[MB]" << \
    " -> " << \
    memOnEnd / (1024.0*1024.0) << "[MB]" << std::endl; }
  • 処理xを行う前のOpenCVメモリ使用量(memOnStart)を取得する
  • 処理xを実行する
  • 処理xを行った後のOpenCVメモリ使用量(memOnEnd)を取得する
  • memOnStart、 memOnEndの値を標準出力する

注意点

  • OpenCV APIが使用するメモリ量しか計測できない
  • CMakeオプションENABLE_MEMORY_SNAPSHOTSをONにしたOpenCVビルドでしか計測できない

サンプルコード

#include <opencv2/core/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>

#define ENABLE_MEASURE_MEMORY

#ifndef ENABLE_MEASURE_MEMORY
#define MEASURE_MEMORY(x) {x;}
#else
#define MEASURE_MEMORY(x) { \
    size_t memOnStart = cv::memorySnapshot().allocatedMemory; x;\
    size_t memOnEnd   = cv::memorySnapshot().allocatedMemory;   \
    std::cout << #x << "," << "\t" << memOnStart / (1024.0*1024.0) << "[MB]" \
    << " -> " << \
    memOnEnd / (1024.0*1024.0) << "[MB]" << std::endl; }
#endif

int main(int argc, char** argv)
{
    cv::Mat src, dst;
    MEASURE_MEMORY(src = cv::imread("lena.jpg", cv::IMREAD_COLOR));
    MEASURE_MEMORY(cv::resize(src, dst, cv::Size(), 5.0, 5.0));
    MEASURE_MEMORY(dst.release());
    return 0;
}

標準出力結果

src = cv::imread("lena.jpg", cv::IMREAD_COLOR), 0.332099[MB] -> 1.0821[MB]
cv::resize(src, dst, cv::Size(), 5.0, 5.0),     1.0821[MB] -> 19.8321[MB]
dst.release(),  19.8321[MB] -> 1.0821[MB]

Menu

Computer Vision

GPGPU

AR

ROS

Docker

Jetson

ARM

プログラミング言語

開発環境

勉強会

Clone this wiki locally