この関数に並列処理を実装しようとしています。できるだけ多くのスレッドを取り、結果をファイルに書き込みたいです。
結果は増分順にファイルに書き込む必要があるため、最初の結果を最初に、2 番目の結果を 2 番目に、というように書き込む必要があります。
keyGen 関数は、各チェーンの開始点として使用される整数 m の MD5 です。Reduction32 はリダクション関数で、最初の 8 バイトに t を加算してその値を返します。チェーンがエンドポイントに到達すると、バイナリ ファイルに格納されます。
これを並列にするスマートな方法はありますか? エンドポイントが保存されている順序を台無しにすることなく?
void tableGenerator32(uint32_t * text){
int mMax = 33554432, lMax = 236;
int m, t, i;
uint16_t * temp;
uint16_t * key, ep[2];
uint32_t tp;
FILE * write_ptr;
write_ptr = fopen("table32bits.bin", "wb");
for(m = 0; m < mMax ; m++){
key = keyGen(m);
for (t = 0; t < lMax; t++){
keyschedule(key);
temp = kasumi_enc(text);
tp = reduction32(t,temp);
temp[0]=tp>>16;
temp[1]=tp;
for(i=0; i < 8; i++){
key[i]=temp[i%2];
}
}
for(i=0;i<2;i++)
ep[i] = key[i];
fwrite(ep,sizeof(ep),1,write_ptr);
}
fclose(write_ptr);
}