Подтвердить что ты не робот

Как определить двухъядерный процессор на iOS?

Мое приложение использует NSOperationQueue для кэширования эскизных изображений в фоновом потоке. На iPad2 я могу установить ограничение количества одновременных задач до 5 или 6, но на одноядерных устройствах, таких как iPad 1, это приведет к остановке пользовательского интерфейса.

Итак, я бы хотел обнаружить двухъядерное устройство (в настоящее время только iPad 2) и соответствующим образом адаптировать параллельный предел. Я знаю, что я не должен проверять номера моделей, а не функции устройства. Итак, какую функцию устройства я должен искать, которая скажет мне, является ли процессор двухъядерным?

4b9b3361

Ответ 1

Способ 1

[[NSProcessInfo processInfo] activeProcessorCount];

NSProcessInfo также имеет свойство processorCount. Изучите разницу здесь.

Способ 2

#include <mach/mach_host.h>

unsigned int countCores()
{
  host_basic_info_data_t hostInfo;
  mach_msg_type_number_t infoCount;

  infoCount = HOST_BASIC_INFO_COUNT;
  host_info( mach_host_self(), HOST_BASIC_INFO, (host_info_t)&hostInfo, &infoCount ) ;

  return (unsigned int)(hostInfo.max_cpus);
}

Способ 3

#include <sys/sysctl.h>

unsigned int countCores()
{
  size_t len;
  unsigned int ncpu;

  len = sizeof(ncpu);
  sysctlbyname ("hw.ncpu",&ncpu,&len,NULL,0);

  return ncpu;
}

Ответ 2

Просто используйте:

[[NSProcessInfo processInfo] processorCount]

Ответ 3

Помимо прочего, вы можете получить эту информацию с помощью системного вызова...

NSDictionary dictionaryWithObjectsAndKeys:
    [self machineType],@"MachineType",
    [self humanMachineType],@"HumanMachineType",
    [self powerPCTypeString],@"ProcessorType",
    [NSNumber numberWithLong:
                     [self processorClockSpeed]],
                         @"ProcessorClockSpeed",
    [NSNumber numberWithLong:
                     [self processorClockSpeedInMHz]],
                         @"ProcessorClockSpeedInMHz",
    [NSNumber numberWithInt:[self countProcessors]],
                     @"CountProcessors",
    [self computerName],@"ComputerName",
    [self computerSerialNumber],@"ComputerSerialNumber",
    [self operatingSystemString],@"OperatingSystem",
    [self systemVersionString],@"SystemVersion",        
    nil];

Здесь ссылка... http://cocoadev.com/HowToGetHardwareAndNetworkInfo

Ответ 4

Думаю, для этого нужен отдельный ответ, а не комментарий:

Интересно, что теперь означает количество ядер, что яблоко принесло более асимметричную обработку с помощью сплава A10? У нас есть 2,2 ядра или 4 ядра? яблоко пренебрегли, чтобы сделать activeProcessorCount поплавок, чтобы учесть его фрактальную природу. Обратите внимание, что это было так, что даже до слияния, вероятно, они имели тепловой дроссель. Им нужно либо устранить перенапряжение nsoperationqueue, либо создать эквивалент float для activeProcessorCount и отказаться от activeProcessorCount в его текущей форме, которая теряет свою полезность перед лицом недавних hw-продвижений

Итак, чем быстрее закон Мура впадает в забвение или получает новую блестящую константу тем более бессмысленным подсчетом ядра становится. Если вы ничего не пишете из Geek Bench 42, многорежимный выпуск.

Жизнь в конце 2016 года, для решения основной проблемы, с которой вы сталкиваетесь, а не взламывания с помощью максимальной параллельной работы, я предполагаю вы настроили QoS для NSOperationQueue на .Background?

Я думаю, что это более чистый способ решить вашу проблему с помощью современных ios sdk, затем подсчитывая "em-сердечники", используя мили канатной любезности albertamg

Также обратите внимание на NSProcessInfoThermalStateDidChangeNotification (macos) и NSProcessInfo.lowPowerModeEnabled(ios) (Я предполагаю, что альтернатива наблюдению NSProcessInfoThermalStateDidChangeNotification является значением KVo для нового значения activeProcessorCount)

если вы начнете учитывать эти новые реалии, корректировки магических констант для умножения количества ядер будет очень интересно... и гниют, поскольку новое оборудование выкатывается из купертино.

И это будет почти так же просто, чтобы это правильно зоопарк Apple hw, чтобы получить правильную работу на уровне сокета: выполним, но несколькими избранными в Cupetino с тенью iSteve нависшее над качеством проверки плеча; -)