Envoyé par
newbie06
C'est pas un cycle sur 4 plutot ?
2 threads suffisent pour atteindre les perfs crête, s'ils ont assez d'ILP (encore heureux d'ailleurs).
Envoyé par
newbie06
Moui, l'utilisation de RT etait une volonte de ma part de montrer que Phi c'est mimi, mais ca demande au final autant de boulot que du GPGPU pour avoir de tres bons resultats. Sauf cas particuliers bien entendu
Un autre benchmark avec du raytracing en OpenCL, pas du tout biaisé :
http://clbenchmark.com/compare.jsp?c...fig_1=15887974
Sinon, révélation du jour :
- VPSHUFD : permute des blocs de 32 bits à l'intérieur de sous-vecteurs de 128 bits, contrôlé par un immédiat.
- VPERMD : permute des blocs de 32 bits à l'intérieur de sous-vecteurs de 128 bits, contrôlé par un registre vectoriel.
Cool, j'ai enfin compris la différence entre shuffle et permute !
- VPERMF32X4 : permute des blocs de 128 bits, contrôlé par un immédiat.
Ah bah non.
Heureusement, AVX-512 arrive pour simplifier tout ça en ajoutant les instructions SHUFPD, SHUFPS, SHUFF32x4, SHUFF64x2, SHUFI32x4, SHUFI64x2, VPERMPD, VPERMPS, VPERMQ, VPERMI2D, VPERMI2PS, VPERMI2Q, VPERMI2PD, VPERMT2D, VPERMT2PS, VPERMT2Q, VPERMT2PD et VPERMILPD, sans oublier VPERMILPS.
Edit: et puis il y a les intrinsics pour offrir une abstraction élégante au-dessus de l'affreux code assembleur :
Code:
__m512i acc_lo = _mm512_mask_adc_epi32(acc[2], lo, c, _mm512_mask_swizzle_epi32(acc[2], lo, acc[2], _MM_SWIZ_REG_CDAB), acc[1], &c);
Cette légère syntaxe de haut niveau évite d'avoir à se taper le code assembleur équivalent :
Code:
vpadcd zmm3{k1}, k2, zmm2{cdab}