Итак, передо мной была поставлена задача найти способ распараллеливания этой простой проблемы 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 шагах выше.
Спасибо!