提交记录 15678


用户 题目 状态 得分 用时 内存 语言 代码长度
123456zmy mmmd1k. 测测你的双精度矩阵乘法-1k Accepted 100 375.705 ms 16416 KB C++ 1.10 KB
提交时间 评测时间
2021-01-25 10:01:43 2021-01-25 10:01:47
#pragma GCC optimize("Ofast")
#pragma GCC target("avx")
#pragma GCC target("avx2")
#pragma GCC target("fma")
#include"bits/stdc++.h"
#include<immintrin.h>
#include<avxintrin.h>
#include<avx2intrin.h>
#include<fmaintrin.h>
#define f(_b) sum0=__builtin_ia32_vfmaddpd256(*(a1+(_b)),*(b1+(_b)),sum0)
#define re8(_b) f(_b),f(_b+1),f(_b+2),f(_b+3),f(_b+4),f(_b+5),f(_b+6),f(_b+7)
#define re16(_b) re8(_b),re8(_b+8)
#define re64(_b) re16(_b),re16(_b+16),re16(_b+32),re16(_b+48)
#define re256(_b) re64(_b),re64(_b+64),re64(_b+128),re64(_b+192)
#define re1024(_b) re256(_b),re256(_b+256),re256(_b+512),re256(_b+768)
#define re4096(_b) re1024(_b),re1024(_b+1024),re1024(_b+2048),re1024(_b+3072)
#define re8192(_b) re4096(_b),re4096(_b+4096)
#define N 1024
using namespace std;
double tmp[1048576];
void matrix_multiply(int n, const double *a, const double *b, double *c)
{
	for(int i=0;i<N;i++)for(int j=0;j<N;j++)*(tmp+(i<<10)+j)=*(b+(j<<10)+i);
	for(int i=0;i<N;i++)for(int j=0;j<N;j++)
	{
		__v4df sum0((__v4df){0,0,0,0}),*a1=(__v4df*)(a+(i<<10)),*b1=(__v4df*)(tmp+(j<<10));
		re256(0);
		*(c++)=sum0[0]+sum0[1]+sum0[2]+sum0[3];
	}
}

CompilationN/AN/ACompile OKScore: N/A

Testcase #1375.705 ms16 MB + 32 KBAcceptedScore: 100


Judge Duck Online | 评测鸭在线
Server Time: 2024-03-29 13:10:23 | Loaded in 1 ms | Server Status
个人娱乐项目,仅供学习交流使用