Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
CPUをあたたかくする競プロ事例集
Search
Takaaki Sato
February 26, 2021
Programming
1.9k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
CPUをあたたかくする競プロ事例集
フューチャー社「LT大会#11~冬のぽかぽかテックトーク~」発表資料
Takaaki Sato
February 26, 2021
Other Decks in Programming
See All in Programming
「正の参照」と 「負の導出」で組む ハーネスエンジニアリング
cottpan
1
130
使用 Meilisearch 建立新聞搜尋工具
johnroyer
0
120
Welcome to the "Parametricity" 🏙️ − Generic だけど Specific な世界 −
guvalif
PRO
1
140
The Bowling Game- From Imperative to Functional Programming - Part 1
philipschwarz
PRO
0
300
Vite+ Unified Toolchain for the Web
naokihaba
0
730
LLMによるContent Moderationの本番運用の裏側と品質担保への挑戦
suikabar
3
840
【やさしく解説 設計編・中級 #1】一つの車に、運転手は一人 ~ある倉庫システムの事例から~
panda728
PRO
0
130
Language Server 使ってる? 〜VSCode と Zed の場合〜 / Are you using a Language Server? ~For VS Code and Zed~
handlename
0
840
ECSアプリログをFireLensでコスト削減しようとしたけど諦めた話 in Fargate×Node.js
akihisaikeda
2
4.2k
Skillsは効率化、Agentsは"自分の拡張"——Builder時代のエージェント編成(CC Night 2026)
wemra
1
200
ローカルLLMでどこまでコードが書けるか -縮小版 / How much code can be written on a local LLM Shortened
kishida
2
180
才能?センス?知らん、 続けたもん勝ちだ。-- 結婚・出産・癌を越えてなお、私がプロダクトを創り続ける理由
16bitidol
2
820
Featured
See All Featured
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
210
Become a Pro
speakerdeck
PRO
31
6k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
750
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.6k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.2k
Six Lessons from altMBA
skipperchong
29
4.3k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
260
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
210
Context Engineering - Making Every Token Count
addyosmani
9
1k
Optimizing for Happiness
mojombo
378
71k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
300
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
190
Transcript
CPUをあたたかくする 競プロ事例集 佐藤尭彰
自己紹介 ◦ 佐藤 尭彰 (たかあき) ◦ 競技プログラミングで Future から計 7
万円 貰った
自己紹介 ◦ 佐藤 尭彰 (たかあき) ◦ 競技プログラミングで Future から計 7
万円弱貰った ◦ HTTF 19’ 6万 ◦ HTTF 21’ 1万 賞金が給与扱いになって税金が引かれた
競技プログラミングとは? ◦ くわしくは前回の LT 大会を見ましょう 2021/2/26 https://future-architect.github.io/articles/20200923/
競技プログラミングとは? (アルゴ限定) ◦2 秒で答えを出すためにアルゴリズムレベルで最適化をする ◦ そのためなら、 ジャッジを壊す以外 何をやってもいい ◦ 何をやってもいい
テーマ ◦ぽかぽかテックトーク ◦「あたたかい話」 ◦CPUを極限まで あたたかく できる、 競プロ界の「王道」「邪道」たちを紹介
あたたか度 ☆ ◦ Bit をいっぱい扱いたい ◦ 言語にもよるが、真偽値型は 1 byte (以上)
を専有する ◦ C# とかは int 並に 4 byte 持っていく ◦ 0・1の 2 値なら 1 bit でいいはず std::bitset<N> ◦ C++における、N bit のビット列を効率的に扱う仕組み ◦ [] でアクセスできて == で等値比較ができてビット演算子が定義済 ◦ べんり!
王道はここまで
あたたか度 ☆☆ ◦ 数値をいっぱい扱いたい ◦ 言語にもよるが、浮動小数点型は 8 byte を専有する ◦
今どき 32bit float がデフォルトの言語ってあるんですかね…? ◦ そんな時、何を使えばいいでしょうか?
あたたか度 ☆☆ ◦ SIMD化 ◦ 1命令で複数の数に同じ処理を行ったり行わなかったりできる ◦ 強制的な定数倍高速化でCPUをあたたかくする ◦ 幾つかのジャッジは
AWS 上で動いているので AVX512 まで使える ◦ とてもあたたかい
あたたか度 ☆☆ ◦ GCCだと非常に簡単 #pragma GCC optimize ("Ofast") #pragma GCC
target ("avx512f") ◦ あとは素直な for 文を書く
実際にやってみた ◦ABC033D 三角形の分類 ◦ N (< 2000) 個の平面座標格子点のうち任意の 3 点で三角形を作る。
それが鈍角・直角・鋭角三角形のどれになるかを分類して数をカウントし、 それぞれの個数を出力せよ。 ただし任意の 3 点は同一直線上にない (= 3 点を選べば必ず三角形ができる)。 ◦ O(N^3) 時間では間に合わなさそうな制約
実際にやってみた ◦O(N^3) 解法 本当は通らないはずの嘘解法 ◦ {鈍角, 直角, 鋭角}三角形となるかどうかは、内角が最大の頂点に依存する → min(cos
α, cos β, cos γ) の符号が {負, 0, 正} になっていればよい。 → 各辺をベクトルと見て、角を挟む2辺の内積を取ればOK ( |a||b| > 0 は符号に関係ないので無視できる ) ◦ N(N-1)(N-2)/6 個の全組合せに対して調べる https://gakuen.gifu-net.ed.jp/~contents/museum/vector/page120_3.html
実際にやってみた ◦ 提出 https://atcoder.jp/contests/abc033/submissions/20473077 https://atcoder.jp/contests/abc033/submissions/20473067
他の言語におけるSIMD ◦ Python だと numpy を利用すれば SIMD が効く (ことが多い) ◦
特に行列演算なら (Open)BLAS が裏で動くので速い ◦ たまに出る行列累乗系の問題は SIMD を考慮しない制約が付いているので、 ほかにも行列演算が早い言語なら雑に書いても許される • はやい • 書きやすい • 起動に1秒かかる ←ぽんこつ
◦ さて
あたたか度 ☆☆☆ ◦ SIMD化すごい ◦ 手動でも書きたくなりませんか
あたたか度 ☆☆☆☆ ◦ intrinsic ◦ GCC には SIMD 命令を呼べる built-in
関数がある https://www.officedaytime.com/simd512/
あたたか度 ★★★★★★★★★★★★ ◦ intrinsic ◦ なんと AtCoder でもちゃんと使える ◦ 去年の言語アップデートでしれっと使えるようになったらしい
◦ これでもう asm に頼らなくてもいい!! ◦ SIMD を手動実装して圧倒的成長!
実際にやってみた いつもの SIMD召喚の呪文
実際にやってみた いつもの SIMD召喚の呪文 遅くなりました https://atcoder.jp/contests/abc033/submissions/20488733
制約を見直す ◦ -10,000 ≦ x_i, y_i ≦ 10,000 ◦ 各辺の座標の差は
2 万以下 ◦ int16_t ◦ VPMADDWD https://www.officedaytime.com/simd512/simdimg/si.php?f=pmaddwd
実際にやってみた いつもの 8/16bit 召喚の呪文
実際にやってみた いつもの 8/16bit 召喚の呪文 勝利!! https://atcoder.jp/contests/abc033/submissions/20496215
みんなも SIMD をつかって、 想定解法外のゴリ押し CPUをあたたかく しよう!
ご清聴ありがとうございました ◦ Q. SIMD以外のゴリ押しはないのか ◦ A. 色々あるけど実力が足りないので使ったことがない