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 #ifdef ASAN_MODE 21 constexpr bool USE_COROUTINE = false; 22 #else 23 constexpr bool USE_COROUTINE = true; 24 #endif 25 enum DT { 26 U8, 27 U16, 28 U32, 29 U64, 30 I8, 31 I16, 32 I32, 33 I64, 34 FP16, 35 FP32, 36 FP64, 37 }; 38 39 enum class DevType { 40 CPU, 41 DEVMAX, 42 }; 43 44 enum class TaskType { 45 ROOT, 46 DEFAULT, 47 }; 48 49 enum class DataStatus { 50 IDLE, // 默认状态 51 READY, // 当前版本被生产出来,标志着这个版本的所有消费者可以执行 52 CONSUMED, // 同时也是RELEASE,当前版本的所有消费者已经执行完成,标志着下一个版本的生产者可以执行 53 MERGED, // 嵌套场景下,标志一个子任务的version已经被父任务的version合并 54 }; 55 56 enum class NestType { 57 DEFAULT, // 不存在嵌套关系 58 PARENTOUT, // 同parent的输出嵌套 59 PARENTIN, // 同parent的输入嵌套 60 }; 61 62 enum class TaskStatus { 63 CONSTRUCTING, // 预留,暂不使用 64 SUBMITTING, // 预留,暂不使用 65 PENDING, // 默认状态 66 READY, // 可以被执行,可能由于上一个任务执行完而被依赖管理模块触发进入该状态(PEND->READY),也可能submit时被依赖管理模块触发进入该状态(PEND->READY) 67 EXECUTING, // 被调度器调度,正在执行,可能由调度模块触发进入该状态(READY->EXE),还可能由wait成功时被依赖管理模块触发进入该状态(BLOCK->EXE) 68 EXECUTING_NO_DEPENDENCE, // 执行过程中已经解依赖 69 BLOCKED, // 进入wait状态,wait时被依赖管理模块触发进入该状态(EXE->BLOCK) 70 FINISH, // 干完了(EXEC->FINISH) 71 RELEASED, // 预留,暂不使用 72 }; 73 74 #ifdef FFRT_IO_TASK_SCHEDULER 75 typedef enum { 76 ET_PENDING, // executor_task 非入队状态 77 ET_EXECUTING, // executor_task 执行状态 78 ET_TOREADY, // executor_task 等待wake通知 79 ET_READY, // executor_task 入队状态 80 ET_FINISH, // executor_task 执行完成,准备执行回调+销毁 81 } ExecTaskStatus; 82 #endif 83 84 enum class Denpence { 85 DEPENCE_INIT, 86 DATA_DEPENCE, 87 CALL_DEPENCE, 88 CONDITION_DEPENCE, 89 }; 90 91 enum class SpecTaskType { 92 EXIT_TASK, 93 SLEEP_TASK, 94 SPEC_TASK_MAX, 95 }; 96 97 enum SkipStatus { 98 SUBMITTED, 99 EXECUTED, 100 SKIPPED, 101 }; 102 #ifndef _MSC_VER 103 #define FFRT_LIKELY(x) (__builtin_expect(!!(x), 1)) 104 #define FFRT_UNLIKELY(x) (__builtin_expect(!!(x), 0)) 105 #else 106 #define FFRT_LIKELY(x) (x) 107 #define FFRT_UNLIKELY(x) (x) 108 #endif 109 110 #define FORCE_INLINE 111 } // namespace ffrt 112 #endif 113