1  /*
2   * Copyright (c) 2023 Huawei Device Co., Ltd.
3   * Licensed under the Apache License, Version 2.0 (the "License");
4   * you may not use this file except in compliance with the License.
5   * You may obtain a copy of the License at
6   *
7   *     http://www.apache.org/licenses/LICENSE-2.0
8   *
9   * Unless required by applicable law or agreed to in writing, software
10   * distributed under the License is distributed on an "AS IS" BASIS,
11   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12   * See the License for the specific language governing permissions and
13   * limitations under the License.
14   */
15  
16  #ifndef FFRT_TYPES_HPP
17  #define FFRT_TYPES_HPP
18  
19  namespace ffrt {
20  constexpr bool USE_COROUTINE = true;
21  
22  enum DT {
23      U8,
24      U16,
25      U32,
26      U64,
27      I8,
28      I16,
29      I32,
30      I64,
31      FP16,
32      FP32,
33      FP64,
34  };
35  
36  enum class DevType {
37      CPU,
38      DEVMAX,
39  };
40  
41  enum class TaskType {
42      ROOT,
43      DEFAULT,
44  };
45  
46  enum class DataStatus {
47      IDLE, // 默认状态
48      READY, // 当前版本被生产出来,标志着这个版本的所有消费者可以执行
49      CONSUMED, // 同时也是RELEASE,当前版本的所有消费者已经执行完成,标志着下一个版本的生产者可以执行
50      MERGED, // 嵌套场景下,标志一个子任务的version已经被父任务的version合并
51  };
52  
53  enum class NestType {
54      DEFAULT, // 不存在嵌套关系
55      PARENTOUT, // 同parent的输出嵌套
56      PARENTIN, // 同parent的输入嵌套
57  };
58  
59  enum class TaskStatus {
60      CONSTRUCTING, // 预留,暂不使用
61      SUBMITTING, // 预留,暂不使用
62      PENDING, // 默认状态
63      READY, // 可以被执行,可能由于上一个任务执行完而被依赖管理模块触发进入该状态(PEND->READY),也可能submit时被依赖管理模块触发进入该状态(PEND->READY)
64      EXECUTING, // 被调度器调度,正在执行,可能由调度模块触发进入该状态(READY->EXE),还可能由wait成功时被依赖管理模块触发进入该状态(BLOCK->EXE)
65      EXECUTING_NO_DEPENDENCE, // 执行过程中已经解依赖
66      BLOCKED, // 进入wait状态,wait时被依赖管理模块触发进入该状态(EXE->BLOCK)
67      FINISH, // 干完了(EXEC->FINISH)
68      RELEASED, // 预留,暂不使用
69  };
70  
71  typedef enum {
72      ET_PENDING, // executor_task 非入队状态
73      ET_EXECUTING, // executor_task 执行状态
74      ET_TOREADY, // executor_task 等待wake通知
75      ET_READY, // executor_task 入队状态
76      ET_FINISH, // executor_task 执行完成,准备执行回调+销毁
77  } ExecTaskStatus;
78  
79  enum class Denpence {
80      DEPENCE_INIT,
81      DATA_DEPENCE,
82      CALL_DEPENCE,
83      CONDITION_DEPENCE,
84  };
85  
86  enum class SpecTaskType {
87      EXIT_TASK,
88      SLEEP_TASK,
89      SPEC_TASK_MAX,
90  };
91  
92  enum SkipStatus {
93      SUBMITTED,
94      EXECUTED,
95      SKIPPED,
96  };
97  #ifndef _MSC_VER
98  #define FFRT_LIKELY(x) (__builtin_expect(!!(x), 1))
99  #define FFRT_UNLIKELY(x) (__builtin_expect(!!(x), 0))
100  #else
101  #define FFRT_LIKELY(x) (x)
102  #define FFRT_UNLIKELY(x) (x)
103  #endif
104  
105  #define FORCE_INLINE
106  } // namespace ffrt
107  #endif
108