PyCUDA를 사용하여 일부 행렬 연산을 병렬 처리하려고하고 Python이 수행하는 것과 비교하기 위해 노력하고 있습니다.행렬에 10 배 이상의 행이있을 때 np.dot의 길이가 적어도 10 배 이상이되지 않습니다.
하지만 실제로 이해가되지 않는 결과가 있습니다. 행렬 곱 A * B에서 행렬 A의 행 수를 10으로 곱하면 계산 시간에 대부분 10을 곱하지 않습니다.
이 코드를 가지고 :
import time
import numpy as np
nb_traces=pow(10,1) # Nb lines
nb_samples=100 # Nb columns
a_cpu=np.ones((nb_traces,nb_samples)).astype(np.float32)
b_cpu=np.ones((nb_samples,2)).astype(np.float32)
t1PythonBegin=time.clock()
c_cpu=np.dot(a_cpu,b_cpu)
t1PythonEnd=time.clock()
print(t1PythonEnd-t1PythonBegin)
print(c_cpu.shape)
print(" ")
nb_traces=pow(10,2) # Nb lines of A : 10 times bigger than before
nb_samples=100 # Nb colonnes
a_cpu=np.ones((nb_traces,nb_samples)).astype(np.float32)
b_cpu=np.ones((nb_samples,2)).astype(np.float32)
t1PythonBegin=time.clock()
c_cpu=np.dot(a_cpu,b_cpu)
t1PythonEnd=time.clock()
print(t1PythonEnd-t1PythonBegin)
print(c_cpu.shape)
나는 그것을 실행
, 나는 두 개의 계산을위한 동일한 정도의 크기를 가지고있다. 여기 내가 예를 들면 한 출력이다 : 가첫 줄 I은 10^1 라인을 가지며 I 10^2 라인이있을 때 두 번째는 계산 시간이다 (I은 또한 형상을 표시 A의 시간 계산).
SIMU 1
3.120985184068559e-05
(10, 2)
9.086412319447845e-06
(100, 2)
SIMU 2
3.358022058819188e-05
(10, 2)
3.0024667466932442e-05
(100, 2)
SIMU 3
1.6987641174637247e-05
(10, 2)
1.7777763787307777e-05
(100, 2)
때때로 계산 시간도 빠르게 10 회 이상의 라인을 위해!
어떻게 설명합니까? 나는 정말로 이해하지 못합니다. 실제로 행렬 A에 10 배 더 많은 행이 있으면 실제로 계산할 수있는 계수가 10 배가됩니다. 따라서 프로그램은 병렬화 된만큼 10 배 길어야합니다.
실제 계산에 오버 헤드보다 훨씬 적은 시간이 걸리는 것처럼 보입니다. 나를 위해 계산 시간은 10^3 라인 정도의 라인 수로 시작됩니다. – Swier