Embedded Multicore Building Blocks V1.0.0
mtapi.h
1 /*
2  * MTAPI header contains the public MTAPI API and data type definitions.
3  *
4  * This file defines the MTAPI API. it has to be included by any application
5  * using MTAPI.
6  *
7  * \copyright
8  * Copyright (c) 2012, The Multicore Association.
9  * All rights reserved.
10  * Redistribution and use in source and binary forms, with or without
11  * modification, are permitted provided that the following conditions are met:
12  * (1) Redistributions of source code must retain the above copyright notice,
13  * this list of conditions and the following disclaimer.
14  * (2) Redistributions in binary form must reproduce the above copyright
15  * notice, this list of conditions and the following disclaimer in the
16  * documentation and/or other materials provided with the distribution.
17  * (3) Neither the name of the Multicore Association nor the names of its
18  * contributors may be used to endorse or promote products derived from
19  * this software without specific prior written permission.
20  *
21  * \note
22  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
23  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
26  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
27  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
28  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
29  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
30  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
31  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32  * POSSIBILITY OF SUCH DAMAGE.
33  */
34 
35 #ifndef EMBB_MTAPI_C_MTAPI_H_
36 #define EMBB_MTAPI_C_MTAPI_H_
37 
245 #include <stdint.h>
246 #include <embb/base/c/core_set.h>
247 #include <embb/base/c/thread.h>
248 
249 #ifdef __cplusplus
250 extern "C" {
251 #endif
252 
253 
254 /* ---- MCA ORGANIZATION IDS ----------------------------------------------- */
255 
256 #define MCA_ORG_ID_PSI 0 /* PolyCore Software, Inc. */
257 #define MCA_ORG_ID_FSL 1 /* Freescale, Inc. */
258 #define MCA_ORG_ID_MGC 2 /* Mentor Graphics, Corp. */
259 #define MCA_ORG_ID_ADI 3 /* Analog Devices */
260 #define MCA_ORG_ID_SIE 4 /* Siemens */
261 #define MCA_ORG_ID_EMB 5 /* EMB2 project */
262 #define MCA_ORG_ID_TBD 6 /* TBD */
263 
264 
265 /* ---- BASIC DEFINITIONS -------------------------------------------------- */
266 
268 #define MTAPI_IN const
269 
270 #define MTAPI_OUT
271 
272 #define MTAPI_INOUT
273 
274 
275 /* ---- BASIC DATA TYPES --------------------------------------------------- */
276 
277 /* MCA type definitions */
278 typedef int mca_int_t;
279 typedef int8_t mca_int8_t;
280 typedef int16_t mca_int16_t;
281 typedef int32_t mca_int32_t;
282 typedef int64_t mca_int64_t;
283 
284 typedef unsigned int mca_uint_t;
285 typedef uint8_t mca_uint8_t;
286 typedef uint16_t mca_uint16_t;
287 typedef uint32_t mca_uint32_t;
288 typedef uint64_t mca_uint64_t;
289 
290 typedef unsigned char mca_boolean_t;
291 
292 typedef unsigned int mca_domain_t;
293 typedef unsigned int mca_node_t;
294 typedef unsigned int mca_status_t;
295 typedef int mca_timeout_t;
296 
297 /* the MTAPI data types */
298 typedef mca_int_t mtapi_int_t;
299 typedef mca_int8_t mtapi_int8_t;
300 typedef mca_int16_t mtapi_int16_t;
301 typedef mca_int32_t mtapi_int32_t;
302 typedef mca_int64_t mtapi_int64_t;
303 
304 typedef mca_uint_t mtapi_uint_t;
305 typedef mca_uint8_t mtapi_uint8_t;
306 typedef mca_uint16_t mtapi_uint16_t;
307 typedef mca_uint32_t mtapi_uint32_t;
308 typedef mca_uint64_t mtapi_uint64_t;
309 
310 typedef mca_domain_t mtapi_domain_t;
311 typedef mca_node_t mtapi_node_t;
312 typedef mca_timeout_t mtapi_timeout_t;
313 
314 typedef mca_boolean_t mtapi_boolean_t;
315 typedef mtapi_uint_t mtapi_size_t;
316 
322  mtapi_uint_t mtapi_version;
326  mtapi_uint_t organization_id;
328  mtapi_uint_t implementation_version;
332  mtapi_uint_t number_of_domains;
334  mtapi_uint_t number_of_nodes;
336  mtapi_uint_t hardware_concurrency;
337  mtapi_uint_t used_memory;
338 };
339 
345 
350 typedef mtapi_uint64_t mtapi_affinity_t;
351 
352 
353 /* ---- BASIC enumerations ------------------------------------------------- */
354 
359 enum mtapi_status_enum {
360  /* generic */
361  MTAPI_SUCCESS,
362  MTAPI_TIMEOUT,
363  MTAPI_ERR_PARAMETER,
364  MTAPI_ERR_ATTR_READONLY,
366  MTAPI_ERR_ATTR_NUM,
367  MTAPI_ERR_ATTR_SIZE,
369  /* node specific */
370  MTAPI_ERR_NODE_INITFAILED,
372  MTAPI_ERR_NODE_INITIALIZED,
375  MTAPI_ERR_NODE_INVALID,
376  MTAPI_ERR_DOMAIN_INVALID,
377  MTAPI_ERR_NODE_NOTINIT,
379  /* action specific */
380  MTAPI_ERR_ACTION_INVALID,
384  MTAPI_ERR_ACTION_EXISTS,
387  MTAPI_ERR_ACTION_LIMIT,
389  MTAPI_ERR_ACTION_NUM_INVALID,
393  MTAPI_ERR_ACTION_FAILED,
398  MTAPI_ERR_ACTION_CANCELLED,
402  MTAPI_ERR_ACTION_DELETED,
409  MTAPI_ERR_ACTION_DISABLED,
417  /* context specific */
418  MTAPI_ERR_CONTEXT_INVALID,
420  MTAPI_ERR_CONTEXT_OUTOFCONTEXT,
427  /* task specific */
428  MTAPI_ERR_TASK_INVALID,
429  MTAPI_ERR_TASK_LIMIT,
432  /* job specific */
433  MTAPI_ERR_JOB_INVALID,
435  /* queue specific */
436  MTAPI_ERR_QUEUE_INVALID,
438  MTAPI_ERR_QUEUE_DELETED,
440  MTAPI_ERR_QUEUE_DISABLED,
442  MTAPI_ERR_QUEUE_LIMIT,
445  /* group specific */
446  MTAPI_ERR_GROUP_INVALID,
447  MTAPI_ERR_GROUP_LIMIT,
449  MTAPI_GROUP_COMPLETED,
454  /* others */
455  MTAPI_ERR_UNKNOWN,
456  MTAPI_ERR_BUFFER_SIZE,
457  MTAPI_ERR_RESULT_SIZE,
459  MTAPI_ERR_ARG_SIZE,
460  MTAPI_ERR_WAIT_PENDING,
464  /* unsupported functions */
465  MTAPI_ERR_FUNC_NOT_IMPLEMENTED,
468  MTAPI_ERR_ARG_NOT_IMPLEMENTED,
473  /* features that may be not supported by some implementations */
474  MTAPI_ERR_RUNTIME_REMOTETASKS_NOTSUPPORTED,
479  MTAPI_ERR_RUNTIME_LOADBALANCING_NOTSUPPORTED,
491  /* core affinity specific */
492  MTAPI_ERR_CORE_NUM,
495 };
496 typedef enum mtapi_status_enum mtapi_status_t;
503 enum mtapi_task_state_enum {
504  MTAPI_TASK_INTENTIONALLY_UNUSED,
505  MTAPI_TASK_ERROR,
506  MTAPI_TASK_PRENATAL,
508  MTAPI_TASK_CREATED,
509  MTAPI_TASK_SCHEDULED,
510  MTAPI_TASK_RUNNING,
511  MTAPI_TASK_WAITING,
512  MTAPI_TASK_RETAINED,
514  MTAPI_TASK_DELETED,
515  MTAPI_TASK_CANCELLED,
520  MTAPI_TASK_COMPLETED
522 };
523 typedef enum mtapi_task_state_enum mtapi_task_state_t;
529 enum mtapi_notification_enum {
530  MTAPI_NOTIF_PREFETCH,
531  MTAPI_NOTIF_EXECUTE_NEXT
532 };
533 typedef enum mtapi_notification_enum mtapi_notification_t;
539 enum mtapi_worker_priority_type_enum {
540  MTAPI_WORKER_PRIORITY_END = 0,
541  MTAPI_WORKER_PRIORITY_DEFAULT = 1,
542  MTAPI_WORKER_PRIORITY_WORKER = 100,
543  MTAPI_WORKER_PRIORITY_WORKER_0 = MTAPI_WORKER_PRIORITY_WORKER + 0,
544  MTAPI_WORKER_PRIORITY_WORKER_1 = MTAPI_WORKER_PRIORITY_WORKER + 1,
545  MTAPI_WORKER_PRIORITY_WORKER_2 = MTAPI_WORKER_PRIORITY_WORKER + 2,
546  MTAPI_WORKER_PRIORITY_WORKER_3 = MTAPI_WORKER_PRIORITY_WORKER + 3,
547  MTAPI_WORKER_PRIORITY_WORKER_4 = MTAPI_WORKER_PRIORITY_WORKER + 4,
548  MTAPI_WORKER_PRIORITY_WORKER_5 = MTAPI_WORKER_PRIORITY_WORKER + 5,
549  MTAPI_WORKER_PRIORITY_WORKER_6 = MTAPI_WORKER_PRIORITY_WORKER + 6,
550  MTAPI_WORKER_PRIORITY_WORKER_7 = MTAPI_WORKER_PRIORITY_WORKER + 7,
551  MTAPI_WORKER_PRIORITY_WORKER_8 = MTAPI_WORKER_PRIORITY_WORKER + 8,
552  MTAPI_WORKER_PRIORITY_WORKER_9 = MTAPI_WORKER_PRIORITY_WORKER + 9,
553  MTAPI_WORKER_PRIORITY_WORKER_10 = MTAPI_WORKER_PRIORITY_WORKER + 10,
554  MTAPI_WORKER_PRIORITY_WORKER_11 = MTAPI_WORKER_PRIORITY_WORKER + 11,
555  MTAPI_WORKER_PRIORITY_WORKER_12 = MTAPI_WORKER_PRIORITY_WORKER + 12,
556  MTAPI_WORKER_PRIORITY_WORKER_13 = MTAPI_WORKER_PRIORITY_WORKER + 13,
557  MTAPI_WORKER_PRIORITY_WORKER_14 = MTAPI_WORKER_PRIORITY_WORKER + 14,
558  MTAPI_WORKER_PRIORITY_WORKER_15 = MTAPI_WORKER_PRIORITY_WORKER + 15,
559  MTAPI_WORKER_PRIORITY_WORKER_16 = MTAPI_WORKER_PRIORITY_WORKER + 16,
560  MTAPI_WORKER_PRIORITY_WORKER_17 = MTAPI_WORKER_PRIORITY_WORKER + 17,
561  MTAPI_WORKER_PRIORITY_WORKER_18 = MTAPI_WORKER_PRIORITY_WORKER + 18,
562  MTAPI_WORKER_PRIORITY_WORKER_19 = MTAPI_WORKER_PRIORITY_WORKER + 19,
563  MTAPI_WORKER_PRIORITY_WORKER_20 = MTAPI_WORKER_PRIORITY_WORKER + 20,
564  MTAPI_WORKER_PRIORITY_WORKER_21 = MTAPI_WORKER_PRIORITY_WORKER + 21,
565  MTAPI_WORKER_PRIORITY_WORKER_22 = MTAPI_WORKER_PRIORITY_WORKER + 22,
566  MTAPI_WORKER_PRIORITY_WORKER_23 = MTAPI_WORKER_PRIORITY_WORKER + 23,
567  MTAPI_WORKER_PRIORITY_WORKER_24 = MTAPI_WORKER_PRIORITY_WORKER + 24,
568  MTAPI_WORKER_PRIORITY_WORKER_25 = MTAPI_WORKER_PRIORITY_WORKER + 25,
569  MTAPI_WORKER_PRIORITY_WORKER_26 = MTAPI_WORKER_PRIORITY_WORKER + 26,
570  MTAPI_WORKER_PRIORITY_WORKER_27 = MTAPI_WORKER_PRIORITY_WORKER + 27,
571  MTAPI_WORKER_PRIORITY_WORKER_28 = MTAPI_WORKER_PRIORITY_WORKER + 28,
572  MTAPI_WORKER_PRIORITY_WORKER_29 = MTAPI_WORKER_PRIORITY_WORKER + 29,
573  MTAPI_WORKER_PRIORITY_WORKER_30 = MTAPI_WORKER_PRIORITY_WORKER + 30,
574  MTAPI_WORKER_PRIORITY_WORKER_31 = MTAPI_WORKER_PRIORITY_WORKER + 31,
575  MTAPI_WORKER_PRIORITY_WORKER_32 = MTAPI_WORKER_PRIORITY_WORKER + 32,
576  MTAPI_WORKER_PRIORITY_WORKER_33 = MTAPI_WORKER_PRIORITY_WORKER + 33,
577  MTAPI_WORKER_PRIORITY_WORKER_34 = MTAPI_WORKER_PRIORITY_WORKER + 34,
578  MTAPI_WORKER_PRIORITY_WORKER_35 = MTAPI_WORKER_PRIORITY_WORKER + 35,
579  MTAPI_WORKER_PRIORITY_WORKER_36 = MTAPI_WORKER_PRIORITY_WORKER + 36,
580  MTAPI_WORKER_PRIORITY_WORKER_37 = MTAPI_WORKER_PRIORITY_WORKER + 37,
581  MTAPI_WORKER_PRIORITY_WORKER_38 = MTAPI_WORKER_PRIORITY_WORKER + 38,
582  MTAPI_WORKER_PRIORITY_WORKER_39 = MTAPI_WORKER_PRIORITY_WORKER + 39,
583  MTAPI_WORKER_PRIORITY_WORKER_40 = MTAPI_WORKER_PRIORITY_WORKER + 40,
584  MTAPI_WORKER_PRIORITY_WORKER_41 = MTAPI_WORKER_PRIORITY_WORKER + 41,
585  MTAPI_WORKER_PRIORITY_WORKER_42 = MTAPI_WORKER_PRIORITY_WORKER + 42,
586  MTAPI_WORKER_PRIORITY_WORKER_43 = MTAPI_WORKER_PRIORITY_WORKER + 43,
587  MTAPI_WORKER_PRIORITY_WORKER_44 = MTAPI_WORKER_PRIORITY_WORKER + 44,
588  MTAPI_WORKER_PRIORITY_WORKER_45 = MTAPI_WORKER_PRIORITY_WORKER + 45,
589  MTAPI_WORKER_PRIORITY_WORKER_46 = MTAPI_WORKER_PRIORITY_WORKER + 46,
590  MTAPI_WORKER_PRIORITY_WORKER_47 = MTAPI_WORKER_PRIORITY_WORKER + 47,
591  MTAPI_WORKER_PRIORITY_WORKER_48 = MTAPI_WORKER_PRIORITY_WORKER + 48,
592  MTAPI_WORKER_PRIORITY_WORKER_49 = MTAPI_WORKER_PRIORITY_WORKER + 49,
593  MTAPI_WORKER_PRIORITY_WORKER_50 = MTAPI_WORKER_PRIORITY_WORKER + 50,
594  MTAPI_WORKER_PRIORITY_WORKER_51 = MTAPI_WORKER_PRIORITY_WORKER + 51,
595  MTAPI_WORKER_PRIORITY_WORKER_52 = MTAPI_WORKER_PRIORITY_WORKER + 52,
596  MTAPI_WORKER_PRIORITY_WORKER_53 = MTAPI_WORKER_PRIORITY_WORKER + 53,
597  MTAPI_WORKER_PRIORITY_WORKER_54 = MTAPI_WORKER_PRIORITY_WORKER + 54,
598  MTAPI_WORKER_PRIORITY_WORKER_55 = MTAPI_WORKER_PRIORITY_WORKER + 55,
599  MTAPI_WORKER_PRIORITY_WORKER_56 = MTAPI_WORKER_PRIORITY_WORKER + 56,
600  MTAPI_WORKER_PRIORITY_WORKER_57 = MTAPI_WORKER_PRIORITY_WORKER + 57,
601  MTAPI_WORKER_PRIORITY_WORKER_58 = MTAPI_WORKER_PRIORITY_WORKER + 58,
602  MTAPI_WORKER_PRIORITY_WORKER_59 = MTAPI_WORKER_PRIORITY_WORKER + 59,
603  MTAPI_WORKER_PRIORITY_WORKER_60 = MTAPI_WORKER_PRIORITY_WORKER + 60,
604  MTAPI_WORKER_PRIORITY_WORKER_61 = MTAPI_WORKER_PRIORITY_WORKER + 61,
605  MTAPI_WORKER_PRIORITY_WORKER_62 = MTAPI_WORKER_PRIORITY_WORKER + 62,
606  MTAPI_WORKER_PRIORITY_WORKER_63 = MTAPI_WORKER_PRIORITY_WORKER + 63
607 };
611 typedef enum mtapi_worker_priority_type_enum mtapi_worker_priority_type_t;
612 
618  mtapi_worker_priority_type_t type;
620 };
626 
630 enum mtapi_node_attributes_enum {
631  MTAPI_NODE_CORE_AFFINITY,
632  MTAPI_NODE_NUMCORES,
634  MTAPI_NODE_TYPE,
635  MTAPI_NODE_MAX_TASKS,
637  MTAPI_NODE_MAX_ACTIONS,
639  MTAPI_NODE_MAX_GROUPS,
641  MTAPI_NODE_MAX_QUEUES,
643  MTAPI_NODE_QUEUE_LIMIT,
645  MTAPI_NODE_MAX_JOBS,
647  MTAPI_NODE_MAX_ACTIONS_PER_JOB,
649  MTAPI_NODE_MAX_PRIORITIES,
651  MTAPI_NODE_REUSE_MAIN_THREAD,
652  MTAPI_NODE_WORKER_PRIORITIES
653 };
655 #define MTAPI_NODE_CORE_AFFINITY_SIZE sizeof(embb_core_set_t)
656 
657 #define MTAPI_NODE_NUMCORES_SIZE sizeof(mtapi_uint_t)
658 
659 #define MTAPI_NODE_TYPE_SIZE sizeof(mtapi_uint_t)
660 
661 #define MTAPI_NODE_MAX_TASKS_SIZE sizeof(mtapi_uint_t)
662 
663 #define MTAPI_NODE_MAX_ACTIONS_SIZE sizeof(mtapi_uint_t)
664 
665 #define MTAPI_NODE_MAX_GROUPS_SIZE sizeof(mtapi_uint_t)
666 
667 #define MTAPI_NODE_MAX_QUEUES_SIZE sizeof(mtapi_uint_t)
668 
669 #define MTAPI_NODE_QUEUE_LIMIT_SIZE sizeof(mtapi_uint_t)
670 
671 #define MTAPI_NODE_MAX_JOBS_SIZE sizeof(mtapi_uint_t)
672 
673 #define MTAPI_NODE_MAX_ACTIONS_PER_JOB_SIZE sizeof(mtapi_uint_t)
674 
675 #define MTAPI_NODE_MAX_PRIORITIES_SIZE sizeof(mtapi_uint_t)
676 
677 #define MTAPI_NODE_REUSE_MAIN_THREAD_SIZE sizeof(mtapi_boolean_t)
678 
679 #define MTAPI_NODE_WORKER_PRIORITIES_SIZE 0
680 
681 /* example attribute value */
682 #define MTAPI_NODE_TYPE_SMP 1
683 #define MTAPI_NODE_TYPE_DSP 2
684 
690 
692 typedef void(*mtapi_task_complete_function_t)(
693  MTAPI_IN mtapi_task_hndl_t task,
694  MTAPI_OUT mtapi_status_t* status);
695 
697 enum mtapi_task_attributes_enum {
698  MTAPI_TASK_DETACHED,
704  MTAPI_TASK_INSTANCES,
712  MTAPI_TASK_PRIORITY,
714  MTAPI_TASK_AFFINITY,
715  MTAPI_TASK_USER_DATA,
717  MTAPI_TASK_COMPLETE_FUNCTION,
719  MTAPI_TASK_PROBLEM_SIZE
721 };
723 #define MTAPI_TASK_DETACHED_SIZE sizeof(mtapi_boolean_t)
724 
725 #define MTAPI_TASK_INSTANCES_SIZE sizeof(mtapi_uint_t)
726 
727 #define MTAPI_TASK_PRIORITY_SIZE sizeof(mtapi_uint_t)
728 
729 #define MTAPI_TASK_AFFINITY_SIZE sizeof(mtapi_affinity_t)
730 
731 #define MTAPI_TASK_PROBLEM_SIZE_SIZE sizeof(mtapi_uint_t)
732 
733 
737 enum mtapi_action_attributes_enum {
738  MTAPI_ACTION_GLOBAL,
740  MTAPI_ACTION_AFFINITY,
742  MTAPI_ACTION_DOMAIN_SHARED
744 };
746 #define MTAPI_ACTION_GLOBAL_SIZE sizeof(mtapi_boolean_t)
747 
748 #define MTAPI_ACTION_AFFINITY_SIZE sizeof(mtapi_affinity_t)
749 
750 #define MTAPI_ACTION_DOMAIN_SHARED_SIZE sizeof(mtapi_boolean_t)
751 
752 
756 enum mtapi_queue_attributes_enum {
757  MTAPI_QUEUE_GLOBAL,
759  MTAPI_QUEUE_PRIORITY,
761  MTAPI_QUEUE_LIMIT,
762  MTAPI_QUEUE_ORDERED,
764  MTAPI_QUEUE_RETAIN,
766  MTAPI_QUEUE_DOMAIN_SHARED
768 };
770 #define MTAPI_QUEUE_GLOBAL_SIZE sizeof(mtapi_boolean_t)
771 
772 #define MTAPI_QUEUE_PRIORITY_SIZE sizeof(mtapi_uint_t)
773 
774 #define MTAPI_QUEUE_LIMIT_SIZE sizeof(mtapi_uint_t)
775 
776 #define MTAPI_QUEUE_ORDERED_SIZE sizeof(mtapi_boolean_t)
777 
778 #define MTAPI_QUEUE_RETAIN_SIZE sizeof(mtapi_boolean_t)
779 
780 #define MTAPI_QUEUE_DOMAIN_SHARED_SIZE sizeof(mtapi_boolean_t)
781 
782 
783 #define MTAPI_ATTRIBUTE_VALUE(value) ((void*)(value))
784 #define MTAPI_ATTRIBUTE_POINTER_AS_VALUE 0
785 
786 
787 /* ---- ATTRIBUTES --------------------------------------------------------- */
788 
795  mtapi_uint_t num_cores;
796  mtapi_uint_t type;
797  mtapi_uint_t max_tasks;
798  mtapi_uint_t max_actions;
799  mtapi_uint_t max_groups;
800  mtapi_uint_t max_queues;
801  mtapi_uint_t queue_limit;
802  mtapi_uint_t max_jobs;
803  mtapi_uint_t max_actions_per_job;
805  mtapi_uint_t max_priorities;
806  mtapi_boolean_t reuse_main_thread;
811 };
812 
818  mtapi_boolean_t global;
819  mtapi_affinity_t affinity;
820  mtapi_boolean_t domain_shared;
821 };
822 
828  mtapi_boolean_t is_detached;
829  mtapi_uint_t num_instances;
830  mtapi_uint_t priority;
831  mtapi_affinity_t affinity;
832  void * user_data;
833  mtapi_task_complete_function_t
836  mtapi_uint_t problem_size;
837 };
838 
844  mtapi_boolean_t global;
845  mtapi_uint_t priority;
846  mtapi_uint_t limit;
847  mtapi_boolean_t ordered;
848  mtapi_boolean_t retain;
849  mtapi_boolean_t domain_shared;
850 };
851 
857  mtapi_int_t some_value;
858 };
859 
865 
871 
877 
883 
889 
891 #define MTAPI_DEFAULT_NODE_ATTRIBUTES MTAPI_NULL
892 
894 #define MTAPI_DEFAULT_ACTION_ATTRIBUTES MTAPI_NULL
895 
897 #define MTAPI_DEFAULT_TASK_ATTRIBUTES MTAPI_NULL
898 
900 #define MTAPI_DEFAULT_QUEUE_ATTRIBUTES MTAPI_NULL
901 
903 #define MTAPI_DEFAULT_GROUP_ATTRIBUTES MTAPI_NULL
904 
905 
906 /* ---- FUNCTION TYPES ----------------------------------------------------- */
907 
912 typedef struct embb_mtapi_task_context_struct mtapi_task_context_t;
913 
941 typedef void(*mtapi_action_function_t)(
942  const void* args,
943  mtapi_size_t args_size,
944  void* result_buffer,
945  mtapi_size_t result_buffer_size,
946  const void* node_local_data,
949  mtapi_size_t node_local_data_size,
950  mtapi_task_context_t * context
955 );
956 
957 
958 /* ---- HANDLES and IDs ---------------------------------------------------- */
959 
960 typedef mtapi_uint_t mtapi_action_id_t;
961 typedef mtapi_uint_t mtapi_job_id_t;
962 typedef mtapi_uint_t mtapi_queue_id_t;
963 typedef mtapi_uint_t mtapi_group_id_t;
964 typedef mtapi_uint_t mtapi_task_id_t;
965 
971  mtapi_uint_t tag;
972  mtapi_action_id_t id;
973 };
974 
980 
986  mtapi_uint_t tag;
987  mtapi_job_id_t id;
988 };
989 
995 
1001  mtapi_uint_t tag;
1002  mtapi_queue_id_t id;
1003 };
1004 
1010 
1016  mtapi_uint_t tag;
1017  mtapi_group_id_t id;
1018 };
1019 
1025 
1031  mtapi_uint_t tag;
1032  mtapi_task_id_t id;
1033 };
1034 
1035 // was forward declared
1036 //typedef struct mtapi_task_hndl_struct mtapi_task_hndl_t;
1037 
1038 
1039 /* ---- BASIC CONSTANTS ---------------------------------------------------- */
1040 
1041 #define MTAPI_TRUE ((mtapi_boolean_t)1)
1042 #define MTAPI_FALSE ((mtapi_boolean_t)0)
1043 
1044 extern mtapi_group_hndl_t MTAPI_GROUP_NONE;
1045 
1046 #define MTAPI_NULL 0
1047 
1048 #define TEN_SECONDS 10000
1049 #define MTAPI_INFINITE -1
1050 #define MTAPI_NOWAIT 0
1051 
1052 #define MTAPI_NODE_MAX_TASKS_DEFAULT 1024
1053 #define MTAPI_NODE_MAX_ACTIONS_DEFAULT 1024
1054 #define MTAPI_NODE_MAX_GROUPS_DEFAULT 128
1055 #define MTAPI_NODE_MAX_QUEUES_DEFAULT 16
1056 
1057 #define MTAPI_NODE_QUEUE_LIMIT_DEFAULT 1024
1058 #define MTAPI_NODE_MAX_JOBS_DEFAULT 256
1059 #define MTAPI_NODE_MAX_ACTIONS_PER_JOB_DEFAULT 4
1060 #define MTAPI_NODE_MAX_PRIORITIES_DEFAULT 4
1061 
1062 #define MTAPI_JOB_ID_INVALID 0
1063 #define MTAPI_DOMAIN_ID_INVALID 0
1064 #define MTAPI_NODE_ID_INVALID 0
1065 
1066 #define MTAPI_TASK_ID_NONE 0
1067 #define MTAPI_GROUP_ID_NONE 0
1068 #define MTAPI_QUEUE_ID_NONE 0
1069 #define MTAPI_ACTION_ID_NONE 0
1070 
1071 
1072 /* ---- RUNTIME INIT & SHUTDOWN -------------------------------------------- */
1073 
1114 void mtapi_nodeattr_init(
1115  MTAPI_OUT mtapi_node_attributes_t* attributes,
1117  MTAPI_OUT mtapi_status_t* status
1119  );
1120 
1170 void mtapi_nodeattr_set(
1171  MTAPI_INOUT mtapi_node_attributes_t* attributes,
1173  MTAPI_IN mtapi_uint_t attribute_num,
1174  MTAPI_IN void* attribute,
1175  MTAPI_IN mtapi_size_t attribute_size,
1179  MTAPI_OUT mtapi_status_t* status
1181  );
1182 
1240 void mtapi_initialize(
1241  MTAPI_IN mtapi_domain_t domain_id,
1242  MTAPI_IN mtapi_node_t node_id,
1243  MTAPI_IN mtapi_node_attributes_t* attributes,
1245  MTAPI_OUT mtapi_info_t* mtapi_info,
1246  MTAPI_OUT mtapi_status_t* status
1248  );
1249 
1275  MTAPI_IN mtapi_node_t node,
1276  MTAPI_IN mtapi_uint_t attribute_num,
1277  MTAPI_OUT void* attribute,
1278  MTAPI_IN mtapi_size_t attribute_size,
1279  MTAPI_OUT mtapi_status_t* status
1281  );
1282 
1320 void mtapi_finalize(
1321  MTAPI_OUT mtapi_status_t* status
1323  );
1324 
1338 mtapi_domain_t mtapi_domain_id_get(
1339  MTAPI_OUT mtapi_status_t* status
1341  );
1342 
1356 mtapi_node_t mtapi_node_id_get(
1357  MTAPI_OUT mtapi_status_t* status
1359  );
1360 
1361 
1362 /* ---- ACTIONS ------------------------------------------------------------ */
1363 
1415 void mtapi_actionattr_init(
1416  MTAPI_OUT mtapi_action_attributes_t* attributes,
1418  MTAPI_OUT mtapi_status_t* status
1420  );
1421 
1484 void mtapi_actionattr_set(
1485  MTAPI_INOUT mtapi_action_attributes_t* attributes,
1487  MTAPI_IN mtapi_uint_t attribute_num,
1488  MTAPI_IN void* attribute,
1489  MTAPI_IN mtapi_size_t attribute_size,
1493  MTAPI_OUT mtapi_status_t* status
1495  );
1496 
1574 mtapi_action_hndl_t mtapi_action_create(
1575  MTAPI_IN mtapi_job_id_t job_id,
1576  MTAPI_IN mtapi_action_function_t function,
1578  MTAPI_IN void* node_local_data,
1579  MTAPI_IN mtapi_size_t node_local_data_size,
1581  MTAPI_IN mtapi_action_attributes_t* attributes,
1583  MTAPI_OUT mtapi_status_t* status
1585  );
1586 
1611  MTAPI_IN mtapi_action_hndl_t action,
1612  MTAPI_IN mtapi_uint_t attribute_num,
1613  MTAPI_IN void* attribute,
1614  MTAPI_IN mtapi_size_t attribute_size,
1618  MTAPI_OUT mtapi_status_t* status
1620  );
1621 
1648  MTAPI_IN mtapi_action_hndl_t action,
1649  MTAPI_IN mtapi_uint_t attribute_num,
1650  MTAPI_OUT void* attribute,
1651  MTAPI_IN mtapi_size_t attribute_size,
1652  MTAPI_OUT mtapi_status_t* status
1654  );
1655 
1704 void mtapi_action_delete(
1705  MTAPI_IN mtapi_action_hndl_t action,
1706  MTAPI_IN mtapi_timeout_t timeout,
1708  MTAPI_OUT mtapi_status_t* status
1710  );
1711 
1754  MTAPI_IN mtapi_action_hndl_t action,
1755  MTAPI_IN mtapi_timeout_t timeout,
1757  MTAPI_OUT mtapi_status_t* status
1759  );
1760 
1777 void mtapi_action_enable(
1778  MTAPI_IN mtapi_action_hndl_t action,
1779  MTAPI_OUT mtapi_status_t* status
1781  );
1782 
1854  MTAPI_INOUT mtapi_task_context_t* task_context,
1856  MTAPI_IN mtapi_status_t error_code,
1857  MTAPI_OUT mtapi_status_t* status
1859  );
1860 
1902  MTAPI_IN mtapi_task_context_t* task_context,
1904  MTAPI_IN mtapi_notification_t notification,
1906  MTAPI_IN void* data,
1907  MTAPI_IN mtapi_size_t data_size,
1908  MTAPI_OUT mtapi_status_t* status
1910  );
1911 
1951 mtapi_task_state_t mtapi_context_taskstate_get(
1952  MTAPI_IN mtapi_task_context_t* task_context,
1954  MTAPI_OUT mtapi_status_t* status
1956  );
1957 
1994 mtapi_uint_t mtapi_context_instnum_get(
1995  MTAPI_IN mtapi_task_context_t* task_context,
1997  MTAPI_OUT mtapi_status_t* status
1999  );
2000 
2030 mtapi_uint_t mtapi_context_numinst_get(
2031  MTAPI_IN mtapi_task_context_t* task_context,
2033  MTAPI_OUT mtapi_status_t* status
2035  );
2036 
2069 mtapi_uint_t mtapi_context_corenum_get(
2070  MTAPI_IN mtapi_task_context_t* task_context,
2072  MTAPI_OUT mtapi_status_t* status
2074  );
2075 
2076 
2077 /* ---- CORE AFFINITY MASKS ------------------------------------------------ */
2078 
2124 void mtapi_affinity_init(
2125  MTAPI_OUT mtapi_affinity_t* mask,
2126  MTAPI_IN mtapi_boolean_t affinity,
2127  MTAPI_OUT mtapi_status_t* status
2129  );
2130 
2160 void mtapi_affinity_set(
2161  MTAPI_INOUT mtapi_affinity_t* mask,
2163  MTAPI_IN mtapi_uint_t core_num,
2164  MTAPI_IN mtapi_boolean_t affinity,
2165  MTAPI_OUT mtapi_status_t* status
2167  );
2168 
2195 mtapi_boolean_t mtapi_affinity_get(
2196  MTAPI_OUT mtapi_affinity_t* mask,
2197  MTAPI_IN mtapi_uint_t core_num,
2198  MTAPI_OUT mtapi_status_t* status
2200  );
2201 
2202 
2203 /* ---- QUEUES ------------------------------------------------------------- */
2204 
2256 void mtapi_queueattr_init(
2257  MTAPI_OUT mtapi_queue_attributes_t* attributes,
2259  MTAPI_OUT mtapi_status_t* status
2261  );
2262 
2345 void mtapi_queueattr_set(
2346  MTAPI_INOUT mtapi_queue_attributes_t* attributes,
2348  MTAPI_IN mtapi_uint_t attribute_num,
2349  MTAPI_IN void* attribute,
2350  MTAPI_IN mtapi_size_t attribute_size,
2354  MTAPI_OUT mtapi_status_t* status
2356  );
2357 
2408 mtapi_queue_hndl_t mtapi_queue_create(
2409  MTAPI_IN mtapi_queue_id_t queue_id,
2410  MTAPI_IN mtapi_job_hndl_t job,
2411  MTAPI_IN mtapi_queue_attributes_t* attributes,
2413  MTAPI_OUT mtapi_status_t* status
2415  );
2416 
2443  MTAPI_IN mtapi_queue_hndl_t queue,
2444  MTAPI_IN mtapi_uint_t attribute_num,
2445  MTAPI_IN void* attribute,
2446  MTAPI_IN mtapi_size_t attribute_size,
2450  MTAPI_OUT mtapi_status_t* status
2452  );
2453 
2483  MTAPI_IN mtapi_queue_hndl_t queue,
2484  MTAPI_IN mtapi_uint_t attribute_num,
2485  MTAPI_OUT void* attribute,
2486  MTAPI_IN mtapi_size_t attribute_size,
2487  MTAPI_OUT mtapi_status_t* status
2489  );
2490 
2533 mtapi_queue_hndl_t mtapi_queue_get(
2534  MTAPI_IN mtapi_queue_id_t queue_id,
2535  MTAPI_IN mtapi_domain_t domain_id,
2536  MTAPI_OUT mtapi_status_t* status
2538  );
2539 
2591 void mtapi_queue_delete(
2592  MTAPI_IN mtapi_queue_hndl_t queue,
2593  MTAPI_IN mtapi_timeout_t timeout,
2595  MTAPI_OUT mtapi_status_t* status
2597  );
2598 
2646 void mtapi_queue_disable(
2647  MTAPI_IN mtapi_queue_hndl_t queue,
2648  MTAPI_IN mtapi_timeout_t timeout,
2650  MTAPI_OUT mtapi_status_t* status
2652  );
2653 
2668 void mtapi_queue_enable(
2669  MTAPI_IN mtapi_queue_hndl_t queue,
2670  MTAPI_OUT mtapi_status_t* status
2672  );
2673 
2674 
2675 /* ---- JOBS --------------------------------------------------------------- */
2676 
2714 mtapi_job_hndl_t mtapi_job_get(
2715  MTAPI_IN mtapi_job_id_t job_id,
2716  MTAPI_IN mtapi_domain_t domain_id,
2717  MTAPI_OUT mtapi_status_t* status
2719  );
2720 
2721 
2722 /* ---- TASKS -------------------------------------------------------------- */
2723 
2773 void mtapi_taskattr_init(
2774  MTAPI_OUT mtapi_task_attributes_t* attributes,
2776  MTAPI_OUT mtapi_status_t* status
2778  );
2779 
2871 void mtapi_taskattr_set(
2872  MTAPI_INOUT mtapi_task_attributes_t* attributes,
2874  MTAPI_IN mtapi_uint_t attribute_num,
2875  MTAPI_IN void* attribute,
2876  MTAPI_IN mtapi_size_t attribute_size,
2880  MTAPI_OUT mtapi_status_t* status
2882  );
2883 
2936  MTAPI_IN mtapi_task_id_t task_id,
2937  MTAPI_IN mtapi_job_hndl_t job,
2938  MTAPI_IN void* arguments,
2939  MTAPI_IN mtapi_size_t arguments_size,
2940  MTAPI_OUT void* result_buffer,
2941  MTAPI_IN mtapi_size_t result_size,
2942  MTAPI_IN mtapi_task_attributes_t* attributes,
2944  MTAPI_IN mtapi_group_hndl_t group,
2946  MTAPI_OUT mtapi_status_t* status
2948  );
2949 
3000  MTAPI_IN mtapi_task_id_t task_id,
3001  MTAPI_IN mtapi_queue_hndl_t queue,
3002  MTAPI_IN void* arguments,
3003  MTAPI_IN mtapi_size_t arguments_size,
3004  MTAPI_OUT void* result_buffer,
3005  MTAPI_IN mtapi_size_t result_size,
3006  MTAPI_IN mtapi_task_attributes_t* attributes,
3008  MTAPI_IN mtapi_group_hndl_t group,
3010  MTAPI_OUT mtapi_status_t* status
3012  );
3013 
3049  MTAPI_IN mtapi_task_hndl_t task,
3050  MTAPI_IN mtapi_uint_t attribute_num,
3051  MTAPI_OUT void* attribute,
3052  MTAPI_IN mtapi_size_t attribute_size,
3053  MTAPI_OUT mtapi_status_t* status
3055  );
3056 
3085 void mtapi_task_cancel(
3086  MTAPI_IN mtapi_task_hndl_t task,
3087  MTAPI_OUT mtapi_status_t* status
3089  );
3090 
3191 void mtapi_task_wait(
3192  MTAPI_IN mtapi_task_hndl_t task,
3193  MTAPI_IN mtapi_timeout_t timeout,
3195  MTAPI_OUT mtapi_status_t* status
3197  );
3198 
3199 
3200 /* ---- TASK GROUPS -------------------------------------------------------- */
3201 
3241 void mtapi_groupattr_init(
3242  MTAPI_OUT mtapi_group_attributes_t* attributes,
3244  MTAPI_OUT mtapi_status_t* status
3246  );
3247 
3281 void mtapi_groupattr_set(
3282  MTAPI_INOUT mtapi_group_attributes_t* attributes,
3284  MTAPI_IN mtapi_uint_t attribute_num,
3285  MTAPI_IN void* attribute,
3286  MTAPI_IN mtapi_size_t attribute_size,
3290  MTAPI_OUT mtapi_status_t* status
3292  );
3293 
3329 mtapi_group_hndl_t mtapi_group_create(
3330  MTAPI_IN mtapi_group_id_t group_id,
3331  MTAPI_IN mtapi_group_attributes_t* attributes,
3333  MTAPI_OUT mtapi_status_t* status
3335  );
3336 
3361  MTAPI_IN mtapi_group_hndl_t group,
3362  MTAPI_IN mtapi_uint_t attribute_num,
3363  MTAPI_OUT void* attribute,
3364  MTAPI_IN mtapi_size_t attribute_size,
3368  MTAPI_OUT mtapi_status_t* status
3370  );
3371 
3400  MTAPI_IN mtapi_group_hndl_t group,
3401  MTAPI_IN mtapi_uint_t attribute_num,
3402  MTAPI_OUT void* attribute,
3403  MTAPI_IN mtapi_size_t attribute_size,
3404  MTAPI_OUT mtapi_status_t* status
3406  );
3407 
3510  MTAPI_IN mtapi_group_hndl_t group,
3511  MTAPI_IN mtapi_timeout_t timeout,
3513  MTAPI_OUT mtapi_status_t* status
3515  );
3516 
3625  MTAPI_IN mtapi_group_hndl_t group,
3626  MTAPI_OUT void** result,
3628  MTAPI_IN mtapi_timeout_t timeout,
3630  MTAPI_OUT mtapi_status_t* status
3632  );
3633 
3651 void mtapi_group_delete(
3652  MTAPI_IN mtapi_group_hndl_t group,
3653  MTAPI_OUT mtapi_status_t* status
3655  );
3656 
3657 
3669 #ifdef __cplusplus
3670 }
3671 #endif
3672 
3673 #endif // EMBB_MTAPI_C_MTAPI_H_
Group handle.
Definition: mtapi.h:1015
opaque_type embb_core_set_t
Opaque type representing a set of processor cores.
Definition: core_set.h:59
mtapi_uint_t mtapi_context_corenum_get(const mtapi_task_context_t *task_context, mtapi_status_t *status)
This function can be called from an action function to query the current core number for debugging pu...
mtapi_uint_t organization_id
Implementation vendor or organization ID.
Definition: mtapi.h:326
mtapi_uint_t num_instances
stores MTAPI_TASK_INSTANCES
Definition: mtapi.h:829
mtapi_uint_t mtapi_context_numinst_get(const mtapi_task_context_t *task_context, mtapi_status_t *status)
This function can be called from an action function to query the total number of parallel task instan...
Action handle.
Definition: mtapi.h:970
mtapi_uint_t priority
stores MTAPI_TASK_PRIORITY
Definition: mtapi.h:830
void mtapi_node_get_attribute(const mtapi_node_t node, const mtapi_uint_t attribute_num, void *attribute, const mtapi_size_t attribute_size, mtapi_status_t *status)
Given a node and attribute number, returns a copy of the corresponding attribute value in *attribute...
mtapi_boolean_t reuse_main_thread
stores MTAPI_NODE_REUSE_MAIN_THREAD
Definition: mtapi.h:806
mtapi_boolean_t domain_shared
stores MTAPI_QUEUE_DOMAIN_SHARED
Definition: mtapi.h:849
mtapi_worker_priority_type_t type
default or specific worker
Definition: mtapi.h:618
void mtapi_task_wait(const mtapi_task_hndl_t task, const mtapi_timeout_t timeout, mtapi_status_t *status)
This function waits for the completion of the specified task.
void mtapi_queue_set_attribute(const mtapi_queue_hndl_t queue, const mtapi_uint_t attribute_num, const void *attribute, const mtapi_size_t attribute_size, mtapi_status_t *status)
Changes the attribute value that corresponds to the given attribute_num for the specified queue...
mtapi_uint_t mtapi_context_instnum_get(const mtapi_task_context_t *task_context, mtapi_status_t *status)
This function can be called from an action function to query the instance number of the associated ta...
void mtapi_queue_enable(const mtapi_queue_hndl_t queue, mtapi_status_t *status)
This function may be called from any node with a valid queue handle to re-enable a queue previously d...
embb_core_set_t core_affinity
stores MTAPI_NODE_CORE_AFFINITY
Definition: mtapi.h:794
mtapi_boolean_t retain
stores MTAPI_QUEUE_RETAIN
Definition: mtapi.h:848
Group attributes.
Definition: mtapi.h:856
mtapi_uint_t mtapi_version
The three last (rightmost) hex digits are the minor number, and those left of the minor number are th...
Definition: mtapi.h:322
mtapi_uint64_t mtapi_affinity_t
Core affinity type.
Definition: mtapi.h:350
mtapi_action_id_t id
pool index of this handle
Definition: mtapi.h:972
void mtapi_initialize(const mtapi_domain_t domain_id, const mtapi_node_t node_id, const mtapi_node_attributes_t *attributes, mtapi_info_t *mtapi_info, mtapi_status_t *status)
Initializes the MTAPI environment on a given MTAPI node in a given MTAPI domain.
mtapi_queue_hndl_t mtapi_queue_create(const mtapi_queue_id_t queue_id, const mtapi_job_hndl_t job, const mtapi_queue_attributes_t *attributes, mtapi_status_t *status)
This function creates a software queue object and associates it with the specified job...
void mtapi_task_get_attribute(const mtapi_task_hndl_t task, const mtapi_uint_t attribute_num, void *attribute, const mtapi_size_t attribute_size, mtapi_status_t *status)
Returns a copy of the attribute value that corresponds to the given attribute_num for the specified t...
void mtapi_group_set_attribute(const mtapi_group_hndl_t group, const mtapi_uint_t attribute_num, void *attribute, const mtapi_size_t attribute_size, mtapi_status_t *status)
Changes the value of the attribute that corresponds to the given attribute_num for the specified task...
Queue handle.
Definition: mtapi.h:1000
Queue attributes.
Definition: mtapi.h:843
void mtapi_queue_disable(const mtapi_queue_hndl_t queue, const mtapi_timeout_t timeout, mtapi_status_t *status)
This function disables the specified queue in such a way that it can be resumed later.
void mtapi_context_runtime_notify(const mtapi_task_context_t *task_context, const mtapi_notification_t notification, const void *data, const mtapi_size_t data_size, mtapi_status_t *status)
This function can be called from an action function to notify the runtime system. ...
mtapi_uint_t max_actions_per_job
stores MTAPI_NODE_MAX_ACTIONS_PER_JOB
Definition: mtapi.h:803
void mtapi_group_get_attribute(const mtapi_group_hndl_t group, const mtapi_uint_t attribute_num, void *attribute, const mtapi_size_t attribute_size, mtapi_status_t *status)
Returns the attribute value that corresponds to the given attribute_num for this task group...
void mtapi_queue_delete(const mtapi_queue_hndl_t queue, const mtapi_timeout_t timeout, mtapi_status_t *status)
This function deletes the specified software queue.
void mtapi_group_wait_all(const mtapi_group_hndl_t group, const mtapi_timeout_t timeout, mtapi_status_t *status)
This function waits for the completion of a task group.
mtapi_queue_hndl_t mtapi_queue_get(const mtapi_queue_id_t queue_id, const mtapi_domain_t domain_id, mtapi_status_t *status)
This function converts a domain-wide queue_id into a node-local queue handle.
mtapi_uint_t tag
version of this handle
Definition: mtapi.h:1001
mtapi_task_state_t mtapi_context_taskstate_get(const mtapi_task_context_t *task_context, mtapi_status_t *status)
An action function may call this function to obtain the state of the task that is associated with the...
mtapi_boolean_t global
stores MTAPI_ACTION_GLOBAL
Definition: mtapi.h:818
mtapi_uint_t hardware_concurrency
Number of CPU cores available.
Definition: mtapi.h:336
mtapi_uint_t tag
version of this handle
Definition: mtapi.h:986
Action attributes.
Definition: mtapi.h:817
mtapi_uint_t max_tasks
stores MTAPI_NODE_MAX_TASKS
Definition: mtapi.h:797
mtapi_uint_t type
stores MTAPI_NODE_TYPE
Definition: mtapi.h:796
mtapi_queue_id_t id
pool index of this handle
Definition: mtapi.h:1002
mtapi_domain_t mtapi_domain_id_get(mtapi_status_t *status)
Returns the domain id associated with the local node.
mtapi_group_hndl_t mtapi_group_create(const mtapi_group_id_t group_id, const mtapi_group_attributes_t *attributes, mtapi_status_t *status)
This function creates a task group and returns a handle to the group.
mtapi_uint_t tag
version of this handle
Definition: mtapi.h:1016
mtapi_uint_t tag
version of this handle
Definition: mtapi.h:1031
mtapi_affinity_t affinity
stores MTAPI_ACTION_AFFINITY
Definition: mtapi.h:819
mtapi_action_hndl_t mtapi_action_create(const mtapi_job_id_t job_id, const mtapi_action_function_t function, const void *node_local_data, const mtapi_size_t node_local_data_size, const mtapi_action_attributes_t *attributes, mtapi_status_t *status)
This function creates a software action (hardware actions are considered to be pre-existent and do no...
mtapi_worker_priority_entry_t * worker_priorities
stores MTAPI_NODE_WORKER_PRIORITIES
Definition: mtapi.h:808
mtapi_uint_t max_queues
stores MTAPI_NODE_MAX_QUEUES
Definition: mtapi.h:800
Job handle.
Definition: mtapi.h:985
mtapi_boolean_t mtapi_affinity_get(mtapi_affinity_t *mask, const mtapi_uint_t core_num, mtapi_status_t *status)
Returns the affinity that corresponds to the given core_num for this affinity mask.
void mtapi_action_get_attribute(const mtapi_action_hndl_t action, const mtapi_uint_t attribute_num, void *attribute, const mtapi_size_t attribute_size, mtapi_status_t *status)
Returns the attribute value that corresponds to the given attribute_num for this action.
mtapi_boolean_t ordered
stores MTAPI_QUEUE_ORDERED
Definition: mtapi.h:847
mtapi_uint_t queue_limit
stores MTAPI_NODE_QUEUE_LIMIT
Definition: mtapi.h:801
void mtapi_affinity_set(mtapi_affinity_t *mask, const mtapi_uint_t core_num, const mtapi_boolean_t affinity, mtapi_status_t *status)
This function is used to change the default values of an affinity mask object.
mtapi_affinity_t affinity
stores MTAPI_TASK_AFFINITY
Definition: mtapi.h:831
mtapi_task_hndl_t mtapi_task_start(const mtapi_task_id_t task_id, const mtapi_job_hndl_t job, const void *arguments, const mtapi_size_t arguments_size, void *result_buffer, const mtapi_size_t result_size, const mtapi_task_attributes_t *attributes, const mtapi_group_hndl_t group, mtapi_status_t *status)
This function schedules a task for execution.
mtapi_uint_t implementation_version
The three last (rightmost) hex digits are the minor number, and those left of the minor number are th...
Definition: mtapi.h:328
void mtapi_finalize(mtapi_status_t *status)
Finalizes the MTAPI environment on a given MTAPI node and domain.
void mtapi_context_status_set(mtapi_task_context_t *task_context, const mtapi_status_t error_code, mtapi_status_t *status)
This function can be called from an action function to set the status that can be obtained by a subse...
mtapi_boolean_t global
stores MTAPI_QUEUE_GLOBAL
Definition: mtapi.h:844
mtapi_boolean_t is_detached
stores MTAPI_TASK_DETACHED
Definition: mtapi.h:828
mtapi_uint_t number_of_nodes
Number of nodes allowed by the implementation.
Definition: mtapi.h:334
mtapi_uint_t num_cores
stores MTAPI_NODE_NUMCORES
Definition: mtapi.h:795
mtapi_job_id_t id
pool index of this handle
Definition: mtapi.h:987
void mtapi_action_enable(const mtapi_action_hndl_t action, mtapi_status_t *status)
This function enables a previously disabled action.
mtapi_uint_t number_of_domains
Number of domains allowed by the implementation.
Definition: mtapi.h:332
Task attributes.
Definition: mtapi.h:827
mtapi_uint_t limit
stores MTAPI_QUEUE_LIMIT
Definition: mtapi.h:846
mtapi_boolean_t domain_shared
stores MTAPI_ACTION_DOMAIN_SHARED
Definition: mtapi.h:820
mtapi_uint_t used_memory
Bytes of memory used by MTAPI.
Definition: mtapi.h:337
mtapi_node_t mtapi_node_id_get(mtapi_status_t *status)
Returns the node id associated with the local node and domain.
struct mtapi_info_struct mtapi_info_t
Info type.
Definition: mtapi.h:344
void mtapi_affinity_init(mtapi_affinity_t *mask, const mtapi_boolean_t affinity, mtapi_status_t *status)
This function initializes an affinity mask object.
Node attributes.
Definition: mtapi.h:793
mtapi_uint_t max_actions
stores MTAPI_NODE_MAX_ACTIONS
Definition: mtapi.h:798
Task handle.
Definition: mtapi.h:1030
embb_thread_priority_t
Thread priority type.
Definition: thread.h:62
mtapi_uint_t max_priorities
stores MTAPI_NODE_MAX_PRIORITIES
Definition: mtapi.h:805
void mtapi_queue_get_attribute(const mtapi_queue_hndl_t queue, const mtapi_uint_t attribute_num, void *attribute, const mtapi_size_t attribute_size, mtapi_status_t *status)
Returns the attribute value that corresponds to the given attribute_num for the specified queue...
mtapi_uint_t problem_size
stores MTAPI_TASK_PROBLEM_SIZE
Definition: mtapi.h:836
void mtapi_group_delete(const mtapi_group_hndl_t group, mtapi_status_t *status)
This function deletes a task group.
mtapi_task_id_t id
pool index of this handle
Definition: mtapi.h:1032
mtapi_group_id_t id
pool index of this handle
Definition: mtapi.h:1017
mtapi_task_hndl_t mtapi_task_enqueue(const mtapi_task_id_t task_id, const mtapi_queue_hndl_t queue, const void *arguments, const mtapi_size_t arguments_size, void *result_buffer, const mtapi_size_t result_size, const mtapi_task_attributes_t *attributes, const mtapi_group_hndl_t group, mtapi_status_t *status)
This function schedules a task for execution using a queue.
mtapi_job_hndl_t mtapi_job_get(const mtapi_job_id_t job_id, const mtapi_domain_t domain_id, mtapi_status_t *status)
Given a job_id, this function returns the MTAPI handle for referencing the actions implementing the j...
Info structure.
Definition: mtapi.h:321
void mtapi_action_set_attribute(const mtapi_action_hndl_t action, const mtapi_uint_t attribute_num, const void *attribute, const mtapi_size_t attribute_size, mtapi_status_t *status)
This function changes the value of the attribute that corresponds to the given attribute_num for this...
mtapi_task_complete_function_t complete_func
stores MTAPI_TASK_COMPLETE_FUNCTION
Definition: mtapi.h:834
void mtapi_action_disable(const mtapi_action_hndl_t action, const mtapi_timeout_t timeout, mtapi_status_t *status)
This function disables an action.
mtapi_int_t some_value
just a placeholder
Definition: mtapi.h:857
void mtapi_group_wait_any(const mtapi_group_hndl_t group, void **result, const mtapi_timeout_t timeout, mtapi_status_t *status)
This function waits for the completion of any task in a task group.
void(* mtapi_action_function_t)(const void *args, mtapi_size_t args_size, void *result_buffer, mtapi_size_t result_buffer_size, const void *node_local_data, mtapi_size_t node_local_data_size, mtapi_task_context_t *context)
An action function is the executable software function that implements an action. ...
Definition: mtapi.h:941
mtapi_uint_t priority
stores MTAPI_QUEUE_PRIORITY
Definition: mtapi.h:845
void * user_data
stores MTAPI_TASK_USER_DATA
Definition: mtapi.h:832
Describes the default priority of all workers or the priority of a specific worker.
Definition: mtapi.h:617
mtapi_uint_t tag
version of this handle
Definition: mtapi.h:971
embb_thread_priority_t priority
priority to set
Definition: mtapi.h:619
void mtapi_task_cancel(const mtapi_task_hndl_t task, mtapi_status_t *status)
This function cancels a task and sets the task status to MTAPI_TASK_CANCELLED.
mtapi_uint_t max_jobs
stores MTAPI_NODE_MAX_JOBS
Definition: mtapi.h:802
void mtapi_action_delete(const mtapi_action_hndl_t action, const mtapi_timeout_t timeout, mtapi_status_t *status)
This function deletes a software action (Hardware actions exist perpetually and cannot be deleted)...
mtapi_uint_t max_groups
stores MTAPI_NODE_MAX_GROUPS
Definition: mtapi.h:799