私はライブラリのマルチスレッド実装に取り組んでいます。このライブラリの1つのモジュールには、いくつかのグローバル変数があります(プログラムの実行で非常に頻繁に使用されます)。これらの変数へのアクセスをより安全にするために、スレッドローカルストレージ(TLS)キーワードを使用してそれらを宣言しました__declspec(thread)
。
これがライブラリ外部関数の呼び出しです。この関数は、グローバル変数を持つモジュールを使用します。
for(i = 0; i<n_cores; i++)
hth[i] = (HANDLE)_beginthread((void(*)(void*))MT_Interface_DimenMultiCells,0,(void*)&inputSet[i]);
このようにして、ライブラリで使用されるすべての変数がスレッドごとに複製されると思います。
x8コアプロセッサでプログラムを実行すると、操作を完了するために必要な時間は、単一プロセスの実装に必要な時間の3分の1を超えることはありません。
1/8に到達するのは不可能だと知っていますが、少なくとも1/6は到達可能だと思いました。
問題は、これらの__declspec(thread)
変数がパフォーマンスの低下の原因であるかどうかです。