Skip to content

Commit

Permalink
Abstract away platform details from samples.
Browse files Browse the repository at this point in the history
  • Loading branch information
rygorous committed Feb 19, 2014
1 parent 2906afe commit 39a2715
Show file tree
Hide file tree
Showing 5 changed files with 83 additions and 74 deletions.
23 changes: 5 additions & 18 deletions main.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#define _CRT_SECURE_NO_DEPRECATE
#include "platform.h"
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
Expand All @@ -8,8 +8,6 @@

#include "rans_byte.h"

#include <intrin.h>

// This is just the sample program. All the meat is in rans_byte.h.

static void panic(const char *fmt, ...)
Expand Down Expand Up @@ -46,17 +44,6 @@ static uint8_t* read_file(char const* filename, size_t* out_size)
return buf;
}

#define WIN32_LEAN_AND_MEAN
#include <Windows.h>

double timer()
{
LARGE_INTEGER ctr, freq;
QueryPerformanceCounter(&ctr);
QueryPerformanceFrequency(&freq);
return 1.0 * ctr.QuadPart / freq.QuadPart;
}

// ---- Stats

struct SymbolStats
Expand Down Expand Up @@ -196,7 +183,7 @@ int main()

uint64_t enc_clocks = __rdtsc() - enc_start_time;
double enc_time = timer() - start_time;
printf("%lld clocks, %.1f clocks/symbol (%5.1fMiB/s)\n", enc_clocks, 1.0 * enc_clocks / in_size, 1.0 * in_size / (enc_time * 1048576.0));
printf("%"PRIu64" clocks, %.1f clocks/symbol (%5.1fMiB/s)\n", enc_clocks, 1.0 * enc_clocks / in_size, 1.0 * in_size / (enc_time * 1048576.0));
}
printf("rANS: %d bytes\n", (int) (out_buf + out_max_size - rans_begin));

Expand All @@ -217,7 +204,7 @@ int main()

uint64_t dec_clocks = __rdtsc() - dec_start_time;
double dec_time = timer() - start_time;
printf("%lld clocks, %.1f clocks/symbol (%5.1fMiB/s)\n", dec_clocks, 1.0 * dec_clocks / in_size, 1.0 * in_size / (dec_time * 1048576.0));
printf("%"PRIu64" clocks, %.1f clocks/symbol (%5.1fMiB/s)\n", dec_clocks, 1.0 * dec_clocks / in_size, 1.0 * in_size / (dec_time * 1048576.0));
}

// check decode results
Expand Down Expand Up @@ -260,7 +247,7 @@ int main()

uint64_t enc_clocks = __rdtsc() - enc_start_time;
double enc_time = timer() - start_time;
printf("%lld clocks, %.1f clocks/symbol (%5.1fMiB/s)\n", enc_clocks, 1.0 * enc_clocks / in_size, 1.0 * in_size / (enc_time * 1048576.0));
printf("%"PRIu64" clocks, %.1f clocks/symbol (%5.1fMiB/s)\n", enc_clocks, 1.0 * enc_clocks / in_size, 1.0 * in_size / (enc_time * 1048576.0));
}
printf("interleaved rANS: %d bytes\n", (int) (out_buf + out_max_size - rans_begin));

Expand Down Expand Up @@ -294,7 +281,7 @@ int main()

uint64_t dec_clocks = __rdtsc() - dec_start_time;
double dec_time = timer() - start_time;
printf("%lld clocks, %.1f clocks/symbol (%5.1fMB/s)\n", dec_clocks, 1.0 * dec_clocks / in_size, 1.0 * in_size / (dec_time * 1048576.0));
printf("%"PRIu64" clocks, %.1f clocks/symbol (%5.1fMB/s)\n", dec_clocks, 1.0 * dec_clocks / in_size, 1.0 * in_size / (dec_time * 1048576.0));
}

// check decode results
Expand Down
23 changes: 5 additions & 18 deletions main64.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#define _CRT_SECURE_NO_DEPRECATE
#include "platform.h"
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
Expand All @@ -8,8 +8,6 @@

#include "rans64.h"

#include <intrin.h>

// This is just the sample program. All the meat is in rans_byte.h.

static void panic(const char *fmt, ...)
Expand Down Expand Up @@ -46,17 +44,6 @@ static uint8_t* read_file(char const* filename, size_t* out_size)
return buf;
}

#define WIN32_LEAN_AND_MEAN
#include <Windows.h>

double timer()
{
LARGE_INTEGER ctr, freq;
QueryPerformanceCounter(&ctr);
QueryPerformanceFrequency(&freq);
return 1.0 * ctr.QuadPart / freq.QuadPart;
}

// ---- Stats

struct SymbolStats
Expand Down Expand Up @@ -198,7 +185,7 @@ int main()

uint64_t enc_clocks = __rdtsc() - enc_start_time;
double enc_time = timer() - start_time;
printf("%lld clocks, %.1f clocks/symbol (%5.1fMiB/s)\n", enc_clocks, 1.0 * enc_clocks / in_size, 1.0 * in_size / (enc_time * 1048576.0));
printf("%"PRIu64" clocks, %.1f clocks/symbol (%5.1fMiB/s)\n", enc_clocks, 1.0 * enc_clocks / in_size, 1.0 * in_size / (enc_time * 1048576.0));
}
printf("rANS: %d bytes\n", (int) ((out_end - rans_begin) * sizeof(uint32_t)));

Expand All @@ -219,7 +206,7 @@ int main()

uint64_t dec_clocks = __rdtsc() - dec_start_time;
double dec_time = timer() - start_time;
printf("%lld clocks, %.1f clocks/symbol (%5.1fMiB/s)\n", dec_clocks, 1.0 * dec_clocks / in_size, 1.0 * in_size / (dec_time * 1048576.0));
printf("%"PRIu64" clocks, %.1f clocks/symbol (%5.1fMiB/s)\n", dec_clocks, 1.0 * dec_clocks / in_size, 1.0 * in_size / (dec_time * 1048576.0));
}

// check decode results
Expand Down Expand Up @@ -262,7 +249,7 @@ int main()

uint64_t enc_clocks = __rdtsc() - enc_start_time;
double enc_time = timer() - start_time;
printf("%lld clocks, %.1f clocks/symbol (%5.1fMiB/s)\n", enc_clocks, 1.0 * enc_clocks / in_size, 1.0 * in_size / (enc_time * 1048576.0));
printf("%"PRIu64" clocks, %.1f clocks/symbol (%5.1fMiB/s)\n", enc_clocks, 1.0 * enc_clocks / in_size, 1.0 * in_size / (enc_time * 1048576.0));
}
printf("interleaved rANS: %d bytes\n", (int) ((out_end - rans_begin) * sizeof(uint32_t)));

Expand Down Expand Up @@ -296,7 +283,7 @@ int main()

uint64_t dec_clocks = __rdtsc() - dec_start_time;
double dec_time = timer() - start_time;
printf("%lld clocks, %.1f clocks/symbol (%5.1fMB/s)\n", dec_clocks, 1.0 * dec_clocks / in_size, 1.0 * in_size / (dec_time * 1048576.0));
printf("%"PRIu64" clocks, %.1f clocks/symbol (%5.1fMB/s)\n", dec_clocks, 1.0 * dec_clocks / in_size, 1.0 * in_size / (dec_time * 1048576.0));
}

// check decode results
Expand Down
23 changes: 5 additions & 18 deletions main_alias.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#define _CRT_SECURE_NO_DEPRECATE
#include "platform.h"
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
Expand All @@ -8,8 +8,6 @@

#include "rans_byte.h"

#include <intrin.h>

static void panic(const char *fmt, ...)
{
va_list arg;
Expand Down Expand Up @@ -44,17 +42,6 @@ static uint8_t* read_file(char const* filename, size_t* out_size)
return buf;
}

#define WIN32_LEAN_AND_MEAN
#include <Windows.h>

double timer()
{
LARGE_INTEGER ctr, freq;
QueryPerformanceCounter(&ctr);
QueryPerformanceFrequency(&freq);
return 1.0 * ctr.QuadPart / freq.QuadPart;
}

// ---- Stats

struct SymbolStats
Expand Down Expand Up @@ -323,7 +310,7 @@ int main()

uint64_t enc_clocks = __rdtsc() - enc_start_time;
double enc_time = timer() - start_time;
printf("%lld clocks, %.1f clocks/symbol (%5.1fMiB/s)\n", enc_clocks, 1.0 * enc_clocks / in_size, 1.0 * in_size / (enc_time * 1048576.0));
printf("%"PRIu64" clocks, %.1f clocks/symbol (%5.1fMiB/s)\n", enc_clocks, 1.0 * enc_clocks / in_size, 1.0 * in_size / (enc_time * 1048576.0));
}
printf("rANS: %d bytes\n", (int) (out_buf + out_max_size - rans_begin));

Expand All @@ -344,7 +331,7 @@ int main()

uint64_t dec_clocks = __rdtsc() - dec_start_time;
double dec_time = timer() - start_time;
printf("%lld clocks, %.1f clocks/symbol (%5.1fMiB/s)\n", dec_clocks, 1.0 * dec_clocks / in_size, 1.0 * in_size / (dec_time * 1048576.0));
printf("%"PRIu64" clocks, %.1f clocks/symbol (%5.1fMiB/s)\n", dec_clocks, 1.0 * dec_clocks / in_size, 1.0 * in_size / (dec_time * 1048576.0));
}

// check decode results
Expand Down Expand Up @@ -387,7 +374,7 @@ int main()

uint64_t enc_clocks = __rdtsc() - enc_start_time;
double enc_time = timer() - start_time;
printf("%lld clocks, %.1f clocks/symbol (%5.1fMiB/s)\n", enc_clocks, 1.0 * enc_clocks / in_size, 1.0 * in_size / (enc_time * 1048576.0));
printf("%"PRIu64" clocks, %.1f clocks/symbol (%5.1fMiB/s)\n", enc_clocks, 1.0 * enc_clocks / in_size, 1.0 * in_size / (enc_time * 1048576.0));
}
printf("interleaved rANS: %d bytes\n", (int) (out_buf + out_max_size - rans_begin));

Expand Down Expand Up @@ -419,7 +406,7 @@ int main()

uint64_t dec_clocks = __rdtsc() - dec_start_time;
double dec_time = timer() - start_time;
printf("%lld clocks, %.1f clocks/symbol (%5.1fMB/s)\n", dec_clocks, 1.0 * dec_clocks / in_size, 1.0 * in_size / (dec_time * 1048576.0));
printf("%"PRIu64" clocks, %.1f clocks/symbol (%5.1fMB/s)\n", dec_clocks, 1.0 * dec_clocks / in_size, 1.0 * in_size / (dec_time * 1048576.0));
}

// check decode results
Expand Down
27 changes: 7 additions & 20 deletions main_simd.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#define _CRT_SECURE_NO_DEPRECATE
#include "platform.h"
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
Expand All @@ -8,8 +8,6 @@

#include "rans_word_sse41.h"

#include <intrin.h>

// This is just the sample program. All the meat is in rans_byte.h.

static void panic(const char *fmt, ...)
Expand Down Expand Up @@ -46,17 +44,6 @@ static uint8_t* read_file(char const* filename, size_t* out_size)
return buf;
}

#define WIN32_LEAN_AND_MEAN
#include <Windows.h>

double timer()
{
LARGE_INTEGER ctr, freq;
QueryPerformanceCounter(&ctr);
QueryPerformanceFrequency(&freq);
return 1.0 * ctr.QuadPart / freq.QuadPart;
}

// ---- Stats

struct SymbolStats
Expand Down Expand Up @@ -183,7 +170,7 @@ int main()

uint64_t enc_clocks = __rdtsc() - enc_start_time;
double enc_time = timer() - start_time;
printf("%lld clocks, %.1f clocks/symbol (%5.1fMiB/s)\n", enc_clocks, 1.0 * enc_clocks / in_size, 1.0 * in_size / (enc_time * 1048576.0));
printf("%"PRIu64" clocks, %.1f clocks/symbol (%5.1fMiB/s)\n", enc_clocks, 1.0 * enc_clocks / in_size, 1.0 * in_size / (enc_time * 1048576.0));
}
printf("rANS: %d bytes\n", (int) (out_buf + out_max_size - (uint8_t *)rans_begin));

Expand All @@ -204,7 +191,7 @@ int main()

uint64_t dec_clocks = __rdtsc() - dec_start_time;
double dec_time = timer() - start_time;
printf("%lld clocks, %.1f clocks/symbol (%5.1fMiB/s)\n", dec_clocks, 1.0 * dec_clocks / in_size, 1.0 * in_size / (dec_time * 1048576.0));
printf("%"PRIu64" clocks, %.1f clocks/symbol (%5.1fMiB/s)\n", dec_clocks, 1.0 * dec_clocks / in_size, 1.0 * in_size / (dec_time * 1048576.0));
}

// check decode results
Expand Down Expand Up @@ -246,7 +233,7 @@ int main()

uint64_t enc_clocks = __rdtsc() - enc_start_time;
double enc_time = timer() - start_time;
printf("%lld clocks, %.1f clocks/symbol (%5.1fMiB/s)\n", enc_clocks, 1.0 * enc_clocks / in_size, 1.0 * in_size / (enc_time * 1048576.0));
printf("%"PRIu64" clocks, %.1f clocks/symbol (%5.1fMiB/s)\n", enc_clocks, 1.0 * enc_clocks / in_size, 1.0 * in_size / (enc_time * 1048576.0));
}
printf("interleaved rANS: %d bytes\n", (int) (out_buf + out_max_size - (uint8_t*)rans_begin));

Expand Down Expand Up @@ -277,7 +264,7 @@ int main()

uint64_t dec_clocks = __rdtsc() - dec_start_time;
double dec_time = timer() - start_time;
printf("%lld clocks, %.1f clocks/symbol (%5.1fMB/s)\n", dec_clocks, 1.0 * dec_clocks / in_size, 1.0 * in_size / (dec_time * 1048576.0));
printf("%"PRIu64" clocks, %.1f clocks/symbol (%5.1fMB/s)\n", dec_clocks, 1.0 * dec_clocks / in_size, 1.0 * in_size / (dec_time * 1048576.0));
}

// check decode results
Expand Down Expand Up @@ -314,7 +301,7 @@ int main()

uint64_t enc_clocks = __rdtsc() - enc_start_time;
double enc_time = timer() - start_time;
printf("%lld clocks, %.1f clocks/symbol (%5.1fMiB/s)\n", enc_clocks, 1.0 * enc_clocks / in_size, 1.0 * in_size / (enc_time * 1048576.0));
printf("%"PRIu64" clocks, %.1f clocks/symbol (%5.1fMiB/s)\n", enc_clocks, 1.0 * enc_clocks / in_size, 1.0 * in_size / (enc_time * 1048576.0));
}
printf("SIMD rANS: %d bytes\n", (int) (out_buf + out_max_size - (uint8_t*)rans_begin));

Expand Down Expand Up @@ -346,7 +333,7 @@ int main()

uint64_t dec_clocks = __rdtsc() - dec_start_time;
double dec_time = timer() - start_time;
printf("%lld clocks, %.1f clocks/symbol (%5.1fMB/s)\n", dec_clocks, 1.0 * dec_clocks / in_size, 1.0 * in_size / (dec_time * 1048576.0));
printf("%"PRIu64" clocks, %.1f clocks/symbol (%5.1fMB/s)\n", dec_clocks, 1.0 * dec_clocks / in_size, 1.0 * in_size / (dec_time * 1048576.0));
}

// check decode results
Expand Down
61 changes: 61 additions & 0 deletions platform.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
// Just some platform utilities.
#ifndef PLATFORM_H_INCLUDED
#define PLATFORM_H_INCLUDED

// x86 intrinsics (__rdtsc etc.)

#if defined(_MSC_VER)

#define _CRT_SECURE_NO_DEPRECATE
#include <intrin.h>

#elif defined(__GNUC__)

#include <x86intrin.h>

#else
#error Unknown compiler!
#endif

// Timer

#if defined(_WIN32)

#define WIN32_LEAN_AND_MEAN
#define NOMINMAX
#include <Windows.h>

#define PRIu64 "llu"

double timer()
{
LARGE_INTEGER ctr, freq;
QueryPerformanceCounter(&ctr);
QueryPerformanceFrequency(&freq);
return 1.0 * ctr.QuadPart / freq.QuadPart;
}

#elif defined(__linux__)

#define __STDC_FORMAT_MACROS
#include <time.h>
#include <inttypes.h>

static inline double timer()
{
timespec ts;
ts.tv_sec = 0;
ts.tv_nsec = 0;
int status = clock_gettime(CLOCK_MONOTONIC, &ts);
assert(status == 0);
return double(ts.tv_sec) + 1.0e-9 * double(ts.tv_nsec);
}

#else

#error Unknown platform!

#endif

#endif // PLATFORM_H_INCLUDED

0 comments on commit 39a2715

Please sign in to comment.