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