NextEPCを使ってEPCを構築する(ビルド編)

弊社は、「研究開発ITサービス」を行っているため、様々な実験システムに触れる機会があります。
その1つに、他社製のEPCとeNodeBが使用されているシステムがあり、このEPCではOpenEPCというソフトウェアが採用されていました。

OpenEPCの調査を続けているうちに、github上でソースコードが公開されているNextEPCというプロジェクトの存在を知り、各ノード間のインタフェースが堅持されているのであれば、もしかしたら比較的単純にNextEPCに置き換えられるのではないかと思い始めました。
そこで、既存システムのEPCをNextEPCに置き換えるべく悪戦苦闘したので、その内容を残しておきます。

Continue reading →

スレッド間でカウンタを共有する(再び)

これまでも話してきたとおり、スレッド間でオブジェクトを共有することはハイコストなので、可能な限りオブジェクトを共有しない設計にすることが性能においても品質においても重要です。しかし、どうしてもオブジェクトを共有したい場合は、昨今の処理系にはそれを保証する機能が用意されているのでそれを使って安全を担保します。

Continue reading →

誤った並列化による性能劣化(その2)

前回の記事に引き続いて、マルチスレッドプログラムの性能についてです。前回は「コンテキストスイッチングや排他制御のオーバヘッドに見合う処理でなければ並列化は逆効果」ということがわかりました。今回はmutexのロック獲得と開放について簡単な実験します。

Continue reading →

誤った並列化による性能劣化(その1)

前回の記事で「複数のスレッドが共有する変数をインクリメントするときには排他制御が必要」という話をしました。その結果、正しい値を得ることには成功したものの、性能が著しく落ちるという知見を得ました。今回は性能が出ないマルチスレッドプログラムに対して割り当てるCPU数をあえて制限してみます。

Continue reading →