跟读练习: People Are Mad They're Told to Learn - 通过视频学习英语口语

选择练习模式

每种模式都会打开全屏练习室。

194 句
如果句子过短或过长,请点击 Edit 进行调整。
1
So I was, you know, surfing on the old Twitters, and I saw this tweet that wrote a practical introduction to SimD using real examples from Ghosty,
2
and I thought, hey, that's pretty cool.
3
But here's the thing, is that often my projects, I don't really feel like need SimD anywhere.
4
In fact, I took a flame graph of the game I'm making, and only 0.83% of the entire time, I'm actually in the update function.
5
I don't really feel like I have a huge need, you know, to learn the old SIMDs, whatever.
6
Hey, cool post though.
7
But then the next day, this got posted.
8
My SIMD post was on Hacker News
9
and the general hostility towards understanding how computers work and owning your own outcomes is really depressing.
10
A large amount of people seem to simply have the attitude that they hope someone else will pay their bills for them.
11
It can't be that bad, right?
12
The vast majority of developers have zero need for learning SIMD.
13
Why mislead them and make them feel like to be a real developer?
14
You have to know it.
15
what?
16
So an article about SIMD is making people feel like, what am I reading?
17
So obviously at this point, I had to go and actually learn SIMD because, you know, whether you like this or not, I've never actually used SIMD in any sort of practical use case.
18
I've understood what it was.
19
I've called functions that have been SIMD themselves.
20
I have just never personally hand wrote anything to do with it.
21
So I thought, hey, given the fact that Hacker News hates it, I probably need to give this a shot and learn about it.
22
So today you're going to A, have to learn about it, but B, we got some hot takes, okay?
23
So I got to talk about this whole thing.
24
Because honestly, why are you misleading them, Mitchell?
25
Also, just in case anyone's wondering, I'm not going to make the joke that everybody thinks I'm going to make involving SimD, okay?
26
Not going to happen.
27
And I'd also like to say thank you to the sponsors.
28
Vibe Coders, silence.
29
Someone who's worked in enterprise is speaking.
30
You know, simple OAuth sign-in's not that bad to program.
31
For real enterprise applications that need single sign-on, pass keys, user management, roles and permission, enterprise readiness, and passwords, and recovery,
32
that's a little bit more difficult.
33
And that is where WorkOS comes in.
34
WorkOS is trusted by a lot of the top companies, OpenAI, Anthropic, Cursor, and a whole lot more.
35
But not only that, it's free for your first million users.
36
So that means for you, that is 999,999 free seats available.
37
Pretty much no matter what backend you have chosen, there is an SDK available for you.
38
So go check out WorkOS at workos.com.
39
Links in the description.
40
So the article's called Everyone Should Know SIMD.
41
Now, obviously this became the immediate focal point.
42
The fact that he said everyone should know SIMD, people just got pissed off.
43
How dare you say everyone? and it's just like, okay, here's a great concept.
44
And honestly, it would be really good.
45
The more people know when programming, right?
46
I don't think anyone should ever argue that everybody should try
47
and attempt to know as much as possible so they can make the best quality software out there.
48
And so when someone says, Hey, everybody should know this.
49
It's like, okay, I mean, maybe I should know this.
50
But instead, people were genuinely upset about that.
51
Good article, but I wouldn't start off with a bold sentence such as SIMD can be simple to understand.
52
And there you go.
53
That's the second big one.
54
People hate the fact that he calls it simple.
55
Just read the article though.
56
SIMD has a reputation for being complex.
57
I've met many a good software engineers who dismiss it as something too complex to learn
58
or a niche optimization meant only for the highest performance software, not useful in everyday programming.
59
I think that's wrong.
60
SIMD can be simple to understand.
61
And there's a lot of versions of that comment.
62
It was all over Twitter as well.
63
Like, how could you say that everybody should know something?
64
Or how could you say it was easy or simple to understand?
65
It's complex.
66
And it's funny because by saying it that way, his first line was, in fact, kind of made obvious.
67
So me, who's never really understood what SIMD was, I figured, you know what?
68
Why don't I learn what SIMD is?
69
Why don't I give it a try, come up with a quick problem, and see if I can make something disproportionately faster, and then I can judge.
70
Is SimD difficult?
71
Is it some magical beast?
72
Or really, was that all that bad at all?
73
All right, so let's go to the white board.
74
Oh, gosh.
75
Oh, Dario.
76
Dario, stop doing that, Dario.
77
Don't do that.
78
Okay, here, hold on.
79
That's the wrong one, wrong one.
80
So I thought, what could be a good SimD project?
81
Well, SimD, you want to do some action that you need to do over a long for loop,
82
but you have to do like the same comparison a bunch or some same operation over and over again.
83
At least that's what I thought in my head.
84
So I thought, okay, a good project would probably be, I have these long log files that I want to be able to find the individual logs out.
85
And I want to be able to go over this whole list.
86
And you know, you just generally have to keep doing this over and over and over again.
87
And it doesn't really matter how long this line is.
88
It just matters that, yes, we just have to do this over and over again up until the, you know, slash end.
89
And again, I'm not gonna make the joke that everybody thinks I'm gonna make.
90
So I figured I would just create a program
91
that would find each one of these new lines and be able to parse out this delicious JSON.
92
I dropped the actual parsing of JSON, but instead just looked for the new lines
93
because I wanted to see how much faster could I make the new line looking.
94
Next, I actually had to learn what SIMD was.
95
In the most simple sense, effectively, you can operate instead of on a singular value, say X, you operate on a vector, right?
96
So pretend you have a vector of X, Y, Z, you could operate on all of these at once.
97
Let's just say you wanted to compare, say, finding a new line.
98
Well, what I'd have to do is I'd have to load up a vector with three new lines, kind of like my example, and then in one single CPU operation now this is not
99
a single cpu cycle cpus are like magic to me i have no idea what's going on underneath there
100
but one i'm just going to call it an operation a
101
single operation can compare this vector to this new line
102
and then it can produce out for you a new vector
103
that's going to say hey this is uh the new lines
104
no new line in the first position there was a new
105
line in the second position there there was no new line in the third position.
106
So I can actually take that and go, okay, was there a new line?
107
Oh, there was.
108
That means I need to find out where the new line was within my vector, and then I can return that.
109
And that's because SIMD literally stands for single instruction, multiple data.
110
And you can see that right here.
111
You can see the fact that I have multiple data and I'm doing a single instruction.
112
Are these equal?
113
So I didn't really know how to do that, but I just followed exactly what was inside the blog post.
114
First, I have to create the constants and initialize any vector stuff.
115
I have to loop over the input one vector chunk at a time.
116
I perform the comparison.
117
I reduce it down to something that I can actually use.
118
And then I just handle the remaining bits at the very, very end.
119
That actually feels, well, pretty straightforward.
120
So this is the naive implementation.
121
This is how I would have implemented it if I did not use SIMD.
122
I'm gonna go over the entire data starting at some point, and I'm gonna go and just say, hey, are you a new line?
123
And if you are, then this is the spot.
124
Else I say, hey, no new line found, the end.
125
This is your very classic index of approach.
126
Then of course, I just created something to look for all the new lines and just go over all of them.
127
I'm sure there's better way of testing the code.
128
This was good enough for me.
129
And when I had run the program, as you can see here, it would take about 1.54 seconds.
130
Okay, not that long.
131
And this is the SIMD version.
132
Yes, it is a lot larger.
133
It's a little bit more tedious to do, but when you break it down into the five steps, it's actually pretty simple.
134
Step one, the broadcast part.
135
Broadcast just means I need to create that constant.
136
Remember how I talked about this new line constant?
137
Well, I do it right here.
138
I go, okay, I need to create effectively a byte array that's lanes big.
139
Lanes in this case is how many bytes can I fit in my SIMD operations?
140
SIMD turns out to be kind of CPU dependent my CPU can do 256 bits of SIMD operations.
141
So I can do effectively 16 of them at a time if they're byte wide, meaning they're eight bits wide.
142
So this is my little array, 16 eight bit items.
143
Then I just simply create 16 new line bytes and whatever value that is, I think it's hex A.
144
Hex A, new line.
145
Okay, I'm a genius.
146
Actual genius of useless information, of course.
147
Number two, instead of iterating, say one byte at a time, I iterate lanes by data time lanes, of course, is how big my Cindy operation is.
148
In this particular case, it's 16.
149
So I'm doing 16 bytes at a time, instead of one byte at a time.
150
From there, I actually just create my little value array, I just slice off 16 bytes from my array and go, okay, you are now a SIMD vector.
151
From there, I just simply see are these equal, I take all my new lines
152
and compare to all my values in like one single operation instead of doing that little tight for loop.
153
It's just lit I'm doing 16 operations at once.
154
It's kind of cool.
155
Extract most significant bits just really checks for any values that has a one in it.
156
Since all my values should equal zero, if there's no new lines, if there is a new lines, one of them will equal a one, it will grab out that most significant bit.
157
And by doing a cardinality check, if it's not zero, if they're not all zeros, then I have at least one one, then I need to go there and find
158
that one once then I have to manually go through my little SIMD vector and I have to go, okay, which one of you are one and then the first one I find, that's where the new line is.
159
If I don't find a new line, I just add lanes to the end of end.
160
So I'm just incrementing it 16 at a time.
161
So at the very end, you have to do this, which is kind of funny.
162
It's called the scalar tail, which makes a lot of sense if you think about it.
163
Let's just say you have seven bytes remaining.
164
Well, you can't create something that's 16 long from seven bytes.
165
Okay, so then instead, I have to just manually walk the remaining seven.
166
And by doing it that way, if I simply just run this, you can see it's like massively faster.
167
And so yes, am I going to be using SIMD anytime soon?
168
Probably not.
169
I have virtually no problems with performance inside the game I'm making.
170
But now I kind of know the shape I need to have.
171
And now I see why I'm gonna want to use structure of arrays versus array of structures,
172
because there is a huge possibility I could have some mega wins and some future performance optimizations.
173
And honestly, it kind of feels cool.
174
I have to say, it does feel kind of neat.
175
So should everybody know about SIMD?
176
Yeah, why not?
177
It took me an hour to go really learn everything and program up an example and debug it a little bit, not that bad.
178
You can do, Chat Shippity can tell you all about what you need to do.
179
It's actually pretty straightforward.
180
You can ask infinity questions.
181
At the end of the day, which one would you rather have?
182
Maybe a little too much knowledge, knowledge that you don't often use or don't need to use, and you just simply kind of disregard it, but you have it kind of floating in the back of your head,
183
like Dykstra's shortest algorithm, just floating in the back of my head, okay?
184
Priority queue.
185
Or would you rather be this guy?
186
The vast majority of developers have zero need for learning SIMD.
187
Why mislead them?
188
At the end of the day, I'd rather work with the person that wants to know more.
189
I'd rather be the person that wants to know more.
190
And if I never use SIMD and knowing this was completely useless throughout my entire life, I'm happy I know it.
191
The name is, did you know that Go 1.6 right here, as you can see right here, new experimental SIMD, ArchSIMD package?
192
Did you know that Go, even Go, it now has SIMD support?
193
Obviously, you know what that means, right?
194
That means we can sim these nuts on your face again.

下载应用

流利口语所需的一切

AI 发音评分逐句打分
音标练习掌握每个音
词汇学习建立你的词库
词汇游戏边玩边学

同频道

FOR YOU

推荐视频

本课的词汇与口语要点

这节 B2 级别的口语课以视频“People Are Mad They're Told to Learn”为素材。 视频中反复出现的词有:Simd, byte, vector, operation。 这段视频共有 194 个句子、2368 个单词可供跟读。 讲话部分时长为 11:30。 说话人语速较快,每分钟约 206 个词,会出现较多连读和弱读。 83% 的单词属于英语最常用的 3,000 词,其余的词建议在练习前先学一下。 全部 194 个句子中有 33 个是问句,适合练习疑问语调和简短回答。

视频中的重点词汇

视频中最难的 15 个单词,附发音和释义:

单词发音释义
byte 名词/baɪt/字節 /字节, 位元組 /位元组
vector 名词/ˈvɛktɚ/向量, 矢量
mislead 动词/mɪsˈliːd/誤導 /误导
parse 动词/pɑɹs/解析, 剖析
optimization 名词/ˌɑptəmaɪˈzeɪʃən/優化 /优化
manually 副词/ˈmænj(u)əliː/手动地
straightforward 形容词/ˌstɹeɪtˈfɔː(ɹ)wə(ɹ)d/簡單 /简单
float 动词/fləʊt/浮, 漂浮
instruction 名词/ɪnˈstɹʌkʃən/教導 /教导
cardinality 名词/kɑɹdɪˈnælɪti/勢 /势
initialize 动词/ɪˈnɪʃəlaɪz/初始化
scalar 形容词/ˈskeɪ.lə/標量 /标量
tedious 形容词/ˈtiː.dɪəs/乏味, 枯燥
hostility 名词/hɑˈstɪlɪti/敵意 /敌意
chunk 名词/t͡ʃʌŋk/塊 /块

视频中出现的短语动词

单词释义
check out 动词退房
come up with 动词想出, 提出
find out 动词找出, 查明
go through 动词通過 /通过
log out 动词登出

值得反复跟读的句子

视频中简短而完整的句子,可以直接用在日常对话里:

  • I've understood what it was.
  • How dare you say everyone?
  • All right, so let's go to the white board.
  • At least that's what I thought in my head.
  • Remember how I talked about this new line constant?

视频中的语法

说话人最常用的结构,并附上视频中的原话:

结构视频中的用法
现在完成时 have/has + 过去分词 — 过去发生但与现在仍有关联的事I've never actually used · I've understood · I've called
定语从句 who / which + 从句 — 补充说明人或事物this, which is · tail, which makes

需要注意的发音

说话人用了 50 次缩略和弱读形式,例如 I'm, don't, gonna。请按听到的简短形式来说。

  • “th” 音: algorithm /ˈælɡəɹɪðm̩/, underneath /ˌʌndɚˈniθ/
  • “sh” 和 “zh” 音: optimization /ˌɑptəmaɪˈzeɪʃən/, instruction /ɪnˈstɹʌkʃən/, disproportionately /ˈdɪs.pɹəˌpɔɹ.ʃən.ət.li/, initialize /ɪˈnɪʃəlaɪz/, gosh /ɡɑːʃ/
  • 长单词——注意重音位置: developer /dɪˈvɛləpɚ/, optimization /ˌɑptəmaɪˈzeɪʃən/, manually /ˈmænj(u)əliː/, cardinality /kɑɹdɪˈnælɪti/, disproportionately /ˈdɪs.pɹəˌpɔɹ.ʃən.ət.li/

中文母语者容易读错的音:

  • /v/ — 不要读成 /w/,上齿轻触下唇: vector /ˈvɛktɚ/, developer /dɪˈvɛləpɚ/, massively /ˈmæs.ɪv.li/, naive /naɪˈiv/, vibe /vaɪb/
  • 词尾辅音 — 要读清楚,后面不要加元音: byte /baɪt/, lanes /leɪnz/, mislead /mɪsˈliːd/, iterate /ˈɪtəɹeɪt/, parse /pɑɹs/
  • /r/ 和 /l/ 的区别: cardinality /kɑɹdɪˈnælɪti/, disproportionately /ˈdɪs.pɹəˌpɔɹ.ʃən.ət.li/, algorithm /ˈælɡəɹɪðm̩/

如何用这段视频练习

  1. 先完整听一遍视频,不要开口,记下不认识的单词。
  2. 先用 0.75 倍速逐句跟读,熟练之后再回到正常速度。
  3. 录下自己的声音并与原声对比,特别注意 byte, vector, mislead 这类单词。

什么是跟读法?

跟读法 (Shadowing) 是一种有科学依据的语言学习技巧,最初开发用于专业口译员的培训,并由多语言者Alexander Arguelles博士普及。这个方法简单而强大:您在听英语母语原声的同时立即大声重复——就像是一个延迟1-2秒紧跟说话者的影子。与被动听力或语法练习不同,跟读法强迫您的大脑和口腔肌肉同时处理并模仿真实的讲话模式。研究表明它能显着提高发音准确性,语调,节奏,连读,听力理解和口语流利度——使其成为雅思口语备考和真实英语交流最有效的方法之一。

影子跟读法: 阅读完整分步指南 →