#include #include #include void xor_prefix_sum_bitslice(uint32_t *W); void xor_prefix_sum_bitslice_unrolled(uint32_t *W); int main(int argc, char **argv) { uint32_t W[1024] = {0}; for (int i = 0; i < 1024; i++) W[i] = random(); if (argc == 1) { fprintf(stderr, "Usage: %s [-unrolled] 12345\n", argv[0]); return -1; } int n = atoi(argv[argc-1]); printf("Running %d iteration%s...", n, n == 1 ? "" : "s"); fflush(stdout); if (argc == 2) { for (int i = 0; i < n; i++) xor_prefix_sum_bitslice(W); } else { for (int i = 0; i < n; i++) xor_prefix_sum_bitslice_unrolled(W); } /* Prevent optimizer from being too smart */ uint32_t total = 0; for (int i = 0; i < 1024; i++) total += W[i]; printf("%d\n", total); return 0; }