Реализация умножения и добавления 2-х матриц с помощью avx-программирования

Я хочу реализовать умножение и добавление 2 матриц в Visual C ++ 2012 с использованием AVX. Я включаю AVX(Advanced Vector Extensions (/arch:AVX)) в Visual studio. Но для добавления матриц, когда я включаю это свойство и когда я его отключаю, время остается тем же, и включение этого свойства не влияет на время выполнения программы.
за 100000 итераций для 4 * 4 матриц. время часов 9. включить или отключить Advanced Vector Extensions (/arch:AVX) не изменился на этот раз.
Другая проблема: Как реализовать умножение 2-х матриц на AVX?

void AVXadd(
double* pArray1,                   // [in] first source array
double* pArray2,                   // [in] second source array
double* pResult,                   // [out] result array
int nSize)                        // [in] size of all arrays
{
int nLoop = (nSize*nSize)/ 4;
//

__m256d* pSrc1 = (__m256d*) pArray1;
__m256d* pSrc2 = (__m256d*) pArray2;
__m256d* pDest = (__m256d*) pResult;
for ( int i = 0; i < nLoop; i++ )
{
*pDest = _mm256_add_pd(*pSrc1,*pSrc2); //add input arrays
pSrc1++;
pSrc2++;
pDest++;
}
}//get datas from random matrix and test add
void AVX(vector<vector<double>> randn,int size,int itt){
double *A,*B,*C;
int ARRAY_SIZE=size*size;
//alligment arrays:
A = (double*) _aligned_malloc(ARRAY_SIZE * sizeof(double), 32);
B = (double*) _aligned_malloc(ARRAY_SIZE * sizeof(double), 32);
C = (double*) _aligned_malloc(ARRAY_SIZE * sizeof(double), 32);
//fill by random vector numbers
for(int i=0;i<size;i++)
for(int j=0;j<size;j++)
A[i*size+j]=B[i*size+j]=randn[i][j];//matrix to array

clock_t t1, t2;
t1=clock();
//add
for(int i=0;i<itt;i++)
AVXadd(A,B,C,size);
t2=clock();

vector<vector<double>> c(size,vector<double>(size));
for(int i=0;i<size;i++)
for(int j=0;j<size;j++)
c[i][j]=C[i*size+j];//C is result
cout<<"\t\t"<<t2-t1;

}

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector