Ошибка: C7660 "task": требуются параметры командной строки "-openmp:llvm"
Код:
void Sortirovki::FastSort_parallel(double* mas, size_t first, size_t last, unsigned d) {
double mid;
size_t f = first, l = last;
mid = mas[(f + l) / 2];
while (1) {
while (mas[f] < mid) { ++f; };
while (mas[l] > mid) { --l; };
if (f >= l) { break; }
std::swap(mas[f++], mas[l--]);
}
size_t part = l;
#pragma omp parallel
{
#pragma omp task if (d <maxParallelDepth && (last - first) > minParallelSize) // вот тут возникает ошибка
{
if (first < part)
FastSort_parallel(mas, first, part, d + 1);
}
#pragma omp task if (d <maxParallelDepth && (last - first) > minParallelSize) // и вот тут
{
if (part + 1 < last)
FastSort_parallel(mas, part + 1, last, d + 1);
}
#pragma omp taskwait // и вот тут
}
}
main:
#include "Lib.h"
#include <utility>
constexpr auto SIZE = 100000;
int main()
{
//запуск генератора случайных чисел
srand(time(NULL));
cout << setw(25) << "Sorting and case" << setw(15) << "Non parallel" << setw(15) << "Parralel" << setw(15) << "Efficiency" << endl;
cout << endl;
double a_fst[SIZE];
for (int i = 0; i < SIZE; i++)
{
a_fst[i] = rand() * 0.001;
}
double tstart1 = omp_get_wtime();
Sortirovki::FastSort(a_fst, SIZE);
cout << Sortirovki::CheckArray(a_fst, SIZE) << endl;
double tend1 = omp_get_wtime();
for (int i = 0; i < SIZE; i++)
{
a_fst[i] = rand() * 0.001;
}
double tstart2 = omp_get_wtime();
Sortirovki::FastSort_parallel(a_fst, 0, SIZE-1);
cout << Sortirovki::CheckArray(a_fst, SIZE) << endl;
double tend2 = omp_get_wtime();
cout << setw(25) << "Usual case FasrSort" << setw(15) << tend1 - tstart1 << setw(15) << tend2 - tstart2 << setw(15) << (tend1 - tstart1) / (tend2 - tstart2) << endl;
return 0;
}
Header:
#pragma once
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <omp.h>
#include <iomanip>
using namespace std;
static size_t minParallelSize = 128 * 1024;
static unsigned maxParallelDepth = 4;
// пространство имен сортировок
namespace Sortirovki
{
// сортировка пузырьком
void BubleSort(double* a, int size);
void FastSort_parallel(double* mas, size_t first, size_t last, unsigned d = 0);
}
Источник: Stack Overflow на русском