Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 12 additions & 11 deletions include/raptor/search/fpga/min_ibf_fpga_oneapi.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -80,8 +80,8 @@ class min_ibf_fpga_oneapi
size_t numberOfQueries;
std::vector<std::string> ids;

unique_utilities_ptr<char> queries_host; // size: currentBufferSize
unique_utilities_ptr<HostSizeType> querySizes_host; // size: numberOfQueries
unique_utilities_ptr<char> queries_host;
unique_utilities_ptr<HostSizeType> querySizes_host;
unique_utilities_ptr<Chunk> results_host;

std::vector<sycl::event> kernelEvents;
Expand Down Expand Up @@ -240,12 +240,14 @@ class min_ibf_fpga_oneapi
std::ofstream outputStream(output_path, std::ios::app);
std::string result_string{};

size_t const max_numberOfQueries = bufferSizeBytes / MIN_QUERY_LENGTH;
size_t const chunks_per_result = technical_bins / chunk_bits;

for (buffer_data & state : double_buffer)
{
// TODO bufferSizeBytes is a way too high upper bound
state.queries_host = malloc_host_utilities<char>(bufferSizeBytes);
state.querySizes_host = malloc_host_utilities<HostSizeType>(bufferSizeBytes);
state.results_host = malloc_host_utilities<Chunk>(bufferSizeBytes);
state.querySizes_host = malloc_host_utilities<HostSizeType>(max_numberOfQueries);
state.results_host = malloc_host_utilities<Chunk>(max_numberOfQueries * chunks_per_result);

state.kernelEvents.reserve(numberOfKernelCopys * 2 + 2); // +2: Distributor, Collector
state.numberOfQueries = 0;
Expand Down Expand Up @@ -308,21 +310,20 @@ class min_ibf_fpga_oneapi

result_string.clear();

size_t const elements_per_query = technical_bins / 64;
size_t const chunks_per_query = seqan::hibf::divide_and_ceil(technical_bins, chunk_bits);
size_t const elements_per_result = technical_bins / 64;
size_t const elements_per_chunk = chunk_bits / 64;

if (elements_per_chunk * chunks_per_query != elements_per_query)
throw std::runtime_error("outputResults: elements_per_query/chunks_per_query mismatch");
if (elements_per_chunk * chunks_per_result != elements_per_result)
throw std::runtime_error("outputResults: elements_per_result/chunks_per_result mismatch");

for (size_t queryIndex = 0; queryIndex < state.ids.size(); queryIndex++)
{
// TODO: Use string view?
result_string += state.ids.at(queryIndex).substr(1, std::string::npos) + '\t';

for (size_t chunkOffset = 0; chunkOffset < chunks_per_query; ++chunkOffset)
for (size_t chunkOffset = 0; chunkOffset < chunks_per_result; ++chunkOffset)
{
Chunk & chunk = state.results_host.get()[queryIndex * chunks_per_query + chunkOffset];
Chunk & chunk = state.results_host.get()[queryIndex * chunks_per_result + chunkOffset];

for (size_t elementOffset = 0; elementOffset < elements_per_chunk; ++elementOffset)
{
Expand Down
7 changes: 5 additions & 2 deletions src/argument_parsing/search_parsing.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ void fpga_check_kernel(search_arguments const & arguments)
# undef RAPTOR_TOSTRING
}

void fpga_checks(search_arguments const & arguments, size_t const max_query_length)
void fpga_checks(search_arguments const & arguments, size_t const max_query_length, size_t const min_query_length)
{
if (!arguments.use_fpga)
return;
Expand All @@ -76,6 +76,9 @@ void fpga_checks(search_arguments const & arguments, size_t const max_query_leng
if (max_query_length > 250u)
throw sharg::parser_error{"The query length is too long. The maximum is 250."};

if (min_query_length < 50u)
throw sharg::parser_error{"The query length is too short. The minimum is 50."};

fpga_check_kernel(arguments);
}

Expand Down Expand Up @@ -319,7 +322,7 @@ void search_parsing(sharg::parser & parser)
}

#if RAPTOR_FPGA
fpga_checks(arguments, max_query_length);
fpga_checks(arguments, max_query_length, min_query_length);
#endif

// ==========================================
Expand Down