Parallel processing 如何使用openmp并行biginteger?

Parallel processing 如何使用openmp并行biginteger?,parallel-processing,openmp,biginteger,Parallel Processing,Openmp,Biginteger,我需要并行地从I:biginger:=1到某个biginger值运行一些代码。由于它是一个大整数,我无法使用parallel for,而且它似乎不适用于while循环 试图改进其工作方式的代码有点小问题。。。。 修复完成后,我会在这里更新,详细解释所有内容。我只能对问题的OpenMP部分进行评论,实际上,您只能(直接)并行化使用正则整数(int,long,…)作为循环计数器类型的OpenMP循环。这适用于所有OpenMP循环语句,如for,taskloop等 您始终可以做的一件事是这样的模式(假

我需要并行地从
I:biginger:=1
到某个biginger值运行一些代码。由于它是一个大整数,我无法使用parallel for,而且它似乎不适用于while循环

试图改进其工作方式的代码有点小问题。。。。
修复完成后,我会在这里更新,详细解释所有内容。

我只能对问题的OpenMP部分进行评论,实际上,您只能(直接)并行化使用正则整数(int,long,…)作为循环计数器类型的OpenMP循环。这适用于所有OpenMP循环语句,如
for
taskloop

您始终可以做的一件事是这样的模式(假设大整数被称为
bigint
,并且具有重载的算术运算符)。以下只是用于展示该想法的伪代码,您必须根据您想要使用的实际API对其进行调整:

void process_bigint() {
    binint i;
    bigint start = some_start_value();
    binint end   = some_end_value();

    i = start;
    #pragma omp parallel
    #pragma omp single
    while(i < end) {
        #pragma omp task firstprivate(i)
        {
            process_bigint(i);
        }
    }
}
void进程_bigint(){
比宁一世;
bigint start=some_start_value();
binint end=某个_end_值();
i=开始;
#pragma-omp并行
#布拉格omp单曲
while(i
这背后的主要思想是手动遍历要处理的大整数空间。这是由一个线程完成的。对于每个数字(或一组数字;模式将非常复杂),您将生成一个OpenMP任务来为数字执行实际工作

这项工作的效果取决于您对每个数字实际执行的操作。如果只是一些操作,那么创建任务的成本可能太高,您需要为一组数字生成一个任务


希望有帮助

出于好奇,您的循环是否真的需要一个
biginger
计数器?感觉上,仅仅使用OpenMP可能需要花费很长的时间才能了解需要多少值才能使其有意义。