diff options
| author | Tor Aamodt <[email protected]> | 2010-07-15 18:09:46 -0800 |
|---|---|---|
| committer | Tor Aamodt <[email protected]> | 2010-07-15 18:09:46 -0800 |
| commit | 69f2911e04ffb1b19eef1fafb8c040af271f656e (patch) | |
| tree | 231d3b6bdc3a202f7c255bfcf7bf2c36e32cee9e /benchmarks/CUDA/MUM/mummergpu.h | |
creating branch for adding support for CUDA 3.x and Fermi
[git-p4: depot-paths = "//depot/gpgpu_sim_research/fermi/distribution/": change = 6829]
Diffstat (limited to 'benchmarks/CUDA/MUM/mummergpu.h')
| -rw-r--r-- | benchmarks/CUDA/MUM/mummergpu.h | 170 |
1 files changed, 170 insertions, 0 deletions
diff --git a/benchmarks/CUDA/MUM/mummergpu.h b/benchmarks/CUDA/MUM/mummergpu.h new file mode 100644 index 0000000..875d3b7 --- /dev/null +++ b/benchmarks/CUDA/MUM/mummergpu.h @@ -0,0 +1,170 @@ +#include <stdlib.h> +#include "common.cu" + +extern "C" { +struct QuerySet +{ + int qfile; + + char * h_tex_array; + char* d_tex_array; + int* d_addrs_tex_array; + int* h_addrs_tex_array; + int* h_lengths_array; + int* d_lengths_array; + char** h_names; + + unsigned int count; + size_t texlen; + + // total device memory occupied by this query set + size_t bytes_on_board; +}; + + +struct AuxiliaryNodeData +{ + int length; + int depth; + int leafid; + char leafchar; + TextureAddress parent; +}; + + +struct Reference +{ + /* Reference string */ + char* str; + size_t len; + + unsigned int pitch; + void* d_ref_tex_array; //cudaArray* + char* h_ref_tex_array; + + /* Suffix tree for reference */ + void* d_node_tex_array; //really a cudaArray* + void* h_node_tex_array; //really a PixelOfNode* + + void* d_children_tex_array; //cudaArray* + void* h_children_tex_array; //PixelOfChildren* + + unsigned int tex_height; + unsigned int tex_width; + + // total device memory occupied by this query set + size_t bytes_on_board; + + AuxiliaryNodeData* aux_data; + int num_nodes; + +}; + + +// Matches are reported as a node in the suffix tree, +// plus a distance up the node's parent link for partial +// matches on the patch from the root to the node + +struct MatchCoord +{ + unsigned int node; // match node + short edge_match_length; // number of missing characters UP the parent edge +}; + +struct MatchResults +{ + // Each MatchCoord in the buffers below corresponds to the first character + // of some substring of one of the queries + MatchCoord* d_match_coords; + MatchCoord* h_match_coords; + + size_t numCoords; + + // total device memory occupied by this query set + size_t bytes_on_board; +}; + +typedef unsigned int MUMMERGPU_OPTIONS; + +enum MUMMerGPUOption { + DEFAULT, + ON_CPU = (1<<0) +}; + +//All times in milliseconds +struct Statistics +{ + float t_kernel; + float t_output; + float t_to_board; + float t_from_board; + float t_moving_tree_pages; + float t_query_read; + float t_total; + float t_construction; + + float bp_avg_query_length; +}; + +struct MatchContext +{ + char* full_ref; + size_t full_ref_len; + + Reference* ref; + QuerySet* queries; + MatchResults results; + + bool on_cpu; + + int min_match_length; + + bool reverse; + bool forwardreverse; + bool forwardcoordinates; + bool show_query_length; + bool maxmatch; + + char* stats_file; + + Statistics statistics; +}; + + +struct ReferencePage +{ + int begin; + int end; + int shadow_left; + int shadow_right; + MatchResults results; + unsigned int id; + Reference ref; +}; + + +int createReference(const char* fromFile, Reference* ref); +int destroyReference(Reference* ref); + +int createQuerySet(const char* fromFile, QuerySet* queries); +int destroyQuerySet(QuerySet* queries); + +int createMatchContext(Reference* ref, + QuerySet* queries, + MatchResults* matches, + MUMMERGPU_OPTIONS options, + int min_match_length, + char* stats_file, + bool reverse, + bool forwardreverse, + bool forwardcoordinates, + bool showQueryLength, + MatchContext* ctx); + +int destroyMatchContext(MatchContext* ctx); + + +int matchQueries(MatchContext* ctx); + +void printStringForError(int err); +} |
