00001 #ifndef TRANSLATOR_CHUNKPOLICY_H 00002 #define TRANSLATOR_CHUNKPOLICY_H 00003 00004 #include <vector> 00005 00006 #include "psddl_hdf2psana/ChunkPolicy.h" 00007 00008 namespace Translator { 00009 00010 class ChunkManager; 00011 00012 /** 00013 * @ingroup Translator 00014 * 00015 * @brief Copy of default implementation on the chunk size policy, with dynamic updating. 00016 * 00017 * This class copies psddl_hdf2psana::DefaultChunkPolicy and extends it to update chunk 00018 * parameters after construction. It deviates from DefaultChunkPolicy in how the 00019 * the per dataset chunk cache is created. It uses a target of cache size of 2. 00020 * 00021 * @note This software was developed for the LCLS project. If you use all or 00022 * part of it, please give an appropriate acknowledgment. 00023 * 00024 * @author David Schneider 00025 */ 00026 class ChunkPolicy : public psddl_hdf2psana::ChunkPolicy { 00027 public: 00028 ChunkPolicy(hsize_t chunkSizeTargetBytes = 16*1024*1024, // 16MB 00029 int chunkSizeTargetObjects = 0, 00030 hsize_t maxChunkSizeBytes = 100*1024*1024, // 100MB 00031 int minObjectsPerChunk = 50, 00032 int maxObjectsPerChunk = 2048, 00033 int chunkCacheSizeTargetInChunks = 2, 00034 hsize_t maxChunkCacheSizeBytes = 100*1024*1024); // 100MB 00035 00036 // Destructor 00037 virtual ~ChunkPolicy () ; 00038 00039 // returns chunk size in elements 00040 virtual int chunkSize(const hdf5pp::Type& dsType) const; 00041 virtual int chunkSize(const size_t typeSize) const; 00042 00043 // returns chunk cache size in chunks 00044 virtual int chunkCacheSize(const hdf5pp::Type& dsType) const; 00045 virtual int chunkCacheSize(const size_t typeSize) const; 00046 00047 friend class ChunkManager; 00048 00049 protected: 00050 hsize_t chunkSizeTargetBytes() const { return m_chunkSizeTargetBytes;} 00051 int chunkSizeTargetObjects() const { return m_chunkSizeTargetObjects;} 00052 hsize_t maxChunkSizeBytes() const { return m_maxChunkSizeBytes;} 00053 int minObjectsPerChunk() const { return m_minObjectsPerChunk;} 00054 int maxObjectsPerChunk() const { return m_maxObjectsPerChunk;} 00055 hsize_t chunkCacheSizeTargetInChunks() const { return m_chunkCacheSizeTargetInChunks;} 00056 hsize_t maxChunkCacheSizeBytes() const { return m_maxChunkCacheSizeBytes;} 00057 00058 void chunkSizeTargetBytes(hsize_t val) { m_chunkSizeTargetBytes = val;} 00059 void chunkSizeTargetObjects(int val); 00060 void maxChunkSizeBytes(hsize_t val) { m_maxChunkSizeBytes = val;} 00061 void minObjectsPerChunk(int val) { m_minObjectsPerChunk = val;} 00062 void maxObjectsPerChunk(int val) { m_maxObjectsPerChunk = val;} 00063 void chunkCacheSizeTargetInChunks(hsize_t val) {m_chunkCacheSizeTargetInChunks = val;} 00064 void maxChunkCacheSizeBytes(hsize_t val) { m_maxChunkCacheSizeBytes = val;} 00065 00066 private: 00067 hsize_t m_chunkSizeTargetBytes; 00068 int m_chunkSizeTargetObjects; 00069 hsize_t m_maxChunkSizeBytes; 00070 int m_minObjectsPerChunk; 00071 int m_maxObjectsPerChunk; 00072 int m_chunkCacheSizeTargetInChunks; 00073 hsize_t m_maxChunkCacheSizeBytes; 00074 00075 // Copy constructor and assignment are disabled by default 00076 ChunkPolicy ( const ChunkPolicy& ) ; 00077 ChunkPolicy& operator = ( const ChunkPolicy& ) ; 00078 00079 }; 00080 00081 } // namespace Translator 00082 00083 #endif // TRANSLATOR_CHUNKPOLICY_H