Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <stdint.h>
- double clock_now(void) {
- struct timeval now;
- gettimeofday(&now, NULL);
- return (double)now.tv_sec + (double)now.tv_usec/1.0e6;
- }
- double pisum(void) {
- double sum = 0.0;
- for (int j=0; j<500; ++j) {
- sum = 0.0;
- for (int k=1; k<=10000; ++k) {
- sum += 1.0/(k*k);
- }
- }
- return sum;
- }
- typedef double v4df __attribute__((vector_size(32)));
- inline v4df v4df_set(double a, double b, double c, double d) {return (v4df){a, b, c, d};}
- inline v4df v4df_set1(double a) {return (v4df){a, a, a, a};}
- inline double v4df_getn(v4df v, uint64_t n) { return v[n];}
- inline double v4df_vecsum(v4df v) { return (v[0] + v[1] + v[2] + v[3]);}
- double p2vec(void) {
- v4df add = v4df_set1(4.);
- v4df sum = v4df_set1(0.), it = v4df_set(1., 2., 3., 4.), one = v4df_set1(1.);
- do {
- sum += (one/(it * it));
- it += add;
- } while(v4df_getn(it, 3) <= 10000.);
- return v4df_vecsum(sum);
- }
- double p2(void) {
- double i = 1., sum = 0.;
- do {
- sum += 1./(i*i);
- } while(++i <= 10000);
- return sum;
- }
- double pisum_sphk(typeof(p2) f) {
- uint64_t i = 500;
- double sum = 0.;
- do {
- double j = 1.; sum = 0.;
- sum += f();
- } while(--i);
- return sum;
- }
- double test(typeof(pisum) f) {
- double ret = 0;
- uint64_t i = 30;
- do {
- ret += f();
- } while(--i);
- return ret;
- }
- #define bind(f, arg) ({typeof(f(arg)) new(void) { return f(arg);} new;})
- int main(void) {
- {
- double start = clock_now();
- double res = test(bind(pisum_sphk, p2vec));
- double end = clock_now();
- fprintf(stderr, "SPHK_vec:\t %0.10f, %fsec\n", res, (end - start));
- }
- {
- double start = clock_now();
- double res = test(bind(pisum_sphk, p2));
- double end = clock_now();
- fprintf(stderr, "SPHK:\t\t %0.10f, %fsec\n", res, (end - start));
- }
- {
- double start = clock_now();
- double res = test(pisum);
- double end = clock_now();
- fprintf(stderr, "SHIT:\t\t %0.10f, %fsec\n", res, (end - start));
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment