私の C の知識はかなりのもので、プログラムを拡張して並列プログラミングの知識を強化したいと考えています。
基本的に、私が言及しているプログラムは、特定の文字セットの 0000 .. zzzz などのパスワードをインクリメントするブルート フォース ジェネレーターです。crypt (3) のブルート フォース コードに関するヘルプが必要です。
アルゴリズムの概要を以下に示します (これは Jerome の功績によるものです)。
int len = 3;
char letters[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
int nbletters = sizeof(letters)-1;
int main() {
int i, entry[len];
for(i=0 ; i<len ; i++) entry[i] = 0;
do {
for(i=0 ; i<len ; i++) putchar(letters[entry[i]]);
putchar('\n');
for(i=0 ; i<len && ++entry[i] == nbletters; i++) entry[i] = 0;
} while(i<len);
}
マルチスレッド化によってこれを拡張できる論理的な方法は何ですか?
CUDA は、シンプルであるとしてもばかげたソリューションです。私の本では良い解決策のように見える OpenMP について聞いたことがありますが、これをどのように分割して、私のコンピューターの複数のコアから利益を得ることができると思いますか? つまり、コア 1 は aaaa..ffff を計算し、コア 2 は ffff...zzzz を計算しますが、これはこれで意味のある唯一の方法ですか?