Advertisement
Guest User

Untitled

a guest
Aug 29th, 2016
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
D 1.04 KB | None | 0 0
  1. import std.getopt;
  2. import std.stdio;
  3. import std.conv : to;
  4. import std.datetime;
  5.  
  6. immutable int n = 1000, l=1000, m=1000;
  7.  
  8. auto A = new double [1000][m];
  9. auto B = new double [1000][n];
  10. auto C = new double [1000][n];
  11. void main(string[] args)
  12. {
  13.   matrix!(typeof(A)).ini(A);
  14.   matrix!(typeof(A)).ini(B);
  15.   run_test();
  16.  
  17.   auto r = benchmark!(run_test)(500);
  18.  
  19.   auto res = to!Duration(r[0]);
  20.   writefln(res.toString());
  21.  
  22. }
  23.  
  24. void run_test(){
  25.     matrix!(typeof(A)).MatMul(A,B,C);
  26. }
  27.  
  28.  
  29.  
  30. template matrix(T){
  31.   void ini(T mtx){
  32.     for(int i = 0; i <mtx.length; i++) {
  33.       for(int j = 0; j< mtx[i].length; j++) {
  34.     mtx[i][j] = i*j + 0.6*j +3.4;
  35.       }
  36.     }
  37.   }
  38.  
  39.   void print(T mtx){
  40.     for(int i = 0; i <mtx.length; i++) {
  41.       writefln("%(%8.1f %)", mtx[i]);
  42.  
  43.     }
  44.   }
  45.  
  46.  
  47.   void MatMul(T A, T B, T C){
  48.     for(int k = 0; k < C[0].length; k++) {
  49.       for(int i = 0; i < C.length; i++) {
  50.     C[i][k] = 0;
  51.     for(int j = 0; j < A[0].length; j++) {
  52.       C[i][k] += A[i][j] * B[j][k];
  53.     }
  54.       }
  55.     }
  56.   }
  57.  
  58. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement