Skip to content
Snippets Groups Projects
Commit 4962be04 authored by theazgra's avatar theazgra
Browse files

Improvement in benchmark code and more results.

parent e2fd0b1c
No related branches found
No related tags found
No related merge requests found
Showing
with 112 additions and 12 deletions
filename;subblock;pixel;width;height;compression;level;originalSize;compressedSize;compressedZ;compressionRatio;compressionRatioZ;compressionTime;compressionTimeZ
16Bit-ZStack.czi;999;Gray16;0;0;GZIP;1;31457280;21706534;21415370;1.44921;1.46891;11678.00000;13538.00000
16Bit-ZStack.czi;999;Gray16;0;0;LZMA2;1;31457280;18234356;17989964;1.72517;1.74860;83573.00000;83512.00000
16Bit-ZStack.czi;999;Gray16;0;0;BZIP2;1;31457280;16811950;17070792;1.87113;1.84275;56895.00000;55434.00000
16Bit-ZStack.czi;999;Gray16;0;0;GZIP;2;31457280;21591821;21323216;1.45691;1.47526;12449.00000;11485.00000
16Bit-ZStack.czi;999;Gray16;0;0;LZMA2;2;31457280;18204064;18028864;1.72804;1.74483;104041.00000;105380.00000
16Bit-ZStack.czi;999;Gray16;0;0;BZIP2;2;31457280;16651274;16889420;1.88918;1.86254;55824.00000;54975.00000
16Bit-ZStack.czi;999;Gray16;0;0;GZIP;4;31457280;21596789;21318920;1.45657;1.47556;26670.00000;19498.00000
16Bit-ZStack.czi;999;Gray16;0;0;LZMA2;4;31457280;17228332;17036472;1.82590;1.84647;129261.00000;128921.00000
16Bit-ZStack.czi;999;Gray16;0;0;BZIP2;4;31457280;16562542;16762954;1.89930;1.87660;56634.00000;56815.00000
16Bit-ZStack.czi;999;Gray16;0;0;GZIP;3;31457280;21442671;21217301;1.46704;1.48262;14582.00000;15215.00000
16Bit-ZStack.czi;999;Gray16;0;0;LZMA2;3;31457280;18188892;18055964;1.72948;1.74221;131293.00000;129141.00000
16Bit-ZStack.czi;999;Gray16;0;0;BZIP2;3;31457280;16592079;16803872;1.89592;1.87203;56129.00000;56221.00000
16Bit-ZStack.czi;999;Gray16;0;0;GZIP;5;31457280;21534975;21269344;1.46075;1.47900;32021.00000;26092.00000
16Bit-ZStack.czi;999;Gray16;0;0;LZMA2;5;31457280;17217048;17049480;1.82710;1.84506;132761.00000;132771.00000
16Bit-ZStack.czi;999;Gray16;0;0;BZIP2;5;31457280;16528830;16719271;1.90318;1.88150;56316.00000;57042.00000
16Bit-ZStack.czi;999;Gray16;0;0;GZIP;6;31457280;21320230;21074519;1.47547;1.49267;41487.00000;48189.00000
16Bit-ZStack.czi;999;Gray16;0;0;LZMA2;6;31457280;17216344;17046576;1.82718;1.84537;133741.00000;134992.00000
16Bit-ZStack.czi;999;Gray16;0;0;BZIP2;6;31457280;16505227;16698103;1.90590;1.88388;56457.00000;57019.00000
16Bit-ZStack.czi;999;Gray16;0;0;GZIP;7;31457280;21313059;21067513;1.47596;1.49317;44391.00000;46510.00000
16Bit-ZStack.czi;999;Gray16;0;0;LZMA2;7;31457280;17217068;17058500;1.82710;1.84408;136071.00000;135122.00000
16Bit-ZStack.czi;999;Gray16;0;0;BZIP2;7;31457280;16482554;16672843;1.90852;1.88674;57403.00000;58249.00000
16Bit-ZStack.czi;999;Gray16;0;0;GZIP;9;31457280;21313063;21067526;1.47596;1.49316;47200.00000;49093.00000
16Bit-ZStack.czi;999;Gray16;0;0;LZMA2;9;31457280;17217716;17057428;1.82703;1.84420;137389.00000;137355.00000
16Bit-ZStack.czi;999;Gray16;0;0;BZIP2;9;31457280;16456890;16645416;1.91150;1.88985;58076.00000;58180.00000
16Bit-ZStack.czi;999;Gray16;0;0;GZIP;8;31457280;21313063;21067526;1.47596;1.49316;48028.00000;46358.00000
16Bit-ZStack.czi;999;Gray16;0;0;LZMA2;8;31457280;17217716;17057428;1.82703;1.84420;139170.00000;137580.00000
16Bit-ZStack.czi;999;Gray16;0;0;BZIP2;8;31457280;16466766;16661084;1.91035;1.88807;57603.00000;57905.00000
czi-format/benchmark_results/AxioZoom_Artemia_AT-1Ch-Z_sect.jpg

168 KiB

czi-format/benchmark_results/artemia_at_z_sect/AxioZoom_Artemia_AT-1Ch-Z_sect.jpg

133 KiB

filename;subblock;pixel;width;height;compression;level;originalSize;compressedSize;compressedZ;compressionRatio;compressionRatioZ;compressionTime;compressionTimeZ
16Bit-ZStack.czi;999;Gray16;0;0;GZIP;8;31457280;21313063;21067526;1.47596;1.49316;2014.00000;1985.00000
16Bit-ZStack.czi;999;Gray16;0;0;LZMA2;8;31457280;17217716;17057428;1.82703;1.84420;15858.00000;21924.00000
16Bit-ZStack.czi;999;Gray16;0;0;BZIP2;8;31457280;16466766;16661084;1.91035;1.88807;2958.00000;3136.00000
AxioZoom_Artemia_AT-1Ch-Z_sect.czi;999;Gray16;0;0;GZIP;9;112594560;41693860;39222947;2.70051;2.87063;117712.00000;161881.00000
AxioZoom_Artemia_AT-1Ch-Z_sect.czi;999;Gray16;0;0;LZMA2;9;112594560;31991164;31405776;3.51955;3.58515;205168.00000;199336.00000
AxioZoom_Artemia_AT-1Ch-Z_sect.czi;999;Gray16;0;0;BZIP2;9;112594560;31016055;31077959;3.63020;3.62297;9036.00000;8966.00000
filename;subblock;pixel;width;height;compression;level;originalSize;compressedSize;compressedZ;compressionRatio;compressionRatioZ;compressionTime;compressionTimeZ
LLC-PK1_TubX-emerald_H2B-mCherry-2chZ(SD).czi;999;Gray16;0;0;GZIP;6;109051904;77916943;76868930;1.3996;1.4187;;
LLC-PK1_TubX-emerald_H2B-mCherry-2chZ(SD).czi;999;Gray16;0;0;GZIP;8;109051904;77917145;76861800;1.3996;1.4188;;
LLC-PK1_TubX-emerald_H2B-mCherry-2chZ(SD).czi;999;Gray16;0;0;GZIP;9;109051904;77917145;76861800;1.3996;1.4188;;
LLC-PK1_TubX-emerald_H2B-mCherry-2chZ(SD).czi;999;Gray16;0;0;LZMA;5;109051904;66187466;65277759;1.64762;1.67060;59000;54000
LLC-PK1_TubX-emerald_H2B-mCherry-2chZ(SD).czi;999;Gray16;0;0;LZMA;6;109051904;66179814;65281171;1.64780;1.67050;;
LLC-PK1_TubX-emerald_H2B-mCherry-2chZ(SD).czi;999;Gray16;0;0;LZMA;9;109051904;66192740;65375130;1.6475;1.6681;;
LLC-PK1_TubX-emerald_H2B-mCherry-2chZ(SD).czi;999;Gray16;0;0;BZIP2;5;109051904;64453164;64496632;1.692;1.6908;;
LLC-PK1_TubX-emerald_H2B-mCherry-2chZ(SD).czi;999;Gray16;0;0;BZIP2;6;109051904;64442979;64488307;1.6922;1.691;;
LLC-PK1_TubX-emerald_H2B-mCherry-2chZ(SD).czi;999;Gray16;0;0;BZIP2;8;109051904;64399634;64472449;1.6934;1.6914;;
LLC-PK1_TubX-emerald_H2B-mCherry-2chZ(SD).czi;999;Gray16;0;0;BZIP2;8;109051904;64381885;64458062;1.6938;1.6918;;
LLC-PK1_TubX-emerald_H2B-mCherry-2chZ(SD).czi;999;Gray16;0;0;BZIP2;9;109051904;64381885;64458062;1.6938;1.6918;;
......@@ -3,6 +3,7 @@
#include "../czi_file.h"
#include "../file_system.h"
#include <iomanip>
#include <thread>
struct BenchmarkRecord
{
......@@ -69,29 +70,77 @@ void write_report(const std::vector<BenchmarkRecord> &results, const std::string
}
}
static void compression_thread_work(const ByteArray &data, CompressionMethod method, int compressionLevel, CompressionResult &result, const char *info)
{
auto compResult = test_compression_method(data, method, compressionLevel);
result = compResult;
printf("Completed: %s\n", info);
}
static std::vector<BenchmarkRecord> benchmark_continuos_compression_one_level(const ByteArray &data, const ByteArray &zOrderedData, int compressionLevel)
{
// // CompressionMethod_GZIP
// CompressionResult gzipResult = test_compression_method(data, CompressionMethod_GZIP, compressionLevel);
// CompressionResult gzipZResult = test_compression_method(zOrderedData, CompressionMethod_GZIP, compressionLevel);
// BenchmarkRecord gzipRecord(gzipResult, gzipZResult);
// gzipRecord.compressionLevel = compressionLevel;
// gzipRecord.compressionMethod = GZIP_NAME;
// // CompressionMethod_LZMA
// CompressionResult lzmaResult = test_compression_method(data, CompressionMethod_LZMA, compressionLevel);
// CompressionResult lzmaZResult = test_compression_method(zOrderedData, CompressionMethod_LZMA, compressionLevel);
// BenchmarkRecord lzmaRecord(lzmaResult, lzmaZResult);
// lzmaRecord.compressionLevel = compressionLevel;
// lzmaRecord.compressionMethod = LZMA2_NAME;
// // CompressionMethod_BZIP2
// CompressionResult bzip2Result = test_compression_method(data, CompressionMethod_BZIP2, compressionLevel);
// CompressionResult bzip2ZResult = test_compression_method(zOrderedData, CompressionMethod_BZIP2, compressionLevel);
// BenchmarkRecord bzip2Record(bzip2Result, bzip2ZResult);
// bzip2Record.compressionLevel = compressionLevel;
// bzip2Record.compressionMethod = BZIP2_NAME;
// CompressionMethod_GZIP
CompressionResult gzipResult = test_compression_method(data, CompressionMethod_GZIP, compressionLevel);
CompressionResult gzipZResult = test_compression_method(zOrderedData, CompressionMethod_GZIP, compressionLevel);
CompressionResult gzipResult = {};
CompressionResult gzipZResult = {};
// CompressionMethod_LZMA
CompressionResult lzmaResult = {};
CompressionResult lzmaZResult = {};
// CompressionMethod_BZIP2
CompressionResult bzip2Result = {};
CompressionResult bzip2ZResult = {};
std::vector<std::thread> workers;
workers.resize(6);
// We know that lzma is slowest, let's run all three in threads.
workers[0] = std::thread(compression_thread_work, std::ref(data), CompressionMethod_GZIP, compressionLevel, std::ref(gzipResult), "Gzip normal order");
workers[1] = std::thread(compression_thread_work, std::ref(zOrderedData), CompressionMethod_GZIP, compressionLevel, std::ref(gzipZResult), "Gzip Z order");
workers[2] = std::thread(compression_thread_work, std::ref(data), CompressionMethod_LZMA, compressionLevel, std::ref(lzmaResult), "LZMA normal order");
workers[3] = std::thread(compression_thread_work, std::ref(zOrderedData), CompressionMethod_LZMA, compressionLevel, std::ref(lzmaZResult), "LZMA Z order");
workers[4] = std::thread(compression_thread_work, std::ref(data), CompressionMethod_BZIP2, compressionLevel, std::ref(bzip2Result), "Bzip2 normal order");
workers[5] = std::thread(compression_thread_work, std::ref(zOrderedData), CompressionMethod_BZIP2, compressionLevel, std::ref(bzip2ZResult), "Bzip2 Z order");
for (size_t i = 0; i < workers.size(); i++)
{
workers[i].join();
}
printf("All threads completed.\n");
BenchmarkRecord gzipRecord(gzipResult, gzipZResult);
gzipRecord.compressionLevel = compressionLevel;
gzipRecord.compressionMethod = GZIP_NAME;
// CompressionMethod_LZMA
CompressionResult lzmaResult = test_compression_method(data, CompressionMethod_LZMA, compressionLevel);
CompressionResult lzmaZResult = test_compression_method(zOrderedData, CompressionMethod_LZMA, compressionLevel);
BenchmarkRecord lzmaRecord(lzmaResult, lzmaZResult);
lzmaRecord.compressionLevel = compressionLevel;
lzmaRecord.compressionMethod = LZMA2_NAME;
// CompressionMethod_BZIP2
CompressionResult bzip2Result = test_compression_method(data, CompressionMethod_BZIP2, compressionLevel);
CompressionResult bzip2ZResult = test_compression_method(zOrderedData, CompressionMethod_BZIP2, compressionLevel);
BenchmarkRecord bzip2Record(bzip2Result, bzip2ZResult);
bzip2Record.compressionLevel = compressionLevel;
bzip2Record.compressionMethod = BZIP2_NAME;
......
......@@ -365,7 +365,8 @@ ByteArray CziFile::get_continuous_image_data(const bool ZCurveOrdered) const
size_t bufferEnd = 0;
// Rather than simply putting images one after the other, order them by channels.
#if 1
// Compression ratios aren't better, so we won't waste time with sorting right now.
#if 0
int loaded = 0;
for (size_t channel = 0; channel < subBlockDirectory.channelCount; channel++)
{
......
......@@ -18,6 +18,7 @@ int main(int argc, char **argv)
args::HelpFlag helpMethod(mainMethodGroup, "help", "Print help", {'h', "help"});
args::Flag reportMethod(mainMethodGroup, "report", "Basic information about CZI file. [verbose]", {"report"});
args::Flag compressionTestMethod(mainMethodGroup, "compression-test", "Compress subblocks and output compression ratios <compression method>", {"compression-test"});
args::Flag versionMethod(mainMethodGroup, "Version test", "Check version", {"version", 'V'});
args::Flag benchmarkMethod(mainMethodGroup, "Compression benchmark", "Start compression benchmark for selected CZI file. <report-file> [continuos] [verbose].", {"benchmark"});
args::Flag exportDataMethod(mainMethodGroup, "Export binary dat", "Export raw image data <folder> [continuos]", {"dump-data"});
args::Flag exportImagesMethod(mainMethodGroup, "Export images", "Export images to ppm files <folder>", {"dump-images"});
......@@ -54,6 +55,16 @@ int main(int argc, char **argv)
return 1;
}
if (versionMethod)
{
#if DEBUG
printf("DEBUG\n");
#else
printf("RELEASE\n");
#endif
return 0;
}
CziParser parser(dontParseMetadataOption.Get());
auto parsedFile = parser.parse_czi_file(cziFile.Get());
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment