The ALF MPMD programming model supports multiple computational kernels in a single accelerator execution image. To allow the ALF runtime to differentiate between different functions for different kernels, you need to export these functions to the ALF runtime. Some macros are provided to make sure the function exporting can be performed in a platform-neutral way. In each accelerator side execution image, there must be at least one computational kernel API exporting definition section. However the maximum allowed number of sections is platform-dependent.
/* API implementations for task "foo" */ int foo_comp_kernel(...) {...} int foo_input_prepare(...) {...} int foo_output_prepare(...) {...} int foo_ctx_setup(...) {...} int foo_ctx_merge(...) {...} /* API implementations for task "bar" */ int bar_comp_kernel(...) {...} int bar_input_prepare(...) {...} int bar_output_prepare(...) {...} int bar_ctx_setup(...) {...} int bar_ctx_merge(...) {...} /* API exporting definition section */ ALF_ACCEL_API_LIST_BEGIN /* for task "foo" */ ALF_ACCEL_EXPORT_API ("foo_comp_kernel", foo_comp_kernel); ALF_ACCEL_EXPORT_API ("foo_input_prepare", foo_input_prepare); ALF_ACCEL_EXPORT_API ("foo_output_prepare", foo_output_prepare); ALF_ACCEL_EXPORT_API ("foo_ctx_setup", foo_ctx_setup); ALF_ACCEL_EXPORT_API ("foo_ctx_merge", foo_ctx_merge); /* for tas "bar" */ ALF_ACCEL_EXPORT_API ("bar_comp_kernel", bar_comp_kernel); ALF_ACCEL_EXPORT_API ("bar_input_prepare", bar_input_prepare); ALF_ACCEL_EXPORT_API ("bar_output_prepare", bar_output_prepare); ALF_ACCEL_EXPORT_API ("bar_ctx_setup", bar_ctx_setup); ALF_ACCEL_EXPORT_API ("bar_ctx_merge", bar_ctx_merge); ALF_ACCEL_EXPORT_API_LIST_END