2012-02-03 4 views
2

私は以下のコードをPHPで書いてあり、以前のGeforce 8800 UltraのGPU処理能力を利用するためにCudaで読んでいます。このネストされた組み合わせテストをCuda並列処理コードに変換するにはどうすればよいですか? 2D配列の総組み合わせ:$、$ bのは、$ C、$ dを、$ eは迅速複数の配列をCudaでテストする

foreach($a as $aVal){ 
    foreach($b as $bVal){ 
     foreach($c as $cVal){ 
      foreach($d as $dVal){ 
       foreach($e as $eVal){ 

        $addSum = $aVal[0]+$bVal[0]+$cVal[0]+$dVal[0]+$eVal[0]; 
        $capSum = $aVal[1]+$bVal[1]+$cVal[1]+$dVal[1]+$eVal[1]; 
        if($capSum <= CAP_LIMIT){ 
         $tempArr = array("a" => $aVal[2],"b" => $aVal[2],"c" => $aVal[2], 
         "d" => $aVal[2],"e" => $aVal[2],"addTotal" => $addSum,"capTotal" => $capSum); 

         array_push($topCombinations, $tempArr); 

         if(count($topCombinations) > 1000){ 
          $topCombinations = $ca->arraySortedDescend($topCombinations); 
          array_splice($topCombinations, 900); 

         } 
        } 
       } 
      } 
     } 
    } 
} 
+0

このコードが何を計算するかを説明できるでしょうか? –

+0

私は予算(CAP_LIMIT)を持っていて、2次元配列($ a- $ e)の各要素には関連する値(例えばaVal [0])があります。これら5つの配列のすべての組み合わせをテストして、指定された予算内で収まる値($ addSum) "CAP_LIMIT" – teknikol

+0

私はPHPに慣れていません。 PHPでは、スカラーの行列のような2次元配列ですか、それともペアのリストに似ていますか?あなたのコードは後者を示唆しています。 –

答えて

1

は、これは非常に広いオープン質問です...何兆に上昇します。それは言語間の変換と並列アルゴリズムの設計を必要とする。あまり詳しく説明しませんが、一言で言えば、

どのようにパラレル化するかは、配列のサイズ($ a - $ e)によって決まります。それらが十分に大きければ、グリッド内のスレッド間で外側の1つまたは2つのループだけを並列化し、内側のループを順番に実行できます。超大型でない場合は、2〜3の外側ループを平坦化するか、CUDAの2Dまたは3Dスレッドブロックとグリッドを使用して実装することができます。

関連する問題