私はCUDAを使用して画像を処理するプロジェクトに参加しています。プロジェクトは、単に画像の加算または減算です。
あなたの専門家の意見を聞いてもいいですか。どちらが最善で、これら2つの長所と短所は何でしょうか。
このプロジェクトは私にとって非常に重要なので、皆さんの意見や提案に感謝します。
一般的な答え:それは問題ではありません。より快適な言語を使用してください。
ただし、pycudaはCUDA Cインターフェースのラッパーにすぎないため、常に最新であるとは限らないことに注意してください。また、バグの別の潜在的な原因が追加されます…
Pythonはラピッドプロトタイピングに優れているので、私は個人的にPythonを選びます。必要に応じて、後でいつでもC++に切り替えることができます。
パイプラインの残りの部分がPythonであり、すでにNumpyを使用して処理を高速化している場合、pyCUDAは高価な操作を高速化するための優れた補完機能です。ただし、画像のサイズとプログラムフローによっては、pyCUDAを使用してもそれほど高速化されない場合があります。大きなデータサイズでのみ補われるPCIバスを介してデータをやり取りする場合、遅延が発生します。
あなたの場合(足し算と引き算)、pyCUDAにはあなたが有利に使うことができる組み込みの操作があります。ただし、私の経験では、重要な目的でpyCUDAを使用するには、そもそもCUDAがどのように機能するかについて多くのことを知っている必要があります。CUDAの知識がない状態から始める人にとって、pyCUDAは急な学習曲線になる可能性があります。
openCVを見てください。これには、多くの画像処理機能と、画像の読み込み/保存/表示およびカメラの操作を行うためのすべてのヘルパーが含まれています。
また、CUDAをサポートするようになり、一部の画像処理機能がCUDAに再実装され、独自のフレームワークを提供します。
アレックスの答えは正しいです。ラッパーで消費される時間は最小限です。PyCUDAには、便利なカーネルを生成するための優れたメタプログラミング構造がいくつかあることに注意してください。
画像の要素を加算または減算するだけの場合は、おそらくCUDAを使用しないでください。PCI-Eバスを介して前後に転送するのにかかる時間は、並列処理から得られる節約の量を小さくします。
CUDAを扱うときはいつでも、CGMA比率(グローバルメモリアクセス比率に対する計算)について考えると便利です。加算/減算は、2回のメモリアクセス(1回の読み取りと1回の書き込み)に対して1回の浮動小数点演算のみです。これは、CUDAの観点からは非常にひどいものになってしまいます。