Bugzilla – Attachment 846 Details for
Bug 1494
Test case test_minmax_nan_propagation from cxx11_tensor_expr fails on PPC
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Forgot Password
Login:
[x]
This bugzilla service is closed. All entries have been migrated to
https://gitlab.com/libeigen/eigen
Performance test case for ppc64
pertest.cpp (text/x-csrc), 7.11 KB, created by
Samuel Matzek
on 2018-04-04 18:56:44 UTC
(
hide
)
Description:
Performance test case for ppc64
Filename:
MIME Type:
Creator:
Samuel Matzek
Created:
2018-04-04 18:56:44 UTC
Size:
7.11 KB
patch
obsolete
>#include <iostream> >#include <math.h> >#include <limits> >#include <time.h> >#include <altivec.h> >#include <sys/auxv.h> > >#define BILLION 1000000000L > > >typedef __vector float Packet4f; >typedef __vector double Packet2d; >using namespace std; > > >inline void performance_test() { > float kNaN = std::numeric_limits<double>::quiet_NaN(); > struct timespec start; > struct timespec end; > uint64_t diff_nsec; > > int iter_count = 2000000000L; > > // Test vec_max vs assembly with a NaN > Packet4f test_in = {1.0, kNaN, 3.0, 5.0}; > Packet4f test_in2 = {0.0, 2.0, 4.0, 4.0}; > Packet4f test_in3 = {1.0, 9.0, 3.0, 5.0}; > > cout<<"Float: Testing vec_max vs asm\n"; > clock_gettime(CLOCK_MONOTONIC, &start); > for(int i=0;i<iter_count;i++) > vec_max(test_in, test_in2); > clock_gettime(CLOCK_MONOTONIC, &end); > > diff_nsec = (BILLION * (end.tv_sec - start.tv_sec)); > diff_nsec += end.tv_nsec - start.tv_nsec; > cout<<" vec_max duration "<<diff_nsec<<"\n"; > > clock_gettime(CLOCK_MONOTONIC, &start); > for(int i=0;i<iter_count;i++){ > Packet4f ret; > __asm__ ("xvcmpgtsp %x0,%x2,%x1\n\txxsel %x0,%x1,%x2,%x0" : "=&wa" (ret) : "wa" (test_in), "wa" (test_in2)); > } > clock_gettime(CLOCK_MONOTONIC, &end); > > diff_nsec = (BILLION * (end.tv_sec - start.tv_sec)); > diff_nsec += end.tv_nsec - start.tv_nsec; > cout<<" asm duration "<<diff_nsec<<"\n"; > > cout<<"Float: Testing without NaNs with check on vec_any_nan\n"; > clock_gettime(CLOCK_MONOTONIC, &start); > for(int i=0;i<iter_count;i++) > vec_max(test_in, test_in3); > clock_gettime(CLOCK_MONOTONIC, &end); > > diff_nsec = (BILLION * (end.tv_sec - start.tv_sec)); > diff_nsec += end.tv_nsec - start.tv_nsec; > cout<<" vec_max duration "<<diff_nsec<<"\n"; > > clock_gettime(CLOCK_MONOTONIC, &start); > for(int i=0;i<iter_count;i++) > if (vec_any_nan(test_in) || vec_any_nan(test_in3)) > ; > else > vec_max(test_in, test_in3); > clock_gettime(CLOCK_MONOTONIC, &end); > > diff_nsec = (BILLION * (end.tv_sec - start.tv_sec)); > diff_nsec += end.tv_nsec - start.tv_nsec; > cout<<" vec_max with vec_any_nan duration "<<diff_nsec<<"\n"; > > // Test vec_min > cout<<"Float: Testing vec_min vs asm\n"; > clock_gettime(CLOCK_MONOTONIC, &start); > for(int i=0;i<iter_count;i++) > vec_min(test_in, test_in2); > clock_gettime(CLOCK_MONOTONIC, &end); > > diff_nsec = (BILLION * (end.tv_sec - start.tv_sec)); > diff_nsec += end.tv_nsec - start.tv_nsec; > cout<<" vec_min duration "<<diff_nsec<<"\n"; > > clock_gettime(CLOCK_MONOTONIC, &start); > for(int i=0;i<iter_count;i++){ > Packet4f ret; > __asm__ ("xvcmpgesp %x0,%x1,%x2\n\txxsel %x0,%x1,%x2,%x0" : "=&wa" (ret) : "wa" (test_in), "wa" (test_in2)); > } > clock_gettime(CLOCK_MONOTONIC, &end); > > diff_nsec = (BILLION * (end.tv_sec - start.tv_sec)); > diff_nsec += end.tv_nsec - start.tv_nsec; > cout<<" asm duration "<<diff_nsec<<"\n"; > > cout<<"Float: Testing without NaNs with check on vec_any_nan\n"; > clock_gettime(CLOCK_MONOTONIC, &start); > for(int i=0;i<iter_count;i++) > vec_min(test_in, test_in3); > clock_gettime(CLOCK_MONOTONIC, &end); > > diff_nsec = (BILLION * (end.tv_sec - start.tv_sec)); > diff_nsec += end.tv_nsec - start.tv_nsec; > cout<<" vec_min duration "<<diff_nsec<<"\n"; > > clock_gettime(CLOCK_MONOTONIC, &start); > for(int i=0;i<iter_count;i++) > if (vec_any_nan(test_in) || vec_any_nan(test_in3)) > ; > else > vec_max(test_in, test_in3); > clock_gettime(CLOCK_MONOTONIC, &end); > > diff_nsec = (BILLION * (end.tv_sec - start.tv_sec)); > diff_nsec += end.tv_nsec - start.tv_nsec; > cout<<" vec_min with vec_any_nan duration "<<diff_nsec<<"\n"; > > //////////////////////////////////////////////// > // Test double > //////////////////////////////////////////////// > Packet2d dtest_in = {1.0, kNaN}; > Packet2d dtest_in2 = {0.0, 2.0}; > Packet2d dtest_in3 = {1.0, 9.0}; > > cout<<"Double: Testing vec_max vs asm\n"; > clock_gettime(CLOCK_MONOTONIC, &start); > for(int i=0;i<iter_count;i++) > vec_max(dtest_in, dtest_in2); > clock_gettime(CLOCK_MONOTONIC, &end); > > diff_nsec = (BILLION * (end.tv_sec - start.tv_sec)); > diff_nsec += end.tv_nsec - start.tv_nsec; > cout<<" vec_max duration "<<diff_nsec<<"\n"; > > clock_gettime(CLOCK_MONOTONIC, &start); > for(int i=0;i<iter_count;i++){ > Packet2d ret; > __asm__ ("xvcmpgtdp %x0,%x2,%x1\n\txxsel %x0,%x1,%x2,%x0" : "=&wa" (ret) : "wa" (dtest_in), "wa" (dtest_in2)); > } > clock_gettime(CLOCK_MONOTONIC, &end); > > diff_nsec = (BILLION * (end.tv_sec - start.tv_sec)); > diff_nsec += end.tv_nsec - start.tv_nsec; > cout<<" asm duration "<<diff_nsec<<"\n"; > > cout<<"Double: Testing without NaNs with check on vec_any_nan\n"; > clock_gettime(CLOCK_MONOTONIC, &start); > for(int i=0;i<iter_count;i++) > vec_max(dtest_in, dtest_in3); > clock_gettime(CLOCK_MONOTONIC, &end); > > diff_nsec = (BILLION * (end.tv_sec - start.tv_sec)); > diff_nsec += end.tv_nsec - start.tv_nsec; > cout<<" vec_max duration "<<diff_nsec<<"\n"; > > clock_gettime(CLOCK_MONOTONIC, &start); > for(int i=0;i<iter_count;i++) > if (vec_any_nan(dtest_in) || vec_any_nan(dtest_in3)) > ; > else > vec_max(dtest_in, dtest_in3); > clock_gettime(CLOCK_MONOTONIC, &end); > > diff_nsec = (BILLION * (end.tv_sec - start.tv_sec)); > diff_nsec += end.tv_nsec - start.tv_nsec; > cout<<" vec_max with vec_any_nan duration "<<diff_nsec<<"\n"; > > // Test vec_min > cout<<"Double: Testing vec_min vs asm\n"; > clock_gettime(CLOCK_MONOTONIC, &start); > for(int i=0;i<iter_count;i++) > vec_min(dtest_in, dtest_in2); > clock_gettime(CLOCK_MONOTONIC, &end); > > diff_nsec = (BILLION * (end.tv_sec - start.tv_sec)); > diff_nsec += end.tv_nsec - start.tv_nsec; > cout<<" vec_min duration "<<diff_nsec<<"\n"; > > clock_gettime(CLOCK_MONOTONIC, &start); > for(int i=0;i<iter_count;i++){ > Packet2d ret; > __asm__ ("xvcmpgedp %x0,%x1,%x2\n\txxsel %x0,%x1,%x2,%x0" : "=&wa" (ret) : "wa" (dtest_in), "wa" (dtest_in2)); > } > clock_gettime(CLOCK_MONOTONIC, &end); > > diff_nsec = (BILLION * (end.tv_sec - start.tv_sec)); > diff_nsec += end.tv_nsec - start.tv_nsec; > cout<<" asm duration "<<diff_nsec<<"\n"; > > cout<<"Double: Testing without NaNs with check on vec_any_nan\n"; > clock_gettime(CLOCK_MONOTONIC, &start); > for(int i=0;i<iter_count;i++) > vec_min(dtest_in, dtest_in3); > clock_gettime(CLOCK_MONOTONIC, &end); > > diff_nsec = (BILLION * (end.tv_sec - start.tv_sec)); > diff_nsec += end.tv_nsec - start.tv_nsec; > cout<<" vec_min duration "<<diff_nsec<<"\n"; > > clock_gettime(CLOCK_MONOTONIC, &start); > for(int i=0;i<iter_count;i++) > if (vec_any_nan(dtest_in) || vec_any_nan(dtest_in3)) > ; > else > vec_max(dtest_in, dtest_in3); > clock_gettime(CLOCK_MONOTONIC, &end); > > diff_nsec = (BILLION * (end.tv_sec - start.tv_sec)); > diff_nsec += end.tv_nsec - start.tv_nsec; > cout<<" vec_min with vec_any_nan duration "<<diff_nsec<<"\n"; > >} > >int main() >{ > performance_test(); >} > >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 1494
:
831
| 846 |
847