Advertisement
Guest User

Untitled

a guest
Feb 18th, 2020
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.50 KB | None | 0 0
  1. //
  2. //  main.cpp
  3. //  MMX-SSE
  4. //
  5. //  Created by zhozh on 17.02.2020.
  6. //  Copyright © 2020 zhozh. All rights reserved.
  7. //
  8.  
  9. #include <stdio.h>
  10. //#include <conio.h>
  11.  
  12. int main()
  13. {
  14.     char qw1[8] = {1, 1, 1, 1, 1, 1, 1, 1};
  15.     char qw2[8] = {2, 2, 2, 2, 2, 2, 2, 2};
  16.        
  17.     //int a = 1; int b = 2;
  18.     double qw3[4] = {1, 2, 3, 4};
  19.     double qw4[4] = {1, 2, 3, 4};
  20.     double qw5[4] = {1, 2, 3, 4};
  21.        
  22.     float c[4] = {1, 2, 3, 4};
  23.     float d[4] = {5, 6, 7, 8};
  24.        
  25.     double f[2] = {16, 4};
  26.    
  27.     char a128[16] = {1, 18, 3, 19, 5, 21, 7, 23, 9, 25, 11, 27, 13, 29, 15, 31};
  28.     char b128[16] = {17, 2, 19, 4, 21, 6, 23, 8, 25, 10, 27, 12, 29, 14, 31, 16};
  29.        
  30.     asm
  31.     { //mmx
  32.         movq mm0, qw1
  33.         movq mm1, qw2
  34.         //pcmpeqb mm0, mm1
  35.         //paddusb mm0,mm1 // -- суммирование с беззнаковым насыщением 3 3 3 3 3 3 3 3
  36.         //punpckhwd mm0,mm1 // -- распилил по 2 знака с каждого массива 1 1 2 2 1 1 2 2
  37.         movq qw1, mm0
  38.     }
  39.        
  40.     printf("%s\n", "Summing elements of vectors qw1 + qw2 :");
  41.     for (int i = 0; i < 8; i++)
  42.     {
  43.         printf("%d ", qw1[i]);
  44.     }
  45.        
  46.     printf("\n\n");
  47.        
  48.     asm
  49.     { //sse
  50.         movups xmm0, c
  51.         movups xmm1, d
  52.         addps xmm0, xmm1
  53.         movups c, xmm0
  54.     }
  55.        
  56.     printf("%s\n", "Summing elements of vectors c + d :");
  57.        
  58.     for (int i = 0; i < 4; i++)
  59.     {
  60.         printf("%f ", c[i]);
  61.     }
  62.    
  63.     printf("\n");
  64.    
  65.     asm
  66.     { //sse2
  67.         movups xmm1, f
  68.         sqrtpd xmm0, xmm1
  69.         movups f, xmm0
  70.     }
  71.        
  72.     printf("\n%s %f %s %f\n", "Square root of ", f[0], "is", f[1]);
  73.        
  74.     asm
  75.     {
  76.         movups xmm0, a128
  77.         movups xmm1, b128
  78.         pminub xmm0, xmm1
  79.         movups a128, xmm0
  80.     }
  81.        
  82.     printf("\n%s\n", "Comparing elements :");
  83.        
  84.     for (int i = 0; i < 16; i++)
  85.     {
  86.         printf("( %d , %d) ; ", a128[i], b128[i]);
  87.     }
  88.    
  89.     printf("\n");
  90.     printf("\n%s\n", "Minimum elements :");
  91.        
  92.     for (int i = 0; i < 16; i++)
  93.     {
  94.         printf("%d ", a128[i]);
  95.     }
  96.    
  97.     asm
  98.     {//avx
  99.         vmovapd ymm0, qw4
  100.         vmulpd ymm0, ymm0, qw3
  101.         vmovapd qw5, ymm0
  102.     }
  103.     printf("\n");
  104.     printf("\n%s\n", "parallel multiplying with avx");
  105.     for (int i = 0; i < 4; i++)
  106.     {
  107.         printf("%f ", qw5[i]);
  108.     }
  109.     printf("\n\n");
  110.        
  111.     return 0;
  112. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement