@ledsun blog

無味の味は佳境に入らざればすなわち知れず

2022-11-01から1ヶ月間の記事一覧

JS::Object.await ふたたび

JS::Object.await - @ledsun blog に対してフォローをもらいました。 すごーく遅レスですが、最近追加したメソッドまで追っていただいてありがとうございます!コメントが大変紛らわしい書き方だったんですが、Ruby側でJSのPromiseを待てるもの、という認識…

C#をデバッグ実行するとfinallyブロックに入らない

こういうC#のソースコードがあります。 using System; namespace ConsoleApp1 { internal class Program { static void Main(string[] args) { try { var hoge = 0; var fuga = 1; var piyo = fuga / hoge; } finally { Console.WriteLine("finally"); } } }…

Vladimir MakarovさんのRubyKaigi 2022での発表を記事にしたもの?

developers.redhat.com ruby-jp slackで教えてもらいました。 A Faster CRuby interpreter with dynamically specialized IR - RubyKaigi 2022 の内容を記事にしたものらしいです。 この発表をみた僕の感想は A Faster CRuby interpreter with dynamically s…

25日間で理解するRubyVMインストラクション

kddnewton.com ruby-jp slackで教えてもらいました。 Syntax Tree - RubyKaigi 2022 を発表したケビン・ニュートンさんが25日間でRubyVMについて解説してくれるようです。 プロローグの本記事によるとRubyVMのインストラクションを表示する方法が挙げられて…

コア数を増やすと並列数は伸びるか?

8並列で3倍速 - @ledsun blog で、8並列で動くことがわかりました。 コア数を変えて計測してみました。 つかったEC2インスタンスは次の通りです。 インスタンスタイプ vCPU数 コア数 m6i.2xlarge 8 4 m6i.4xlarge 16 8 m6i.8xlarge 32 16 計測結果 4コアだと…

8並列で3倍速

EC2のvCPU数はハイパースレッディングを含む - @ledsun blog にて計測に使っているEC2インスタンスタイプが不適切であることがわかりました。 今度はm6i.4xlargeを使って計測します。 m6i.4xlargeは16vCPUあります。 コア数は8のはずです。 m6i.4xlargeの計…

ruby.wasmに対する思いとか、企んでいることとか

ruby.wasmについて、現時点で僕が思っていることを記録しておきます。 思っていること 主にonブラウザ 僕がruby.wasmに興味があるのは、ブラウザで動かす方です。 エッジワーカーで動かす方は今のところあまり興味がありません。 また、ruby.wasmがプロダク…

EC2のvCPU数はハイパースレッディングを含む

何並列までいけるのか? - @ledsun blog で4並列で頭打ちになりました。 IOの影響をさらにそぎ落とすために、計測スクリプトを次のように改良しました。 require 'benchmark' require 'text_alignment' require 'active_support' require_relative 'config/i…

何並列までいけるのか?

Ractorちゃん並列化してたー。 - @ledsun blog でRactorで並列に動かせていることを確認しました。 しかし4コアのマシンで確認したため、並列数の上限がわかりませんでした。 そこでAWS上のEC2インスタンスを使って並列数の上限を調べます。 t3.2xlargeイン…

ruby.wasmではファイルに書き込めない

require_relativeはパッチれない - @ledsun blog で、Rubyスクリプトの実行前に、Rubyスクリプトを静的にあつかってrequire_relativeを置き換えることにしました。 そこで次のアイデアを思いつきました。 Rubyスクリプトの実行前に、require_relativeの参照…

JS::Object.await

fetchは非同期だった - @ledsun blog でfetchの完了をRuby側で待てなくて、require_relativeの順番の制御が上手く行きませんでした。 ruby.wasmでJS::Object.awaitという関数を見つけました。 名前からするとPromiseを待てそうな関数です。 これを使えばfetc…

Ractorちゃん並列化してたー。

インスタンス生成コストが大きかった - @ledsun blog までやった結果、Ractor間で受け渡しているデータ構造が大分はっきりしました。 ここまできたら、送信データを保存しておけば、Ractor化している処理だけで実行出来るはずです。 次のような感じで、Racto…

インスタンス生成コストが大きかった

Ractor化する範囲を小さくしたら遅くなった - @ledsun blog で、Ractor化する範囲を小さくしたら処理が遅くなって混乱しました。 よくよくソースコードを確認したところ、変わっている場所がありました。 aligner = TextAlignment::TextAlignment.new(msg[:r…

Ractor化する範囲を小さくしたら遅くなった

GCの影響は少なそう - @ledsun blog で、コピーする範囲を小さくすることで高速化できそうと考えました。 そこで、根本的にRactor化する範囲を小さくします。 そうすることでRactorで受け渡しするデータを最小化し、なんならmoveします。 次のようなソースコ…

GCの影響は少なそう

AWS EC2上で並列処理の時間を再々計測した - @ledsun blog で、次の3つの仮説を立てました。 コピーがボトルネックではなかった コピーは減ったが相変わらずボトルネックである コピーで作られたオブジェクトのGCがボトルネックだった また1は可能性が低いと…

AWS EC2上で並列処理の時間を再々計測した

AWS EC2上で並列処理の時間を再計測した - @ledsun blog でAWS環境で計測したデータが、その前に計測したデータと違いました。 どっちが真かわからないのでもう一度再計測しました。 AWS上で3回目の計測 AWS上で2回目の計測 AWS上で1回目の計測 1回目が明ら…

require_relativeはパッチれない

requrie_relativeをハックしたい require_relativeの相対参照の起点となるもの - @ledsun blog でRubyスクリプトのURLを保持する必要があるとわかりました。 そこで次の感じでURLを保持したVMクラスを作りました。 import { RubyScriptAndSourceURL } from "…

AWS EC2上で並列処理の時間を再計測した

Ractor間のデータのやりとりでコピーを減らすには - @ledsun blog でAWS上で再計測してみると書きました。 再計測しました。 AWS上でのコピー1回と2回の処理時間の比較 あまり効果がないようです。 ローカルPCで試したときは、次のようにもう少し明確に効果…

Ractor間のデータのやりとりでコピーを減らすには

Ractor#send move:true したときに出た3つのエラー - @ledsun blog にて、ディープコピーを減らすためにmoveオプションを使いました。 ところがエラーがでました。またエラーの内容が難解で対応出来そうにありません。 そこで、ディープコピーを減らすための…

Ractor#send move:true したときに出た3つのエラー

詰まっているのはワーカーでなくパイプ? - @ledsun blog で、「Ractor間のデータ受け渡し時のコピーがボトルネックになっている」という仮説を立てました。 これを確認するために、Ractor間のデータの受け渡しをmoveにしてみます。 次のようにRactor#sendと…

詰まっているのはワーカーでなくパイプ?

並列数をかえても処理時間が変わらない謎 - @ledsun blog で「サチっているかもしれない」と仮説を立てました。 それを検証するために並列数を変えて計測してみました。 並列数と処理時間のグラフ 処理時間なので低いほど性能が高いです。 3どころか1並列で…

並列数をかえても処理時間が変わらない謎

とあるRuby on RailsアプリケーションのSidekiqで動くバックグラウンドジョブを高速化をしています。 CPUバウンドな処理に時間が掛かっています。 並列化して高速化できるか試しています。 RactorでWoker pool - @ledsun blog で、4コアのPCで並列化できると…