Loading src/estimate_work.c 0 → 100644 +76 −0 Original line number Diff line number Diff line #include "test_vbatch.h" void estimate_work( int npatches, int left_patch_size_[], int right_patch_size_[], int nC_[], double *ptotal_gflops, double *pgmemA, double *pgmemB, double *pgmemBX ) #define nC(ipatch,jpatch) nC_[ ((ipatch)-1) + ((jpatch)-1)*npatches ] #define left_patch_size(ipatch) left_patch_size_[(ipatch)-1] #define right_patch_size(ipatch) right_patch_size_[(ipatch)-1] { /* ------------------- estimate total work ------------------- */ assert( ptotal_gflops != NULL ); assert( pgmemA != NULL ); assert( pgmemB != NULL ); assert( pgmemBX != NULL ); double gmemA = 0.0; double gmemB = 0.0; double gmemBX = 0.0; double total_flops = 0.0; { int ipatch = 0; int jpatch = 0; for(jpatch=1; jpatch <= npatches; jpatch++) { for(ipatch=1; ipatch <= npatches; ipatch++) { int nop = nC(ipatch,jpatch); if (nop <= 0) continue; double flops_total = 0.0; double flops_method1 = 0.0; double flops_method2 = 0.0; /* -------------------------------------- Note: evaluate (B * X ) * transpose(A) -------------------------------------- */ int nrowA = left_patch_size(ipatch); int ncolA = left_patch_size(jpatch); int nrowB = right_patch_size(ipatch); int ncolB = right_patch_size(jpatch); int ncolX = ncolA; gmemA += nop * nrowA * ncolA; gmemB += nop * nrowB * ncolB; gmemBX += nop * nrowB * ncolX; cal_kron_flops( nrowA, nrowB, ncolA, ncolB, &flops_total, &flops_method1, &flops_method2); total_flops += flops_method1*nop; }; }; }; double total_gflops = total_flops/(1000.0*1000.0*1000.0); *ptotal_gflops = total_gflops; *pgmemA = gmemA; *pgmemB = gmemB; *pgmemBX = gmemBX; } src/estimate_work.h 0 → 100644 +14 −0 Original line number Diff line number Diff line #ifndef ESTIMATE_WORK_H #define ESTIMATE_WORK_H 1 extern void estimate_work( int npatches, int left_patch_size_[], int right_patch_size_[], int nC_[], double *ptotal_gflops, double *pgmemA, double *pgmemB, double *pgmemBX ); #endif Loading
src/estimate_work.c 0 → 100644 +76 −0 Original line number Diff line number Diff line #include "test_vbatch.h" void estimate_work( int npatches, int left_patch_size_[], int right_patch_size_[], int nC_[], double *ptotal_gflops, double *pgmemA, double *pgmemB, double *pgmemBX ) #define nC(ipatch,jpatch) nC_[ ((ipatch)-1) + ((jpatch)-1)*npatches ] #define left_patch_size(ipatch) left_patch_size_[(ipatch)-1] #define right_patch_size(ipatch) right_patch_size_[(ipatch)-1] { /* ------------------- estimate total work ------------------- */ assert( ptotal_gflops != NULL ); assert( pgmemA != NULL ); assert( pgmemB != NULL ); assert( pgmemBX != NULL ); double gmemA = 0.0; double gmemB = 0.0; double gmemBX = 0.0; double total_flops = 0.0; { int ipatch = 0; int jpatch = 0; for(jpatch=1; jpatch <= npatches; jpatch++) { for(ipatch=1; ipatch <= npatches; ipatch++) { int nop = nC(ipatch,jpatch); if (nop <= 0) continue; double flops_total = 0.0; double flops_method1 = 0.0; double flops_method2 = 0.0; /* -------------------------------------- Note: evaluate (B * X ) * transpose(A) -------------------------------------- */ int nrowA = left_patch_size(ipatch); int ncolA = left_patch_size(jpatch); int nrowB = right_patch_size(ipatch); int ncolB = right_patch_size(jpatch); int ncolX = ncolA; gmemA += nop * nrowA * ncolA; gmemB += nop * nrowB * ncolB; gmemBX += nop * nrowB * ncolX; cal_kron_flops( nrowA, nrowB, ncolA, ncolB, &flops_total, &flops_method1, &flops_method2); total_flops += flops_method1*nop; }; }; }; double total_gflops = total_flops/(1000.0*1000.0*1000.0); *ptotal_gflops = total_gflops; *pgmemA = gmemA; *pgmemB = gmemB; *pgmemBX = gmemBX; }
src/estimate_work.h 0 → 100644 +14 −0 Original line number Diff line number Diff line #ifndef ESTIMATE_WORK_H #define ESTIMATE_WORK_H 1 extern void estimate_work( int npatches, int left_patch_size_[], int right_patch_size_[], int nC_[], double *ptotal_gflops, double *pgmemA, double *pgmemB, double *pgmemBX ); #endif