Python pomoć HITNOOO

poruka: 1
|
čitano: 941
|
moderatori: Lazarus Long, XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
10 godina
neaktivan
offline
Python pomoć HITNOOO

imam ovdje dvije datoteke gim.py i inverz2.cu u kojima je priikazan generalizirani inverz matrice. Zamolila bih nekoga ako mi može liniju po liniju koda napisati šta se u toj liniji dešava. HVALAA!!!

 

gim.py

 

import numpy as np

from numpy import linalg

import pycuda.autoinit

import pycuda.driver as drv

from pycuda.compiler import SourceModule

import time

 

mod = SourceModule(open("inverz2.cu").read())


A = np.array([[2,1,3],[4,2,7],[3,1,5]], dtype = np.int32)

print 'Matrica:\n', A


print 'Inverz matrice CPU\n'

start_cpu = time.time()

I_CPU = linalg.inv(A)

det = linalg.det(A)

end_cpu = time.time()

print I_CPU

print 'CPU vrijeme: ', (end_cpu-start_cpu)

A_t = np.transpose(A)
print 'Transponirana matrica A:\n', A_t
print 'Determinanta matrice',det


K0 = (A[1,1]*A[2,2]) - (A[1,2]*A[2,1])

K1 = (A[1,0]*A[2,2]) - (A[1,2]*A[2,0])

K2 = (A[1,0]*A[2,1]) - (A[1,1]*A[2,0])

print K0, K1, K2

detInv = 1/det;

print 'GPU Obrada:'

start_gpu = time.time()


inverzGPU = np.empty((3,3), dtype = np.int32)

inverz = mod.get_function("inverz2")

inverz(drv.Out(inverzGPU), drv.In(A), det, K0, K1, K2, detInv, block=(3,3,1), grid=(1,1))

print inverzGPU
end_gpu = time.time()

print 'GPU vrijeme: ', (end_gpu-start_gpu)

 

 

 

inverz2.cu

 

#include<stdio.h>

__global__ void inverz2(int *rezultat, int *matrica, int K0, int K1, int K2, int det, int detInv)

{

const int idx = threadIdx.y * blockDim.x + threadIdx.x;

if(idx == 0)

{

rezultat[idx] = K0 * detInv;

}

if(idx == 3)

{

rezultat[idx] = -(K1 * detInv);

}

if(idx == 6)

{

rezultat[idx] = K2 * detInv;

}

if(idx == 1)

{

rezultat[idx] = - ((matrica[idx+2]*matrica[idx+7]) - (matrica[idx+5]*matrica[idx+4]));

}

if(idx == 2)

{

rezultat[idx] = (matrica[idx+1]*matrica[idx+5]) - (matrica[idx+4]*matrica[idx+2]);

}

if(idx == 4)

{

rezultat[idx] = (matrica[idx-4]*matrica[idx+4])-(matrica[idx+2]*matrica[idx-2]);

}

if(idx == 5)

{

rezultat[idx] = -((matrica[idx-5]*matrica[idx+2])-(matrica[idx+1]*matrica[idx-4]));

}

if(idx == 7)

{

rezultat[idx] = -((matrica[idx-7]*matrica[idx-2])-(matrica[idx-4]*matrica[idx-5]));

}

if(idx == 8)

{

rezultat[idx] = (matrica[idx-8]*matrica[idx-4])-(matrica[idx-5]*matrica[idx-7]);

}
}

 

 
0 0 hvala 0
1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice