NVBIO
Main Page
Modules
Classes
Examples
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
nvbio
basic
cuda
pingpong_queues.h
Go to the documentation of this file.
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
28
#include <
nvbio/basic/cuda/arch.h
>
29
#include <
nvbio/basic/thrust_view.h
>
30
31
#pragma once
32
33
namespace
nvbio {
34
namespace
cuda {
35
98
101
109
112
119
template
<
typename
T = u
int
32>
120
struct
PingPongQueuesView
121
{
122
uint32
in_size
;
123
const
T*
in_queue
;
124
uint32
*
out_size
;
125
T*
out_queue
;
126
};
127
135
template
<
typename
T = u
int
32>
136
struct
PingPongQueues
137
{
138
typedef
PingPongQueuesView<T>
device_view_type
;
139
typedef
PingPongQueuesView<T>
plain_view_type
;
140
141
uint32
in_size
;
142
thrust::device_vector<T>
in_queue
;
143
thrust::device_vector<uint32>
out_size
;
144
thrust::device_vector<T>
out_queue
;
145
148
uint64
resize_arena
(
const
uint32
size,
const
bool
do_alloc =
true
)
149
{
150
if
(do_alloc)
151
{
152
in_size
= 0;
153
in_queue
.resize( size );
154
out_queue
.resize( size );
155
out_size
.resize(1);
156
}
157
return
2u*size*
sizeof
(T) +
sizeof
(
uint32
);
158
}
159
162
void
resize
(
const
uint32
size) {
in_size
= size; }
163
166
void
clear_output
() {
out_size
[0] = 0; }
167
170
void
swap
()
171
{
172
in_size
=
out_size
[0];
173
in_queue
.swap(
out_queue
);
174
}
175
178
const
T*
raw_input_queue
()
const
{
return
nvbio::device_view
(
in_queue
); }
179
182
const
T*
raw_output_queue
()
const
{
return
nvbio::device_view
(
out_queue
); }
183
186
T*
raw_output_queue
() {
return
nvbio::device_view
(
out_queue
); }
187
190
uint32
output_size
()
const
{
return
out_size
[0]; }
191
194
device_view_type
device_view
()
195
{
196
device_view_type
q;
197
q.
in_size
=
in_size
;
198
q.
in_queue
=
nvbio::device_view
(
in_queue
);
199
q.
out_size
=
nvbio::device_view
(
out_size
);
200
q.
out_queue
=
nvbio::device_view
(
out_queue
);
201
return
q;
202
}
203
};
204
207
208
}
// namespace cuda
209
213
template
<
typename
T>
214
cuda::PingPongQueuesView<T>
device_view
(
cuda::PingPongQueues<T>
& queues) {
return
queues.
device_view
(); }
215
219
template
<
typename
T>
220
cuda::PingPongQueuesView<T>
plain_view
(
cuda::PingPongQueues<T>
& queues) {
return
queues.
device_view
(); }
221
222
}
// namespace nvbio
Generated on Wed Feb 25 2015 08:32:54 for NVBIO by
1.8.4