Tali & Plus
Plus Plus
Привет, Тали, готова к соревнованию по скоростному кодированию? Представь, нужно оптимизировать игровой цикл так, чтобы он работал плавнее, чем рывок на финише — давай посмотрим, кто быстрее сможет сэкономить миллисекунды!
Tali Tali
Конечно! Погнали на трек и выкладывай свои миксы, разгоняй луп как спринт, посмотрим, кто быстрее всех сделает. Готов к гонке?
Plus Plus
Давай притормозим с болтовней и дави на газ! Я уже на пике, просто скажи, куда едем, и мы эту трассу выжмем как профи. Готова включать и смотреть, как секунды пролетают?
Tali Tali
Кинь сюда код цикла, и начинаем! Пора выжимать последние миллисекунды и выиграть эту гонку!
Plus Plus
Вот тебе быстрый и эффективный цикл на C++, который легко оптимизировать с флагом -O3. Просто скопируй, вставь и смотри, как падают миллисекунды: #include <chrono> #include <iostream> int main() { const int N = 100000000; volatile long long sum = 0; auto start = std::chrono::high_resolution_clock::now(); for (int i = 0; i < N; ++i) sum += i; // core work auto end = std::chrono::high_resolution_clock::now(); std::chrono::duration<double> diff = end - start; std::cout << "Time: " << diff.count() << " s\n"; } Скомпилируй командой `g++ -O3 -march=native loop.cpp -o loop` и запусти. Если хочешь немного подкрутить, разверни цикл или используй SIMD-инструкции, но это даст тебе хорошую отправную точку. Посмотрим, как заставим эти миллисекунды просто исчезнуть!
Tali Tali
Отличный выстрел! Давай запускать — разверни этот цикл, добавь SIMD-трюк и посмотрим, как миллисекунды улетучатся. Готов посмотреть, кто быстрее закончит?
Plus Plus
Конечно, давай запустим! Вот быстро написанная версия на C++ (AVX2), готовая к работе: ```cpp #include <immintrin.h> #include <chrono> #include <iostream> int main() { const int N = 100000000; const int stride = 8; // 8 ints per AVX2 vector __m256i vecSum = _mm256_setzero_si256(); auto start = std::chrono::high_resolution_clock::now(); for (int i = 0; i < N; i += stride) { __m256i vec = _mm256_set_epi32(i+7,i+6,i+5,i+4,i+3,i+2,i+1,i); vecSum = _mm256_add_epi32(vecSum, vec); } // horizontal add int tmp[8]; _mm256_storeu_si256((__m256i*)tmp, vecSum); long long sum = 0; for (int j = 0; j < 8; ++j) sum += tmp[j]; auto end = std::chrono::high_resolution_clock::now(); std::chrono::duration<double> diff = end - start; std::cout << "Time: " << diff.count() << " s\n"; } ``` Скомпилируй так: `g++ -O3 -march=native -mavx2 simd_loop.cpp -o simd_loop`. Запускай и посмотрим, как секунды сбегут — кто быстрее придет к финишу, тот и похвастается!
Tali Tali
Давай запустим и посмотрим, как эти мс упадут! Запускай, засекай время, кто меньше – тот и хвастается. Посмотрим, кто кого!