Home

Page 9
Page 9
background image

GPU ядро умножения матриц

GPU ядро умножения матриц

global

 void Muld(float* A  float* B  int wA  int wB  float* C) {

__global__ void Muld(float* A, float* B, int wA, int wB, float* C) {

int bx = blockIdx.x; 

// Block index

int by = blockIdx.y; 
i t  t  

  th

dId

 

// Th

d i d  

int tx = threadIdx.x; 

// Thread index 

int ty = threadIdx.y; 
int aBegin = wA * BLOCK_SIZE * by; 

// Index of the first sub-matrix of A processed by the block

int aEnd = aBegin + wA - 1; 

// Index of the last sub-matrix of A processed by the block

int aStep = BLOCK_SIZE; 

// Step size used to iterate through the sub-matrices of A 

int bBegin = BLOCK_SIZE * bx; 

// Index of the first sub-matrix of B processed by the block

int bStep = BLOCK_SIZE * wB; 

// Step size used to iterate through the sub-matrices of B

float Csub = 0; 

// The element of the block sub-matrix that is computed by the thread

for (int a = aBegin, b = bBegin; a <= aEnd; a += aStep, b += bStep) { 

// Shared memory for the sub-matrix of A

__shared__ float As[BLOCK_SIZE][BLOCK_SIZE]; 

// Shared memory for the sub-matrix of B

__shared__ float Bs[BLOCK_SIZE][BLOCK_SIZE]; 


Copyright © 2021 Файлообменник files.d-lan.dp.ua

Использование любых материалов сайта возможно только с разрешения автора.