c++ - 我如何将 Cilk Plus Extensions 应用于这个简单的 C++ 代码?
问题描述
所以我的任务是找到一种方法来并行化下面这个简单的 C++ 问题。我已经向我解释过 OpenMP(在另一个问题上)作为一种可能的方法,它非常可靠。话虽如此,Clik Plus扩展似乎对现有 C++ 代码的侵入性极小,如果有人可以向我展示 + 详细解释如何将 Clik Plus 绑定到并并行化此代码,我将不胜感激。现有代码的步骤如下所示。
1) 取一个正整数 N 作为参数
2) 创建一个大小为 N 的整数数组
3) 填充范围 [1,1000] 中的整数
4) 并行求最大整数和数组之和
5) 打印最大整数和数组的总和。
第 4 步是我需要实现 Clik Plus 的步骤。
就目前而言,我的代码工作正常,但它没有并行化。我了解 Clik Plus 提供了三个关键字:
cilk_for - 并行化 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 个步骤的定义运行。
谢谢!