Commit ce8cf62b authored by Jack Doerner's avatar Jack Doerner

Optimizations and profiling related changes.

parent 30c240da
......@@ -59,7 +59,7 @@ void bitpropagator_offline_readblockvector(uint8_t * local_output, bool * local_
expansion_stride = BLOCKSIZE;
}
#ifdef PROFILE_SCHEDULING
#ifdef ORAM_PROFILE_SCHEDULING
#pragma omp single nowait
printf("START FSS OFFLINE LEVEL 0 %lld\n", current_timestamp());
#endif
......@@ -89,7 +89,7 @@ void bitpropagator_offline_readblockvector(uint8_t * local_output, bool * local_
a_bits[ii] = a2[ii*BLOCKSIZE] & 1;
}
#ifdef PROFILE_SCHEDULING
#ifdef ORAM_PROFILE_SCHEDULING
#pragma omp single nowait
printf("END FSS OFFLINE LEVEL 0 %lld\n", current_timestamp());
#endif
......@@ -98,7 +98,7 @@ void bitpropagator_offline_readblockvector(uint8_t * local_output, bool * local_
#pragma omp single
omp_set_lock(&bpo->locks[thislevel- bpo->startlevel -1 ]);
#ifdef PROFILE_SCHEDULING
#ifdef ORAM_PROFILE_SCHEDULING
#pragma omp single nowait
printf("START FSS OFFLINE LEVEL %d %lld\n", thislevel,current_timestamp());
#endif
......@@ -176,7 +176,7 @@ void bitpropagator_offline_readblockvector(uint8_t * local_output, bool * local_
}
}
#ifdef PROFILE_SCHEDULING
#ifdef ORAM_PROFILE_SCHEDULING
#pragma omp single nowait
printf("END FSS OFFLINE LEVEL %d %lld\n", thislevel,current_timestamp());
#endif
......@@ -185,7 +185,7 @@ void bitpropagator_offline_readblockvector(uint8_t * local_output, bool * local_
#pragma omp single
omp_set_lock(&bpo->locks[thislevel- bpo->startlevel -1 ]);
#ifdef PROFILE_SCHEDULING
#ifdef ORAM_PROFILE_SCHEDULING
#pragma omp single nowait
printf("START FSS LEVEL %d %lld\n", thislevel,current_timestamp());
#endif
......@@ -285,7 +285,7 @@ void bitpropagator_offline_readblockvector(uint8_t * local_output, bool * local_
}
}
#ifdef PROFILE_SCHEDULING
#ifdef ORAM_PROFILE_SCHEDULING
#pragma omp single nowait
printf("END FSS LEVEL %d %lld\n", thislevel,current_timestamp());
#endif
......
......@@ -56,7 +56,7 @@ void bitpropagator_Z_pusher(bitpropagator * bp, bitpropagator_offline * bpo, Pro
}
void bitpropagator_traverselevels(bitpropagator * bp, obliv size_t * indexp) {
#ifdef PROFILE_SCHEDULING
#ifdef ORAM_PROFILE_SCHEDULING
printf("START FSS ONLINE %lld\n", current_timestamp());
#endif
......@@ -132,7 +132,7 @@ void bitpropagator_traverselevels(bitpropagator * bp, obliv size_t * indexp) {
online_prf_double(&bp->activeblock_A[BLOCKSIZE * ii], &bp->activeblock_B[BLOCKSIZE * ii], &bp->activeblock_A[BLOCKSIZE * (ii-1)], &bp->activeblock_B[BLOCKSIZE * (ii-1)], bp->keyL, bp->keyL);
}
#ifdef PROFILE_SCHEDULING
#ifdef ORAM_PROFILE_SCHEDULING
printf("END FSS ONLINE %lld\n", current_timestamp());
#endif
}
......@@ -142,7 +142,7 @@ void bitpropagator_getblockvector(obliv uint8_t * activeblock_delta, uint8_t * l
}
void bitpropagator_getblockvector_with_callback(obliv uint8_t * activeblock_delta, uint8_t * local_output, bool * local_bit_output, bitpropagator * bp, obliv size_t index, facb_fn cbfn, void* cbpass) {
#ifdef PROFILE_SCHEDULING
#ifdef ORAM_PROFILE_SCHEDULING
printf("START FSS SETUP %lld\n", current_timestamp());
#endif
......@@ -169,7 +169,7 @@ void bitpropagator_getblockvector_with_callback(obliv uint8_t * activeblock_delt
ocCopyN(&ocCopyChar, bp->activeblock_B, &bp->toplevel[(1ll << bp->startlevel)*BLOCKSIZE], BLOCKSIZE);
#ifdef PROFILE_SCHEDULING
#ifdef ORAM_PROFILE_SCHEDULING
printf("END FSS SETUP %lld\n", current_timestamp());
#endif
......
......@@ -44,7 +44,7 @@ void bitpropagator_cprg_offline_start(uint8_t * local_output, bool * local_bit_o
bpo->thislevelblocks = 1;
bpo->nextlevelblocks = 2;
#ifdef PROFILE_SCHEDULING
#ifdef ORAM_PROFILE_SCHEDULING
printf("START FSS CPRG OFFLINE LEVEL %d %lld\n", bpo->thislevel,current_timestamp());
#endif
......@@ -77,7 +77,7 @@ void bitpropagator_cprg_offline_start(uint8_t * local_output, bool * local_bit_o
bpo->lba[0] = bpo->lda2[0] & 1;
#ifdef PROFILE_SCHEDULING
#ifdef ORAM_PROFILE_SCHEDULING
printf("END FSS CPRG OFFLINE LEVEL %d %lld\n", bpo->thislevel,current_timestamp());
#endif
}
......@@ -88,7 +88,7 @@ void bitpropagator_cprg_offline_process_round(uint8_t * accumulator_L, uint8_t *
bpo->nextlevelblocks = (bpo->size + (1ll<<(bpo->endlevel - bpo->thislevel -1)) - 1) / (1ll<<(bpo->endlevel - bpo->thislevel -1));
if (bpo->thislevel == bpo->endlevel -1) bpo->nextlevelblocks = bpo->size;
#ifdef PROFILE_SCHEDULING
#ifdef ORAM_PROFILE_SCHEDULING
printf("START FSS CPRG OFFLINE LEVEL %d %lld\n", bpo->thislevel,current_timestamp());
#endif
......@@ -187,7 +187,7 @@ void bitpropagator_cprg_offline_process_round(uint8_t * accumulator_L, uint8_t *
((uint64_t *)accumulator_R)[jj] = accR.data[jj];
}
#ifdef PROFILE_SCHEDULING
#ifdef ORAM_PROFILE_SCHEDULING
printf("END FSS CPRG OFFLINE LEVEL %d %lld\n", bpo->thislevel,current_timestamp());
#endif
}
......@@ -196,7 +196,7 @@ void bitpropagator_cprg_offline_finalize(uint8_t * accumulator, uint8_t * z, boo
bpo->thislevel += 1;
bpo->thislevelblocks = bpo->nextlevelblocks;
#ifdef PROFILE_SCHEDULING
#ifdef ORAM_PROFILE_SCHEDULING
printf("START FSS CPRG OFFLINE LEVEL %d %lld\n", bpo->thislevel,current_timestamp());
#endif
......@@ -331,7 +331,7 @@ void bitpropagator_cprg_offline_finalize(uint8_t * accumulator, uint8_t * z, boo
}
}
#ifdef PROFILE_SCHEDULING
#ifdef ORAM_PROFILE_SCHEDULING
printf("END FSS CPRG OFFLINE LEVEL %d %lld\n", bpo->thislevel,current_timestamp());
#endif
}
......
......@@ -23,7 +23,7 @@ struct bitpropagator_cprg {
};
void bitpropagator_cprg_traverselevels(obliv uint8_t * active_block_delta, uint8_t * local_output, bool * local_bit_output, bitpropagator_cprg * bp, obliv size_t * indexp) {
#ifdef PROFILE_SCHEDULING
#ifdef ORAM_PROFILE_SCHEDULING
printf("START FSS CPRG ONLINE %lld\n", current_timestamp());
#endif
......@@ -69,7 +69,7 @@ void bitpropagator_cprg_traverselevels(obliv uint8_t * active_block_delta, uint8
ocFromSharedCharN(ocCurrentProto(), active_block_delta, bp->L_local, BLOCKSIZE*bp->blockmultiple);
#ifdef PROFILE_SCHEDULING
#ifdef ORAM_PROFILE_SCHEDULING
printf("END FSS CPRG ONLINE %lld\n", current_timestamp());
#endif
}
......
......@@ -11,6 +11,6 @@
#define BLOCKSIZE 16
//#define SCANROM_DISABLE_ENCRYPTION
//#define PROFILE_SCHEDULING
//#define ORAM_PROFILE_SCHEDULING
#endif
\ No newline at end of file
......@@ -42,7 +42,7 @@ typedef struct facb_pass {
} facb_pass;
void floram_refresh(floram* ram) {
#ifdef PROFILE_SCHEDULING
#ifdef ORAM_PROFILE_SCHEDULING
printf("BEGIN REFRESH %lld\n", current_timestamp());
#endif
......@@ -54,7 +54,7 @@ void floram_refresh(floram* ram) {
ram->stashi[ii] = -1;
}
#ifdef PROFILE_SCHEDULING
#ifdef ORAM_PROFILE_SCHEDULING
printf("END REFRESH %lld\n", current_timestamp());
#endif
}
......@@ -62,7 +62,7 @@ void floram_refresh(floram* ram) {
void floram_scan_callback(facb_pass * input, ProtocolDesc *pd) {
if (pd != NULL) ocSetCurrentProto(pd);
#ifdef PROFILE_SCHEDULING
#ifdef ORAM_PROFILE_SCHEDULING
printf("BEGIN STASH SCAN %lld\n", current_timestamp());
#endif
......@@ -89,12 +89,16 @@ void floram_scan_callback(facb_pass * input, ProtocolDesc *pd) {
// this protocol may not do anything else for a while, but other threads could be waiting for it
if (pd != NULL) oflush(pd);
#ifdef PROFILE_SCHEDULING
#ifdef ORAM_PROFILE_SCHEDULING
printf("END STASH SCAN %lld\n", current_timestamp());
#endif
}
void floram_read(void* data, floram* ram, obliv size_t index) obliv {
#ifdef ORAM_PROFILE_SCHEDULING
~obliv() printf("BEGIN READ %lld\n", current_timestamp());
#endif
obliv size_t blockid = index / ram->elementsperblock;
obliv size_t subblockid = index % ram->elementsperblock;
......@@ -110,10 +114,14 @@ void floram_read(void* data, floram* ram, obliv size_t index) obliv {
for (size_t ii = 0; ii < ram->elementsperblock; ii ++) {
obliv if (subblockid == ii) ocCopy(ram->cpy, data, element(ram->cpy, ram->stash, ii));
}
#ifdef ORAM_PROFILE_SCHEDULING
~obliv() printf("END READ %lld\n\n", current_timestamp());
#endif
}
void floram_apply(floram* ram, void* data, floram_block_access_function fn, obliv size_t index) obliv {
#ifdef PROFILE_SCHEDULING
#ifdef ORAM_PROFILE_SCHEDULING
~obliv() printf("BEGIN APPLY %lld\n", current_timestamp());
#endif
......@@ -129,7 +137,7 @@ void floram_apply(floram* ram, void* data, floram_block_access_function fn, obli
ram->stashi[0] = blockid;
}
#ifdef PROFILE_SCHEDULING
#ifdef ORAM_PROFILE_SCHEDULING
~obliv() printf("BEGIN FUNCTION APPLICATION %lld\n", current_timestamp());
#endif
......@@ -139,7 +147,7 @@ void floram_apply(floram* ram, void* data, floram_block_access_function fn, obli
obliv if (subblockid == jj) fn(ram->cpy, element(ram->cpy, ram->stash, jj), data);
}
#ifdef PROFILE_SCHEDULING
#ifdef ORAM_PROFILE_SCHEDULING
~obliv() printf("END FUNCTION APPLICATION %lld\n", current_timestamp());
#endif
......@@ -150,7 +158,7 @@ void floram_apply(floram* ram, void* data, floram_block_access_function fn, obli
if (ram->progress == ram->period) floram_refresh(ram);
}
#ifdef PROFILE_SCHEDULING
#ifdef ORAM_PROFILE_SCHEDULING
~obliv() printf("END APPLY %lld\n\n", current_timestamp());
#endif
}
......
......@@ -3,22 +3,45 @@
#include <wmmintrin.h>
#include <tmmintrin.h>
void scanrom_read_with_bitvector_offline(uint8_t * data, uint8_t * local_data, bool * bitvector, size_t memblocksize, size_t blockcount) {
memset(data, 0, memblocksize);
uint64_t * d = local_data;
bool * b = bitvector;
for (size_t jj = 0; jj < memblocksize /sizeof(uint64_t); jj++) {
uint64_t sum = 0;
#pragma omp parallel for simd aligned(d,b:16) reduction(^:sum)
uint64_t ** sums;
size_t threadcount;
#pragma omp parallel
{
threadcount = omp_get_num_threads();
#pragma omp single
sums = malloc(threadcount * sizeof(uint64_t *));
uint64_t * s;
floram_zpma(&s, 16, memblocksize);
sums[omp_get_thread_num()] = s;
#pragma omp for
for (size_t ii = 0; ii < blockcount; ii++) {
if (b[ii]) {
sum ^= d[ii * ((memblocksize) /sizeof(uint64_t)) + jj];
#pragma omp simd aligned(d,b,s:16)
for (size_t jj = 0; jj < memblocksize /sizeof(uint64_t); jj++) {
s[jj] ^= b[ii] * d[ii * ((memblocksize) /sizeof(uint64_t)) + jj];
}
}
((uint64_t *)data)[jj] = sum;
}
for (size_t ii = 0; ii < threadcount; ii++) {
for (size_t jj = 0; jj < memblocksize /sizeof(uint64_t); jj++) {
((uint64_t *)data)[jj] ^= sums[ii][jj];
}
free(sums[ii]);
}
free(sums);
}
#ifdef SCANROM_DISABLE_ENCRYPTION
......@@ -31,7 +54,6 @@ void scanrom_encrypt_offline(uint8_t * out, uint8_t * in, uint8_t* key, size_t i
}
#else
void scanrom_encrypt_offline(uint8_t * out, uint8_t * in, uint8_t* key, size_t index, size_t blockmultiple, size_t blockcount) {
//TODO multithread:
offline_expand_from(out, key, index*blockmultiple, blockcount * blockmultiple);
if (in != NULL) {
#pragma omp parallel for simd
......@@ -49,16 +71,9 @@ void scanwrom_write_with_blockvector_offline(uint8_t * local_data, uint8_t * blo
#pragma omp parallel for
for (size_t ii = 0; ii< blockcount; ii++) {
if (bitvector[ii]) {
#pragma omp simd aligned(d,b,z:16)
for (size_t jj = 0; jj < memblocksize/sizeof(uint64_t); jj++) {
d[ii * memblocksize/sizeof(uint64_t) + jj] ^= b[ii * memblocksize/sizeof(uint64_t) + jj] ^ z[jj];
}
} else {
#pragma omp simd aligned(d,b:16)
for (size_t jj = 0; jj < memblocksize/sizeof(uint64_t); jj++) {
d[ii * memblocksize/sizeof(uint64_t) + jj] ^= b[ii * memblocksize/sizeof(uint64_t) + jj];
}
#pragma omp simd aligned(d,b,bitvector,z:16)
for (size_t jj = 0; jj < memblocksize/sizeof(uint64_t); jj++) {
d[ii * memblocksize/sizeof(uint64_t) + jj] ^= b[ii * memblocksize/sizeof(uint64_t) + jj] ^ (bitvector[ii] * z[jj]);
}
}
}
\ No newline at end of file
......@@ -34,7 +34,7 @@ struct scanwrom {
void scanrom_read_with_bitvector(obliv uint8_t * data, scanrom * rom, obliv size_t index, bool * bitvector) obliv {
#ifdef PROFILE_SCHEDULING
#ifdef ORAM_PROFILE_SCHEDULING
~obliv() printf("BEGIN ROM READ %lld\n", current_timestamp());
#endif
......@@ -42,36 +42,35 @@ void scanrom_read_with_bitvector(obliv uint8_t * data, scanrom * rom, obliv size
scanrom_read_with_bitvector_offline(rom->local_blocktemp, rom->local_data, bitvector, rom->memblocksize, rom->blockcount);
memset(rom->ivtemp, 0, BLOCKSIZE * sizeof(obliv uint8_t));
ocFromSharedCharN(ocCurrentProto(), rom->blocktemp, rom->local_blocktemp, rom->memblocksize);
}
oaes_ctx * ctx;
#ifndef SCANROM_DISABLE_ENCRYPTION
//two extra expansions are unnecessary. We should generate the context once and reuse it.
#ifdef ORAM_PROFILE_SCHEDULING
printf("BEGIN ROM DECRYPT %lld\n", current_timestamp());
#endif
#ifndef SCANROM_DISABLE_ENCRYPTION
for (size_t ii = 0; ii < rom->memblocksize/BLOCKSIZE; ii += 1) {
be64enc(&rom->ivtemp[BLOCKSIZE - sizeof(size_t)], index*rom->blockmultiple + ii);
oaes_128_from_expanded_double(&rom->blocktemp[rom->memblocksize + ii*BLOCKSIZE], &rom->blocktemp[2*rom->memblocksize + ii*BLOCKSIZE],
rom->halfkey_a, rom->halfkey_b, rom->ivtemp, rom->ivtemp);
}
for (size_t ii = 0; ii < rom->memblocksize; ii ++) {
rom->blocktemp[ii] ^= rom->blocktemp[rom->memblocksize + ii] ^ rom->blocktemp[2*rom->memblocksize + ii];
}
be64enc(&rom->ivtemp[BLOCKSIZE - sizeof(size_t)], index*rom->blockmultiple);
~obliv() ctx = oaes_128_ctx_ctr_new(rom->halfkey_a, rom->ivtemp);
for (size_t ii = 0; ii < rom->blockmultiple; ii++) {
oaes_128_encdec(&rom->blocktemp[rom->memblocksize + BLOCKSIZE*ii], ctx, &rom->blocktemp[BLOCKSIZE*ii]);
}
~obliv() {
oaes_128_ctx_free(ctx);
ctx = oaes_128_ctx_ctr_new(rom->halfkey_b, rom->ivtemp);
}
for (size_t ii = 0; ii < rom->blockmultiple; ii++) {
oaes_128_encdec(&rom->blocktemp[BLOCKSIZE*ii], ctx, &rom->blocktemp[rom->memblocksize + BLOCKSIZE*ii]);
}
~obliv() oaes_128_ctx_free(ctx);
#ifdef ORAM_PROFILE_SCHEDULING
printf("END ROM DECRYPT %lld\n", current_timestamp());
#endif
#endif
#endif
}
ocCopyN(&ocCopyChar, data, rom->blocktemp, rom->memblocksize);
#ifdef PROFILE_SCHEDULING
#ifdef ORAM_PROFILE_SCHEDULING
~obliv() printf("END ROM READ %lld\n", current_timestamp());
#endif
}
void scanrom_write_xor_shares(scanrom* rom, obliv uint8_t * data, size_t index, size_t len) {
......@@ -98,6 +97,8 @@ void scanrom_set_key(scanrom* rom, uint8_t* key_local) {
memcpy(rom->local_halfkey, key_local, KEYSIZE);
feedOblivCharArray(rom->halfkey_a, rom->local_halfkey, KEYSIZE, 1);
feedOblivCharArray(rom->halfkey_b, rom->local_halfkey, KEYSIZE, 2);
oaes_128_expandkey(rom->halfkey_a);
oaes_128_expandkey(rom->halfkey_b);
}
void scanrom_import_from_scanwrom(scanrom * rom, scanwrom * wrom) {
......@@ -136,10 +137,11 @@ scanrom* scanrom_new(size_t memblocksize, size_t n, void* key_local) {
floram_zpma(&rom->local_data, 16, n * memblocksize);
rom->local_halfkey = malloc(KEYSIZE);
floram_pma(&rom->local_blocktemp, 16, memblocksize);
rom->blocktemp = calloc(2*memblocksize, sizeof(obliv uint8_t));
rom->blocktemp = calloc(3*memblocksize, sizeof(obliv uint8_t));
rom->ivtemp = calloc(BLOCKSIZE, sizeof(obliv uint8_t));
rom->halfkey_a = calloc(KEYSIZE, sizeof(obliv uint8_t));
rom->halfkey_b = calloc(KEYSIZE, sizeof(obliv uint8_t));
//These will double for both the expanded and non-expanded forms
rom->halfkey_a = calloc(KEYSIZE * 11, sizeof(obliv uint8_t));
rom->halfkey_b = calloc(KEYSIZE * 11, sizeof(obliv uint8_t));
scanrom_set_key(rom, key_local);
return rom;
}
......@@ -170,7 +172,7 @@ void scanwrom_write(scanwrom* rom, obliv uint8_t* data, size_t index) {
}
void scanwrom_write_with_blockvector(scanwrom* rom, obliv uint8_t * active_block_delta, uint8_t * blockvector, bool * bitvector, obliv uint8_t * old_data, obliv uint8_t * new_data) obliv {
#ifdef PROFILE_SCHEDULING
#ifdef ORAM_PROFILE_SCHEDULING
~obliv() printf("BEGIN WOM WRITE %lld\n", current_timestamp());
#endif
......@@ -192,7 +194,7 @@ void scanwrom_write_with_blockvector(scanwrom* rom, obliv uint8_t * active_block
scanwrom_write_with_blockvector_offline(rom->local_data, blockvector, bitvector, rom->local_blocktemp, rom->memblocksize, rom->blockcount);
}
#ifdef PROFILE_SCHEDULING
#ifdef ORAM_PROFILE_SCHEDULING
~obliv() printf("END WOM WRITE %lld\n", current_timestamp());
#endif
}
......
......@@ -96,7 +96,9 @@ void test_main(void*varg) {
}
}
#ifndef ORAM_PROFILE_SCHEDULING
fprintf(stdout, "# ORAM ACCESS (READ) (element count, element size, sample 1 microseconds, sample 1 gates, sample 1 bytes, ...)\n");
#endif
OcCopy cpy = ocCopyIntN(elsz);
......@@ -107,7 +109,9 @@ void test_main(void*varg) {
oram * o = oram_new(ORAM_TYPE_AUTO, &cpy, elct);
#ifndef ORAM_PROFILE_SCHEDULING
fprintf(stdout, "%lld,%lld", elct, elsz);
#endif
for (int ii = 0; ii < samples; ii++) {
uint32_t index_raw = ocBroadcastInt(rand() % elct, 2);
......@@ -119,8 +123,10 @@ void test_main(void*varg) {
runtime += current_timestamp();
rungates += yaoGateCount();
runbytes += tcp2PBytesSent(ocCurrentProto());
#ifndef ORAM_PROFILE_SCHEDULING
fprintf(stdout, ",%llu,%llu,%llu", runtime,rungates, runbytes);
fflush(stdout);
#endif
tally += runtime;
tallygates += rungates;
tallybytes += runbytes;
......@@ -128,7 +134,9 @@ void test_main(void*varg) {
free(output);
oram_free(o);
#ifndef ORAM_PROFILE_SCHEDULING
fprintf(stdout, "\n");
#endif
fprintf(stderr, "ORAM Read (count:%lld, size: %lld): %llu microseconds avg, %llu gates avg, %llu bytes avg\n", elct, elsz, tally / samples, tallygates/samples, tallybytes/samples);
}
......@@ -96,7 +96,9 @@ void test_main(void*varg) {
}
}
#ifndef ORAM_PROFILE_SCHEDULING
fprintf(stdout, "# ORAM ACCESS (WRITE) (element count, element size, sample 1 microseconds, sample 1 gates, sample 1 bytes, ...)\n");
#endif
OcCopy cpy = ocCopyIntN(elsz);
......@@ -107,7 +109,9 @@ void test_main(void*varg) {
oram * o = oram_new(ORAM_TYPE_AUTO, &cpy, elct);
#ifndef ORAM_PROFILE_SCHEDULING
fprintf(stdout, "%lld,%lld", elct, elsz);
#endif
for (int ii = 0; ii < samples; ii++) {
uint32_t index_raw = ocBroadcastInt(rand() % elct, 2);
......@@ -120,8 +124,10 @@ void test_main(void*varg) {
runtime += current_timestamp();
rungates += yaoGateCount();
runbytes += tcp2PBytesSent(ocCurrentProto());
#ifndef ORAM_PROFILE_SCHEDULING
fprintf(stdout, ",%llu,%llu,%llu", runtime,rungates, runbytes);
fflush(stdout);
#endif
tally += runtime;
tallygates += rungates;
tallybytes += runbytes;
......@@ -129,7 +135,9 @@ void test_main(void*varg) {
free(input);
oram_free(o);
#ifndef ORAM_PROFILE_SCHEDULING
fprintf(stdout, "\n");
#endif
fprintf(stderr, "ORAM Write (count:%lld, size: %lld): %llu microseconds avg, %llu gates avg, %llu bytes avg\n", elct, elsz, tally / samples, tallygates/samples, tallybytes/samples);
}
......@@ -40,6 +40,8 @@ Options:\n\
-c \x1b[4mADDRESSS\x1b[0m \n\t\trun as client and connect to \x1b[4mADDRESS\x1b[0m\n\n\
-p \x1b[4mNUMBER\x1b[0m \n\t\tlisten or connect on port \x1b[4mNUMBER\x1b[0m\n\n"
//#define ORAM_PROFILE_SCHEDULING
typedef struct args_t {
int argc;
char **argv;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment