Apple M1の参照カウントは本当に速いのか

Apple M1に関して以下のようなツイートが話題になった。 18/ Another "magic" trick is how their "Swift" programming language uses "reference counting" instead of the "garbage collection" in Android. They did something in their CPU to double th…

メモリアクセスのセマンティクスとApple siliconの裏技(?)について

アウト・オブ・オーダー実行について補足 前回の記事で「アウト・オブ・オーダー実行」について特に説明せずに話を進めてしまったことに気づいたので、まずはそれについて簡単に補足しておこう。 コンピューターの性能向上の歴史はレイテンシーとの戦いの歴…

「強いメモリモデル」と「弱いメモリモデル」

Apple M1についての面白い記事を見かけて、久しぶりにメモリモデル屋(?)の血が騒いだのでブログを書く。 note.com 強いメモリモデル 現代のCPUアーキテクチャでは、x86(64bit, 32bitどちらも)が「強いメモリモデル」を採用しており、それ以外のメジャーなCPU…

ふと思いついて書いた。後悔はしていない。

昨日、マルチスレッドなプログラムのコードを読んでたんです。マルチスレッド。 そしたらなんかロックがめちゃくちゃ競合しててパフォーマンスが出ないんです。 で、変更履歴よく見たらなんか全メソッドを一つのmutexでロックして、マルチスレッドに対応した…

私立C++女学園 マルチスレッド科

ここは私立C++女学園。 由緒あるこの学園も、時代の流れに押され大きな変革の時を迎えていた。新たに学園に設けられることとなった「マルチスレッド科」。物語はここから始まる…… 登場人物 memory_order_seq_cstさん 学級委員長。どんなことも完璧にこなす優…

メモリバリアを理解するために必要な3つのこと

Togetter - 「メモリバリアとガチャピン先生」 上の話において、「メモリバリア」の意味するところをもう少し明確にすべきかなあと思ったので、簡単にまとめてみます。 「メモリバリア」が満たすべき性質は、以下の3つに分類することができます。 atomicity …

ハザードポインタ版Lock-Free List

前回の記事で時間切れのために書ききれなかった Lock-Free List について、サンプルコードをgithubに上げました。 GitHub - yamasa/lockfree: Experimental implementations of lock-free algorithms, using hazard pointers and tagged pointers. sortedlis…

lock-freeアルゴリズムにおけるメモリ回収

これは C++ advent calendar の参加記事です。 もともとは「マルチコア時代のLock-free入門」の補遺として書くつもりだったのが、何だかんだで一年近くほったらかしになってしまっていたので、今回 advent calendar という締切りを課すことでようやく書くこ…

ピーターソンのアルゴリズムとメモリバリア

cacheline awareな何かを作りたい。__attribute__((aligned(64)))で何か。— ロックフリーのkumagi (@kumagi) 2010年10月13日 とkumagiさんが言っていたので、ちょっとしたコードを張り付けてみます。 これは wikipedia:ピーターソンのアルゴリズム の実装例…

今ココなう! iPhone用Webアプリのソースコードを公開

私の作成した今ココなう!のiPhone用Webアプリについて、そのソースコードをgithubにて公開しました。 このWebアプリは、iPhoneだけでなくAndroid2.1以降やFireFox3.5以降、Chrome5やSafari5など、最近のHTML5対応ブラウザでも利用することができます。アプ…

マルチコア時代のLock-free入門

本日、並カンにてLock-freeアルゴリズムについて発表しました。発表資料は以下になります。 なお、今回の発表で割愛したメモリバリアの詳細については、以下の発表資料を参照ください。 そろそろvolatileについて一言いっておくか また、Hazard pointerやタ…

C++0x時代の Double-Checked Locking

今回は "Double-Checked Locking" (以下DCL)というマルチスレッドプログラム向けのイディオムを例にして、C++0xの(低レイヤ向け)マルチスレッド機能の利用方法を紹介してみます。 DCLとは、「ロック→条件判定」というロジックを「条件判定→ロック→(再度)条件…

C++0xのメモリバリアをより深く解説してみる

もはや誰得レベルになりつつありますが、今回もメモリバリアについての話です。以前の話の続きになるので、まだの方は初回と前回のエントリを先にどうぞ。 さて、まず最初に、C++0xのatomicクラスを使った「正しく同期化されているコード」の例を挙げてみま…

次期C++に導入されるメモリバリアについて解説してみる

前のエントリで次期C++標準(通称C++0x)にatomic型とメモリバリアが導入されるという話をしました。今回はそのC++での実装について、もう少し深く追いかけてみます。 スライド資料では「atomic操作 + acquire/releaseバリア」が基本であると書きましたが、実…

volatile爆発しろ!

volatileという英単語には「爆発しやすい」という意味があるようですね。豆知識。 さて、前エントリのスライドで説明したように、マルチスレッドプログラムを正しく動作させるためにはCPUやコンパイラによるリオーダーを制限することが重要であり、そのため…

そろそろvolatileについて一言いっておくか

先月、CBUGとわんくまの勉強会にて、アトミック変数とかメモリバリアとかvolatileとかについて話をしてきました。 ちょっと遅くなりましたが、そのときの講演資料を一つにまとめたので、ここで公開しておきます。あと、補足記事も追加していってます。 volat…