ZEN2的AVX2性能感觉还是比Skylake的低些
amd吧
全部回复
仅看楼主
level 1
AMD本地机用时17.4sec左右,Intel用时20.3sec,内容为简单的向量点乘与内存读写。3700x的内存频率为3200MHz 15-15-15-38双通道,8259U的内存为2400MHz 16-xx-xx-xx 双通道。3700x的AVX2频率为4GHz,8259U的AVX2频率为2.8GHz,换算下来若8259U运行在4GHz下那么所用时间应该为14.21sec,比目前3700x所用时间低18%。但是有一点3700x由于Linux kernel的问题,目前运行在WSL中,可能会对性能造成损失(不过就以前的经验来说没有太大区别)
2019年07月21日 09点07分 1
level 1
如果有谁有兴趣,以下是源代码
#include <stdio.h>
#include <stdlib.h>
#include <immintrin.h>
#include <string.h>
#define SIZE 1024*1024*128
#define RUN 512
static short VEC_A[SIZE], VEC_B[SIZE], VEC_C[SIZE];
int main(int argc, char* argv[])
{ __m256i vec1, vec2, vec3;
// A slightly faster method to create single bit random variable for (int i = 0; i < SIZE; i += 32) { int tmp1 = rand(); int tmp2 = rand(); for (int k = 0; k < 32; k++) { VEC_A[i+k] = tmp1>>k & 0x0001; VEC_B[i+k] = tmp2>>k & 0x0001; } }
if (argc == 2)
for (int H = 0; H < RUN; H++) { if (strcmp(argv[1], "avx") == 0) for (int i = 0; i < SIZE; i += 16) { vec1 = _mm256_load_si256((__m256i*) &VEC_A[i]); vec2 = _mm256_load_si256((__m256i*) &VEC_B[i]); vec3 = _mm256_mullo_epi16(vec1, vec2); _mm256_store_si256 ((__m256i*) &VEC_C[i], vec3); }
if (strcmp(argv[1], "avxstream") == 0) for (int i = 0; i < SIZE; i += 16) { vec1 = _mm256_stream_load_si256((__m256i*) &VEC_A[i]); vec2 = _mm256_stream_load_si256((__m256i*) &VEC_B[i]); vec3 = _mm256_mullo_epi16(vec1, vec2); _mm256_store_si256 ((__m256i*) &VEC_C[i], vec3); }
if (strcmp(argv[1], "x86") == 0) for (int i = 0; i < SIZE; i ++) VEC_C[i] = VEC_A[i] & VEC_B[i]; }
return 0;}
2019年07月21日 09点07分 3
level 11
是的,下一代上AVX512还是半血状态
2019年07月21日 11点07分 4
avx512在15w功耗下只能维持1.8ghz双核的性能,不过能耗比看来还是比avx2高很多,估计AMD也得想办法支持才行
2019年07月21日 12点07分
level 12
打e5v3应该没问题
2019年11月26日 23点11分 5
1