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
CPUをあたたかくする競プロ事例集
フューチャー社「LT大会#11~冬のぽかぽかテックトーク~」発表資料
Takaaki Sato
February 26, 2021
Other Decks in Programming
See All in Programming
PicoRuby for IoT: Connecting to the Cloud with MQTT
yuuu
2
770
AlarmKitで明後日起きれるアラームアプリを作る
trickart
0
130
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
300
HTML-Aware ERB: The Path to Reactive Rendering @ RubyKaigi 2026, Hakodate, Japan
marcoroth
0
690
サプライチェーン攻撃対策「層を重ねて落ちない壁」を10日間で組み上げた話 #TechLeadConf2026
kashewnuts
1
250
Firefoxにコントリビューションして得られた学び
ken7253
2
160
AI-DLC Deep Dive
yuukiyo
9
5.8k
AgentCore Optimizationを始めよう!
licux
3
230
AI Agent と正しく分析するための環境作り
yoshyum
2
430
SREに優しいTerraform構成 modulesとstateの組み方
hiyanger
2
170
ソフトウェア設計の結合バランス #phperkaigi
kajitack
0
500
Agentic UI in the Frontend: Architectures with Open Standards @JAX 2026 in Mainz
manfredsteyer
PRO
0
110
Featured
See All Featured
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
130
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
180
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.4k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
110
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.3k
Mind Mapping
helmedeiros
PRO
1
190
Raft: Consensus for Rubyists
vanstee
141
7.4k
Building Applications with DynamoDB
mza
96
7k
Building an army of robots
kneath
306
46k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
690
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
390
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. 色々あるけど実力が足りないので使ったことがない