|
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