Articles of vectorisation

Comment appliquer efficacement une opération sur les bits à des vecteurs à bits compactés?

Je veux mettre en œuvre void bitwise_and( char* __ressortingct__ result, const char* __ressortingct__ lhs, const char* __ressortingct__ rhs, size_t length); ou peut-être un bitwise_or (), bitwise_xor () ou toute autre opération au niveau des bits. Évidemment, il ne s’agit pas d’algorithme, mais uniquement des détails de mise en œuvre – alignement, chargement du plus grand […]

Vectorisation automatique d’une boucle contenant des comparaisons

J’essaie d’utiliser le vectoriseur automatique Visual C ++ 2013 pour rendre la boucle suivante vectorisée ( /arch:AVX2 ), mais le compilateur refuse et affiche le message suivant: info C5002: loop not vectorized due to reason ‘1100’ Ce code raison signifie Loop contains control flow—for example, “if” or “?”. J’ai essayé de scinder les comparaisons et […]

La multiplication masortingce-vecteur dans AVX n’est pas proportionnellement plus rapide que dans l’ESS

J’écrivais une masortingce-vecteur-multiplication dans SSE et AVX en utilisant les éléments suivants: for(size_t i=0;i<M;i++) { size_t index = i*N; __m128 a, x, r1; __m128 sum = _mm_setzero_ps(); for(size_t j=0;j<N;j+=4,index+=4) { a = _mm_load_ps(&A[index]); x = _mm_load_ps(&X[j]); r1 = _mm_mul_ps(a,x); sum = _mm_add_ps(r1,sum); } sum = _mm_hadd_ps(sum,sum); sum = _mm_hadd_ps(sum,sum); _mm_store_ss(&C[i],sum); } J’ai utilisé une méthode […]

SSE plus lent que FPU?

J’ai un gros morceau de code dont une partie du corps contient ce morceau de code: result = (nx * m_Lx + ny * m_Ly + m_Lz) / sqrt(nx * nx + ny * ny + 1); que j’ai vectorisé comme suit (tout est déjà un float ): __m128 r = _mm_mul_ps(_mm_set_ps(ny, nx, ny, nx), […]

g ++, base de plage et vectorisation

considérant la plage suivante basée sur la boucle for en C ++ 11 for ( T k : j ) { … } existe-t-il des indicateurs d’optimisation g++ ou clang++ qui peuvent accélérer le code compilé? Je ne parle d’aucun cycle, je considère uniquement cette nouvelle construction C ++ 11.

Est-il possible de vectoriser cet nested avec SSE?

Je n’ai jamais écrit de code d’assemblage pour l’optimisation SSE, donc veuillez m’excuser s’il s’agit d’une question noob. Cet aritcle explique comment vectoriser un for avec une instruction conditionnelle. Cependant, mon code (pris d’ ici ) est de la forme: for (int j=-halfHeight; j<=halfHeight; ++j) { for(int i=-halfWidth; i= 0 && y >= 0 && […]

Conversion vectorisée rapide de RVB à BGRA

Pour faire suite à des questions précédentes sur la conversion de RVB en RGBA et d’ARGB en BGR, j’aimerais accélérer la conversion de RVB à BGRA avec SSE . Supposons une machine 32 bits et voudrions utiliser des éléments insortingnsèques . Je ne parviens pas à aligner les tampons source et de destination sur des […]

La boucle n’est pas vectorisée lorsque l’étendue variable est utilisée

Le code de version A n’est pas vectorisé alors que le code de version B est vectorisé. Comment faire pour que la version A vectorise et garde les étendues variables (sans utiliser d’extensions littérales)? La boucle nestede est pour la multiplication avec la diffusion comme dans la bibliothèque numpy de python et matlab. La description […]

Pourquoi n’existe-t-il pas d’insortingnsèque en virgule flottante pour l’instruction `PSHUFD`?

La tâche à laquelle je suis confronté est de mélanger un vecteur _m128 et de stocker le résultat dans l’autre. À mon avis, il existe deux méthodes de base pour mélanger un vecteur emballé à virgule flottante _m128 : _mm_shuffle_ps , qui utilise l’instruction SHUFPS , qui n’est pas nécessairement la meilleure option si vous […]

Étrange uint32_t to float conversion de tableau

J’ai l’extrait de code suivant: #include #include static const size_t ARR_SIZE = 129; int main() { uint32_t value = 2570980487; uint32_t arr[ARR_SIZE]; for (int x = 0; x < ARR_SIZE; ++x) arr[x] = value; float arr_dst[ARR_SIZE]; for (int x = 0; x < ARR_SIZE; ++x) { arr_dst[x] = static_cast(arr[x]); } printf(“%s\n”, arr_dst[ARR_SIZE – 1] == […]