Quantum Gate Decomposer
v1.3
Powerful decomposition of almost any unitary into U3 and CNOT gates
|
Header file for commonly used functions and wrappers to CBLAS functions. More...
#include <tbb/tbb.h>
#include <tbb/scalable_allocator.h>
#include <omp.h>
#include "qgd/QGDTypes.h"
#include "qgd/dot.h"
#include <string>
#include <stdio.h>
#include <iostream>
#include <cmath>
#include <vector>
#include <cstring>
#include <sstream>
Go to the source code of this file.
Functions | |
void | add_unique_elelement (std::vector< int > &involved_qbits, int qbit) |
Add an integer to a vector of integers if the integer is not already an element of the vector. More... | |
Matrix | create_identity (int matrix_size) |
Call to create an identity matrix. More... | |
int | create_identity (QGD_Complex16 *matrix, int matrix_size) |
Call to create an identity matrix — OBSOLETE. More... | |
double | get_cost_function (QGD_Complex16 *matrix, int matrix_size) |
Call co calculate the cost funtion during the final optimization process. More... | |
QGD_Complex16 | mult (QGD_Complex16 a, QGD_Complex16 b) |
Call to calculate the product of two complex scalars. More... | |
QGD_Complex16 | mult (double a, QGD_Complex16 b) |
calculate the product of a real scalar and a complex scalar More... | |
void | mult (QGD_Complex16 a, Matrix &b) |
Multiply the elements of matrix b by a scalar a. More... | |
int | Power_of_2 (int n) |
Calculates the n-th power of 2. More... | |
void * | qgd_calloc (size_t element_num, size_t size, size_t alignment) |
custom defined memory allocation function. More... | |
void | qgd_free (void *ptr) |
custom defined memory release function. More... | |
void * | qgd_realloc (void *aligned_ptr, size_t element_num, size_t size, size_t alignment) |
custom defined memory reallocation function. More... | |
Matrix | reduce_zgemm (std::vector< Matrix > &mtxs) |
Calculate the product of several square shaped complex matrices stored in a vector. More... | |
QGD_Complex16 | scalar_product (QGD_Complex16 *A, QGD_Complex16 *B, int vector_size) |
Call to calculate the scalar product of two complex vectors using function cblas_zgemm3m or cblas_zgemm. More... | |
void | subtract_diag (Matrix &mtx, QGD_Complex16 scalar) |
Call to subtract a scalar from the diagonal of a complex matrix. More... | |
QGD_Complex16 * | zgemm3m_wrapper (QGD_Complex16 *A, QGD_Complex16 *B, int matrix_size) |
Call to calculate the product of two square shaped complex matrices using function cblas_zgemm3m or cblas_zgemm. More... | |
int | zgemm3m_wrapper (QGD_Complex16 *A, QGD_Complex16 *B, QGD_Complex16 *C, int matrix_size) |
Call to calculate the product of two square shaped complex matrices using function cblas_zgemm3m or cblas_zgemm. More... | |
int | zgemm3m_wrapper_adj (QGD_Complex16 *A, QGD_Complex16 *B, QGD_Complex16 *C, int matrix_size) |
Call to calculate the product of a square shaped complex matrix and a complex transpose of a second square shaped complex matrix using function cblas_zgemm3m or cblas_zgemm. More... | |
Header file for commonly used functions and wrappers to CBLAS functions.
Definition in file common.h.
void add_unique_elelement | ( | std::vector< int > & | involved_qbits, |
int | qbit | ||
) |
Add an integer to a vector of integers if the integer is not already an element of the vector.
The ascending order is kept during the process.
involved_qbits | The vector of integer to be updated by the new integer. The result is returned via this vector. |
qbit | The integer to be added to the vector |
Definition at line 95 of file common.cpp.
Matrix create_identity | ( | int | matrix_size | ) |
Call to create an identity matrix.
matrix_size | The number of rows in the resulted identity matrix |
Definition at line 128 of file common.cpp.
int create_identity | ( | QGD_Complex16 * | matrix, |
int | matrix_size | ||
) |
Call to create an identity matrix — OBSOLETE.
matrix | The pointer to the memory array allocated for the identity matrix. The result is returned via this pointer. |
matrix_size | The number of rows in the resulted identity matrix |
Definition at line 152 of file common.cpp.
double get_cost_function | ( | QGD_Complex16 * | matrix, |
int | matrix_size | ||
) |
Call co calculate the cost funtion during the final optimization process.
matrix | The square shaped complex matrix from which the cost function is calculated. |
matrix_size | The number rows in the matrix |
QGD_Complex16 mult | ( | QGD_Complex16 | a, |
QGD_Complex16 | b | ||
) |
Call to calculate the product of two complex scalars.
a | The firs scalar |
b | The second scalar |
Definition at line 367 of file common.cpp.
QGD_Complex16 mult | ( | double | a, |
QGD_Complex16 | b | ||
) |
calculate the product of a real scalar and a complex scalar
a | The real scalar. |
b | The complex scalar. |
Definition at line 383 of file common.cpp.
void mult | ( | QGD_Complex16 | a, |
Matrix & | b | ||
) |
Multiply the elements of matrix b by a scalar a.
a | A complex scalar. |
b | A square shaped matrix. |
Definition at line 400 of file common.cpp.
int Power_of_2 | ( | int | n | ) |
Calculates the n-th power of 2.
n | An natural number |
Definition at line 81 of file common.cpp.
custom defined memory allocation function.
Memory allocated with aligned realloc MUST be freed using qgd_free
element_num | The number of elements in the array to be allocated. |
size | A size of one element (such as sizeof(double) ) |
alignment | The number of bytes to which memory must be aligned. This value must be <= 255. |
Memory allocated with aligned realloc MUST be freed using qgd_free.
element_num | The number of elements in the array to be allocated. |
size | A size of one element (such as sizeof(double) ) |
alignment | The number of bytes to which memory must be aligned. This value must be <= 255. |
Definition at line 38 of file common.cpp.
void qgd_free | ( | void * | ptr | ) |
custom defined memory release function.
Definition at line 66 of file common.cpp.
custom defined memory reallocation function.
Memory allocated with aligned realloc MUST be freed using qgd_free. The reallocation is done by either: a) expanding or contracting the existing area pointed to by aligned_ptr, if possible. The contents of the area remain unchanged up to the lesser of the new and old sizes. If the area is expanded, the contents of the new part of the array is set to zero. b) allocating a new memory block of size new_size bytes, copying memory area with size equal the lesser of the new and the old sizes, and freeing the old block.
aligned_ptr | The aligned pointer created by qgd_calloc |
element_num | The number of elements in the array to be allocated. |
size | A size of one element (such as sizeof(double) ) |
alignment | The number of bytes to which memory must be aligned. This value must be <= 255. |
Definition at line 54 of file common.cpp.
Calculate the product of several square shaped complex matrices stored in a vector.
mtxs | The vector of matrices. |
matrix_size | The number rows in the matrices |
Definition at line 297 of file common.cpp.
QGD_Complex16 scalar_product | ( | QGD_Complex16 * | A, |
QGD_Complex16 * | B, | ||
int | vector_size | ||
) |
Call to calculate the scalar product of two complex vectors using function cblas_zgemm3m or cblas_zgemm.
A | The first vector of the product |
B | The second vector of the product |
vector_size | The size of the vectors. |
Definition at line 175 of file common.cpp.
void subtract_diag | ( | Matrix & | mtx, |
QGD_Complex16 | scalar | ||
) |
Call to subtract a scalar from the diagonal of a complex matrix.
mtx | The input-output matrix |
scalar | The complex scalar to be subtracked from the diagonal elements of the matrix |
Definition at line 346 of file common.cpp.
QGD_Complex16* zgemm3m_wrapper | ( | QGD_Complex16 * | A, |
QGD_Complex16 * | B, | ||
int | matrix_size | ||
) |
Call to calculate the product of two square shaped complex matrices using function cblas_zgemm3m or cblas_zgemm.
A | The first matrix. |
B | The second matrix |
matrix_size | The number rows in the matrices |
Definition at line 236 of file common.cpp.
int zgemm3m_wrapper | ( | QGD_Complex16 * | A, |
QGD_Complex16 * | B, | ||
QGD_Complex16 * | C, | ||
int | matrix_size | ||
) |
Call to calculate the product of two square shaped complex matrices using function cblas_zgemm3m or cblas_zgemm.
A | The first matrix. |
B | The second matrix |
C | Pointer to the resulted matrix. The calculated matrix is returned via this pointer. |
matrix_size | The number rows in the matrices |
Definition at line 268 of file common.cpp.
int zgemm3m_wrapper_adj | ( | QGD_Complex16 * | A, |
QGD_Complex16 * | B, | ||
QGD_Complex16 * | C, | ||
int | matrix_size | ||
) |
Call to calculate the product of a square shaped complex matrix and a complex transpose of a second square shaped complex matrix using function cblas_zgemm3m or cblas_zgemm.
A | The first matrix. |
B | The second matrix |
C | Pointer to the resulted matrix. The calculated matrix is returned via this pointer. |
matrix_size | The number rows in the matrices |
Definition at line 207 of file common.cpp.