|
28 | 28 | #include <cassert> |
29 | 29 | #include <vector> |
30 | 30 | #include <exception> |
| 31 | +#include <memory> |
31 | 32 | #include "tracing.h" |
32 | 33 | #include"handle.h" |
33 | 34 | #include "upsample.h" |
@@ -102,32 +103,24 @@ namespace dl_cifar::common { |
102 | 103 | static void initImage(float* image, int imageSize) { |
103 | 104 | Tracer::func_begin("ImageProcessor::initImage"); |
104 | 105 |
|
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{}; |
115 | 108 | static unsigned seed = 123456789; |
116 | 109 |
|
117 | 110 | // 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()); |
123 | 115 | } |
124 | 116 |
|
125 | 117 | // 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; |
128 | 121 | 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]; |
131 | 124 | } |
132 | 125 | Tracer::func_end("ImageProcessor::initImage"); |
133 | 126 |
|
|
0 commit comments