実際のコードに関連するコードスニペットを高速化するためにPython Numbaモジュールの@vectorizeデコレータを使用することの有効性をテストしようとしています。 CUDAcastでのデモでNumebを使用した負の速度の増加Vectorize target = 'cuda'
import numpy as np
from timeit import default_timer as timer
from numba import vectorize
@vectorize(["float32(float32, float32)"], target='cpu')
def VectorAdd(a,b):
return a + b
def main():
N = 32000000
A = np.ones(N, dtype=np.float32)
B = np.ones(N, dtype=np.float32)
C = np.zeros(N, dtype=np.float32)
start = timer()
C = VectorAdd(A, B)
vectoradd_time = timer() - start
print("C[:5] = " + str(C[:5]))
print("C[-5:] = " + str(C[-5:]))
print("VectorAdd took %f seconds" % vectoradd_time)
if __name__ == '__main__':
main()
、デモンストレーターは、経由してGPUに大きな配列の方程式を送信することにより、100倍のスピードアップを取得します@:私はhere利用できると、以下に示すCUDAcast#10に設けられたコードスニペットを利用していますベクトル化デコレータ。しかし、私がgpuに@vectorizeターゲットを設定すると:
@vectorize(["float32(float32, float32)"], target='cuda')
...結果は3〜4倍遅くなります。 target = 'cpu'を指定すると、実行時間は0.048秒になります。 target = 'cuda'で実行時間は0.22秒です。私はIntel Core i7-4710MQプロセッサとNVIDIA Quadro K2100M GPUを搭載したDELL Precisionラップトップを使用しています。実行中のnvprof(NVIDIAプロファイラツール)の出力は、メモリ処理(予想)に多くの時間が費やされていることを示していますが、GPUではCPUの処理全体よりも機能評価に時間がかかります。明らかに、これは私が望んでいた結果ではありませんが、私のハードウェアとコードに基づいて、私の一部で何らかのエラーが発生したか、それとも合理的ですか?
ローマ、「サニティチェック」のおかげで、また@ cuda.jitコードに感謝します。私はNumbaとCUDAには新しいので、私が探検する次の大きな道になるでしょう!使用しているハードウェア(プロセッサ、GPUなど)を投稿に追加できますか? – blrmkrAE