Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用avx编程实现矩阵的乘法和加法 我想用AVX实现Visual C++ 2012中的2个矩阵的乘法和添加。我在VisualStudio中启用了AVX(高级向量扩展(/arch:AVX))。但当我启用和禁用这个属性时,添加矩阵的时间是一样的,启用这个属性不会_C++_Visual Studio 2012_Matrix_Avx - Fatal编程技术网

用avx编程实现矩阵的乘法和加法 我想用AVX实现Visual C++ 2012中的2个矩阵的乘法和添加。我在VisualStudio中启用了AVX(高级向量扩展(/arch:AVX))。但当我启用和禁用这个属性时,添加矩阵的时间是一样的,启用这个属性不会

用avx编程实现矩阵的乘法和加法 我想用AVX实现Visual C++ 2012中的2个矩阵的乘法和添加。我在VisualStudio中启用了AVX(高级向量扩展(/arch:AVX))。但当我启用和禁用这个属性时,添加矩阵的时间是一样的,启用这个属性不会,c++,visual-studio-2012,matrix,avx,C++,Visual Studio 2012,Matrix,Avx,用avx编程实现矩阵的乘法和加法 我想用AVX实现Visual C++ 2012中的2个矩阵的乘法和添加。我在VisualStudio中启用了AVX(高级向量扩展(/arch:AVX))。但当我启用和禁用这个属性时,添加矩阵的时间是一样的,启用这个属性不会影响程序的运行时间。 对于4*4矩阵的100000次迭代。时钟是9点。启用或禁用高级向量扩展(/arch:AVX)这次没有更改。 另一个问题是如何实现2矩阵乘以AVX void AVXadd( double* pArray1

用avx编程实现矩阵的乘法和加法

我想用AVX实现Visual C++ 2012中的2个矩阵的乘法和添加。我在VisualStudio中启用了AVX(高级向量扩展(/arch:AVX))。但当我启用和禁用这个属性时,添加矩阵的时间是一样的,启用这个属性不会影响程序的运行时间。 对于4*4矩阵的100000次迭代。时钟是9点。启用或禁用

高级向量扩展(/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;

}
void AVXadd(
双*阵列1,//[in]第一个源阵列
双*阵列2,//[in]第二个源阵列
双精度*pResult,//[out]结果数组
int nSize)//[in]所有阵列的大小
{
int nLoop=(nSize*nSize)/4;
//
__m256d*pSrc1=(u m256d*)pArray1;
__m256d*pSrc2=(uuuum256d*)pArray2;
__m256d*pDest=(m256d*)假定值;
对于(int i=0;i对于(int i=0;iYou可能想了解
/arch:AVX
的确切功能。它不会启用/禁用AVX。当AVX被禁用时,它也不会尝试模拟AVX。它真正做的只是强制对所有128位向量操作进行VEX编码。一旦你排除了这一点,你可能会发现你已经落入了与9相同的陷阱0%的人在尝试SIMD时会陷入这样的困境:内存访问太多,计算工作量太少。