From fb219f0fbfbe9567e6f6eabd551ef877fd3b1b11 Mon Sep 17 00:00:00 2001 From: Antoniu Pop Date: Thu, 17 Mar 2022 09:11:57 +0000 Subject: [PATCH] feat(runtime): increase the limit of task input parameters to 16. --- .../distributed_generic_task_server.hpp | 162 ++++++++++ compiler/lib/Runtime/DFRuntime.cpp | 300 ++++++++++++++++++ 2 files changed, 462 insertions(+) diff --git a/compiler/include/concretelang/Runtime/distributed_generic_task_server.hpp b/compiler/include/concretelang/Runtime/distributed_generic_task_server.hpp index b93bceb45..a7a6e50e7 100644 --- a/compiler/include/concretelang/Runtime/distributed_generic_task_server.hpp +++ b/compiler/include/concretelang/Runtime/distributed_generic_task_server.hpp @@ -171,6 +171,58 @@ struct GenericComputeServer : component_base { inputs.params[3], inputs.params[4], inputs.params[5], inputs.params[6], inputs.params[7], output); break; + case 9: + wfn(inputs.params[0], inputs.params[1], inputs.params[2], + inputs.params[3], inputs.params[4], inputs.params[5], + inputs.params[6], inputs.params[7], inputs.params[8], output); + break; + case 10: + wfn(inputs.params[0], inputs.params[1], inputs.params[2], + inputs.params[3], inputs.params[4], inputs.params[5], + inputs.params[6], inputs.params[7], inputs.params[8], + inputs.params[9], output); + break; + case 11: + wfn(inputs.params[0], inputs.params[1], inputs.params[2], + inputs.params[3], inputs.params[4], inputs.params[5], + inputs.params[6], inputs.params[7], inputs.params[8], + inputs.params[9], inputs.params[10], output); + break; + case 12: + wfn(inputs.params[0], inputs.params[1], inputs.params[2], + inputs.params[3], inputs.params[4], inputs.params[5], + inputs.params[6], inputs.params[7], inputs.params[8], + inputs.params[9], inputs.params[10], inputs.params[11], output); + break; + case 13: + wfn(inputs.params[0], inputs.params[1], inputs.params[2], + inputs.params[3], inputs.params[4], inputs.params[5], + inputs.params[6], inputs.params[7], inputs.params[8], + inputs.params[9], inputs.params[10], inputs.params[11], + inputs.params[12], output); + break; + case 14: + wfn(inputs.params[0], inputs.params[1], inputs.params[2], + inputs.params[3], inputs.params[4], inputs.params[5], + inputs.params[6], inputs.params[7], inputs.params[8], + inputs.params[9], inputs.params[10], inputs.params[11], + inputs.params[12], inputs.params[13], output); + break; + case 15: + wfn(inputs.params[0], inputs.params[1], inputs.params[2], + inputs.params[3], inputs.params[4], inputs.params[5], + inputs.params[6], inputs.params[7], inputs.params[8], + inputs.params[9], inputs.params[10], inputs.params[11], + inputs.params[12], inputs.params[13], inputs.params[14], output); + break; + case 16: + wfn(inputs.params[0], inputs.params[1], inputs.params[2], + inputs.params[3], inputs.params[4], inputs.params[5], + inputs.params[6], inputs.params[7], inputs.params[8], + inputs.params[9], inputs.params[10], inputs.params[11], + inputs.params[12], inputs.params[13], inputs.params[14], + inputs.params[15], output); + break; default: HPX_THROW_EXCEPTION(hpx::no_success, "GenericComputeServer::execute_task", @@ -220,6 +272,61 @@ struct GenericComputeServer : component_base { inputs.params[3], inputs.params[4], inputs.params[5], inputs.params[6], inputs.params[7], output1, output2); break; + case 9: + wfn(inputs.params[0], inputs.params[1], inputs.params[2], + inputs.params[3], inputs.params[4], inputs.params[5], + inputs.params[6], inputs.params[7], inputs.params[8], output1, + output2); + break; + case 10: + wfn(inputs.params[0], inputs.params[1], inputs.params[2], + inputs.params[3], inputs.params[4], inputs.params[5], + inputs.params[6], inputs.params[7], inputs.params[8], + inputs.params[9], output1, output2); + break; + case 11: + wfn(inputs.params[0], inputs.params[1], inputs.params[2], + inputs.params[3], inputs.params[4], inputs.params[5], + inputs.params[6], inputs.params[7], inputs.params[8], + inputs.params[9], inputs.params[10], output1, output2); + break; + case 12: + wfn(inputs.params[0], inputs.params[1], inputs.params[2], + inputs.params[3], inputs.params[4], inputs.params[5], + inputs.params[6], inputs.params[7], inputs.params[8], + inputs.params[9], inputs.params[10], inputs.params[11], output1, + output2); + break; + case 13: + wfn(inputs.params[0], inputs.params[1], inputs.params[2], + inputs.params[3], inputs.params[4], inputs.params[5], + inputs.params[6], inputs.params[7], inputs.params[8], + inputs.params[9], inputs.params[10], inputs.params[11], + inputs.params[12], output1, output2); + break; + case 14: + wfn(inputs.params[0], inputs.params[1], inputs.params[2], + inputs.params[3], inputs.params[4], inputs.params[5], + inputs.params[6], inputs.params[7], inputs.params[8], + inputs.params[9], inputs.params[10], inputs.params[11], + inputs.params[12], inputs.params[13], output1, output2); + break; + case 15: + wfn(inputs.params[0], inputs.params[1], inputs.params[2], + inputs.params[3], inputs.params[4], inputs.params[5], + inputs.params[6], inputs.params[7], inputs.params[8], + inputs.params[9], inputs.params[10], inputs.params[11], + inputs.params[12], inputs.params[13], inputs.params[14], output1, + output2); + break; + case 16: + wfn(inputs.params[0], inputs.params[1], inputs.params[2], + inputs.params[3], inputs.params[4], inputs.params[5], + inputs.params[6], inputs.params[7], inputs.params[8], + inputs.params[9], inputs.params[10], inputs.params[11], + inputs.params[12], inputs.params[13], inputs.params[14], + inputs.params[15], output1, output2); + break; default: HPX_THROW_EXCEPTION(hpx::no_success, "GenericComputeServer::execute_task", @@ -271,6 +378,61 @@ struct GenericComputeServer : component_base { inputs.params[3], inputs.params[4], inputs.params[5], inputs.params[6], inputs.params[7], output1, output2, output3); break; + case 9: + wfn(inputs.params[0], inputs.params[1], inputs.params[2], + inputs.params[3], inputs.params[4], inputs.params[5], + inputs.params[6], inputs.params[7], inputs.params[8], output1, + output2, output3); + break; + case 10: + wfn(inputs.params[0], inputs.params[1], inputs.params[2], + inputs.params[3], inputs.params[4], inputs.params[5], + inputs.params[6], inputs.params[7], inputs.params[8], + inputs.params[9], output1, output2, output3); + break; + case 11: + wfn(inputs.params[0], inputs.params[1], inputs.params[2], + inputs.params[3], inputs.params[4], inputs.params[5], + inputs.params[6], inputs.params[7], inputs.params[8], + inputs.params[9], inputs.params[10], output1, output2, output3); + break; + case 12: + wfn(inputs.params[0], inputs.params[1], inputs.params[2], + inputs.params[3], inputs.params[4], inputs.params[5], + inputs.params[6], inputs.params[7], inputs.params[8], + inputs.params[9], inputs.params[10], inputs.params[11], output1, + output2, output3); + break; + case 13: + wfn(inputs.params[0], inputs.params[1], inputs.params[2], + inputs.params[3], inputs.params[4], inputs.params[5], + inputs.params[6], inputs.params[7], inputs.params[8], + inputs.params[9], inputs.params[10], inputs.params[11], + inputs.params[12], output1, output2, output3); + break; + case 14: + wfn(inputs.params[0], inputs.params[1], inputs.params[2], + inputs.params[3], inputs.params[4], inputs.params[5], + inputs.params[6], inputs.params[7], inputs.params[8], + inputs.params[9], inputs.params[10], inputs.params[11], + inputs.params[12], inputs.params[13], output1, output2, output3); + break; + case 15: + wfn(inputs.params[0], inputs.params[1], inputs.params[2], + inputs.params[3], inputs.params[4], inputs.params[5], + inputs.params[6], inputs.params[7], inputs.params[8], + inputs.params[9], inputs.params[10], inputs.params[11], + inputs.params[12], inputs.params[13], inputs.params[14], output1, + output2, output3); + break; + case 16: + wfn(inputs.params[0], inputs.params[1], inputs.params[2], + inputs.params[3], inputs.params[4], inputs.params[5], + inputs.params[6], inputs.params[7], inputs.params[8], + inputs.params[9], inputs.params[10], inputs.params[11], + inputs.params[12], inputs.params[13], inputs.params[14], + inputs.params[15], output1, output2, output3); + break; default: HPX_THROW_EXCEPTION(hpx::no_success, "GenericComputeServer::execute_task", diff --git a/compiler/lib/Runtime/DFRuntime.cpp b/compiler/lib/Runtime/DFRuntime.cpp index 2ee3c3ef9..697979e64 100644 --- a/compiler/lib/Runtime/DFRuntime.cpp +++ b/compiler/lib/Runtime/DFRuntime.cpp @@ -258,6 +258,306 @@ void _dfr_create_async_task(wfnptr wfn, size_t num_params, size_t num_outputs, *(hpx::shared_future *)params[7])); break; + case 9: + oodf = std::move(hpx::dataflow( + [wfnname, param_sizes, output_sizes](hpx::shared_future param0, + hpx::shared_future param1, + hpx::shared_future param2, + hpx::shared_future param3, + hpx::shared_future param4, + hpx::shared_future param5, + hpx::shared_future param6, + hpx::shared_future param7, + hpx::shared_future param8) + -> hpx::future { + std::vector params = { + param0.get(), param1.get(), param2.get(), + param3.get(), param4.get(), param5.get(), + param6.get(), param7.get(), param8.get()}; + OpaqueInputData oid(wfnname, params, param_sizes, output_sizes); + return gcc[_dfr_find_next_execution_locality()].execute_task(oid); + }, + *(hpx::shared_future *)params[0], + *(hpx::shared_future *)params[1], + *(hpx::shared_future *)params[2], + *(hpx::shared_future *)params[3], + *(hpx::shared_future *)params[4], + *(hpx::shared_future *)params[5], + *(hpx::shared_future *)params[6], + *(hpx::shared_future *)params[7], + *(hpx::shared_future *)params[8])); + break; + + case 10: + oodf = std::move(hpx::dataflow( + [wfnname, param_sizes, output_sizes](hpx::shared_future param0, + hpx::shared_future param1, + hpx::shared_future param2, + hpx::shared_future param3, + hpx::shared_future param4, + hpx::shared_future param5, + hpx::shared_future param6, + hpx::shared_future param7, + hpx::shared_future param8, + hpx::shared_future param9) + -> hpx::future { + std::vector params = { + param0.get(), param1.get(), param2.get(), param3.get(), + param4.get(), param5.get(), param6.get(), param7.get(), + param8.get(), param9.get()}; + OpaqueInputData oid(wfnname, params, param_sizes, output_sizes); + return gcc[_dfr_find_next_execution_locality()].execute_task(oid); + }, + *(hpx::shared_future *)params[0], + *(hpx::shared_future *)params[1], + *(hpx::shared_future *)params[2], + *(hpx::shared_future *)params[3], + *(hpx::shared_future *)params[4], + *(hpx::shared_future *)params[5], + *(hpx::shared_future *)params[6], + *(hpx::shared_future *)params[7], + *(hpx::shared_future *)params[8], + *(hpx::shared_future *)params[9])); + break; + + case 11: + oodf = std::move(hpx::dataflow( + [wfnname, param_sizes, output_sizes](hpx::shared_future param0, + hpx::shared_future param1, + hpx::shared_future param2, + hpx::shared_future param3, + hpx::shared_future param4, + hpx::shared_future param5, + hpx::shared_future param6, + hpx::shared_future param7, + hpx::shared_future param8, + hpx::shared_future param9, + hpx::shared_future param10) + -> hpx::future { + std::vector params = { + param0.get(), param1.get(), param2.get(), param3.get(), + param4.get(), param5.get(), param6.get(), param7.get(), + param8.get(), param9.get(), param10.get()}; + OpaqueInputData oid(wfnname, params, param_sizes, output_sizes); + return gcc[_dfr_find_next_execution_locality()].execute_task(oid); + }, + *(hpx::shared_future *)params[0], + *(hpx::shared_future *)params[1], + *(hpx::shared_future *)params[2], + *(hpx::shared_future *)params[3], + *(hpx::shared_future *)params[4], + *(hpx::shared_future *)params[5], + *(hpx::shared_future *)params[6], + *(hpx::shared_future *)params[7], + *(hpx::shared_future *)params[8], + *(hpx::shared_future *)params[9], + *(hpx::shared_future *)params[10])); + break; + + case 12: + oodf = std::move(hpx::dataflow( + [wfnname, param_sizes, output_sizes](hpx::shared_future param0, + hpx::shared_future param1, + hpx::shared_future param2, + hpx::shared_future param3, + hpx::shared_future param4, + hpx::shared_future param5, + hpx::shared_future param6, + hpx::shared_future param7, + hpx::shared_future param8, + hpx::shared_future param9, + hpx::shared_future param10, + hpx::shared_future param11) + -> hpx::future { + std::vector params = { + param0.get(), param1.get(), param2.get(), param3.get(), + param4.get(), param5.get(), param6.get(), param7.get(), + param8.get(), param9.get(), param10.get(), param11.get()}; + OpaqueInputData oid(wfnname, params, param_sizes, output_sizes); + return gcc[_dfr_find_next_execution_locality()].execute_task(oid); + }, + *(hpx::shared_future *)params[0], + *(hpx::shared_future *)params[1], + *(hpx::shared_future *)params[2], + *(hpx::shared_future *)params[3], + *(hpx::shared_future *)params[4], + *(hpx::shared_future *)params[5], + *(hpx::shared_future *)params[6], + *(hpx::shared_future *)params[7], + *(hpx::shared_future *)params[8], + *(hpx::shared_future *)params[9], + *(hpx::shared_future *)params[10], + *(hpx::shared_future *)params[11])); + break; + + case 13: + oodf = std::move(hpx::dataflow( + [wfnname, param_sizes, output_sizes](hpx::shared_future param0, + hpx::shared_future param1, + hpx::shared_future param2, + hpx::shared_future param3, + hpx::shared_future param4, + hpx::shared_future param5, + hpx::shared_future param6, + hpx::shared_future param7, + hpx::shared_future param8, + hpx::shared_future param9, + hpx::shared_future param10, + hpx::shared_future param11, + hpx::shared_future param12) + -> hpx::future { + std::vector params = { + param0.get(), param1.get(), param2.get(), param3.get(), + param4.get(), param5.get(), param6.get(), param7.get(), + param8.get(), param9.get(), param10.get(), param11.get(), + param12.get()}; + OpaqueInputData oid(wfnname, params, param_sizes, output_sizes); + return gcc[_dfr_find_next_execution_locality()].execute_task(oid); + }, + *(hpx::shared_future *)params[0], + *(hpx::shared_future *)params[1], + *(hpx::shared_future *)params[2], + *(hpx::shared_future *)params[3], + *(hpx::shared_future *)params[4], + *(hpx::shared_future *)params[5], + *(hpx::shared_future *)params[6], + *(hpx::shared_future *)params[7], + *(hpx::shared_future *)params[8], + *(hpx::shared_future *)params[9], + *(hpx::shared_future *)params[10], + *(hpx::shared_future *)params[11], + *(hpx::shared_future *)params[12])); + break; + + case 14: + oodf = std::move(hpx::dataflow( + [wfnname, param_sizes, output_sizes](hpx::shared_future param0, + hpx::shared_future param1, + hpx::shared_future param2, + hpx::shared_future param3, + hpx::shared_future param4, + hpx::shared_future param5, + hpx::shared_future param6, + hpx::shared_future param7, + hpx::shared_future param8, + hpx::shared_future param9, + hpx::shared_future param10, + hpx::shared_future param11, + hpx::shared_future param12, + hpx::shared_future param13) + -> hpx::future { + std::vector params = { + param0.get(), param1.get(), param2.get(), param3.get(), + param4.get(), param5.get(), param6.get(), param7.get(), + param8.get(), param9.get(), param10.get(), param11.get(), + param12.get(), param13.get()}; + OpaqueInputData oid(wfnname, params, param_sizes, output_sizes); + return gcc[_dfr_find_next_execution_locality()].execute_task(oid); + }, + *(hpx::shared_future *)params[0], + *(hpx::shared_future *)params[1], + *(hpx::shared_future *)params[2], + *(hpx::shared_future *)params[3], + *(hpx::shared_future *)params[4], + *(hpx::shared_future *)params[5], + *(hpx::shared_future *)params[6], + *(hpx::shared_future *)params[7], + *(hpx::shared_future *)params[8], + *(hpx::shared_future *)params[9], + *(hpx::shared_future *)params[10], + *(hpx::shared_future *)params[11], + *(hpx::shared_future *)params[12], + *(hpx::shared_future *)params[13])); + break; + + case 15: + oodf = std::move(hpx::dataflow( + [wfnname, param_sizes, output_sizes](hpx::shared_future param0, + hpx::shared_future param1, + hpx::shared_future param2, + hpx::shared_future param3, + hpx::shared_future param4, + hpx::shared_future param5, + hpx::shared_future param6, + hpx::shared_future param7, + hpx::shared_future param8, + hpx::shared_future param9, + hpx::shared_future param10, + hpx::shared_future param11, + hpx::shared_future param12, + hpx::shared_future param13, + hpx::shared_future param14) + -> hpx::future { + std::vector params = { + param0.get(), param1.get(), param2.get(), param3.get(), + param4.get(), param5.get(), param6.get(), param7.get(), + param8.get(), param9.get(), param10.get(), param11.get(), + param12.get(), param13.get(), param14.get()}; + OpaqueInputData oid(wfnname, params, param_sizes, output_sizes); + return gcc[_dfr_find_next_execution_locality()].execute_task(oid); + }, + *(hpx::shared_future *)params[0], + *(hpx::shared_future *)params[1], + *(hpx::shared_future *)params[2], + *(hpx::shared_future *)params[3], + *(hpx::shared_future *)params[4], + *(hpx::shared_future *)params[5], + *(hpx::shared_future *)params[6], + *(hpx::shared_future *)params[7], + *(hpx::shared_future *)params[8], + *(hpx::shared_future *)params[9], + *(hpx::shared_future *)params[10], + *(hpx::shared_future *)params[11], + *(hpx::shared_future *)params[12], + *(hpx::shared_future *)params[13], + *(hpx::shared_future *)params[14])); + break; + + case 16: + oodf = std::move(hpx::dataflow( + [wfnname, param_sizes, output_sizes](hpx::shared_future param0, + hpx::shared_future param1, + hpx::shared_future param2, + hpx::shared_future param3, + hpx::shared_future param4, + hpx::shared_future param5, + hpx::shared_future param6, + hpx::shared_future param7, + hpx::shared_future param8, + hpx::shared_future param9, + hpx::shared_future param10, + hpx::shared_future param11, + hpx::shared_future param12, + hpx::shared_future param13, + hpx::shared_future param14, + hpx::shared_future param15) + -> hpx::future { + std::vector params = { + param0.get(), param1.get(), param2.get(), param3.get(), + param4.get(), param5.get(), param6.get(), param7.get(), + param8.get(), param9.get(), param10.get(), param11.get(), + param12.get(), param13.get(), param14.get(), param15.get()}; + OpaqueInputData oid(wfnname, params, param_sizes, output_sizes); + return gcc[_dfr_find_next_execution_locality()].execute_task(oid); + }, + *(hpx::shared_future *)params[0], + *(hpx::shared_future *)params[1], + *(hpx::shared_future *)params[2], + *(hpx::shared_future *)params[3], + *(hpx::shared_future *)params[4], + *(hpx::shared_future *)params[5], + *(hpx::shared_future *)params[6], + *(hpx::shared_future *)params[7], + *(hpx::shared_future *)params[8], + *(hpx::shared_future *)params[9], + *(hpx::shared_future *)params[10], + *(hpx::shared_future *)params[11], + *(hpx::shared_future *)params[12], + *(hpx::shared_future *)params[13], + *(hpx::shared_future *)params[14], + *(hpx::shared_future *)params[15])); + break; + default: HPX_THROW_EXCEPTION(hpx::no_success, "_dfr_create_async_task", "Error: number of task parameters not supported.");