并行化功能

贝克托

我正在尝试对此功能实现并行化,我希望它占用尽可能多的线程,并将结果写入文件。

结果需要以递增顺序写入文件,因此第一个结果需要先写入,第二个需要第二个,依此类推。

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);
}
毫克30

并行处理上述功能而不会遇到并发问题的最佳方法是创建与您希望使用的线程一样多的内存流,然后将任务划分为多个部分,例如,如果您有4个线程,

  • 一个线程执行从0到mMax / 4的任务
  • 一个线程执行从mMax / 4到(mMax / 4)* 2的任务
  • 一个线程执行从(mMax / 4)* 2到(mMax / 4)* 3的任务
  • 一个线程执行从(mMax / 4)* 3到(mMax / 4)* 4的任务

然后将结果流连接起来并将它们写入文件。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章