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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
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
Seeing Through Serverless: Observability for AWS Lambda with ADOT and CloudWatch Application Signals
seike460
PRO
1
120
ハーネス設計入門 〜プロンプト、コンテキストの次〜
kinopeee
53
35k
AIの中の人になってみる
htkym
0
160
go-spidermonkeyでAIエージェントのCode Modeを実装する
syumai
3
1.5k
{ Android | Kotlin } Gradle Plugin in 2026
ryunen344
1
280
Discordを用いたラボオートメーション関連情報収集の自動化
noguhiro2002
0
500
PHPプロジェクトの結合バランスを可視化する #php_night
kajitack
0
210
PyO3 で既存 Python 評価器を Rust core 化する ー wasm-bindgen でブラウザにも配るための設計
kdash
1
360
一参加者から『中の人』へ 〜全通PHPerがブースに立って学んだ、カンファレンスを100倍楽しむコツ〜
wp_daisuke
0
110
思考垂れ流し開発 ~音声入力 × AIエージェント × 開発ハーネスによる試行錯誤~
npostring
0
810
AI駆動開発にグラフDBを重ねてみた
satoshi256kbyte
2
720
【DroidKaigi 2026】「アクセシビリティを利用するとき、 アクセシビリティもまたこちらを利用している」 〜マルウェアによる攻撃と防衛について〜
halunoyo
0
340
Featured
See All Featured
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
380
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
320
Claude Code のすすめ
schroneko
67
230k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
260
Ruling the World: When Life Gets Gamed
codingconduct
0
320
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
Prompt Engineering for Job Search
mfonobong
0
440
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
How to build a perfect <img>
jonoalderson
1
5.9k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
320
Building Flexible Design Systems
yeseniaperezcruz
330
41k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
260
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. 色々あるけど実力が足りないので使ったことがない