pastebin - collaborative debugging tool
rovema.kpaste.net RSS


sse_vs_387_perf1
Posted by Anonymous on Mon 19th Sep 2022 16:52
raw | new post

  1. rmainz@DERFWNB4966:~/tmp/sse_vs_387_perf1$ cat sse_vs_387_perf1.c
  2.  
  3. #include <stdlib.h>
  4. #include <stdio.h>
  5. #include <math.h>
  6.  
  7. #define AR_SIZE (2048UL*65536UL)
  8. typedef double myartype;
  9.  
  10. myartype ar[AR_SIZE];
  11.  
  12. void ar_mul(myartype *restrict myar, size_t size, myartype value)
  13. {
  14.         size_t i;
  15.         for(i=0 ; i < size ; i++) {
  16.                 myar[i] *= value;
  17.         }
  18. }
  19.  
  20. void ar_div(myartype *restrict myar, size_t size, myartype value)
  21. {
  22.         size_t i;
  23.         for(i=0 ; i < size ; i++) {
  24.                 myar[i] /= value;
  25.         }
  26. }
  27.  
  28. void ar_add(myartype *restrict myar, size_t size, myartype value)
  29. {
  30.         size_t i;
  31.         for(i=0 ; i < size ; i++) {
  32.                 myar[i] += value;
  33.         }
  34. }
  35.  
  36. void ar_nextafter(myartype *restrict myar, size_t size, myartype value)
  37. {
  38.         size_t i;
  39.         for(i=0 ; i < size ; i++) {
  40.                 myar[i] = nextafter(myar[i], value);
  41.         }
  42. }
  43.  
  44.  
  45. void calculate(size_t ar_size, int j_max)
  46. {
  47.         size_t i;
  48.         int j;
  49.  
  50.         for(i=0 ; i < ar_size ; i++) {
  51.                 ar[i] = 0.0;
  52.         }
  53.  
  54.         for(j=0 ; j < j_max ; j++) {
  55.                 for(i=0 ; i < ar_size ; i++) {
  56.                         ar[i] += ((myartype)i) / ((myartype)j_max);
  57.                 }
  58.         }
  59.  
  60.         ar_add(ar, ar_size, +39.3);
  61.         ar_add(ar, ar_size, -13.1);
  62.         ar_add(ar, ar_size, -13.1);
  63.         ar_add(ar, ar_size, -13.1);
  64.  
  65.         ar_nextafter(ar, ar_size, INFINITY);
  66.         ar_nextafter(ar, ar_size, INFINITY);
  67.         ar_nextafter(ar, ar_size, -INFINITY);
  68.         ar_nextafter(ar, ar_size, -INFINITY);
  69.  
  70.         ar_mul(ar, ar_size, 7.1);
  71.         ar_mul(ar, ar_size, 7.1);
  72.         ar_mul(ar, ar_size, 7.1);
  73.         ar_mul(ar, ar_size, 7.1);
  74.         ar_mul(ar, ar_size, 7.1);
  75.         ar_mul(ar, ar_size, 7.1);
  76.         ar_div(ar, ar_size, 7.1);
  77.         ar_div(ar, ar_size, 7.1);
  78.         ar_div(ar, ar_size, 7.1);
  79.         ar_div(ar, ar_size, 7.1);
  80.         ar_div(ar, ar_size, 7.1);
  81.         ar_div(ar, ar_size, 7.1);
  82. }
  83.  
  84. int main(int ac, char *av[])
  85. {
  86.         calculate(AR_SIZE, 7);
  87.  
  88.         return EXIT_SUCCESS;
  89. }
  90.  
  91. rmainz@DERFWNB4966:~/tmp/sse_vs_387_perf1$ cat Makefile
  92. #
  93. # sse_vs_387_perf1/Makefile
  94. #
  95.  
  96. CSTD=-std=c17
  97. ARCHFLAGS=-m32 -mtune=generic
  98. MATHSSEFLAGS=-mfpmath=sse -msse2
  99. #MATH387FLAGS=-mfpmath=387
  100. OPTFLAGS=-O2 -fstrict-aliasing
  101. CC=gcc
  102.  
  103. all: tests
  104.  
  105. sse_vs_387_perf1.sse_$(CC): sse_vs_387_perf1.c
  106.         $(CC) $(CSTD) $(ARCHFLAGS) $(MATHSSEFLAGS) -g -Wall $(OPTFLAGS) $< -lm -o $@
  107.  
  108. sse_vs_387_perf1.nosse_$(CC): sse_vs_387_perf1.c
  109.         $(CC) $(CSTD) $(ARCHFLAGS) $(MATH387FLAGS) -g -Wall $(OPTFLAGS) $< -lm -o $@
  110.  
  111.  
  112. tests: \
  113.         sse_vs_387_perf1.sse_$(CC) \
  114.         sse_vs_387_perf1.nosse_$(CC)
  115.         ksh93 -c 'set -o xtrace ; for i in $^ ; do time "./$$i" ; done'
  116.  
  117. clean:
  118.         rm -f \
  119.                 sse_vs_387_perf1.sse_$(CC) \
  120.                 sse_vs_387_perf1.nosse_$(CC)
  121.  
  122. # EOF.

Submit a correction or amendment below (click here to make a fresh posting)
After submitting an amendment, you'll be able to view the differences between the old and new posts easily.

Syntax highlighting:

To highlight particular lines, prefix each line with {%HIGHLIGHT}




All content is user-submitted.
The administrators of this site (kpaste.net) are not responsible for their content.
Abuse reports should be emailed to us at