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