首页 > 解决方案 > 我如何将 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 个步骤的定义运行。

谢谢!

标签: c++parallel-processingcilk-plus

解决方案


推荐阅读