Welcome to C/C++ lockfree library projects.

C/C++のnon-blocking argolithm libraries実装の提案です

lockfree containerはC/C++でのnon-blocking argolithmを実装したOpenなライブラリです。
近年CPUコア単体の性能向上はゲートのリーク電流の増加によりCMOSスケーリングが効かなくなったことからCPUクロックを向上させることも、より複雑なCPUコアを作りILP(*1)を引き上げることも出来なくなりました。
CPUメーカーが新しいCPUに4core、6coreそしてlabreeのようなマルチコアのCPUをリリースしていることから見て取れます。
しかし、CMOSのスケーリングが進む今まではCPUを新しいものに交換すればパフォーマンスは上がると云う常識が崩れ、CPUが新しくなったとしても古いコードは速度が向上せず、システムレベルそしてソフトウェアレベルでMultiCoreを意識しなければパフォーマンスが上がらない時代へと変化してしまいました。
それは2005年にMicrosoftのSofrware ArchitectのHerb Sutter氏の発言
「the free lunch is over」(ソフトウェアが無料でハードを新しくするたびにパフォーマンスを傍受出来る時代は終わった)
と、云う発言にもよく現れています。MultiCoreが常識となる時代、semaphoreのようなプロセス間をまたいだ排他方向からmutexと云うthread間のみのより粒度の細かな排他方法が実装されていますが、これらよりもっとも小さい、プロセッサ独自の命令を用いたメモリバスのロック命令というものがあります。
これは、メモリアドレス共有型のアーキテクチャを取るマシンで、一つのアセンブラ命令を実行する間、全てのコアでその指定メモリ(通常ポインタ長)をブロックすると云うatomic命令と呼ばれるものがあります。
このatomic命令は非常にシンプルでカウンタなどのアルゴリズムならば比較的簡単に実装が出来るわけですが(実際linuxのkernelなどではatomic演算がそれぞれのアーキテクチャ向けに書かれています)、これらから、比較的メジャーなアルゴリズムであるlistやmapの実装は今まさに研究段階であり、実際に様々な論文が提出されて手いる状況です。

C++Lockfree Containerはマルチコアで動作するもっともパフォーマンスを引き出すアルゴリズムの実装の提案です。

Getting Started

現在C++LockfreeContainer Libraryはgcc4.1から採用されたatomic memory access拡張を利用して実装しているため、gcc4.1の動く環境そしてgcc4のatomic memory access拡張でサポートしているCPUが必要になります。
またOSはlinuxのkernel2.6系でテストをしています。
これらの条件を満たした場合に、C++LockfreeContainerを最大限利用することが出来ます。

お知らせ

・WebTopPageを作成しました。[2009/12/4]
・SourceForgeにてプロジェクトを立ち上げました[2009/12/1]

DownLoad

version 0.1(準備中:gitをご利用ください)