Skip to content

Commit 39e398a

Browse files
committed
[dl-cifar] Use unique_ptr in initImage
1 parent ba4ab46 commit 39e398a

File tree

1 file changed

+12
-19
lines changed

1 file changed

+12
-19
lines changed

dl-cifar/common/image_processing.h

Lines changed: 12 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
#include <cassert>
2929
#include <vector>
3030
#include <exception>
31+
#include <memory>
3132
#include "tracing.h"
3233
#include"handle.h"
3334
#include "upsample.h"
@@ -102,32 +103,24 @@ namespace dl_cifar::common {
102103
static void initImage(float* image, int imageSize) {
103104
Tracer::func_begin("ImageProcessor::initImage");
104105

105-
struct ImageCache {
106-
size_t size{0};
107-
float* image{nullptr};
108-
~ImageCache() {
109-
if (image==nullptr) {return;}
110-
delete[] image;
111-
image = nullptr;
112-
}
113-
};
114-
static ImageCache cache{};
106+
static size_t cacheSize{0};
107+
static std::unique_ptr<float[]> cacheImage{};
115108
static unsigned seed = 123456789;
116109

117110
// grow the cache allocation to image size
118-
if (imageSize > cache.size) {
119-
float* newCacheImage = new float[imageSize];
120-
std::memcpy(newCacheImage, cache.image, cache.size*sizeof(float));
121-
delete[] cache.image;
122-
cache.image = newCacheImage;
111+
if (imageSize > cacheSize) {
112+
auto newCacheImage = std::make_unique<float[]>(imageSize);
113+
std::memcpy(newCacheImage.get(), cacheImage.get(), cacheSize*sizeof(float));
114+
cacheImage.reset(newCacheImage.release());
123115
}
124116

125117
// fill image with cached data and compute the remaining part
126-
std::memcpy(image, cache.image, std::min(cache.size,static_cast<size_t>(imageSize))*sizeof(float));
127-
for (; cache.size < imageSize; ++cache.size) {
118+
std::memcpy(image, cacheImage.get(), std::min(cacheSize,static_cast<size_t>(imageSize))*sizeof(float));
119+
while (cacheSize < imageSize) {
120+
++cacheSize;
128121
seed = (1103515245 * seed + 12345) & 0xffffffff;
129-
cache.image[cache.size-1] = float(seed) * 2.3283064e-10; // 2^-32
130-
image[cache.size-1] = cache.image[cache.size-1];
122+
cacheImage[cacheSize-1] = float(seed) * 2.3283064e-10; // 2^-32
123+
image[cacheSize-1] = cacheImage[cacheSize-1];
131124
}
132125
Tracer::func_end("ImageProcessor::initImage");
133126

0 commit comments

Comments
 (0)