@@ -20,12 +20,7 @@ void pop_sync_check_last_error( const char* file, size_t line )
20
20
void pop_check_last_error ( const char * file, size_t line )
21
21
{
22
22
cudaError_t err = cudaGetLastError ( );
23
- if ( err != cudaSuccess ) {
24
- std::cerr << __FILE__ << " :" << __LINE__ << std::endl
25
- << " called from " << file << " :" << line << std::endl
26
- << " cudaGetLastError failed: " << cudaGetErrorString (err) << std::endl;
27
- exit ( -__LINE__ );
28
- }
23
+ POP_CUDA_FATAL_TEST (err, " cudaGetLastError failed: " );
29
24
}
30
25
31
26
namespace popsift { namespace cuda {
@@ -34,11 +29,7 @@ void malloc_dev( void** ptr, int sz,
34
29
{
35
30
cudaError_t err;
36
31
err = cudaMalloc ( ptr, sz );
37
- if ( err != cudaSuccess ) {
38
- std::cerr << file << " :" << line << std::endl
39
- << " cudaMalloc failed: " << cudaGetErrorString (err) << std::endl;
40
- exit ( -__LINE__ );
41
- }
32
+ POP_CUDA_FATAL_TEST (err, " cudaMalloc failed: " );
42
33
#ifdef DEBUG_INIT_DEVICE_ALLOCATIONS
43
34
popsift::cuda::memset_sync ( *ptr, 0 , sz, file, line );
44
35
#endif // NDEBUG
@@ -51,11 +42,7 @@ void malloc_hst( void** ptr, int sz,
51
42
{
52
43
cudaError_t err;
53
44
err = cudaMallocHost ( ptr, sz );
54
- if ( err != cudaSuccess ) {
55
- std::cerr << file << " :" << line << std::endl
56
- << " cudaMallocHost failed: " << cudaGetErrorString (err) << std::endl;
57
- exit ( -__LINE__ );
58
- }
45
+ POP_CUDA_FATAL_TEST (err, " cudaMallocHost failed: " );
59
46
#ifdef DEBUG_INIT_DEVICE_ALLOCATIONS
60
47
memset ( *ptr, 0 , sz );
61
48
#endif // NDEBUG
@@ -74,16 +61,13 @@ void memcpy_async( void* dst, const void* src, size_t sz,
74
61
cudaError_t err;
75
62
err = cudaMemcpyAsync ( dst, src, sz, type, stream );
76
63
if ( err != cudaSuccess ) {
77
- cerr << file << " :" << line << endl
78
- << " " << " Failed to copy "
79
- << (type==cudaMemcpyHostToDevice?" host-to-device" :" device-to-host" )
80
- << " : " ;
81
- cerr << cudaGetErrorString (err) << endl;
82
- cerr << " src ptr=" << hex << (size_t )src << dec << endl
83
- << " dst ptr=" << hex << (size_t )dst << dec << endl;
84
- exit ( -__LINE__ );
64
+ std::stringstream ss;
65
+ ss << " Failed to copy " << (type == cudaMemcpyHostToDevice ? " host-to-device" : " device-to-host" ) << " : " ;
66
+ ss << cudaGetErrorString (err) << endl;
67
+ ss << " src ptr=" << hex << (size_t )src << dec << endl
68
+ << " dst ptr=" << hex << (size_t )dst << dec << endl;
69
+ POP_FATAL (ss.str ());
85
70
}
86
- POP_CUDA_FATAL_TEST ( err, " Failed to copy host-to-device: " );
87
71
}
88
72
89
73
void memcpy_sync ( void * dst, const void * src, size_t sz, cudaMemcpyKind type, const char * file, size_t line )
@@ -95,37 +79,27 @@ void memcpy_sync( void* dst, const void* src, size_t sz, cudaMemcpyKind type, co
95
79
cudaError_t err;
96
80
err = cudaMemcpy ( dst, src, sz, type );
97
81
if ( err != cudaSuccess ) {
98
- cerr << " " << " Failed to copy "
99
- << (type==cudaMemcpyHostToDevice?" host-to-device" :" device-to-host" )
100
- << " : " ;
101
- cerr << cudaGetErrorString (err) << endl;
102
- cerr << " src ptr=" << hex << (size_t )src << dec << endl
103
- << " dst ptr=" << hex << (size_t )dst << dec << endl;
104
- exit ( -__LINE__ );
82
+ std::stringstream ss;
83
+ ss << " Failed to copy " << (type == cudaMemcpyHostToDevice ? " host-to-device" : " device-to-host" ) << " : " ;
84
+ ss << cudaGetErrorString (err) << endl;
85
+ ss << " src ptr=" << hex << (size_t )src << dec << endl
86
+ << " dst ptr=" << hex << (size_t )dst << dec << endl;
87
+ POP_FATAL (ss.str ())
105
88
}
106
- POP_CUDA_FATAL_TEST ( err, " Failed to copy host-to-device: " );
107
89
}
108
90
109
91
void memset_async ( void * ptr, int value, size_t bytes, cudaStream_t stream, const char * file, size_t line )
110
92
{
111
93
cudaError_t err;
112
94
err = cudaMemsetAsync ( ptr, value, bytes, stream );
113
- if ( err != cudaSuccess ) {
114
- std::cerr << file << " :" << line << std::endl
115
- << " cudaMemsetAsync failed: " << cudaGetErrorString (err) << std::endl;
116
- exit ( -__LINE__ );
117
- }
95
+ POP_CUDA_FATAL_TEST (err, " cudaMemsetAsync failed: " );
118
96
}
119
97
120
98
void memset_sync ( void * ptr, int value, size_t bytes, const char * file, size_t line )
121
99
{
122
100
cudaError_t err;
123
101
err = cudaMemset ( ptr, value, bytes );
124
- if ( err != cudaSuccess ) {
125
- std::cerr << file << " :" << line << std::endl
126
- << " cudaMemset failed: " << cudaGetErrorString (err) << std::endl;
127
- exit ( -__LINE__ );
128
- }
102
+ POP_CUDA_FATAL_TEST (err, " cudaMemset failed: " );
129
103
}
130
104
} }
131
105
@@ -135,68 +109,44 @@ cudaStream_t stream_create( const char* file, size_t line )
135
109
cudaStream_t stream;
136
110
cudaError_t err;
137
111
err = cudaStreamCreate ( &stream );
138
- if ( err != cudaSuccess ) {
139
- std::cerr << file << " :" << line << std::endl
140
- << " cudaStreamCreate failed: " << cudaGetErrorString (err) << std::endl;
141
- exit ( -__LINE__ );
142
- }
112
+ POP_CUDA_FATAL_TEST (err, " cudaStreamCreate failed: " );
143
113
return stream;
144
114
}
145
115
void stream_destroy ( cudaStream_t s, const char * file, size_t line )
146
116
{
147
117
cudaError_t err;
148
118
err = cudaStreamDestroy ( s );
149
- if ( err != cudaSuccess ) {
150
- std::cerr << file << " :" << line << std::endl
151
- << " cudaStreamDestroy failed: " << cudaGetErrorString (err) << std::endl;
152
- exit ( -__LINE__ );
153
- }
119
+ POP_CUDA_FATAL_TEST (err, " cudaStreamDestroy failed: " );
154
120
}
155
121
cudaEvent_t event_create ( const char * file, size_t line )
156
122
{
157
123
cudaEvent_t ev;
158
124
cudaError_t err;
159
125
err = cudaEventCreate ( &ev );
160
- if ( err != cudaSuccess ) {
161
- std::cerr << file << " :" << line << std::endl
162
- << " cudaEventCreate failed: " << cudaGetErrorString (err) << std::endl;
163
- exit ( -__LINE__ );
164
- }
126
+ POP_CUDA_FATAL_TEST (err, " cudaEventCreate failed: " );
165
127
return ev;
166
128
}
167
129
void event_destroy ( cudaEvent_t ev, const char * file, size_t line )
168
130
{
169
131
cudaError_t err;
170
132
err = cudaEventDestroy ( ev );
171
- if ( err != cudaSuccess ) {
172
- std::cerr << file << " :" << line << std::endl
173
- << " cudaEventDestroy failed: " << cudaGetErrorString (err) << std::endl;
174
- exit ( -__LINE__ );
175
- }
133
+ POP_CUDA_FATAL_TEST (err, " cudaEventDestroy failed: " );
176
134
}
177
135
void event_record ( cudaEvent_t ev, cudaStream_t s, const char * file, size_t line )
178
136
{
179
137
cudaError_t err;
180
138
err = cudaEventRecord ( ev, s );
181
- if ( err != cudaSuccess ) {
182
- std::cerr << file << " :" << line << std::endl
183
- << " cudaEventRecord failed: " << cudaGetErrorString (err) << std::endl;
184
- exit ( -__LINE__ );
185
- }
139
+ POP_CUDA_FATAL_TEST (err, " cudaEventRecord failed: " );
186
140
}
187
141
void event_wait ( cudaEvent_t ev, cudaStream_t s, const char * file, size_t line )
188
142
{
189
143
cudaError_t err;
190
144
err = cudaStreamWaitEvent ( s, ev, 0 );
191
- if ( err != cudaSuccess ) {
192
- std::cerr << file << " :" << line << std::endl
193
- << " cudaStreamWaitEvent failed: " << cudaGetErrorString (err) << std::endl;
194
- exit ( -__LINE__ );
195
- }
145
+ POP_CUDA_FATAL_TEST (err, " cudaStreamWaitEvent failed: " );
196
146
}
197
147
198
148
float event_diff ( cudaEvent_t from, cudaEvent_t to )
199
- {
149
+ {
200
150
float ms;
201
151
cudaEventElapsedTime ( &ms, from, to );
202
152
return ms;
0 commit comments