-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.xml
More file actions
41 lines (41 loc) · 8.88 KB
/
index.xml
File metadata and controls
41 lines (41 loc) · 8.88 KB
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
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>cr4c1an</title>
<link>https://cr4c1an.github.io/</link>
<description>Recent content on cr4c1an</description>
<generator>Hugo</generator>
<language>zh</language>
<copyright>copyleft</copyright>
<lastBuildDate>Sat, 21 Dec 2024 18:37:35 +0800</lastBuildDate>
<atom:link href="https://cr4c1an.github.io/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>分块 Floyd-Warshall 算法</title>
<link>https://cr4c1an.github.io/posts/%E5%88%86%E5%9D%97-floyd-warshall-%E7%AE%97%E6%B3%95/</link>
<pubDate>Sat, 21 Dec 2024 18:37:35 +0800</pubDate>
<guid>https://cr4c1an.github.io/posts/%E5%88%86%E5%9D%97-floyd-warshall-%E7%AE%97%E6%B3%95/</guid>
<description><p>普通的 Floyd 算法我们都会了。那么并行化的 Floyd 算法如何呢?</p>
<h2 id="朴素并行化">朴素并行化</h2>
<p>考虑一份经典的 Floyd 代码:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span><span style="color:#66d9ef">for</span>(<span style="color:#66d9ef">int</span> k <span style="color:#f92672">=</span> <span style="color:#ae81ff">1</span>; k <span style="color:#f92672">&lt;=</span> N; k<span style="color:#f92672">++</span>) {
</span></span><span style="display:flex;"><span>	<span style="color:#66d9ef">for</span>(<span style="color:#66d9ef">int</span> i <span style="color:#f92672">=</span> <span style="color:#ae81ff">1</span>; i <span style="color:#f92672">&lt;=</span> N; i<span style="color:#f92672">++</span>) {
</span></span><span style="display:flex;"><span>		<span style="color:#66d9ef">for</span>(<span style="color:#66d9ef">int</span> j <span style="color:#f92672">=</span> <span style="color:#ae81ff">1</span>; j <span style="color:#f92672">&lt;=</span> N; j<span style="color:#f92672">++</span>) {
</span></span><span style="display:flex;"><span>			dis[i][j] <span style="color:#f92672">=</span> min(dis[i][j], dis[i][k] <span style="color:#f92672">+</span> dis[k][j]);
</span></span><span style="display:flex;"><span>		}
</span></span><span style="display:flex;"><span>	}
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><p>显然我们可以将第三层循环展开,用 SIMD 优化之。或者,第二、三层循环都可以直接 omp parallel。(请读者自行证明第二层循环也可以,因为任意 <code>dis[k][j]</code> 不会被一个比当前 <code>i</code> 更小的 <code>i1</code> 在这一轮的 <code>k</code> 上以 <code>dis[i1][j]</code> 的方式更新)这里给出第三层循环 omp parallel for 的代码:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cpp" data-lang="cpp"><span style="display:flex;"><span><span style="color:#66d9ef">for</span>(<span style="color:#66d9ef">int</span> k <span style="color:#f92672">=</span> <span style="color:#ae81ff">1</span>; k <span style="color:#f92672">&lt;=</span> N; k<span style="color:#f92672">++</span>) {
</span></span><span style="display:flex;"><span> <span style="color:#66d9ef">for</span>(<span style="color:#66d9ef">int</span> i <span style="color:#f92672">=</span> <span style="color:#ae81ff">1</span>; i <span style="color:#f92672">&lt;=</span> N; i<span style="color:#f92672">++</span>) {
</span></span><span style="display:flex;"><span> <span style="color:#75715e">#pragma omp parallel for
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span> <span style="color:#66d9ef">for</span>(<span style="color:#66d9ef">int</span> j <span style="color:#f92672">=</span> <span style="color:#ae81ff">1</span>; j <span style="color:#f92672">&lt;=</span> N; j<span style="color:#f92672">++</span>) {
</span></span><span style="display:flex;"><span> dis[i][j] <span style="color:#f92672">=</span> min(dis[i][j], dis[i][k] <span style="color:#f92672">+</span> dis[k][j]);
</span></span><span style="display:flex;"><span> }
</span></span><span style="display:flex;"><span> }
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><p>注意到 <code>dis[i][k]</code> 等内存访问比较花费时间,编译器没帮你优化好的话,比如在 <code>-O0</code> 下,性能会不佳。可以利用一些临时变量辅助,减少 <code>dis[i][k]</code> 的寻址时间。这里就不贴代码了。</p></description>
</item>
<item>
<title>Javascript原型污染漏洞</title>
<link>https://cr4c1an.github.io/posts/2024-11-09-javascript%e5%8e%9f%e5%9e%8b%e6%b1%a1%e6%9f%93%e6%bc%8f%e6%b4%9e/</link>
<pubDate>Sat, 09 Nov 2024 00:41:35 +0800</pubDate>
<guid>https://cr4c1an.github.io/posts/2024-11-09-javascript%e5%8e%9f%e5%9e%8b%e6%b1%a1%e6%9f%93%e6%bc%8f%e6%b4%9e/</guid>
<description><h1 id="javascript原型污染漏洞">Javascript原型污染漏洞</h1>
<p>js 里的对象可以简单地理解成是其原型(prototype)的一个实例。由于历史原因,所有的对象都有一个__proto__属性。
对于没有任何继承关系的对象,他的原型是 Object。
假设一个对象叫作 ori,一个 tar,那么当</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-javascript" data-lang="javascript"><span style="display:flex;"><span><span style="color:#a6e22e">ori</span>[<span style="color:#e6db74">&#34;__proto__&#34;</span>].<span style="color:#a6e22e">att</span> <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;test&#34;</span>
</span></span></code></pre></div><p>时,访问 <code>tar.att</code> 的结果是,由于tar.att 属性不直接存在,所以找其原型,故其值为 &ldquo;test&rdquo;。
只要我们获得了对 ori 的修改权限,我们就可以间接给 tar 添加属性。
以上。</p></description>
</item>
<item>
<title>Hello, world</title>
<link>https://cr4c1an.github.io/posts/hello_world/</link>
<pubDate>Sat, 02 Nov 2024 11:17:17 +0800</pubDate>
<guid>https://cr4c1an.github.io/posts/hello_world/</guid>
<description><p>你好,世界。总之折腾了挺久终于把这个博客给部署上了 github.io,作为我的个人博客,希望大家看得开心。</p></description>
</item>
<item>
<title>IDA 基础使用</title>
<link>https://cr4c1an.github.io/posts/idn/</link>
<pubDate>Sat, 02 Nov 2024 11:17:17 +0800</pubDate>
<guid>https://cr4c1an.github.io/posts/idn/</guid>
<description><p>TODO.</p></description>
</item>
</channel>
</rss>