* \param cb_data Pointer to the CudaBufferData instance.
*/
void CudaBufferCullCompletedSlices(CudaBufferData *cb_data,
- CudaBufferCulledInfo *culled_info)
+ CudaBufferCulledInfo *culled_info,
+ uint32_t size_limit)
{
culled_info->no_of_items = 0;
culled_info->d_buffer_reset = 0;
SCMutexLock(&cb_data->m);
int buffer_reset = 0;
+ uint32_t d_buffer_write_temp = 0;
+ uint32_t op_buffer_write_temp = 0;
if ((cb_data->d_buffer_write >=
(cb_data->d_buffer_len * CUDA_BUFFER_BUFFER_ROTATION_LIMIT)) &&
(cb_data->d_buffer_read != 0))
{
SCLogDebug("d_buffer reset");
+ d_buffer_write_temp = cb_data->d_buffer_write;
cb_data->d_buffer_write = 0;
buffer_reset = 1;
culled_info->d_buffer_reset = 1;
(cb_data->op_buffer_read != 0))
{
SCLogDebug("op_buffer reset");
+ op_buffer_write_temp = cb_data->op_buffer_write;
cb_data->op_buffer_write = 0;
buffer_reset = 1;
culled_info->op_buffer_reset = 1;
CudaBufferSlice *slice_temp = cb_data->slice_head;
CudaBufferSlice *max_culled_slice = NULL;
+ uint32_t curr_size = 0;
while (slice_temp != NULL) {
if (!SC_ATOMIC_GET(slice_temp->done)) {
}
}
+ if (curr_size + (slice_temp->end_offset - slice_temp->start_offset + 1) > size_limit) {
+ if (buffer_reset) {
+ cb_data->op_buffer_write = op_buffer_write_temp;
+ cb_data->d_buffer_write = d_buffer_write_temp;
+ culled_info->d_buffer_reset = 0;
+ culled_info->op_buffer_reset = 0;
+ }
+ break;
+ }
+
max_culled_slice = slice_temp;
+ curr_size += (slice_temp->end_offset - slice_temp->start_offset + 1);
slice_temp = slice_temp->next;
}
}
CudaBufferCulledInfo culled_info;
memset(&culled_info, 0, sizeof(CudaBufferCulledInfo));
- CudaBufferCullCompletedSlices(data, &culled_info);
+ CudaBufferCullCompletedSlices(data, &culled_info, UTIL_MPM_CUDA_GPU_TRANSFER_SIZE);
if (data->slice_head != NULL || data->slice_tail != NULL) {
printf("failure 17\n");
result = 0;
CudaBufferCulledInfo culled_info;
memset(&culled_info, 0, sizeof(CudaBufferCulledInfo));
- CudaBufferCullCompletedSlices(data, &culled_info);
+ CudaBufferCullCompletedSlices(data, &culled_info, UTIL_MPM_CUDA_GPU_TRANSFER_SIZE);
if (culled_info.no_of_items != 0) {
printf("failure 5\n");
goto end;
SC_ATOMIC_SET(slice2->done, 1);
- CudaBufferCullCompletedSlices(data, &culled_info);
+ CudaBufferCullCompletedSlices(data, &culled_info, UTIL_MPM_CUDA_GPU_TRANSFER_SIZE);
if (culled_info.no_of_items != 0) {
printf("failure 9\n");
goto end;
SC_ATOMIC_SET(slice1->done, 1);
- CudaBufferCullCompletedSlices(data, &culled_info);
+ CudaBufferCullCompletedSlices(data, &culled_info, UTIL_MPM_CUDA_GPU_TRANSFER_SIZE);
if (culled_info.no_of_items != 2) {
printf("failure 13\n");
goto end;
goto end;
}
- CudaBufferCullCompletedSlices(data, &culled_info);
+ CudaBufferCullCompletedSlices(data, &culled_info, UTIL_MPM_CUDA_GPU_TRANSFER_SIZE);
if (culled_info.no_of_items != 0) {
printf("failure 22\n");
goto end;
}
/* culling */
- CudaBufferCullCompletedSlices(data, &culled_info);
+ CudaBufferCullCompletedSlices(data, &culled_info, UTIL_MPM_CUDA_GPU_TRANSFER_SIZE);
if (culled_info.no_of_items != 1) {
printf("failure 30\n");
goto end;
SC_ATOMIC_SET(slice_temp->done, 1);
slice_temp = slice_temp->next;
}
- CudaBufferCullCompletedSlices(data, &culled_info);
+ CudaBufferCullCompletedSlices(data, &culled_info, UTIL_MPM_CUDA_GPU_TRANSFER_SIZE);
if (data->slice_head != NULL || data->slice_tail != NULL) {
printf("failure 35\n");
result = 0;
CudaBufferCulledInfo culled_info;
memset(&culled_info, 0, sizeof(CudaBufferCulledInfo));
- CudaBufferCullCompletedSlices(data, &culled_info);
+ CudaBufferCullCompletedSlices(data, &culled_info, UTIL_MPM_CUDA_GPU_TRANSFER_SIZE);
if (culled_info.no_of_items != 0) {
printf("failure 1\n");
goto end;
SC_ATOMIC_SET(slice_temp->done, 1);
slice_temp = slice_temp->next;
}
- CudaBufferCullCompletedSlices(data, &culled_info);
+ CudaBufferCullCompletedSlices(data, &culled_info, UTIL_MPM_CUDA_GPU_TRANSFER_SIZE);
if (data->slice_head != NULL || data->slice_tail != NULL) {
printf("failure 7\n");
result = 0;
printf("failure 1\n");
goto end;
}
- CudaBufferCullCompletedSlices(data, &culled_info);
+ CudaBufferCullCompletedSlices(data, &culled_info, UTIL_MPM_CUDA_GPU_TRANSFER_SIZE);
if (culled_info.no_of_items != 1) {
printf("failure 2\n");
goto end;
SC_ATOMIC_SET(slice2->done, 1);
SC_ATOMIC_SET(slice3->done, 1);
- CudaBufferCullCompletedSlices(data, &culled_info);
+ CudaBufferCullCompletedSlices(data, &culled_info, UTIL_MPM_CUDA_GPU_TRANSFER_SIZE);
if (culled_info.no_of_items != 2) {
printf("failure 5\n");
goto end;
SC_ATOMIC_SET(slice_temp->done, 1);
slice_temp = slice_temp->next;
}
- CudaBufferCullCompletedSlices(data, &culled_info);
+ CudaBufferCullCompletedSlices(data, &culled_info, UTIL_MPM_CUDA_GPU_TRANSFER_SIZE);
if (data->slice_head != NULL || data->slice_tail != NULL) {
printf("failure 8\n");
goto end;
SC_ATOMIC_SET(slice_temp->done, 1);
slice_temp = slice_temp->next;
}
- CudaBufferCullCompletedSlices(data, &culled_info);
+ CudaBufferCullCompletedSlices(data, &culled_info, UTIL_MPM_CUDA_GPU_TRANSFER_SIZE);
if (data->slice_head != NULL || data->slice_tail != NULL) {
printf("failure 9\n");
result = 0;
CudaBufferCulledInfo culled_info;
memset(&culled_info, 0, sizeof(CudaBufferCulledInfo));
- CudaBufferCullCompletedSlices(data, &culled_info);
+ CudaBufferCullCompletedSlices(data, &culled_info, UTIL_MPM_CUDA_GPU_TRANSFER_SIZE);
CudaBufferReportCulledConsumption(data, &culled_info);
SC_ATOMIC_SET(slice2->done, 1);
SC_ATOMIC_SET(slice3->done, 1);
- CudaBufferCullCompletedSlices(data, &culled_info);
+ CudaBufferCullCompletedSlices(data, &culled_info, UTIL_MPM_CUDA_GPU_TRANSFER_SIZE);
CudaBufferReportCulledConsumption(data, &culled_info);
slice1 = CudaBufferGetSlice(data, 16, NULL);
if (slice1 == NULL) {
SC_ATOMIC_SET(slice_temp->done, 1);
slice_temp = slice_temp->next;
}
- CudaBufferCullCompletedSlices(data, &culled_info);
+ CudaBufferCullCompletedSlices(data, &culled_info, UTIL_MPM_CUDA_GPU_TRANSFER_SIZE);
if (data->slice_head != NULL || data->slice_tail != NULL) {
printf("failure 4\n");
result = 0;
}
/* culling */
- CudaBufferCullCompletedSlices(data, &culled_info);
+ CudaBufferCullCompletedSlices(data, &culled_info, UTIL_MPM_CUDA_GPU_TRANSFER_SIZE);
if (data->d_buffer_write != 56 || data->d_buffer_read != 0 ||
data->op_buffer_write != 7 || data->op_buffer_read != 0 ||
data->no_of_items != 7) {
goto end;
}
- CudaBufferCullCompletedSlices(data, &culled_info);
+ CudaBufferCullCompletedSlices(data, &culled_info, UTIL_MPM_CUDA_GPU_TRANSFER_SIZE);
if (data->d_buffer_write != 0 || data->d_buffer_read != 56 ||
data->op_buffer_write != 7 || data->op_buffer_read != 7 ||
data->no_of_items != 7) {
goto end;
}
- CudaBufferCullCompletedSlices(data, &culled_info);
+ CudaBufferCullCompletedSlices(data, &culled_info, UTIL_MPM_CUDA_GPU_TRANSFER_SIZE);
if (data->d_buffer_write != 40 || data->d_buffer_read != 0 ||
data->op_buffer_write != 12 || data->op_buffer_read != 7 ||
data->no_of_items != 12) {
SC_ATOMIC_SET(slice_temp->done, 1);
slice_temp = slice_temp->next;
}
- CudaBufferCullCompletedSlices(data, &culled_info);
+ CudaBufferCullCompletedSlices(data, &culled_info, UTIL_MPM_CUDA_GPU_TRANSFER_SIZE);
if (data->slice_head != NULL || data->slice_tail != NULL) {
printf("failure 13\n");
result = 0;