Skip to content

Commit cf69fde

Browse files
authoredMar 26, 2024
Merge pull request #663 from quantumlib/fix-sampling
Fix sampling.
2 parents e581751 + 003eba3 commit cf69fde

File tree

4 files changed

+32
-16
lines changed

4 files changed

+32
-16
lines changed
 

‎lib/statespace_avx.h

+8-4
Original file line numberDiff line numberDiff line change
@@ -382,8 +382,8 @@ class StateSpaceAVX :
382382

383383
for (uint64_t k = 0; k < size; ++k) {
384384
for (unsigned j = 0; j < 8; ++j) {
385-
auto re = p[16 * k + j];
386-
auto im = p[16 * k + 8 + j];
385+
double re = p[16 * k + j];
386+
double im = p[16 * k + 8 + j];
387387
norm += re * re + im * im;
388388
}
389389
}
@@ -396,15 +396,19 @@ class StateSpaceAVX :
396396

397397
for (uint64_t k = 0; k < size; ++k) {
398398
for (unsigned j = 0; j < 8; ++j) {
399-
auto re = p[16 * k + j];
400-
auto im = p[16 * k + 8 + j];
399+
double re = p[16 * k + j];
400+
double im = p[16 * k + 8 + j];
401401
csum += re * re + im * im;
402402
while (rs[m] < csum && m < num_samples) {
403403
bitstrings.emplace_back(8 * k + j);
404404
++m;
405405
}
406406
}
407407
}
408+
409+
for (; m < num_samples; ++m) {
410+
bitstrings.emplace_back((uint64_t{1} << state.num_qubits()) - 1);
411+
}
408412
}
409413

410414
return bitstrings;

‎lib/statespace_avx512.h

+8-4
Original file line numberDiff line numberDiff line change
@@ -333,8 +333,8 @@ class StateSpaceAVX512 :
333333

334334
for (uint64_t k = 0; k < size; ++k) {
335335
for (unsigned j = 0; j < 16; ++j) {
336-
auto re = p[32 * k + j];
337-
auto im = p[32 * k + 16 + j];
336+
double re = p[32 * k + j];
337+
double im = p[32 * k + 16 + j];
338338
norm += re * re + im * im;
339339
}
340340
}
@@ -347,15 +347,19 @@ class StateSpaceAVX512 :
347347

348348
for (uint64_t k = 0; k < size; ++k) {
349349
for (unsigned j = 0; j < 16; ++j) {
350-
auto re = p[32 * k + j];
351-
auto im = p[32 * k + 16 + j];
350+
double re = p[32 * k + j];
351+
double im = p[32 * k + 16 + j];
352352
csum += re * re + im * im;
353353
while (rs[m] < csum && m < num_samples) {
354354
bitstrings.emplace_back(16 * k + j);
355355
++m;
356356
}
357357
}
358358
}
359+
360+
for (; m < num_samples; ++m) {
361+
bitstrings.emplace_back((uint64_t{1} << state.num_qubits()) - 1);
362+
}
359363
}
360364

361365
return bitstrings;

‎lib/statespace_basic.h

+8-4
Original file line numberDiff line numberDiff line change
@@ -203,8 +203,8 @@ class StateSpaceBasic :
203203
const fp_type* p = state.get();
204204

205205
for (uint64_t k = 0; k < size; ++k) {
206-
auto re = p[2 * k];
207-
auto im = p[2 * k + 1];
206+
double re = p[2 * k];
207+
double im = p[2 * k + 1];
208208
norm += re * re + im * im;
209209
}
210210

@@ -215,14 +215,18 @@ class StateSpaceBasic :
215215
bitstrings.reserve(num_samples);
216216

217217
for (uint64_t k = 0; k < size; ++k) {
218-
auto re = p[2 * k];
219-
auto im = p[2 * k + 1];
218+
double re = p[2 * k];
219+
double im = p[2 * k + 1];
220220
csum += re * re + im * im;
221221
while (rs[m] < csum && m < num_samples) {
222222
bitstrings.emplace_back(k);
223223
++m;
224224
}
225225
}
226+
227+
for (; m < num_samples; ++m) {
228+
bitstrings.emplace_back((uint64_t{1} << state.num_qubits()) - 1);
229+
}
226230
}
227231

228232
return bitstrings;

‎lib/statespace_sse.h

+8-4
Original file line numberDiff line numberDiff line change
@@ -342,8 +342,8 @@ class StateSpaceSSE :
342342

343343
for (uint64_t k = 0; k < size; ++k) {
344344
for (unsigned j = 0; j < 4; ++j) {
345-
auto re = p[8 * k + j];
346-
auto im = p[8 * k + 4 + j];
345+
double re = p[8 * k + j];
346+
double im = p[8 * k + 4 + j];
347347
norm += re * re + im * im;
348348
}
349349
}
@@ -356,15 +356,19 @@ class StateSpaceSSE :
356356

357357
for (uint64_t k = 0; k < size; ++k) {
358358
for (unsigned j = 0; j < 4; ++j) {
359-
auto re = p[8 * k + j];
360-
auto im = p[8 * k + 4 + j];
359+
double re = p[8 * k + j];
360+
double im = p[8 * k + 4 + j];
361361
csum += re * re + im * im;
362362
while (rs[m] < csum && m < num_samples) {
363363
bitstrings.emplace_back(4 * k + j);
364364
++m;
365365
}
366366
}
367367
}
368+
369+
for (; m < num_samples; ++m) {
370+
bitstrings.emplace_back((uint64_t{1} << state.num_qubits()) - 1);
371+
}
368372
}
369373

370374
return bitstrings;

0 commit comments

Comments
 (0)