#c #c #compiler-errors #compilation
#c #c #ошибки компилятора #Сборник
Вопрос:
Всякий раз, когда я пытаюсь скомпилировать любую программу на C march=native
на Macbook с чипом M1, я получаю следующую ошибку при использовании clang:
clang: error: the clang compiler does not support '-march=native'
Однако раньше он работал на более старых Macbook с процессором Intel. Поддерживает ли clang эту архитектуру (пока)?
clang --version
дает:
Apple clang version 12.0.0 (clang-1200.0.32.29)
Target: arm64-apple-darwin20.2.0
Комментарии:
1. Когда вы говорите, что раньше он работал на более старых MacBook, была ли это та же версия Clang? Что
clang --version
говорит о двух системах?2. Простое избегание
march=native
работает для меня
Ответ №1:
$ clang --print-supported-cpus
Apple clang version 12.0.5 (clang-1205.0.22.9)
Target: arm64-apple-darwin20.5.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
Available CPUs for this target:
a64fx
apple-a10
apple-a11
apple-a12
apple-a13
apple-a14
apple-a7
apple-a8
apple-a9
apple-latest
apple-s4
apple-s5
carmel
cortex-a34
cortex-a35
cortex-a53
cortex-a55
cortex-a57
cortex-a65
cortex-a65ae
cortex-a72
cortex-a73
cortex-a75
cortex-a76
cortex-a76ae
cortex-a77
cortex-a78
cortex-x1
cyclone
exynos-m3
exynos-m4
exynos-m5
falkor
generic
kryo
lightning
neoverse-e1
neoverse-n1
saphira
thunderx
thunderx2t99
thunderx3t110
thunderxt81
thunderxt83
thunderxt88
tsv110
vortex
-mcpu=apple-a14
может быть лучшим для M1.
Комментарии:
1. Согласно последним определениям llvm, определения apple-m1 и apple-a14 идентичны. Если в вашей системе еще не определено имя процессора для apple-m1, но оно определено для apple-a14, это апрельское обновление определения подтверждает, что ответ Гуаньяна является лучшим на момент написания этого комментария. Смотрите: github.com/llvm/llvm-project/blob/main/llvm/include/llvm /…
Ответ №2:
В Apple clang -mcpu=apple-m1
теперь доступна версия 13.0.0.
Комментарии:
1. откуда вы взяли эту информацию? У меня это не работает с Apple clang версии 13.0.0, ошибка: «clang: ошибка: компилятор clang не поддерживает ‘-march=apple-m1′» (базовый) build % clang —версия Apple clang версии 13.0.0 (clang-1300.0.29.3) Цель: arm64-apple-darwin21.1.0
2. @SevenDays в моем ответе указано «-mcpu», а не «-march». Он обеспечивает требуемую функциональность. Источник этой информации — я сам ее использую. Вы также можете проверить, запустив «clang —print-supported-cpus».
3. Спасибо! Кажется, что новая опция более оптимизирована для macbook m1, и мой mac работает тише после перекомпиляции с опцией mcpu
Ответ №3:
Насколько я знаю, это не Apple M1
является специфичным, это происходит также с clang для различных других архитектур (в основном различных других процессоров arm). например, смотрите Этот отчет об ошибке здесь https://github.com/DMOJ/judge-server/issues/303
По сути, каждая сборка clang для новой архитектуры должна указывать значения по умолчанию для «march = native» для цели, для которой создан компилятор, или нет; и если нет, то вы увидите это сообщение об ошибке. Даже для тех процессоров arm, у которых есть цели оптимизации, вам часто приходится специально использовать «-mcpu = xxx» вместо «-march».
например, для iphone, который вы бы использовали -mcpu=apple-a11
-mcpu=apple-a12
и т.д.
Однако такая цель еще не реализована для Apple M1
Комментарии:
1. Могу ли я принудительно отказаться
native
от опции?2. @HenryMazza Конечно, вы можете передать, например
-mcpu=apple-a11
, даже если вы компилируете на M1, это приведет к созданию кода, который не оптимизирован (или потенциально может даже не выполняться) для вашей «родной» цели, а для a11. С точки зрения этого наилучшие флаги для оптимизации в настоящее время для M1 (учитывая, что у clang пока нет конкретной цели M1) могут быть одной из целей для ближайших продуктов ipad или iphone.3. Ближайшим вариантом для использования на момент написания является
-mcpu=lightning
, который оптимизирует для A13, что дает компилятору доступ к инструкциям ARMv8.4-A.
Ответ №4:
В Clang 15 -march=native
теперь существует для Apple M1 (я лично его использую).