⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 benchmark.c

📁 这是一个C的源代码
💻 C
字号:
#include <pbc.h>#include <pbc_time.h>/* I've heard that sometimes automatic garbage collection can outperform * manual collection, so I briefly tried using the Boehm-Demers-Weiser GC * library. Both GMP and PBC support custom memory allocation routines so * incorporating the GC library is trivial. * * Automatic garbage collection appears to slow this program down a little, * even if only PBC collects automatically. (The case where PBC collects * manually but GMP collects automatically cannot be achieved with the GC * library because PBC objects point at GMP objects.) * * Perhaps specially-tailored memory allocation routines could shave off * some time, but one would have to thoroughly analyze PBC and GMP memory usage * patterns. * * Below is the commented-out code that collects garbage for PBC. Of course, * if you want to use it you must also tell the build system where to find * gc.h and to link with the GC library. * * Also, you may wish to write similar code for GMP (which I unfortunately * deleted before thinking that it might be useful for others). * Note GC_MALLOC_ATOMIC may be used for GMP since the mpz_t type does not * store pointers in the memory it allocates. * * The malloc and realloc functions should exit on failure but I didn't * bother since I was only seeing if GC could speed up this program.#include <gc.h>#include <pbc_utils.h>void *gc_alloc(size_t size){    return GC_MALLOC(size);}void *gc_realloc(void *ptr, size_t size){    return GC_REALLOC(ptr, size);}void gc_free(void *ptr){    UNUSED_VAR(ptr);} * The following should be the first two statements in main()    GC_INIT();    pbc_set_memory_functions(gc_alloc, gc_realloc, gc_free); */int main(void){    pairing_t pairing;    element_t x, y, r, r2;    int i, n;    double t0, t1, ttotal, ttotalpp;    pairing_pp_t pp;    //Cheat for slightly faster times:    //pbc_set_memory_functions(malloc, realloc, free);    pairing_init_inp_str(pairing, stdin);    element_init_G1(x, pairing);    element_init_G2(y, pairing);    element_init_GT(r, pairing);    element_init_GT(r2, pairing);    n = 10;    ttotal = 0.0;    ttotalpp = 0.0;    for (i=0; i<n; i++) {	element_random(x);	element_random(y);	pairing_pp_init(pp, x, pairing);	t0 = get_time();	pairing_pp_apply(r, y, pp);	t1 = get_time();	ttotalpp += t1 - t0;	pairing_pp_clear(pp);	t0 = get_time();	pairing_apply(r2, x, y, pairing);	t1 = get_time();	ttotal += t1 - t0;	element_printf("x = %B\n", x);	element_printf("y = %B\n", y);	element_printf("e(x,y) = %B\n", r);	if (element_cmp(r, r2)) {	    printf("BUG!\n");	    exit(1);	}    }    printf("average pairing time = %f\n", ttotal / n);    printf("average pairing time (preprocessed) = %f\n", ttotalpp / n);    element_clear(x);    element_clear(y);    element_clear(r);    element_clear(r2);    pairing_clear(pairing);    return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -