Minor: added support in C++ sandbox to choose implementation and check
from command line
This commit is contained in:
parent
a03d83579b
commit
d081c19178
|
|
@ -18,10 +18,28 @@ int main(int argc, char** argv)
|
||||||
if(argc >= 3 && string(argv[2]) == "1")
|
if(argc >= 3 && string(argv[2]) == "1")
|
||||||
use_old_read_testcase = true;
|
use_old_read_testcase = true;
|
||||||
unsigned chunk_size = 10000;
|
unsigned chunk_size = 10000;
|
||||||
if(argc >= 4)
|
bool do_check = true;
|
||||||
chunk_size = strtol(argv[3],0,10);
|
uint64_t mask = ~(0ull);
|
||||||
|
for(int i=3;i<argc;++i)
|
||||||
do_compute(argv[1], use_old_read_testcase, chunk_size);
|
{
|
||||||
|
if(strncmp(argv[i], "-chunk_size", 15) == 0)
|
||||||
|
{
|
||||||
|
++i;
|
||||||
|
chunk_size = strtol(argv[i],0,10);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if(strncmp(argv[i], "-mask", 15) == 0)
|
||||||
|
{
|
||||||
|
++i;
|
||||||
|
mask = strtoll(argv[i],0,16);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if(strncmp(argv[i], "-no-check", 15) == 0)
|
||||||
|
do_check = false;
|
||||||
|
}
|
||||||
|
if(mask != (~0ull))
|
||||||
|
initialize_function_pointers(mask);
|
||||||
|
do_compute(argv[1], use_old_read_testcase, chunk_size, do_check);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -68,7 +68,7 @@ void initialize_function_pointers(uint64_t mask)
|
||||||
g_compute_full_prob_double = compute_full_prob_avxd<double>;
|
g_compute_full_prob_double = compute_full_prob_avxd<double>;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if(is_sse41_supported() && (mask & (1<< SSE41_CUSTOM_IDX)))
|
if(is_sse41_supported() && (mask & ((1<< SSE41_CUSTOM_IDX) | (1<<SSE42_CUSTOM_IDX))))
|
||||||
{
|
{
|
||||||
cout << "Using SSE4.1 accelerated implementation of PairHMM\n";
|
cout << "Using SSE4.1 accelerated implementation of PairHMM\n";
|
||||||
g_compute_full_prob_float = compute_full_prob_sses<float>;
|
g_compute_full_prob_float = compute_full_prob_sses<float>;
|
||||||
|
|
@ -299,10 +299,9 @@ uint64_t diff_time(struct timespec& prev_time)
|
||||||
}
|
}
|
||||||
|
|
||||||
//#define DUMP_COMPUTE_VALUES 1
|
//#define DUMP_COMPUTE_VALUES 1
|
||||||
#define CHECK_VALUES 1
|
|
||||||
#define BATCH_SIZE 10000
|
#define BATCH_SIZE 10000
|
||||||
#define RUN_HYBRID
|
#define RUN_HYBRID
|
||||||
void do_compute(char* filename, bool use_old_read_testcase, unsigned chunk_size)
|
void do_compute(char* filename, bool use_old_read_testcase, unsigned chunk_size, bool do_check)
|
||||||
{
|
{
|
||||||
FILE* fptr = 0;
|
FILE* fptr = 0;
|
||||||
ifstream ifptr;
|
ifstream ifptr;
|
||||||
|
|
@ -322,10 +321,7 @@ void do_compute(char* filename, bool use_old_read_testcase, unsigned chunk_size)
|
||||||
uint64_t vector_compute_time = 0;
|
uint64_t vector_compute_time = 0;
|
||||||
uint64_t baseline_compute_time = 0;
|
uint64_t baseline_compute_time = 0;
|
||||||
uint64_t num_double_calls = 0;
|
uint64_t num_double_calls = 0;
|
||||||
bool all_ok = true;
|
bool all_ok = do_check ? true : false;
|
||||||
#ifndef CHECK_VALUES
|
|
||||||
all_ok = false;
|
|
||||||
#endif
|
|
||||||
while(1)
|
while(1)
|
||||||
{
|
{
|
||||||
int break_value = use_old_read_testcase ? read_testcase(&tc, fptr) : read_mod_testcase(ifptr,&tc,true);
|
int break_value = use_old_read_testcase ? read_testcase(&tc, fptr) : read_mod_testcase(ifptr,&tc,true);
|
||||||
|
|
@ -360,29 +356,30 @@ void do_compute(char* filename, bool use_old_read_testcase, unsigned chunk_size)
|
||||||
results_vec[i] = result;
|
results_vec[i] = result;
|
||||||
}
|
}
|
||||||
vector_compute_time += diff_time(start_time);
|
vector_compute_time += diff_time(start_time);
|
||||||
#ifdef CHECK_VALUES
|
if(do_check)
|
||||||
get_time(&start_time);
|
{
|
||||||
|
get_time(&start_time);
|
||||||
#pragma omp parallel for schedule(dynamic,chunk_size)
|
#pragma omp parallel for schedule(dynamic,chunk_size)
|
||||||
for(unsigned i=0;i<tc_vector.size();++i)
|
for(unsigned i=0;i<tc_vector.size();++i)
|
||||||
{
|
|
||||||
testcase& tc = tc_vector[i];
|
|
||||||
double baseline_result = compute_full_prob<double>(&tc);
|
|
||||||
baseline_result = log10(baseline_result) - log10(ldexp(1.0, 1020.0));
|
|
||||||
baseline_results_vec[i] = baseline_result;
|
|
||||||
}
|
|
||||||
baseline_compute_time += diff_time(start_time);
|
|
||||||
for(unsigned i=0;i<tc_vector.size();++i)
|
|
||||||
{
|
|
||||||
double baseline_result = baseline_results_vec[i];
|
|
||||||
double abs_error = fabs(baseline_result-results_vec[i]);
|
|
||||||
double rel_error = (baseline_result != 0) ? fabs(abs_error/baseline_result) : 0;
|
|
||||||
if(abs_error > 1e-5 && rel_error > 1e-5)
|
|
||||||
{
|
{
|
||||||
cout << std::scientific << baseline_result << " "<<results_vec[i]<<"\n";
|
testcase& tc = tc_vector[i];
|
||||||
all_ok = false;
|
double baseline_result = compute_full_prob<double>(&tc);
|
||||||
|
baseline_result = log10(baseline_result) - log10(ldexp(1.0, 1020.0));
|
||||||
|
baseline_results_vec[i] = baseline_result;
|
||||||
|
}
|
||||||
|
baseline_compute_time += diff_time(start_time);
|
||||||
|
for(unsigned i=0;i<tc_vector.size();++i)
|
||||||
|
{
|
||||||
|
double baseline_result = baseline_results_vec[i];
|
||||||
|
double abs_error = fabs(baseline_result-results_vec[i]);
|
||||||
|
double rel_error = (baseline_result != 0) ? fabs(abs_error/baseline_result) : 0;
|
||||||
|
if(abs_error > 1e-5 && rel_error > 1e-5)
|
||||||
|
{
|
||||||
|
cout << std::scientific << baseline_result << " "<<results_vec[i]<<"\n";
|
||||||
|
all_ok = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
for(unsigned i=0;i<tc_vector.size();++i)
|
for(unsigned i=0;i<tc_vector.size();++i)
|
||||||
{
|
{
|
||||||
delete tc_vector[i].rs;
|
delete tc_vector[i].rs;
|
||||||
|
|
|
||||||
|
|
@ -39,5 +39,5 @@ enum ProcessorCapabilitiesEnum
|
||||||
#define ENABLE_ALL_HARDWARE_FEATURES 0xFFFFFFFFFFFFFFFFull
|
#define ENABLE_ALL_HARDWARE_FEATURES 0xFFFFFFFFFFFFFFFFull
|
||||||
uint64_t get_machine_capabilities();
|
uint64_t get_machine_capabilities();
|
||||||
void initialize_function_pointers(uint64_t mask=ENABLE_ALL_HARDWARE_FEATURES);
|
void initialize_function_pointers(uint64_t mask=ENABLE_ALL_HARDWARE_FEATURES);
|
||||||
void do_compute(char* filename, bool use_old_read_testcase=true, unsigned chunk_size=10000);
|
void do_compute(char* filename, bool use_old_read_testcase=true, unsigned chunk_size=10000, bool do_check=true);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue