Отладочная сборка (эмуляция x86_64) быстрее, чем выпуск (родная версия Arm64) на MacBook M4.C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Отладочная сборка (эмуляция x86_64) быстрее, чем выпуск (родная версия Arm64) на MacBook M4.

Сообщение Anonymous »

Я написал небольшую программу для университетского задания и получил неожиданный результат: конфигурация Debug работает быстрее, чем Release, а код, скомпилированный для x86_64 (эмулируемый), работает быстрее, чем родная сборка Arm64.
Система
  • MacBook M4
  • 12 ядер
  • 24 ГБ ОЗУ
Я собирал проект в CLion и пробовал разные компиляторы — результат тот же.
Использовались параметры CMake

Код: Выделить всё

DebugX86:  -DCMAKE_OSX_ARCHITECTURES=x86_64 -DCMAKE_BUILD_TYPE=Debug
ReleaseX86: -DCMAKE_OSX_ARCHITECTURES=x86_64 -DCMAKE_BUILD_TYPE=Release
DebugARM:  -DCMAKE_BUILD_TYPE=Debug
ReleaseARM: -DCMAKE_BUILD_TYPE=Release
Исходный код

Код: Выделить всё

// Parameters
long long counter;
int val = 1;
#define NUMBER 10000000001ll

void fun1(int a, long long start, long long stop, long long *pcounter) {
volatile long long count = 0; // volatile so it is not completely optimized away
for (long long i = start; i < stop; ++i) {
if (i & 1) count -= a;
else count += a;
}
*pcounter = count;
}

double test1(void) {
auto t0 = std::chrono::high_resolution_clock::now();
long long cnt1 = 0;
fun1(val, 0, NUMBER, &cnt1);
counter = cnt1;
auto t1 = std::chrono::high_resolution_clock::now();
double ms = std::chrono::duration_cast(t1 - t0).count();
return ms;
}

int main(int argc, char** argv) {
std::cout 

Подробнее здесь: [url]https://stackoverflow.com/questions/79860852/debug-build-x86-64-emulation-faster-than-release-native-arm64-on-macbook-m4[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»