MCPcopy Create free account
hub / github.com/OriginQ/QPanda-2 / dimIncrement

Method dimIncrement

Core/VirtualQuantumProcessor/SingleAmplitude/Tensor.cpp:68–100  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

66}
67
68void 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
102void CPUComplexTensor::getSubTensor(size_t num, int value)
103{

Callers 1

dimIncrementByEdgeMethod · 0.80

Calls 2

calloc_failClass · 0.85
get_num_threadsFunction · 0.85

Tested by

no test coverage detected