使用openmp进行并行化-错误是内存泄漏

时间:2019-07-13 08:37:28

标签: c++ openmp

因此,没有休息就无法划分的因素 另一个int数-我们可以为它添加一个迭代器,但我们 不知道素数的形式。而且我认为我仍然是 学生对此。我在并行化中发布了代码, 没有。它只是没有;)而工作,我不得不重写 代码,因为没有副本!

我认为使用break标志继续替换break命令是 错误,并且在for循环中发现无效谓词, 唯一允许的条件是一个简单的条件,包括 迭代变量-如果您能解决这个问题,那就大了!

#include <iostream>
#include <vector>
#include "omp.h"
using namespace std;
double MAX_VAL = 999999.0;
double v2 = MAX_VAL;
double rgcd(double v1) {
#pragma omp parallel
{
int i = 0;
int flag = 1;
if((int) v1 == (int) v2) {
     v2 -= 1.0;
}
#pragma omp parallel for
for(int i = 0; i < (int) MAX_VAL; i++) {
if(((int) v1 % (int) v2 != 0 && (int) v1 != (int) v2)) {
  v2 -= 1.0;
  if((int) v2 < 2) {
      flag = 0;
      if(flag) continue;
  }
  if((int) v1 == (int) v2) {
      v2 -= 1.0;
  }
  if((int) v1 % (int) v2 == 0) {
  #pragma omp parallel for
  for(int i = 0; i < (int) MAX_VAL; i++) {
       if(((int) v1 % (int) v2 == 0)) {
            v1 /= v2;

           if((int) v1 < 2 || (int) v2 < 2) {
                flag = 0;
                if(flag) continue;
           }
           flag = 0;
           if(flag) continue;
       }
  }
}
 } 
}
}
 return v1;
}
double &get_val(vector<double> &vi, int ix ) {
 return vi[ix];
}
int main() {
#pragma omp parallel
{
 int i = (int) MAX_VAL;
 int ai[(int) MAX_VAL];
 for(i = (int) MAX_VAL; i >= 0; i--) {
  ai[i] = (double) i;
 }
 vector<double> vec2(ai, ai+((int)MAX_VAL));
#pragma omp parallel for
 for(i = (int) MAX_VAL; i >= 0; i--) {
  v2 = MAX_VAL;
  if(i == (int) rgcd(get_val(vec2, i)++)) {
   cout << i << endl;
  }
 }
}
 return 0;
}

///////////////////////////////////////////////////////////////

#include <iostream>
#include <vector>
using namespace std;
double MAX_VAL = 999999.0;
double v2 = MAX_VAL;
double rgcd(double v1) {
 if((int) v1 == (int) v2) {
   v2 -= 1.0;
 }
 while(((int) v1 % (int) v2 != 0 && (int) v1 != (int) v2)) {
  v2 -= 1.0;
  if((int) v2 < 2) {
   break;
  }
  if((int) v1 == (int) v2) {
   v2 -= 1.0;
  }
  if((int) v1 % (int) v2 == 0) {
   while(((int) v1 % (int) v2 == 0)) {
    v1 /= v2;

    if((int) v1 < 2 || (int) v2 < 2) {
    break;
    }
  }
  break;
}
}
 return v1;
}
double &get_val(vector<double> &vi, int ix ) {
 return vi[ix];
}
int main() {
 int i = (int) MAX_VAL;
 int ai[(int) MAX_VAL];
 for(i = (int) MAX_VAL; i >= 0; i--) {
  ai[i] = (double) i;
 }
 vector<double> vec2(ai, ai+((int)MAX_VAL));
 for(i = (int) MAX_VAL; i >= 0; i--) {
  v2 = MAX_VAL;
  if(i == (int) rgcd(get_val(vec2, i)++)) {
   cout << i << endl;
  }
 }
 return 0;
}

新方法有效,但我无法折叠循环

#include <stdio.h>
#include <stdlib.h>
#include <omp.h>
#define MAX_CALC 40
int isPrime(int number);
int power(int val, int power);
int main() {
    #pragma omp parallel
    {
    int p[2];
int ctr = 0;
int ctr2 = 0;
int it_m = 0;
int it_1 = 0;
int it_2 = 0;
int it_c = 0;


int index = 3;
srand(time(NULL));
double t = clock();
double s = clock();
int prime = 2;
FILE *file;
file = fopen("ly_prime.txt", "w");
//f_power(2.0, 57885161)
#pragma omp parallel for
for (it_m = 2; it_m <= 2000; it_m++) {
    ctr2 = 0;
    it_c = it_m;
    for (it_1 = it_m; it_1 >= 2; it_1--) {
        for (it_2 = it_1; it_2 >= 2; it_2--) {
            if (it_1 * it_2 - it_c == 0) {
            p[ctr % 2] = it_c;
            if (ctr >= 1 && p[ctr % 2] - p[(ctr - 1) % 2] == 2) {
                //prime[0] = (p[ctr % 2] - 1);
                prime = (p[ctr % 2] - 1);
                fprintf(stdout, "|%d _ i: %d _ %d\n", isPrime(prime),index, prime);
                index++; 
            }
            ctr++;
            }
        }
    }
}
t = clock() - t;
fprintf(file, "|%d_ %d_ %d ", prime, index - 2, ctr);

}
    return 0;
}
double f_power(double val, int exp) {
    int i = 0;
    double help = val;
    for(i = 1; i < exp; i++) {
        val *= help;
    }
    return val;
}
int isPrime(int number)
{
    int val = 0;
    int flag = 1;
    int i = 2;
    #pragma omp parallel for
    for(i=2; i < number; i++)
    {
        int leftOver=(number % i);
        if (leftOver==0)
        {
                val = 1;
                flag = 0;
                if(flag) continue;
        }
    }
    return val;
} 

0 个答案:

没有答案