CUDA で並列遺伝的アルゴリズムを使用して TSP を解決しようとしています
使っています
THREAD_SIZE as 32
BLOCK_SIZE as 16
各ブロックで使用する共有メモリはこれです
__shared__ int population[THREAD_SIZE][NUM_OF_CITIES];
NUM_OF_CITIES が 14 または 29 の場合、プログラムは問題なく動作しますが、NUM_OF_CITIES を 51 に増やすと、どこかでメモリ アクセス違反が発生します。
そして、ディスプレイドライバーがクラッシュします..
制限よりも多くの共有メモリを使用しているためですか? これを回避する方法はありますか?
[編集] Robert Crovellaが指摘したように、問題は各スレッドの実行にかかる時間のよう です
各スレッド内で次の操作を実行します
for(int k = 0 ; k < 100 ; k++ ) {
//Selection
//CrossOver
//Evolution (Two Opt ヒューリスティックを使用)
}
Two Optの進化ステップ を削除した場合、ループ内。ループ内で最もコストのかかるステップであり、カーネルは問題なく動作します...
カーネルを 2 秒以上実行させる方法はありますか? より優れた強力なカードを購入すれば、この問題は解決しますか?
GTS 450を使用していますが、近い将来GTX 650 Tiを購入する予定です。これで問題は解決しますか?