そこで、以下の単純な C++ の問題を並列化する方法を見つけることを任されました。私はすでにOpenMPを(別の質問で)1つの可能な方法として説明してもらいましたが、それは非常に堅実でした。そうは言っても、Clik Plus拡張機能は既存の C++ コードへの侵襲性が最小限に抑えられているように思われます。Clik Plus をこのコードに関連付けて並列化する方法について、詳細な説明を誰かが示していただければ幸いです。既存のコードの手順を以下に示します。
1) 引数として正の整数 N を取る
2) サイズ N の整数配列を作成する
3) 範囲 [1,1000] から整数を入力します。
4) 最大の整数と配列の和を並列に求める
5) 最大の整数と配列の合計を出力します。
ステップ 4 は、Clik Plus を実装するために必要なステップです。
現状では、私のコードは正常に動作しますが、並列化されていません。Clik Plus が提供する 3 つのキーワードがあることを理解しています。
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 つの手順で定義したとおりに実行できるはずです。
ありがとうございました!