traceback.cu 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261
  1. /*
  2. * nvbio
  3. * Copyright (c) 2011-2014, NVIDIA CORPORATION. All rights reserved.
  4. *
  5. * Redistribution and use in source and binary forms, with or without
  6. * modification, are permitted provided that the following conditions are met:
  7. * * Redistributions of source code must retain the above copyright
  8. * notice, this list of conditions and the following disclaimer.
  9. * * Redistributions in binary form must reproduce the above copyright
  10. * notice, this list of conditions and the following disclaimer in the
  11. * documentation and/or other materials provided with the distribution.
  12. * * Neither the name of the NVIDIA CORPORATION nor the
  13. * names of its contributors may be used to endorse or promote products
  14. * derived from this software without specific prior written permission.
  15. *
  16. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
  17. * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
  18. * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  19. * DISCLAIMED. IN NO EVENT SHALL NVIDIA CORPORATION BE LIABLE FOR ANY
  20. * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
  21. * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  22. * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  23. * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  24. * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  25. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  26. */
  27. #include <nvBowtie/bowtie2/cuda/traceback.h>
  28. #include <nvBowtie/bowtie2/cuda/traceback_impl.h>
  29. #include <nvBowtie/bowtie2/cuda/pipeline_states.h>
  30. namespace nvbio {
  31. namespace bowtie2 {
  32. namespace cuda {
  33. //
  34. // execute a batch of banded-alignment traceback calculations
  35. //
  36. void banded_traceback_best(
  37. const uint32 aln_idx,
  38. const uint32 count,
  39. const uint32* idx,
  40. io::Alignment* best_data,
  41. const uint32 best_stride,
  42. const uint32 band_len,
  43. const TracebackPipelineState<EditDistanceScoringScheme>& pipeline,
  44. const ParamsPOD& params)
  45. {
  46. if (aln_idx)
  47. banded_traceback_best_t<1>( count, idx, best_data, best_stride, band_len, pipeline, params );
  48. else
  49. banded_traceback_best_t<0>( count, idx, best_data, best_stride, band_len, pipeline, params );
  50. }
  51. //
  52. // execute a batch of banded-alignment traceback calculations
  53. //
  54. void banded_traceback_best(
  55. const uint32 aln_idx,
  56. const uint32 count,
  57. const uint32* idx,
  58. io::Alignment* best_data,
  59. const uint32 best_stride,
  60. const uint32 band_len,
  61. const TracebackPipelineState<SmithWatermanScoringScheme<> >& pipeline,
  62. const ParamsPOD& params)
  63. {
  64. if (aln_idx)
  65. banded_traceback_best_t<1>( count, idx, best_data, best_stride, band_len, pipeline, params );
  66. else
  67. banded_traceback_best_t<0>( count, idx, best_data, best_stride, band_len, pipeline, params );
  68. }
  69. //
  70. // execute a batch of opposite alignment traceback calculations
  71. //
  72. void opposite_traceback_best(
  73. const uint32 aln_idx,
  74. const uint32 count,
  75. const uint32* idx,
  76. io::Alignment* best_data,
  77. const uint32 best_stride,
  78. const TracebackPipelineState<EditDistanceScoringScheme>& pipeline,
  79. const ParamsPOD& params)
  80. {
  81. if (aln_idx)
  82. opposite_traceback_best_t<1>( count, idx, best_data, best_stride, pipeline, params );
  83. else
  84. opposite_traceback_best_t<0>( count, idx, best_data, best_stride, pipeline, params );
  85. }
  86. //
  87. // execute a batch of opposite alignment traceback calculations
  88. //
  89. void opposite_traceback_best(
  90. const uint32 aln_idx,
  91. const uint32 count,
  92. const uint32* idx,
  93. io::Alignment* best_data,
  94. const uint32 best_stride,
  95. const TracebackPipelineState<SmithWatermanScoringScheme<> >& pipeline,
  96. const ParamsPOD& params)
  97. {
  98. if (aln_idx)
  99. opposite_traceback_best_t<1>( count, idx, best_data, best_stride, pipeline, params );
  100. else
  101. opposite_traceback_best_t<0>( count, idx, best_data, best_stride, pipeline, params );
  102. }
  103. //
  104. // execute a batch of banded-alignment traceback calculations
  105. //
  106. void banded_traceback_all(
  107. const uint32 count,
  108. const uint32* idx,
  109. const uint32 buffer_offset,
  110. const uint32 buffer_size,
  111. io::Alignment* alignments,
  112. const uint32 band_len,
  113. const AllMappingPipelineState<EditDistanceScoringScheme>& pipeline,
  114. const ParamsPOD& params)
  115. {
  116. banded_traceback_all_t( count, idx, buffer_offset, buffer_size, alignments, band_len, pipeline, params );
  117. }
  118. //
  119. // execute a batch of banded-alignment traceback calculations
  120. //
  121. void banded_traceback_all(
  122. const uint32 count,
  123. const uint32* idx,
  124. const uint32 buffer_offset,
  125. const uint32 buffer_size,
  126. io::Alignment* alignments,
  127. const uint32 band_len,
  128. const AllMappingPipelineState<SmithWatermanScoringScheme<> >& pipeline,
  129. const ParamsPOD& params)
  130. {
  131. banded_traceback_all_t( count, idx, buffer_offset, buffer_size, alignments, band_len, pipeline, params );
  132. }
  133. //
  134. // finish a batch of alignment calculations
  135. //
  136. void finish_alignment_best(
  137. const uint32 aln_idx,
  138. const uint32 count,
  139. const uint32* idx,
  140. io::Alignment* best_data,
  141. const uint32 best_stride,
  142. const uint32 band_len,
  143. const TracebackPipelineState<EditDistanceScoringScheme>& pipeline,
  144. const SmithWatermanScoringScheme<> scoring_scheme,
  145. const ParamsPOD& params)
  146. {
  147. if (aln_idx)
  148. finish_alignment_best_t<1>( count, idx, best_data, best_stride, band_len, pipeline, scoring_scheme, params );
  149. else
  150. finish_alignment_best_t<0>( count, idx, best_data, best_stride, band_len, pipeline, scoring_scheme, params );
  151. }
  152. //
  153. // finish a batch of alignment calculations
  154. //
  155. void finish_alignment_best(
  156. const uint32 aln_idx,
  157. const uint32 count,
  158. const uint32* idx,
  159. io::Alignment* best_data,
  160. const uint32 best_stride,
  161. const uint32 band_len,
  162. const TracebackPipelineState<SmithWatermanScoringScheme<> >& pipeline,
  163. const SmithWatermanScoringScheme<> scoring_scheme,
  164. const ParamsPOD& params)
  165. {
  166. if (aln_idx)
  167. finish_alignment_best_t<1>( count, idx, best_data, best_stride, band_len, pipeline, scoring_scheme, params );
  168. else
  169. finish_alignment_best_t<0>( count, idx, best_data, best_stride, band_len, pipeline, scoring_scheme, params );
  170. }
  171. //
  172. // finish a batch of opposite alignment calculations
  173. //
  174. void finish_opposite_alignment_best(
  175. const uint32 aln_idx,
  176. const uint32 count,
  177. const uint32* idx,
  178. io::Alignment* best_data,
  179. const uint32 best_stride,
  180. const uint32 band_len,
  181. const TracebackPipelineState<EditDistanceScoringScheme>& pipeline,
  182. const SmithWatermanScoringScheme<> scoring_scheme,
  183. const ParamsPOD& params)
  184. {
  185. if (aln_idx)
  186. finish_opposite_alignment_best_t<1>( count, idx, best_data, best_stride, band_len, pipeline, scoring_scheme, params );
  187. else
  188. finish_opposite_alignment_best_t<0>( count, idx, best_data, best_stride, band_len, pipeline, scoring_scheme, params );
  189. }
  190. //
  191. // finish a batch of opposite alignment calculations
  192. //
  193. void finish_opposite_alignment_best(
  194. const uint32 aln_idx,
  195. const uint32 count,
  196. const uint32* idx,
  197. io::Alignment* best_data,
  198. const uint32 best_stride,
  199. const uint32 band_len,
  200. const TracebackPipelineState<SmithWatermanScoringScheme<> >& pipeline,
  201. const SmithWatermanScoringScheme<> scoring_scheme,
  202. const ParamsPOD& params)
  203. {
  204. if (aln_idx)
  205. finish_opposite_alignment_best_t<1>( count, idx, best_data, best_stride, band_len, pipeline, scoring_scheme, params );
  206. else
  207. finish_opposite_alignment_best_t<0>( count, idx, best_data, best_stride, band_len, pipeline, scoring_scheme, params );
  208. }
  209. //
  210. // finish a batch of alignment calculations, all-mapping
  211. //
  212. void finish_alignment_all(
  213. const uint32 count,
  214. const uint32* idx,
  215. const uint32 buffer_offset,
  216. const uint32 buffer_size,
  217. io::Alignment* alignments,
  218. const uint32 band_len,
  219. const AllMappingPipelineState<EditDistanceScoringScheme>& pipeline,
  220. const SmithWatermanScoringScheme<> scoring_scheme,
  221. const ParamsPOD& params)
  222. {
  223. finish_alignment_all_t( count, idx, buffer_offset, buffer_size, alignments, band_len, pipeline, scoring_scheme, params );
  224. }
  225. //
  226. // finish a batch of alignment calculations, all-mapping
  227. //
  228. void finish_alignment_all(
  229. const uint32 count,
  230. const uint32* idx,
  231. const uint32 buffer_offset,
  232. const uint32 buffer_size,
  233. io::Alignment* alignments,
  234. const uint32 band_len,
  235. const AllMappingPipelineState<SmithWatermanScoringScheme<> >& pipeline,
  236. const SmithWatermanScoringScheme<> scoring_scheme,
  237. const ParamsPOD& params)
  238. {
  239. finish_alignment_all_t( count, idx, buffer_offset, buffer_size, alignments, band_len, pipeline, scoring_scheme, params );
  240. }
  241. } // namespace cuda
  242. } // namespace bowtie2
  243. } // namespace nvbio
  244. #include <nvBowtie/bowtie2/cuda/traceback_inl.h>