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