-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathExample.cpp
53 lines (41 loc) · 1.04 KB
/
Example.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
//
// Cardiff University | Computer Science
// Module: CM3203 One Semester Project (40 Credits)
// Title: Parallelisation of Matrix Exponentials in C++/CUDA for Quantum Control
// Date: 2016
//
// Author: Peter Davison
// Supervisor: Dr. Frank C Langbein
// Moderator: Dr. Irena Spasic
//
#include "Main.h"
int main(int argc, char **argv) {
try {
// Set matrix size
int size = 5;
// Input variables
std::complex<double> i = std::complex<double>(0, 1);
CUDAMatrix A(size, {
1, 0, 0, 0, 0,
0, 2, 0, 0, 0,
0, 0, 3, 0, 0,
0, 0, 0, 4, 0,
0, 0, 0, 0, 5
});
// Result variables
CUDAMatrix eA(size);
CUDAMatrix eAi(size);
// Create timers
CUDATimer t1, t2;
// Calculations
t1 = CUDAMatrix::exp(A, eA);
t2 = CUDAMatrix::mul(eA, i, eAi);
// Output
std::cout << "A" << A << std::endl;
std::cout << "e^A" << eA << t1 << std::endl;
std::cout << "e^A * i" << eAi << t2 << std::endl;
} catch (std::exception e) {
std::cout << std::endl << e.what() << std::endl;
}
return 0;
}