prime's diary

そすうの日々を垂れ流しちゃうやつだよ

Brainf*ckを直接実行できるCPUを作った (その4) BTB(Branch Target Buffer)の実装【いろいろなコンピューター Advent Calendar 2023 13日目】

この記事はいろいろなコンピューター Advent Calendar 2023の13日目の記事です。年跨いだけど気にしない。 adventar.org この記事は12日目の記事の続きです。ぜひ先にそちらをご覧ください。 primenumber.hatenadiary.jp 前回の記事では、パイプライン化に成…

Brainf*ckを直接実行できるCPUを作った (その3) パイプライン化とデータキャッシュ【いろいろなコンピューター Advent Calendar 2023 12日目】

この記事はいろいろなコンピューター Advent Calendar 2023の12日目の記事です(大遅刻)。 adventar.org この記事は10日目の記事の続きです。ぜひ先にそちらをご覧ください。 primenumber.hatenadiary.jp 10日目の記事で実装したいとしていた 命令書き込み…

Brainf*ckを直接実行できるCPUを作った (その2) マルチサイクルCPU化【いろいろなコンピューター Advent Calendar 2023 10日目】

この記事はいろいろなコンピューター Advent Calendar 2023の10日目の記事です。(遅刻です すみません…) adventar.org 前日の記事 primenumber.hatenadiary.jp の続きとなっております。よければそちらからお読みください。 シングルサイクル・マルチサイ…

Brainf*ckを直接実行できるCPUを作った (その1)【いろいろなコンピューター Advent Calendar 2023 9日目】【Scala Advent Calendar 2023 9日目】

この記事はいろいろなコンピューター Advent Calendar 2023の9日目の記事です。 adventar.org Brainf*ckとは Brainf*ck(この記事では一部伏字にして表記しています)は難解プログラミング言語のひとつです。 コンパイラがなるべく単純になるように設計されて…

例え話の罠: 例え話と準同型

導入 何らかの議論をするときに、アナロジー、例え話をして説得力を持たせるテクニックは広く使われている。 故事成語のもととなった寓話などがその代表である。 例え話による議論では、もとの複雑で想像が難しいシチュエーションAを、理解しやすいシチュエ…

CPU自体が準光速で動くことで計算時間を短縮するコンピューター【いろいろなコンピューター Advent Calendar 2023 1日目】

この記事はいろいろなコンピューター Advent Calendar 2023(さっき作った)の1日目の記事です。 adventar.org 背景 さて、昨今のCPUはどんどん高速化し、クロック周波数も5GHzを超えることは珍しくなくなりました。 一方で、ここまで高速化すると問題になるの…

架空伝統ゲーム「机戦」のAIを作る その1 【ボードゲーム・パズルプログラミング Advent Calendar 2022】

この記事は「ボードゲーム・パズルプログラミング Advent Calendar 2022」3日目の記事です(遅刻すみません)。 adventar.org 架空伝統ゲーム「机戦」とは 創作上の異世界ファイクレオネで遊ばれている(という設定の)伝統ゲームです。 日本机戦連盟では、…

ととりにゃあ あつめて早し 最上川 それにつけても 金の欲しさよ - あるいは、ととりにゃあの語感の良さについて 【ととりにゃあ Advent Calendar 2021 Day 19】

こんばんは、そすうぽよです。 この記事はととりにゃあ Advent Calendar 2021の19日目の記事です。 adventar.org 概要 まずは、こちらのツイートをご覧ください*1。 https://twitter.com/totori_kpr/status/1472143266753953795 2021年12月18日現在、ととり…

マナ回路設計と魔術アーキテクチャ 【存在しない技術 Advent Calendar 2021】

この記事は存在しない技術 Advent Calendar 2021 - Adventarの14日目の記事です。 この記事はあなたのお住まいの世界には存在しない技術をもとに記述されているため、あなたのお住いの世界ではご利用いただけません。 マナ回路前史 近代以前は、魔術を発動で…

『フカシギの数え方』の数え上げを、全探索のままGPGPUで高速化した 【KMCアドベントカレンダー 2021 4日目】

この記事はKMCアドベントカレンダー2021の4日目の記事です。 adventar.org 概要 元ネタ:『フカシギの数え方』 www.youtube.com 問題としてはN×Nマスのグリッド(頂点としては 頂点)を左上から右下まで移動する経路であって、同じところを二度通らないもの…

AtCoder Heuristic Contest 003で5位(2.921T点)を取りました

AtCoder Heuristic Contestは、最近始まったAtCoderの定期コンテストで、最適解を出すのが難しい問題に対し、出来るだけ良い解を作成するコンテストです。 1週間程度の長期コンテストと、数時間程度の短期コンテストが交互に行われます。 atcoder.jp 今回の…

AtCoder Heuristic Contest 001 解法メモ

最終スコア(システムテスト後)は980,823,067,375点で95位でした。 atcoder.jp 自明解の生成 広告の希望(x, y, r)に対して、長方形( (x, y), (x+1, y+1) )は解の条件を満たす スコア計算 解の条件を満たしているかを判定する 満たしていれば、各広告について…

AtCoder橙/Codeforces International Grandmasterになりました

この記事は色変記事アドベントカレンダー1日目の記事ではありません。 AtCoderで橙色、CodeforcesでInternational Grandmaster(IGM)になったので振り返り記事を書きます。 AtCoderのレーティング推移 Codeforcesのレーティング推移 まあ、Codeforcesの方はIG…

フラグメントシェーダを用いて、VRChatのワールドで計算機を作る 【KMCアドベントカレンダー 2日目】

この記事はKMCアドベントカレンダー 2日目の記事です adventar.org 概要 最近遊んでいるVRChatというゲームにはユーザーの作成したアバターやワールドをアップロードできる機能があります。さらに、アバターやワールドのバーテックスシェーダー*1/フラグメン…

競技プログラミングはISUCONの役に立つ 【ISUCON10予選参加記】

単なる普通のISUCON参加記です。 そんなに競技プログラミングの話はないので、そういう話を期待していた人はごめんなさい。 こういうのは忘れないうちに書かないと書けないがち。 isucon.net ISUCON10にチーム「:羽付きのお札:」で nana ( 菜々 (@nonamea774…

オンラインBrainf*ckインタプリタ・デバッガを作った【Brainf*ck Advent Calendar 2019とその他のAdCの17日目】

はじめに この記事はBrainf*ck Advent Calendar 17日目・KMC Advent Calendar 17日目・LeapMind Advent Calendar 17日目の記事です。 adventar.org adventar.org adventar.org 概要 難解プログラミング言語の一つであるBrainf*ckのオンラインデバッグ環境を…

いろいろなBrainf*ck処理系における値の0初期化、ムーブ、コピー、便利なイディオム 【Brainf*ck Advent Calendar 2019 5日目】

この記事はBrainf*ck Advent Calendar 2019 5日目の記事です。 adventar.org 4日目の記事はmatsu7874さんによる「RustでBrainfuckインタプリタを実装した話を書けるだろうか?」の予定です。 6日目の記事はあんでぃ@量産型テ徒???? /-500/さんによる unident…

メタプログラミング可能なBrainf*ck派生言語BFmeta 【Brainf*ck Advent Calendar 2019 3日目】

この記事はBrainf*ck Advent Calendar 2019 3日目の記事です。 adventar.org 2日目はみみねこさんによる mmnkblog.hatenablog.com でした。4日目はmatsu7874さんによる「RustでBrainfuckインタプリタを実装した話を書けるだろうか?」の予定です。 今回はBra…

「サイゼリヤで1000円あれば最大何kcal摂れるのか」を全探索で解いてみた

概要 qiita.com この記事や後述の先行研究に触発されて、「サイゼリヤで1000円あれば最大何kcal摂れるのか」を最も単純に全探索で解いてみました。 先行研究 先人たちがいろいろな方法で解決を試みています。 qiita.com qiita.com qiita.com qiita.com qiita…

LeapMind株式会社に入社しました

LeapMind株式会社に入社しました

PEZY-SC/SC2を使った話 【KMCアドベントカレンダー 2日目】

この記事はKMC Advent Calendar 2018 - Adventarの2日目の記事です。 adventar.org 概要 理研に設置されているスーパーコンピューター、菖蒲(Shoubu)・菖蒲SystemBでPEZY Computing社のPEZY-SC/SC2を使わせてもらいました。 性能とか使いやすさについて感想…

ビット演算マニアのためのAVX512入門 【KMCアドベントカレンダー 22日目】

この記事はKMCアドベントカレンダー22日目の記事です。 adventar.org この記事では全国一億三千万のビット演算マニアのために、AVX512命令セットからビット演算に使えそうなものを紹介します。 AVX512の基本 AVX512とは Advanced Vector Extensions(AVX)とい…

ICPC 2017 Tsukuba Asia Regional 参加記

2017/12/16-18に行われたICPC 2017 Tsukuba Asia RegionalにチームPrimeDragonとしてamano, nikuttoと参加してきました。 コンテスト前日まで 15日 生活リズム的に16日の朝早くから出られそうにないので徹夜することにした。Redbull飲んで徹夜する。 16日 徹…

オセロの着手可能位置生成 【ビット演算テクニック Advent Calendar 2016 23日目】

はじめに この記事はビット演算テクニック Advent Calendar 2016の23日目の記事です。 www.adventar.org オセロとビット演算 オセロは盤面サイズが8x8=64マスなので、64bit変数を2つ用意し、1つめを自分の石(あるいは黒石)の位置を、2つめを相手の石(ある…

GPGPUで爆速でオセロを解く 【KMC Advent Calendar 2016 19日目】

はじめに この記事はKMC Advent Calendar 2016の19日目の記事です。 www.adventar.org GPGPUとは GPGPU(General-purpose computing on graphics processing units; GPUによる汎用計算)とは、GPUの演算資源を画像処理以外の目的に応用する技術のことである…

Bit scan reverseをAVXで並列化する

Bit scan reverse (bsr) 00000001010100010100000100101101 <-clz->*<---bit scan reverse---> 1になっている最も高位のビットのインデックスを0-indexedで計算します。0に対する結果は未定義(不定)です。 似た処理にcount leading zero(clz)があり、こち…

pclmulqdqを用いたビット単位のunpack【ビット演算テクニック Advent Calendar 2016 11日目】

この記事はビット演算テクニック Advent Calendar 2016 www.adventar.org の11日目の記事です。 ビット単位のunpack C++の固定長ビット配列を扱うクラスstd::bitsetを例として解説します。 std::bitset<128> unpacklo(const std::bitset<128> &a, const std:…

Delta swapとその応用 【ビット演算テクニック Advent Calendar 2016 3日目】

この記事はビット演算テクニック Advent Calendar 2016 www.adventar.org の三日目の記事です。 ビット列の部分列を入れ替える操作を効率的に行えるDelta swapを紹介します。xorが好きなのでDelta swapも好きなテクニックの一つです。 行える操作 マスクとず…

ビット列による部分集合表現 【ビット演算テクニック Advent Calendar 2016 1日目】

はじめに この記事はビット演算テクニック Advent Calendar 2016 www.adventar.org の1日目の記事です。 この記事ではビット演算を使って有限集合の部分集合を表現、操作するテクニックを紹介します。 本文中で説明を省略した部分については、詳しい説明のあ…

CUDAで再帰するとき

CUDAではDynamic Parallelism(GPU側から新たなカーネルを起動する)以外に普通の(シリアル実行の)再帰が可能です(Compute Capability 2.0以上)。 しかし、再帰的に関数を呼び出す場合、必要なスタックサイズが静的に割り出せないことがあり、このときはデ…