8 #include "misc/utils.h"
10 #ifdef MULTITHREAD_SUPPORT
12 const int MAX_THREADS = 64;
19 int main(int argc, char** argv)
21 std::cout << "RLCSA display test" << std::endl;
24 std::cout << "Usage: display_test basename sequences max_length [threads [random_seed]]" << std::endl;
28 std::cout << "Base name: " << argv[1] << std::endl;
30 sint sequences = std::max(atoi(argv[2]), 1);
31 std::cout << "Sequences: " << sequences << std::endl;
33 usint max_length = std::max(atoi(argv[3]), 1);
34 std::cout << "Prefix length: " << max_length << std::endl;
37 #ifdef MULTITHREAD_SUPPORT
40 threads = std::min(MAX_THREADS, std::max(atoi(argv[4]), 1));
43 std::cout << "Threads: " << threads << std::endl;
45 usint seed = 0xDEADBEEF;
50 std::cout << "Random seed: " << seed << std::endl;
51 std::cout << std::endl;
54 if(!rlcsa.supportsDisplay())
56 std::cerr << "Error: Display is not supported!" << std::endl;
60 rlcsa.reportSize(true);
63 usint seq_num, seq_total = rlcsa.getNumberOfSequences();
66 double start = readTimer();
68 uchar* buffer = new uchar[max_length];
69 #ifdef MULTITHREAD_SUPPORT
72 uchar* buffers[threads]; buffers[0] = buffer;
73 for(i = 1; i < threads; i++)
75 buffers[i] = new uchar[max_length];
77 omp_set_num_threads(threads);
78 #pragma omp parallel private(seq_num, length, thread_id)
80 #pragma omp for schedule(dynamic, 1)
81 for(i = 0; i < sequences; i++)
85 seq_num = rand() % seq_total;
87 thread_id = omp_get_thread_num();
88 length = rlcsa.displayPrefix(seq_num, max_length, buffers[thread_id]);
95 for(i = 1; i < threads; i++) { delete[] buffers[i]; }
97 for(i = 0; i < sequences; i++)
99 seq_num = rand() % seq_total;
100 total += rlcsa.displayPrefix(seq_num, max_length, buffer);
105 double time = readTimer() - start;
106 double megabytes = total / (double)MEGABYTE;
107 std::cout << megabytes << " megabytes in " << time << " seconds (" << (megabytes / time) << " MB/s)" << std::endl;
108 std::cout << std::endl;