玟茵开源社区知识库

WenYin Open Source Wiki

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
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
// ConsoleApplication4.cpp: 定义控制台应用程序的入口点。
//

#include "stdafx.h"
using namespace std;

int a, num = 0;
bool start(char *s, int a);
bool END; //找到符合要求的式子的标记
//预留三个括号位
#define DIGIT_1 3
#define DIGIT_2 11
#define DIGIT_3 19
#define DIGIT_4 27
#define DIGIT_5 35
#define DIGIT_6 43

#define NEGATIVE 126 //126表示负数
bool operator_flag[5] = {};
char expression[47] = {}; //表达式数组,0表示缺省
char operator_list[4] = { '+','-','*','^' }; //运算符种类
array <char, 5> pre_list_tmp;
vector <array<char, 5>> pre_list; //全部运算符排列的列表
vector <int> bracket_set; //括号标记
vector <vector<int>> bracket_list; //全部括号列表
map <long long, bool> flag; //枚举状态标记,用于去重
void init() {
memset(expression, 0, sizeof(expression));
flag.clear();
END = false;
expression[DIGIT_1] = '1';
expression[DIGIT_2] = '1';
expression[DIGIT_3] = '4';
expression[DIGIT_4] = '5';
expression[DIGIT_5] = '1';
expression[DIGIT_6] = '4';
}
void operator_add(int);
void bracket_add(int);
void bracket_add_1();
//void bracket_add_2(int);
//void bracket_add_3(int);
void calculate();

int d_pow(int a, int b); //整数乘方函数

int main() {
operator_add(0);
bracket_add(0);
while (cin >> a)
{
init();
bracket_add_1();
if (END)
continue;
expression[DIGIT_1] = NEGATIVE; //把第一个数变为负数
flag.clear();
bracket_add_1();
if (!END)
cout << "Can not find!" << num << endl;
}
return 0;
}

void operator_add(int x) {
bool flag = true;
for (int i = 0; i < 5 && flag; i++)
{
if (!operator_flag[i])
flag = false;
}
if (flag) {
pre_list.push_back(pre_list_tmp);
return;
}
operator_flag[x] = true;
for (int i = 0; i < 4; i++)
{
pre_list_tmp[x] = operator_list[i];
operator_add(x + 1);
}
operator_flag[x] = false;
}

void bracket_add(int x) {
if (x > 7) { //可插入括号的位置总数。
return;
}
if (bracket_set.size() == 2) {
vector <int> tmp;
switch (bracket_set[0])
{
case 0:
tmp.push_back(DIGIT_1);
break;
case 1:
tmp.push_back(DIGIT_2);
break;
case 2:
tmp.push_back(DIGIT_3);
break;
case 3:
tmp.push_back(DIGIT_4);
break;
case 4:
tmp.push_back(DIGIT_5);
break;
case 5:
tmp.push_back(DIGIT_6);
break;
}
switch (bracket_set[1])
{
case 1:
tmp.push_back(DIGIT_1);
break;
case 2:
tmp.push_back(DIGIT_2);
break;
case 3:
tmp.push_back(DIGIT_3);
break;
case 4:
tmp.push_back(DIGIT_4);
break;
case 5:
tmp.push_back(DIGIT_5);
break;
case 6:
tmp.push_back(DIGIT_6);
break;
}
bracket_list.push_back(tmp);
return;
}
bracket_set.push_back(x);
bracket_add(x + 1);
bracket_set.pop_back();
bracket_add(x + 1);
}

void bracket_add_1() {
int size = 21; //21 is bracket_list.size()
for (int i = 0; i < size; i++)
{
int sum = 0;
/*
*去重思路:左右括号各有6个可能出现的位置,每个位置出现的括号最多为2个,
*因此用一个至少12位的十进制整数来储存状态,把每个括号的位置的信息储存在
*十进制位之中。
*/
sum += d_pow(10, 6 + (bracket_list[i][0] - 3) / 8);
sum += d_pow(10, (bracket_list[i][1] - 3) / 8);
expression[bracket_list[i][0] - 1] = '(';
expression[bracket_list[i][1] + 1] = ')';
for (int j = 0; j < size; j++)
{
sum += d_pow(10, 6 + (bracket_list[j][0] - 3) / 8);
sum += d_pow(10, (bracket_list[j][1] - 3) / 8);
expression[bracket_list[j][0] - 2] = '(';
expression[bracket_list[j][1] + 2] = ')';
if (!flag[sum]) {
flag[sum] = true;
calculate();
}
if (END)
return;
expression[bracket_list[j][0] - 2] = 0;
expression[bracket_list[j][1] + 2] = 0;
}
expression[bracket_list[i][0] - 1] = 0;
expression[bracket_list[i][1] + 1] = 0;
}
}

void calculate() {
int size = pre_list.size();
for (int i = 0; i < size; i++)
{
for (int j = 0; j < 5; j++)
{
switch (j)
{
case 0:
expression[DIGIT_1 + 4] = pre_list[i][j];
break;
case 1:
expression[DIGIT_2 + 4] = pre_list[i][j];
break;
case 2:
expression[DIGIT_3 + 4] = pre_list[i][j];
break;
case 3:
expression[DIGIT_4 + 4] = pre_list[i][j];
break;
case 4:
expression[DIGIT_5 + 4] = pre_list[i][j];
break;
}
}
/*string input;
for (int j = 0; j < 47; j++)
{
if (expression[j])
input.push_back(expression[j]);
}*/
//计算器接口
END = start(expression, a);
num++;
if (END)
return;
}
}

过去,曾有人指责个别手机厂商在基准测试上作弊,但这通常是一个相对本土的问题:只有少数公司的某些终端在运行某些应用程序时,不明智地使用性能更高的模式。但是,根据Anandtech的报告,联发科已经将这种“作弊”功能集成到了系统固件中,该固件可以使手机厂商使用在其芯片组上。运行某些(特定)芯片组的所有联发科手机,都在基准测试上“作弊”。

这是一个漫长而伟大的故事,我鼓励任何对技术细节感兴趣的人阅读。

简短的版本是,Anandtech注意到,在OPPO Reno3 Pro中,较老的低端Helio P95,性能指标上优于新款的Dimensity 1000L。修改Benchmark程序的一个版本号以防止系统识别它时,系统被确认返回给P95以较低的结果。这意味着在使用Helio P95的手机中,针对Benchmark程序“优化”的出现,其性能得到了极大的提高。

这并不是一个小小的差异,Anandtech观察到一般测试下降了30%,特定工作负载变化了多达70%。

阅读全文 »

更新:以下为热心网友总结的i3-2120与本文中测试数据的对比:


如图配置为4核心,16G内存,40G存储,租用的华为云KC1公测版虚拟机。


编译环境及测试数据:


测试软件为Phoronix Test Suite

前文中数据不容易理解,以下为网站给出的对比:

(Aircrack-ng)

(Botan x5)





(gnupg——软件加密测试)

(n-queens)

(openSSL)

(scimark)

(smallpt)

(sysbench)

完整测试报告见:https://openbenchmarking.org/result/1909129-HV-HI1620KP910

阅读全文 »

来源:https://lcq2.github.io/x86_iphone/

介绍

生活中,我是一名从事基带开发的漏洞研究员。正如每个漏洞研究人员都知道的那样,了解最新技术发展对于您的工作成功是至关重要的。当然,在Apple宣布其新的,闪亮的,大的,更大的和最大的iPhone智能手机系列之后,我从http://ipsw.me下载了一些OTA固件并开始研究新的基带固件。

我发现的东西在我的脊椎上发出一阵惊骇,那种只在夜间玩Doom的恐怖,独自在你的房间,没有灯光,可以产生。忍受我,我会告诉你我发现了什么……

阅读全文 »

原文:Huawei rolled out an update which broke Magisk, but it can be easily fixed

尽管最近美国和澳大利亚市场出现了问题,但华为继续在全球范围内拓展业务。该公司迅速成长到主导中国市场,现在正在挑战苹果和三星等公司。他们的华为P20旗舰产品阵容证明了他们的成功,评论家们对它的相机,产品质量和功能表示赞赏,并且他们必将于华为Mate 20再次掀起波澜。该公司的子品牌荣耀提供 Honor Play 和Honor 10等设备, 以在中端市场竞争。正是因为像这样的智能手机,许多XDA开发者都是华为和Honor设备的粉丝,但是很多人都知道,华为决定在令人惊讶的反消费者行动中停止提供引导加载程序解锁代码,可以有效阻止开发者对手机的大多数开发和修改。

我们之前已经在门户网站上解决了这个问题,我们仍然对此决定感到非常失望。让像华为这样的巨头改变他们的决定或者至少提出妥协并不容易,虽然在这方面取得了一些进展,但对于爱好者来说情况依然严峻。最近的更新让人们对公司失去了更多的信心,因为更新导致使用**Magisk进行root的手机不再启动,除非重新刷入原始的ramdisk映像**。因此,华为和Honor设备所有者不仅无法解锁他们的bootloader,而且那些已经这样做的人变得无法root他们的设备。许多公司对这个似乎(又一个)反爱好者的举动感到震惊,但对更新的调查显示,软件变砖是更新的副作用,而不是故意阻止Magisk / root。以下是我们对此更新的所有了解。

华为的“Patch01”更新阻止了Magisk-rooted手机的启动

阅读全文 »

以下内容来自:

芯片的总体结构 block diagram 图,首先确定是没有专用的神经网络 AI 单元,用什么部分跑 AI 暂时还不得而知。不过很奇怪为什么没有 CCI 总线用作 CPU 部分两个丛集之间的互联,这样同频可以节约成本吗?没有 CCI 确实可以降低簇间处理延迟。

阅读全文 »
0%