| 66 | } |
| 67 | |
| 68 | void CPUComplexTensor::dimIncrement(size_t increment_size) |
| 69 | { |
| 70 | if(m_rank + increment_size > m_max_rank) |
| 71 | { |
| 72 | QCERR("dimIncrement error"); |
| 73 | throw std::runtime_error("dimIncrement error"); |
| 74 | } |
| 75 | |
| 76 | auto size = 1ull << m_rank; |
| 77 | m_rank = m_rank + increment_size; |
| 78 | auto new_size = 1ull << m_rank; |
| 79 | auto new_tensor = (qcomplex_data_t *)calloc(new_size, sizeof(qcomplex_data_t)); |
| 80 | |
| 81 | if (nullptr == new_tensor) |
| 82 | { |
| 83 | QCERR("calloc_fail"); |
| 84 | throw calloc_fail(); |
| 85 | } |
| 86 | |
| 87 | int threads = get_num_threads(m_rank); |
| 88 | int j; |
| 89 | #pragma omp parallel for num_threads(threads) private(j) |
| 90 | for (long long i = 0; i < size; i++) |
| 91 | { |
| 92 | for (j = 0; j < 1 << increment_size; j++) |
| 93 | { |
| 94 | new_tensor[(i << increment_size) + j] = m_tensor[i]; |
| 95 | } |
| 96 | } |
| 97 | |
| 98 | free(m_tensor); |
| 99 | m_tensor = new_tensor; |
| 100 | } |
| 101 | |
| 102 | void CPUComplexTensor::getSubTensor(size_t num, int value) |
| 103 | { |
no test coverage detected