Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
I blame someone else for this
[simgrid.git] / include / simdag / datatypes.h
1 /* Copyright (c) 2006, 2008-2013. The SimGrid Team.
2  * All rights reserved.                                                     */
3
4 /* This program is free software; you can redistribute it and/or modify it
5  * under the terms of the license (GNU LGPL) which comes with this package. */
6
7 #ifndef SIMDAG_DATATYPES_H
8 #define SIMDAG_DATATYPES_H
9 #include "xbt/dict.h"
10
11 /** @brief Workstation datatype
12     @ingroup SD_datatypes_management
13     
14     A workstation is a place where a task can be executed.
15     A workstation is represented as a <em>physical
16     resource with computing capabilities</em> and has a <em>name</em>.
17
18     @see SD_workstation_management */
19 typedef xbt_dictelm_t SD_workstation_t;
20
21 /** @brief Workstation access mode
22     @ingroup SD_datatypes_management
23
24     By default, a workstation resource is shared, i.e. several tasks
25     can be executed at the same time on a workstation. The CPU power of
26     the workstation is shared between the running tasks on the workstation.
27     In sequential mode, only one task can use the workstation, and the other
28     tasks wait in a FIFO.
29
30     @see SD_workstation_get_access_mode(), SD_workstation_set_access_mode() */
31 typedef enum {
32   SD_WORKSTATION_SHARED_ACCESS,     /**< @brief Several tasks can be executed at the same time */
33   SD_WORKSTATION_SEQUENTIAL_ACCESS  /**< @brief Only one task can be executed, the others wait in a FIFO. */
34 } e_SD_workstation_access_mode_t;
35
36 typedef enum {
37   SD_LINK_SHARED,
38   SD_LINK_FATPIPE
39 } e_SD_link_sharing_policy_t;
40
41 /** @brief Link datatype
42     @ingroup SD_datatypes_management
43
44     A link is a network node represented as a <em>name</em>, a <em>current
45     bandwidth</em> and a <em>current latency</em>. A route is a list of
46     links between two workstations.
47
48     @see SD_link_management */
49 typedef struct SD_link *SD_link_t;
50
51 /** @brief Task datatype
52     @ingroup SD_datatypes_management
53
54     A task is some <em>computing amount</em> that can be executed
55     in parallel on several workstations. A task may depend on other
56     tasks, this means that the task cannot start until the other tasks are done.
57     Each task has a <em>\ref e_SD_task_state_t "state"</em> indicating whether 
58     the task is scheduled, running, done, etc.
59
60     @see SD_task_management */
61 typedef struct SD_task *SD_task_t;
62
63 /** @brief Task states
64     @ingroup SD_datatypes_management
65
66     @see SD_task_management */
67 typedef enum {
68   SD_NOT_SCHEDULED = 0,      /**< @brief Initial state (not valid for SD_watch and SD_unwatch). */
69   SD_SCHEDULABLE = 0x0001,               /**< @brief A task becomes SD_SCHEDULABLE as soon as its dependencies are satisfied */
70   SD_SCHEDULED = 0x0002,     /**< @brief A task becomes SD_SCHEDULED when you call function
71                                   SD_task_schedule. SD_simulate will execute it when it becomes SD_RUNNABLE. */
72   SD_RUNNABLE = 0x0004,      /**< @brief A scheduled task becomes runnable is SD_simulate as soon as its dependencies are satisfied. */
73   SD_IN_FIFO = 0x0008,       /**< @brief A runnable task can have to wait in a workstation fifo if the workstation is sequential */
74   SD_RUNNING = 0x0010,       /**< @brief An SD_RUNNABLE or SD_IN_FIFO becomes SD_RUNNING when it is launched. */
75   SD_DONE = 0x0020,          /**< @brief The task is successfully finished. */
76   SD_FAILED = 0x0040         /**< @brief A problem occurred during the execution of the task. */
77 } e_SD_task_state_t;
78
79 /** @brief Task kinds
80     @ingroup SD_datatypes_management
81
82     @see SD_task_management */
83 typedef enum {
84   SD_TASK_NOT_TYPED = 0,      /**< @brief no specified type */
85   SD_TASK_COMM_E2E = 1,       /**< @brief end to end communication */
86   SD_TASK_COMP_SEQ = 2,        /**< @brief sequential computation */
87   SD_TASK_COMP_PAR_AMDAHL = 3, /**< @brief parallel computation (Amdahl's law) */
88   SD_TASK_COMM_PAR_MXN_1D_BLOCK = 4 /**< @brief MxN data redistribution (1D Block distribution) */
89 } e_SD_task_kind_t;
90
91
92 /** @brief Storage datatype
93     @ingroup SD_datatypes_management
94
95  TODO PV: comment it !
96
97     @see SD_storage_management */
98 typedef xbt_dictelm_t SD_storage_t;
99
100 #endif