Проблема в другом шаблоне: узкое место связано с оператором выбора, который генерирует 2 ^ 20 = 1048576 ребер.
Для SMCлучше использовать случайную функцию для генерации всех возможностей на одном ребре:
, где randomInit выглядит следующим образом:
typedef int[0,(1<<DEVICE_SIZE)-1] uint20_t;
void randomInit(bool& test[DEVICE_SIZE])
{
uint20_t number = fint(random(1<<DEVICE_SIZE));
for (i: id_t)
test[i] = (number >> i) & 1;
}
Обратите внимание, что символические запросы, такие как E<>
и A[]
, не будут работать на таких моделях из-за использования random
и fint
!