Как бы я применил Cilk Plus Extensions к этому простому коду C ++? - PullRequest
0 голосов
/ 05 февраля 2019

Итак, передо мной была поставлена ​​задача найти способ распараллеливания этой простой проблемы C ++ ниже.Я уже объяснил мне OpenMP (по отдельному вопросу) как один из возможных методов, и он был очень надежным.При этом расширения Clik Plus кажутся минимально инвазивными к существующему коду C ++, и я был бы очень признателен, если бы кто-то мог показать + дать мне подробное объяснение того, как Clik Plus может быть привязан к этому коду и распараллеливать его.Шаги существующего кода показаны ниже.

1) принять положительное целое число N в качестве аргумента

2) создать массив целых чисел размера N

3) заполнить целые числа из диапазона [1,1000]

4) Найти наибольшее целое число и сумму массива параллельно

5) вывести наибольшее целое число и сумму массива.

Шаг 4 - это шаг, на который мне нужно внедрить Clik Plus.

В моем нынешнем виде мой код работает нормально, но он не распараллелен.Я понимаю, что Clik Plus предоставляет три ключевых слова:

cilk_for - распараллеливание для циклов

cilk_spawn - указывает, что функция может выполняться параллельно с оставшейся частью вызывающей функции

cilk_sync - указывает, что все вызываемые вызовы в функции должны быть завершены до продолжения выполнения

Моя проблема в том, что я не знаю, где / как реализовать их в моем коде.

#include  <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

int main(){

cout << "Enter the Size of the Array (N):  \n ";
int N;
cin >> N;

int array[N];
int largest_number = 0;
int sum = 0;

srand(time(0));
cout << "Populating Array...\n";

//  Filling up the Array  with values
for(int i =0; i < N; i++)
{

array[i] =  (rand() % 1000) + 1;

}


// Finding the largest value and calculating sum of the array
for( int j  = 0; j < N; j++)
{

sum += array[j];

if( array[j] > largest_number)
{largest_number = array[j];}

}

cout << "Output: \n";
cout << "Maximum:  " <<  largest_number << ";" <<  "Sum: " <<  sum;
cout << "\n";

}

В конце я смогу скомпилировать этот код с помощью команды g ++ main.cpp -fclikplus и запустить его, как указано в 5 шагах выше.

Спасибо!

...