#include <iostream>
#include <magma_v2.h>
#include <cstdlib>
void test_dcopyvector(int n, magma_queue_t queue);
int main() {
std::cout << "--------------- init" << std::endl;
magma_init();
magma_queue_t queue;
std::cout << "--------------- create queue" << std::endl;
magma_queue_create(0, &queue);
test_dcopyvector(3, queue);
std::cout << "--------------- destroy queue" << std::endl;
magma_queue_destroy(queue);
std::cout << "--------------- finalize" << std::endl;
magma_finalize();
std::cout << "done" << std::endl;
return 0;
}
void test_dcopyvector(int n, magma_queue_t queue) {
double *x = new double[n];
double *r = new double[n];
double *s = new double[n];
magmaDouble_ptr dx, dy;
magma_malloc((void**)&dx, n * sizeof(double));
magma_malloc((void**)&dy, n * sizeof(double));
for (int i = 0; i < n; ++i) {
x[i] = static_cast<double>(rand()) / RAND_MAX;
}
magma_dsetvector(n, x, 1, dx, 1, queue);
magma_dcopyvector(n, dx, 1, dy, 1, queue);
magma_dgetvector(n, dx, 1, r, 1, queue);
magma_dgetvector(n, dy, 1, s, 1, queue);
for (int i = 0; i < n; ++i) {
std::cout << " x(" << i << ") == " << x[i] << ", r(" << i << ") == " << r[i]
<< ", error == " << r[i] - x[i] << std::endl;
std::cout << " x(" << i << ") == " << x[i] << ", s(" << i << ") == " << s[i]
<< ", error == " << s[i] - x[i] << std::endl;
std::cout << std::endl;
}
magma_free(dx);
magma_free(dy);
delete[] x;
delete[] r;
delete[] s;
}
--------------- init
--------------- create queue
x(0) == 0.00125126, r(0) == 0.00125126, error == 0
x(0) == 0.00125126, s(0) == 0.00125126, error == 0
x(1) == 0.563585, r(1) == 0.563585, error == 0
x(1) == 0.563585, s(1) == 0.563585, error == 0
x(2) == 0.193304, r(2) == 0.193304, error == 0
x(2) == 0.193304, s(2) == 0.193304, error == 0
--------------- destroy queue
--------------- finalize
done