0
私は現在、チェスエンジンのためにLazy SMPを実装しようとしています。これは、さまざまなコアで検索アルゴリズムを実行し(可能な限り同期が外れている)、共有ハッシュテーブルの利点をうまく利用しています。それはまだ1つのコアで実行されます。以下のコード(関連性のない部分は削除しました)。C++ asyncは1つのコアでのみ動作しますか?
反復深化ループ:
for(distance; distance <= depth && IDTimeS < endTime;) {
positionCount = 0;
clock_t currentTime = clock();
if(currentTime >= endTime) {
distance - 1;
break;
}
//multi threading testing
int val = multi(distance, alpha, beta, false, currentTime, timeLimmit, currentDepth +1, true, z0, z1, z2);
//increment distance to travel (same as depth at max depth)
distance++;
}
マルチスレッド機能:
int Ai_Logic::multi(
int distance,
int alpha,
int beta,
bool isWhite,
long currentTime,
long timeLimmit,
int currentDepth,
bool allowNull,
ZobristH *z0,
ZobristH *z1,
ZobristH *z2
)
{
auto f1 = std::async(std::launch::async, &Ai_Logic::alphaBeta, this, distance, alpha, beta, isWhite, currentTime, timeLimmit, currentDepth, allowNull, BB0, z0);
auto f2 = std::async(std::launch::async, &Ai_Logic::alphaBeta, this, distance-1, alpha, beta, isWhite, currentTime, timeLimmit, currentDepth, allowNull, BB1, z1);
auto f3 = std::async(std::launch::async, &Ai_Logic::alphaBeta, this, distance+1, alpha, beta, isWhite, currentTime, timeLimmit, currentDepth, allowNull, BB2, z2);
auto val = f1.get();
auto val2 = f2.get();
auto val3 = f3.get();
return val;
}
は、それはまだ一つだけコアを使用していますなぜ私は欠けている明白な理由はありますか?
どのようにそのスレッドを1つしか使用していないのですか? – vu1p3n0x
プロセッサの使用率は?私が全く誤解しない限り。それをコア間で分割する別の方法はありますか? –
プロセッサの使用状況を見ていると、スレッドが完了すると、スレッドの作成が正しく行われません。 – vu1p3n0x