1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
//! 分支预测优化工具
//!
//! 提供分支预测提示(branch prediction hints)帮助编译器优化热点代码路径
//!
//! # 性能优化原理
//!
//! 现代 CPU 使用流水线执行指令,当遇到条件分支时,CPU 需要预测执行哪个分支。
//! 错误的预测会导致流水线清空,造成 10-20 个时钟周期的损失。
//!
//! 这些工具函数使用 `#[cold]` 和 `#[inline(always)]` 属性来提示编译器:
//! - 热点路径(hot path):内联并优先优化
//! - 冷路径(cold path):不频繁执行,可以放在单独的代码段
//!
//! # 使用示例
//!
//! ```rust,no_run
//! use god_graph::utils::branch::{likely, unlikely};
//!
//! fn process_data(data: &[i32]) -> i32 {
//! let mut sum = 0;
//! for &x in data {
//! // 常见情况:数据有效(热点路径)
//! if likely(x > 0) {
//! sum += x;
//! } else {
//! // 罕见情况:数据无效(冷路径)
//! continue;
//! }
//! }
//! sum
//! }
//! ```
/// 提示编译器该分支很可能为真(热点路径)
///
/// # 性能影响
/// - 帮助编译器正确安排代码布局
/// - 提高分支预测准确率
/// - 减少流水线清空损失
///
/// # 使用场景
/// - 错误检查(通常不会出错)
/// - 缓存命中(通常命中)
/// - 常见数据模式
/// 提示编译器该分支很可能为假(冷路径)
///
/// # 性能影响
/// - 帮助编译器将冷路径代码移到单独段
/// - 提高指令缓存利用率
/// - 减少热点路径的指令缓存压力
///
/// # 使用场景
/// - 错误处理(通常不触发)
/// - 边界条件(罕见情况)
/// - 异常数据模式
/// 标记冷函数(不频繁执行的函数)
///
/// # 用途
/// - 错误处理函数
/// - 初始化/清理代码
/// - 罕见情况处理
///
/// # 示例
///
/// ```rust,no_run
/// use god_graph::utils::branch::cold;
///
/// #[cold]
/// fn handle_error(msg: &str) {
/// eprintln!("Error: {}", msg);
/// }
/// ```
/// 内联提示:总是内联
///
/// # 用途
/// - 小型热点函数
/// - 性能关键的 accessor
/// - 闭包和回调
///
/// # 注意
/// 过度使用会增加代码大小,可能降低性能
/// 不内联提示
///
/// # 用途
/// - 大型函数
/// - 冷路径函数
/// - 减少编译时间和二进制大小
///
/// # 注意
/// 可能增加函数调用开销,但减少代码膨胀
/// 分支预测优化宏:likely
///
/// 使用示例:
/// ```rust,no_run
/// use god_graph::branch_likely;
///
/// if branch_likely!(x > 0) {
/// // 热点路径
/// } else {
/// // 冷路径
/// }
/// ```
/// 分支预测优化宏:unlikely
///
/// 使用示例:
/// ```rust,no_run
/// use god_graph::branch_unlikely;
///
/// if branch_unlikely!(error_occurred) {
/// // 错误处理(冷路径)
/// }
/// ```