The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Google представил Си-библиотеку для определения возможностей CPU

07.02.2018 23:08

Компания Google опубликовала библиотеку cpu_features, предназначенную для определения возможностей, поддерживаемых текущим CPU, таких как тип микроархитектуры и расширенные наборы инструкций AES, FMA, BMI, SSE, AVX и NEON. Поддерживается работа с процессорами на базе архитектур x86, ARM/AArch64 и MIPS. Код поставляется под лицензией Apache 2.0.

Библиотека преподносится как удобный способ на лету определить возможность использования той или иной расширенной функциональности, или принять решение по применению запасных обработчиков для устаревших систем. Недостающая функциональность библиотеки, необходимая для поддержки новых архитектур и определения возможностей CPU, может наращиваться через подключение расширений. Код написан в соответствии со спецификацией С89 и набором расширений GNU, что позволяет охватить большинство современных и устаревших компиляторов.

Библиотека также включает минимальный набор зависимостей и поддерживает разные стратегии определения функциональности CPU, что позволяет использовать её на разных платформах, в изолированных sandbox-окружениях и даже в условиях без возможности выполнить инструкцию cpuid. Более того, в библиотеке не выполняются операции выделения памяти и не генерируются исключения, что даёт возможность использовать её в реализациях таких функций, как malloc, memcpy и memcmp. Среди поддерживаемых методов определения функциональности отмечается инструкция cpuid, glibc-функция getauxval, /proc/self/auxv и /proc/cpuinfo.

  1. Главная ссылка к новости (http://opensource.googleblog.c...)
  2. OpenNews: Анализ использования ассемблерных вставок в коде открытых проектов
  3. OpenNews: В ядре Linux прекращена поддержка процессоров 386
  4. OpenNews: Анализ проблем оптимизации для конкурирующих CPU в компиляторе Intel
  5. OpenNews: Google опубликовал Wycheproof, инструментарий для проверки криптографических библиотек
  6. OpenNews: Google представил открытую библиотеку Abseil для разработчиков на C++
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/48034-cpu_features
Ключевые слова: cpu_features, cpu, cpuid, gcc
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (104) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.3, Аноним (-), 23:43, 07/02/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +11 +/
    Ждём версии на javascript, тогда сайты никогда не ошибутся!
     
     
  • 2.29, Ан (??), 07:53, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Доступа к этой информации через WebAPI не получить.
     
     
  • 3.55, Аноним (-), 11:03, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • –4 +/
    > Доступа к этой информации через WebAPI не получить.

    Насмешил. Спокойно получается id процессора, операционная система, разрешение монитора, платформа. Кстати, некоторые вещи даже без js получаются, а некоторые даже без scss.

     
     
  • 4.67, XoRe (ok), 12:47, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    id процессора - это не cpu_features.
     
  • 4.91, Аноним (-), 18:57, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Наверно вы имели ввиду css? Ибо scss это препроцессор css, он не обрабатывается браузером вообще никак.
     

  • 1.5, Аноним (-), 23:53, 07/02/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +8 +/
    > static bool HasXmmOsXSave()
    > int GetX86FeaturesEnumValue(const X86Features* features, X86FeaturesEnum value)

    На С так не пишут!

     
     
  • 2.12, Horse (??), 00:22, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • –12 +/
    В Google всё-таки лучше знают, как писать на C.
     
     
  • 3.14, Аноним (-), 00:49, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • +23 +/
    > как писать на C чтоб все перешли на go
     
  • 2.23, Аноним (-), 06:21, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    #define bool int

    Тоже мне, нашёл проблему.
    А со второй строчкой что не так? Вполне себе C.

     
     
  • 3.30, ILoveIslam (?), 07:57, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    stdbool.h уже 18 лет как в стандарте.
     
     
  • 4.39, Вареник (?), 08:42, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • +4 +/
    С89, написано жеж
     
     
  • 5.80, ILoveIslam (?), 13:43, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Какой-то интересный у них c89:

    https://github.com/google/cpu_features/blob/8e58ef0d2b1720d1f6f9f9a5dddfca6de3

     
  • 3.92, dmitrmax (ok), 19:43, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    А во второй строче ключевое слово enum пропущено. Если, конечно, они не сделали typedef
     
     
  • 4.101, pavlinux (ok), 02:46, 09/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    А с чего ты взял что там enum пропущено, а не struсt, union,...?
     
  • 2.32, Аноним (-), 08:12, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > На С так не пишут!

    показал бы что ли свой код, чтобы мы узнали как надо писать на Си

     

  • 1.6, Не понял (?), 23:53, 07/02/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >о даёт возможность использовать её в реализациях таких функций, как malloc, memcpy и memcmp.

    А зачем внутри malloc определять процессор. Ну еще какой malloc вызывать и то один раз, но внутри?

     
     
  • 2.66, Аноним (-), 12:30, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Советую заглянуть в исходники той же либс - сразу станет понятно.
     
  • 2.102, pavlinux (ok), 03:00, 09/02/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >>о даёт возможность использовать её в реализациях таких функций, как malloc, memcpy и memcmp.
    > А зачем внутри malloc определять процессор.

    Ну например не все процы умеют PDPE1GB

     

  • 1.7, Аноним (-), 23:56, 07/02/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    https://github.com/google/cpu_features/blob/master/src/list_cpu_features.cc

    А это вообще-то C++.

     
     
  • 2.19, leap42 (ok), 02:13, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    верно аноним подметил, половина проекта на плюсах написана
     
     
  • 3.22, lovewindows (?), 05:14, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    На с++ написана не сама библеотека, а исоплняемый list_cpu_features.
     
  • 2.54, Аноним (-), 11:01, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    https://github.com/google/cpu_features/issues/11
     

  • 1.8, Аноним (-), 00:06, 08/02/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • –7 +/
    То есть,

    cat /proc/cpuinfo
    lshw | grep cpu
    dmidecode -t 4

    уже недостаточно?

     
     
  • 2.9, Аноним (-), 00:07, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Да, и еще inxi
     

  • 1.10, Дуплик (ok), 00:13, 08/02/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +8 +/
    >Features revealed from Linux. We gather data from several sources depending on availability:
    >from glibc's getauxval
    >by parsing /proc/self/auxv
    >by parsing /proc/cpuinfo

    Ясно, понятно.

     
     
  • 2.27, Аноним (-), 07:49, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • –2 +/
    >>Features revealed from Linux. We gather data from several sources depending on availability:
    >>from glibc's getauxval
    >>by parsing /proc/self/auxv
    >>by parsing /proc/cpuinfo
    > Ясно, понятно.

    что тебе ясно-понятно, там же нет qt

     
     
  • 3.37, пох (?), 08:33, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >> Ясно, понятно.
    > что тебе ясно-понятно, там же нет qt

    где твой пул-реквест?


     
     
  • 4.47, Аноним (-), 10:32, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    >>> Ясно, понятно.
    >> что тебе ясно-понятно, там же нет qt
    > где твой пул-реквест?

    В ядро? И нафига вообще qt, если мне, например, на сервере надо псмотреть?

     
     
  • 5.63, пох (?), 12:24, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > В ядро?

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

    > И нафига вообще qt

    ну как же - стильно, модно, молодежно, отраслевой стандарт, что-нибудь еще про "миссию гугль" вверни. Это ж каждый дурак grep по cpuinfo может, а тут - библиотека!

     
  • 4.57, Аноним (-), 11:27, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • +2 +/
    ещё одна сопля научилась комитить и возомнила себя линусом торвальдсом..
     

  • 1.11, nc (ok), 00:15, 08/02/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Приятная штука. Подумал что хорошо бы ее в Буст включить, но потом понял что это Си а не С++. А кстати для Си есть что-то подобное бусту?
     
     
  • 2.20, ERtert (?), 02:15, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • –4 +/
    Буст, это который сомнительная библиотека для горе-разработчиков?
     
     
  • 3.24, Аноним (-), 06:23, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Буст, это который сомнительная библиотека для горе-разработчиков?

    Это который активно добавляют в std. Может вы ещё и std не пользуетесь?

     
     
  • 4.38, пох (?), 08:34, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • –2 +/
    >> Буст, это который сомнительная библиотека для горе-разработчиков?
    > Это который активно добавляют в std. Может вы ещё и std не
    > пользуетесь?

    при программировании на си? Нет, не пользуется.

     
     
  • 5.48, Аноним (-), 10:34, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • +2 +/
    >>> Буст, это который сомнительная библиотека для горе-разработчиков?
    >> Это который активно добавляют в std. Может вы ещё и std не
    >> пользуетесь?
    > при программировании на си? Нет, не пользуется.

    Словестный аквилибрист вы. Кстати, в новом стандарте C таки есть std. http://open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3631.pdf

     
     
  • 6.71, пох (?), 13:09, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    просто умею читать не на одно сообщение вверх С точки зрения программиста на C ... большой текст свёрнут, показать
     
     
  • 7.109, Аноним (-), 23:52, 10/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    и даже Boost.Asio? Большинство остального уже есть в C++11
     
  • 6.108, dq0s4y71 (ok), 11:13, 10/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    И где там std?
     
  • 3.89, Аноним (-), 17:54, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Это кроссплатформенный велосипед большого размера. Если проект - прототип, то буст подойдет. Иначе лучше сделать свой маленький велосипед.
     
     
  • 4.106, пох (?), 13:34, 09/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > Это кроссплатформенный велосипед большого размера. Если проект - прототип, то буст подойдет.

    а при пожарном переходе от прототипа к коммерческому развертыванию, ты, конечно же, тут же переделаешь на что-то другое?

    (у тебя ж именно в этот момент будет дофига свободного времени и  возможностей все ломать по десять раз в день)

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

     
  • 2.46, yet another anonymous (?), 10:22, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > Приятная штука. Подумал что хорошо бы ее в Буст включить, но потом понял что это Си а не С++. А кстати для Си есть что-то подобное бусту?

    Да, в boost'e только этого не хватает. Хотя навалено уже много.

     
  • 2.68, Аноним (-), 12:48, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > А кстати для Си есть что-то подобное бусту?

    Нет. И за это мы его и любим (среди прочего).

    Если вам нужен бюст, берите плюсы и не портите малину другим.

     

  • 1.13, mumu (ok), 00:48, 08/02/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +24 +/
    > /proc/cpuinfo

    Библиотека, которая выводит /proc/cpuinfo? Я аж смузи на кадиган чуть пролил.

     
     
  • 2.83, nobodynoone (?), 14:48, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Это не пользовательская библиотека, что вам непонятно-то.
     
     
  • 3.87, пох (?), 16:45, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Это не пользовательская библиотека, что вам непонятно-то.

    нам непонятно, откуда берутся "программисты", которым нужна специальная библиотека, чтобы парсить /proc/сpuinfo. Возможно, в какой-то биолаборатории пора навести порядок, и проверить, какие именно предметные стеклышки дают лизать жабам.


     

  • 1.15, Аноним (-), 01:05, 08/02/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    > Си-библиотеку

    Предлагаю объединить до "сиблиотеку". С остальными языками так же:

    Go - гоблиотека;
    Java - яблиотека.

     
     
  • 2.43, Ан (??), 09:44, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > яблиотека

    что-то Apple повеяло. Лучше это слово оставить для них.

     
     
  • 3.53, devl547 (ok), 10:53, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Ну тогда Java - джаблиотека.
     
  • 3.58, Аноним (-), 11:39, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Ага, засудят :)
     
  • 2.60, Аноним (-), 11:45, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Растоблиотека, как-то сложно получилось
     
     
  • 3.100, neit95 (ok), 02:33, 09/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Раблиотека
     
  • 2.61, Аноним (-), 11:47, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Удавоблиотека
     
  • 2.96, anomymous (?), 21:47, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Рублиотека
    Пыхотека
    Перлотка

    Но всех делает D
    Дискотека!

     

  • 1.16, AMDGPUi915 (?), 01:11, 08/02/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Почему не на ASM? хипстота очередная!
     
     
  • 2.17, denis111 (ok), 01:21, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Для всех архитектур?
     
     
  • 3.35, пох (?), 08:32, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Для всех архитектур?

    всех трех на которых есть /proc/cpuinfo, что-тотам в sys и команда cpuid ? Ахренеть сложная задача.
    А на альфе оно работать и не будет.

     
     
  • 4.49, Аноним (-), 10:35, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >> Для всех архитектур?
    > всех трех на которых есть /proc/cpuinfo, что-тотам в sys и команда cpuid
    > ? Ахренеть сложная задача.
    > А на альфе оно работать и не будет.

    Компилировать будешь для каждого процессора и подгонять под каждый? Ну раз тебе так легко...

     
     
  • 5.72, пох (?), 13:19, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    А что, на си комилировать уже не надо Подгонять под каждый, разумеется, нет, эт... большой текст свёрнут, показать
     
  • 4.103, pavlinux (ok), 03:49, 09/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > А на альфе оно работать и не будет.

    Альфа сдохла 18 лет назад, разобрали на запчасти и винтики.  


     
  • 3.97, anomymous (?), 21:50, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > Для всех архитектур?

    А вот кстати да, была бы тема. Кусок машинного кода для множества архитектур который процессорозависимо джампает на нужную ветку внутри себя, соответственно знает тип процессора, и далее делает "диагностику" по возможностям такового.

    Основная проблема написания подобной штуки - надо подобрать команды переходов так, чтобы они джампали на определённом проце, а все "чужие" команды переходов на других процах выполнялись, как какая-нибудь обратимая хрень.

     
     
  • 4.98, anomymous (?), 22:29, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Дабы понимать, о чём я, простой пример

    18 7E - эта команда прыгает на 128 байт вперёд от самой команды на Z80 и совместимых.
    EB 3E - эта команда прыгает на 64 байта вперёд от самой команды на x86 (в любом режиме, 16/32/64).

    К сожалению, команда 18 7E на x86 превращается в опасную sbb byte ptr [si/esi/rsi+xx],bh, а поэтому нам надо записать её несколько иначе.

    Итоговая запись такова:

    2C 18 7E 40 EB 3E

    Поток выполнения для Z80 будет:
    2C - INC L, то есть для восстановления регистра нам будет достаточно сделать DEC L
    18 7E - JR на 0x7E (126) байт вперёд от адреса следующей команды (то есть в итоге на 128 байт)

    Поток выполнения для x86 будет:
    2C 18 - SUB AL, 0x18, то есть для восстановления регистра нам достаточно будет ADD AL,0x18
    7E 40 - JLE на 0x40 (64) байта вперёд от адреса следующей команды (то есть в итоге на 66 байт)
    EB 3E - JMP на 0x3E (62 байта, в итоге на 64) вперёд, что является тем же самым адресом, что и в предыдущей команде), эту команду мы дописываем потому, что JLE зависит от результата вычитания, а нам надо прыгнуть железно

    Что мы имеем в итоге:
    На Z80 этот код прыгнет по адресу +129 байт от начала кода. На x86 этот код прыгнет по адресу +68 байт от начала кода. По этим адресам мы размещаем прочие детекторы для соответствующих CPU, и вуаля :)

    Естественно, для 3-4 разных процессоров задача усложняется настолько, что без цели даже пытаться подобрать последовательность лениво - надо писать собственно подборщик вариантов.

     
     
  • 5.99, anomymous (?), 22:33, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    На том же x86 ещё придётся детектить режим исполнения, по стэку детектить актуальный call convention, детектить операционку, etc, etc. Но в целом всё реально.
     
     
  • 6.105, pavlinux (ok), 03:54, 09/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > Но в целом всё реально.

    Нед.


     
  • 4.104, pavlinux (ok), 03:52, 09/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    >> Для всех архитектур?
    > А вот кстати да, была бы тема.

    Была, лет 30 назад. Ищи код тут  http://www.ioccc.org/

     
  • 2.28, Аноним (-), 07:51, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Почему не на ASM? хипстота очередная!

    ASM для хипстеров! Настоящие программисты пишут в двоичном коде!

     
     
  • 3.65, КО (?), 12:27, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Эх молодежь, уже и не помнит как программировать проводками. :)
     

  • 1.18, gg (??), 01:48, 08/02/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    я бы тоже не отказался получать больше $100к в гугле, что бы писать такую откровенно скажем хрень
     
     
  • 2.25, qsdg (ok), 07:39, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Так не отказывайтесь
     
     
  • 3.59, Аноним (-), 11:41, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Так не предлагают :)
     
     
  • 4.110, Аноним (-), 10:27, 13/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Все равно не отказывайтесь. ;-)
     
  • 2.31, Аноним (-), 08:05, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    эээ... так кто тебе мешает то? у нас что, железный занавес? Перестань комплексовать уже от своих нищенских доходов - слезами горю не поможешь.
     
     
  • 3.34, Аноним (-), 08:29, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > эээ... так кто тебе мешает то? у нас что, железный занавес?

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

    > Перестань
    > комплексовать уже от своих нищенских доходов - слезами горю не поможешь.

    если ты не понял, он не о доходах, а о том, какую херню эти люди делают.

     
     
  • 4.40, Вареник (?), 08:45, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Зависть неосилянта
     
     
  • 5.50, Аноним (-), 10:36, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Зависть неосилянта

    Свои проекты ф студию. Только профы не забудь.

     
  • 2.33, Аноним (-), 08:25, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > я бы тоже не отказался получать больше $100к в гугле,
    > что бы писать такую откровенно скажем хрень

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

    Проблема только в том, что на самом деле им вешали лапшу на уши, что они - избранные, и будут улучшать мир. Те, кто эту лапшу принял всерьез - свалили, им неинтересно парсить proc. Те кто изначально на #@ю вертел - в пролете, не прошли интервью, "надо верить!" или хотя бы очень умело делать вид.
    Угадай, какие остались?

    Если ты можешь пройти все уровни интервью в гугле - я уверен, ты можешь найти себе нормальную работу.

    https://geektimes.ru/company/dataart/blog/268274/ - вот тебе интервью с инсайдером. "успешным", кому нужны лузеры.

     
     
  • 3.51, Аноним (-), 10:40, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > вот тебе интервью с инсайдером.
    > "успешным", кому нужны лузеры.

    Что такое для тебя успех? Для меня заниматься тем, что я хочу, а не тем, где больше платят или вася пупкин сказал это круто работать в гугеле\M$\аппл или где ещё там.

     
     
  • 4.93, _ (??), 20:40, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    ... ниЧЧо, и ты когда то женишься и ребетёнков заведёшь :-)
     
  • 2.88, Аноним (-), 17:18, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    $100k в Сан-Франциско — это как жить на 8к рублей в Москве. А удалённые кодеры Гуглу не нужны, в Bay Area под мостом отличные кадры бомжуют, можно даже не думать о том, чтобы нанять опеннетчика из Мордора.
     
     
  • 3.90, Аноним_ (?), 18:37, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    бомжа в гей-ареа нанимать дорого, наймут бангалорского. Через год переедет туда - для них-то нет проблем с квотами h1b.


     
  • 3.94, _ (??), 20:51, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >$100k в Сан-Франциско — это как жить на 8к рублей в Москве.

    Бре-е-е-е-хня-я-я! (С)

    Но с чего ты вдруг решило что тебе этот стольник дадут? Они умные ребята о отлично понимают твою ситуацию ==> будут доить так что 8-о

     

  • 1.21, Аноним (-), 05:04, 08/02/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Она давно была в поставке Android NDK, теперь просто переехала
     
  • 1.42, iZEN (ok), 09:25, 08/02/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    У меня когнитивный диссонанс: если программа, написанная на C/C++, откомпилирована и работает на [i386], то она точно не запустится на [arm64] без специальных ухищрений, поскольку это "шитый машиный код" и от переносимого в исходных кодах Си в бинарнике ровным счётом ничего не осталось (если не включены отладочные символы и другая неоптимизация, но в релизе от этого избавляются). А что уж там проверять - есть ли SSE/3DNow! или нет на [arm64] - это вторичная глупость.

    ЧТО они запихнули в свою CpuInfo, что она может на лету определять архитектуру процессора и его фичи, мультизагрузчик, компилятор и генератор тестового машкода под кучу процессоров для выполнения в реальном времени что ли?

     
     
  • 2.44, Аноним (-), 09:59, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    оно не для переносимости бинарников на разных семействах, а внутри одного. например amd64. так что бы без пересборки бинарника можно было заюзать как все новейшие плюшки sse9999, так и на атлоне 10-летней давности запустить.
     
     
  • 3.52, iZEN (ok), 10:42, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > так что бы без пересборки бинарника можно было заюзать как все новейшие плюшки sse9999

    Так все новейшие плюшки, так и общий код в бинарнике включаются ещё на этапе компиляции компилятором опциями компиляции исходного текста на C/C++. Зачем ещё что-то довыяснять на этапе выполнения специальным кодом, если компилятор сам уже ДОБАВИЛ эту возможность в бинарик? Используйте современные версии компиляторов, чтобы не нужно было определять фичи CPU, на котором выполняется код.

     
     
  • 4.56, Аноним (-), 11:12, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Тогда этот бинарник перестанет запускаться на древнем Атлоне.  А с помощью библиотеки можно сделать, чтобы работал везде и использовал максиму фич имеющегося процессора.
     
     
  • 5.62, iZEN (ok), 12:16, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • –2 +/
    В любом случае вы не сможете запустить бинарник для [amd64] на [i386] без добавления 32-битного кода, дублирующего основной. А вот код для [i386] вполне можно запустить на [amd64] при условии присутствия поддержки выполнеия этого кода. И довыяснять в нём о том, что он на самом деле запускается в 64-битном окружении, не имеет смысла без соответствующей возможности генерации 64-битных частей и передачи им управления.

    Хорошо, запустили 32-битный код для древнего Athlo'а XP на 64-битном Athlon X2 и узнали об этом во время выполнения. Ваши дальнейшие действия? Что дальше?

     
     
  • 6.70, КО (?), 13:07, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > Ваши дальнейшие действия? Что дальше?

    Ты начни с начала.
    Есть у тебя программа пускач и плюгины к ней.
    Плюгин №1 считает на чистом FPU, два на SSE, три на AVX-512.
    Задача пускача узнать какой загружать. Надо все их проверить на пригодность здесь и сейчас.

    Ну или ты пишешь jit компилятор для своего скриптового языка.

    И т.д. и т.п.

     
     
  • 7.76, iZEN (ok), 13:24, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > Задача пускача узнать какой загружать. Надо все их проверить на пригодность здесь и сейчас.

    Это задача компилятора - вставить в результирующий бинарный код, оптимизирующие инструкции из расширенного набора. Если они поддерживаются процессором, использовать их, в противном случае будет задействован код, работающий с базовым набором регистров.

     
     
  • 8.79, Аноним (-), 13:33, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Обычно компилятор не способен оптимизировать код лучше, чем грамотный разработ... текст свёрнут, показать
     
     
  • 9.82, iZEN (ok), 14:41, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Современные компиляторы способны выдавать лучше оптимизированный код, чем средни... текст свёрнут, показать
     
  • 8.107, КО (?), 15:13, 09/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Проверять перед каждой инструкцией есть или нет в рантайме убивать идею овчинка... текст свёрнут, показать
     
  • 4.77, Аноним (-), 13:26, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Компилятор, в общем случае, сам ничего не добавляет Если ты в коде явно заюзал,... большой текст свёрнут, показать
     
  • 2.75, Аноним (-), 13:23, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Д-е-б-и-л. Изучи код libc поуниверсальнее, которая умеет оптимизироваться под разные архитектуры (glibc пойдёт). В зависимости от доступных фич процессора она может обрабатывать стринги по старинке, может задействовать MMX, а может SSE. Можно скомпилировать, оставив только одну подпрограмму, а можно, чтобы таскала их все и выбирала в рантайме.
     
     
  • 3.86, пох (?), 16:40, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    он, похоже, даже не в курсе, что процессоры различаются не только битностью.
    куда ему там, glibc...

    ну и "компилятор генерит код лучше чем разработчик" - видимо, он прочитал в какой-то книжке начала 90х, времен хайпа риск-процессоров. Сегодня, чтобы компилятор сгенерил таки sse/ssse/avx код, надо ТАКУЮ хрень написать в исходнике, что глаза на лоб лезут. "зато переносимо". Ага, если не думать о том, КАК оно работает если компилятору таки не удалось опознать в этой вермишели свертываемость в sse инструкции, или на этой платформе оно устроено немного иначе.

     

  • 1.45, X4asd (ok), 10:16, 08/02/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    > не генерируются исключения

    исключения?

    в Си?

    фуф! пронесло.. не генерируются :-D :-D :-D

     
     
  • 2.73, Аноним (-), 13:19, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Вообще-то, сишный интерфейс не гарантирует, что внутри тоже C.
     

  • 1.64, Костик (??), 12:25, 08/02/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А такие фичи, как поддержку мелтдауна, оно детектит?
     
     
  • 2.78, Аноним (-), 13:28, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > А такие фичи, как поддержку мелтдауна, оно детектит?

    Нет.

     

  • 1.69, XoRe (ok), 12:51, 08/02/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    > Код написан в соответствии со спецификацией С89, что позволяет
    > охватить большинство современных и устаревших компиляторов.

    Неа.
    > We target gnu89 and not c89.

    https://github.com/google/cpu_features/issues/11#issuecomment-364057645

     
     
  • 2.74, пох (?), 13:22, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >> Код написан в соответствии со спецификацией С89, что позволяет
    >> охватить большинство современных и устаревших компиляторов.
    > Неа.
    >> We target gnu89 and not c89.

    ффсе нормально, это gcc версий чуть поновее 2.7.2 и clang (если ключик не забыть) = "большинство", что не так?

     

  • 1.81, Аноним (-), 14:12, 08/02/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    При запуске на "Байкале" выдает ошибку ERR_CPU_NOT_FOUND
     
     
  • 2.84, Аноним (-), 15:12, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Ты б ещё на эльбрусе запустил, выдало бы ERR_TRANSISTORS_NOT_FOUND.
     
     
  • 3.85, Аноним (-), 15:27, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    ERR_MONEY_NOT_FOUND_BUT_YOU_HOLD_ON
     
     
  • 4.95, _ (??), 21:04, 08/02/2018 [^] [^^] [^^^] [ответить]  
  • +/
    О! How-much-watch-и пожаловали :-)
    попробуй "... but you stay strong!" глядишь на второй год не оставят :-)))
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру