[C++][STL] 수행시간 증가 문제
글쓴이: haryngod / 작성시간: 수, 2020/02/12 - 4:02오후
안녕하세요.
최근에 이미지 관련해서 딥러닝 프로그램을 짜보고 있는데,
C++을 사용해서 많은 수의 이미지를 stl 컨테이너에 넣어서 연산하는 작업을 짜는중에
프로그램 수행 시간이 for문으로 반복해서 돌릴 수록 증가하는 현상을 발견하게 되었습니다.
관련한 코드를 최대한 간결하게 재현 해보았습니다.
혹시 이런 경우가 왜 발생하는지 해결방법이 무엇인지 아시는 고수분들 있을까요?
참고로 메모리는 늘었다 줄었다 하면서 증가 추세를 보이지는 않습니다.
100회 수행 하고 수행 시간 그래프를 그려봤습니다.
vector<float> getDataFromMat(Mat org, float weight, float bias, bool noise)
{
auto imageHeight = org.rows;
auto imageWidth = org.cols;
auto offset = imageHeight * imageWidth;
Mat mat = Mat();
Mat matSplit[3];
auto features = vector<float>(offset * org.channels());
mat = org;
split(mat, matSplit);
parallel_for(0, mat.channels(), [&](auto i)
{
matSplit[i].convertTo(matSplit[i], CV_32F);
copy((float*)matSplit[i].datastart, (float*)matSplit[i].dataend, features.begin() + offset * i);
});
}
return features;
}
int main ()
{
vector<Mat> images;
cv::Mat image;
string imagepath;
for (int i(1); i < 4000; i++)
{
imagepath = "D:\\dog\\dog" + to_string(i) + ".jpg";
image = cv::imread(imagepath);
images.push_back(image);
}
vector<tuple<string, int, int, vector<float>>> vec = vector<tuple<string, int, int, vector<float>>>(4000);
vector<Mat> imgs = images;
for (int k(0); k < 100; k++)
{
clock_t start = clock();
parallel_for(0, 4000, [&](auto i)
{
resize(imgs[i], imgs[i], Size(224, 224));
vector<float> image_array = getDataFromMat(images[i], 1, 0, false);
vec[i] = tuple< string, int, int, vector<float>>( "", 0, 0, image_array);
});
double t = (clock() - start) / (double)CLOCKS_PER_SEC;
cout << t << endl;
imgs.clear();
vec.clear();
imgs = images;
}
}File attachments:
| 첨부 | 파일 크기 |
|---|---|
| 15.98 KB |
Forums:


imgs의 크기를 벗어나도 동작이 되는군요.
쓰레드 하나는 예외 처리가 안 되서 죽었을 것으로 보입니다.
댓글 달기