Ошибка: C7660 "task": требуются параметры командной строки "-openmp:llvm"

Рейтинг: 0Ответов: 1Опубликовано: 20.03.2023

Код:

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);

}

Ответы

▲ 1

Была такая же проблема - помогло зайти в свойства проекта - C/C++ - командная строка - дополнительные параметры - там добавить -openmp:llvm