コード例 #1
0
/*
 * Temporary usage: run_queries <index file> <type> [length] [V]
 */
int main(int argc, char* argv[])
{
    char* filename;
    char querytype;

    if (argc < 2)	{
        usage(argv[0]);
        exit(1);
    }

    filename = argv[1];
    querytype = *argv[2];
    string index_file = string(argv[1]) + "." + string(SUF);
    bool mapped = false;
#ifdef USE_HP
    uint64_t index_size = util::file_size(index_file);
    // allocate hugepages, add 10 MiB + 3% overhead
    uint64_t alloc_size = (uint64_t)(index_size*1.03+(1ULL<<20)*10);
    try {
        memory_manager::use_hugepages(alloc_size);
        mapped = true;
    } catch (...) {
        std::cout<<"Unable to allocate "<<alloc_size<<" bytes ";
        std::cout<<"of hugepage space on your system"<<std::endl;
    }
#endif

    CSA_TYPE csa;
    fprintf(stderr, "# File = %s\n",(string(filename) + "." + string(SUF)).c_str());
    fprintf(stderr, "# program = %s\n",string(SUF).c_str());
    Load_time = getTime();
    load_from_file(csa, index_file);
    Load_time = getTime() - Load_time;
    fprintf(stderr, "# Load_index_time_in_sec = %.2f\n", Load_time);
    std::cerr<<"# text_size = " << csa.size()-1 << std::endl;

    Index_size = size_in_bytes(csa);
    Text_length = csa.size()-1; // -1 since we added a sentinel character
    /*	Index_size /=1024; */
    fprintf(stderr, "# Index_size_in_bytes = %lu\n", Index_size);

    fprintf(stderr, "# hugepages = %i\n", (int)mapped);
    bool use_sse = false;
#ifdef __SSE4_2__
    use_sse = true;
#endif
    fprintf(stderr, "# sse = %i\n", (int)use_sse);
    bool use_popcount_tl = false;
#ifdef POPCOUNT_TL
    use_popcount_tl = true;
#endif
    fprintf(stderr, "# popcount_tl = %i\n", (int)use_popcount_tl);

    switch (querytype) {
        case COUNT:
            if (argc > 3)
                if (*argv[3] == VERBOSE) {
                    Verbose = 1;
                    fprintf(stdout,"%c", COUNT);
                }
            do_count(csa);
            break;
        case LOCATE:
            if (argc > 3)
                if (*argv[3] == VERBOSE) {
                    Verbose = 1;
                    fprintf(stdout,"%c", LOCATE);
                }
            do_locate(csa);
            break;
        default:
            fprintf(stderr, "Unknow option: main ru\n");
            exit(1);
    }
    return 0;
}
コード例 #2
0
/*
 * Temporary usage: run_queries <index file> <type> [length] [V]
 */
int main(int argc, char* argv[])
{
    int error = 0;
    char* filename;
    char querytype;

    if (argc < 2)	{
        usage(argv[0]);
        exit(1);
    }

    filename = argv[1];
    querytype = *argv[2];

    CSA_TYPE csa;
    fprintf(stderr, "Load from file %s\n",(string(argv[1]) + "." + string(SDSL_XSTR(SUF))).c_str());
    Load_time = getTime();
    load_from_file(csa, (string(argv[1]) + "." + string(SDSL_XSTR(SUF))).c_str());
    IFERROR(error);
    Load_time = getTime() - Load_time;
    fprintf(stderr, "# Load_index_time_in_sec = %.2f\n", Load_time);
    fprintf(stderr, "# text_size = %lld\n", csa.size()-1);

    Index_size = size_in_bytes(csa);
    IFERROR(error);
    Text_length = csa.size()-1; // -1 since we added a sentinel character
//	error = get_length(Index, &Text_length);
    IFERROR(error);
    /*	Index_size /=1024; */
    fprintf(stderr, "# Index_size_in_bytes = %lu\n", Index_size);
#ifdef USE_HP
    bool mapped = mm::map_hp();
    fprintf(stderr, "# hugepages = %i\n", (int)mapped);
#endif

    switch (querytype) {
        case COUNT:
            if (argc > 3)
                if (*argv[3] == VERBOSE) {
                    Verbose = 1;
                    fprintf(stdout,"%c", COUNT);
                }
            do_count(csa);
            break;
        case LOCATE:
            if (argc > 3)
                if (*argv[3] == VERBOSE) {
                    Verbose = 1;
                    fprintf(stdout,"%c", LOCATE);
                }
            do_locate(csa);
            break;
        case EXTRACT:
            if (argc > 3)
                if (*argv[3] == VERBOSE) {
                    Verbose = 1;
                    fprintf(stdout,"%c", EXTRACT);
                }

            do_extract(csa);
            break;
            /*		case DISPLAY:
            			if (argc < 4) {
            				usage(argv[0]);
            				exit (1);
            			}
            			if (argc > 4)
            				if (*argv[4] == VERBOSE){
            						Verbose = 1;
            						fprintf(stdout,"%c", DISPLAY);

            				}
            			do_display((ulong) atol(argv[3]));
            			break;
        */		default:
            fprintf(stderr, "Unknow option: main ru\n");
            exit(1);
    }
#ifdef USE_HP
    if (mapped) {
        mm::unmap_hp();
    }
#endif

//	error = free_index(Index);
    IFERROR(error);

    return 0;
}