Как я получаю количество цикла ЦП в Win32?

триггер задания сборки:

опция 1: добавьте when: manual в задание, и вы можете запустить задание вручную в CI / CD> Конвейеры

[ 1114] вариант 2:

only:
    - <branchname>

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

вариант 3: [1115 ] не добавляйте ничего, и задание будет выполняться каждый раз, когда вы нажимаете код

Конечно, вы можете комбинировать перечисленные выше параметры.

Кроме того, можно пометить задание веб-запросом, используя маркер задания.

docker build команда будет работать в конвейере. Я думаю, в разделе сценария. Требования к докеру движка на gitlab-runner, которые выбирают работу.

Или мне нужно «скопировать» содержимое файла Dockerfile в файл CI?

нет

7
задан Community 23 May 2017 в 12:33
поделиться

5 ответов

Можно использовать инструкцию ЦП RDTSC (принимающий x86). Эта инструкция дает счетчик циклов ЦП, но знать, что это увеличится очень быстро до своего максимального значения и затем сбросит к 0. Как статья Wikipedia упоминает, Вы могли бы быть более обеспеченным использованием функции QueryPerformanceCounter.

8
ответ дан 6 December 2019 в 07:08
поделиться

Система. Диагностика. Секундомер. GetTimestamp () возвращают количество цикла ЦП начиная с источника времени (возможно, когда запуск компьютера, но я не уверен), и я никогда не видел его не увеличенный между 2 вызовами.

Циклы ЦП будут специфичны для каждого компьютера, таким образом, Вы не сможете использовать его для слияния файла журнала между 2 компьютерами.

2
ответ дан 6 December 2019 в 07:08
поделиться

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

Используйте системное время, и если контакт с подачей от нескольких систем использует источник времени NTP. Можно получить надежные, последовательные чтения времени тот путь; если издержки слишком много в Ваших целях, с помощью HPET, чтобы решить, что время протекло, так как прошлый известный надежный раз, читая лучше, чем использование один HPET.

2
ответ дан 6 December 2019 в 07:08
поделиться

Вот интересная статья! говорит, чтобы не использовать RDTSC, но вместо этого использовать QueryPerformanceCounter.

Заключение:

Используя старый регулярный timeGetTime() чтобы сделать синхронизация не надежна во многих операционных системах на базе Windows, потому что гранулярность системного таймера может быть целых 10-15 миллисекундами, означая это timeGetTime() только с точностью до 10-15 миллисекунд. [Обратите внимание, что высокие гранулярности происходят в основанных на NT операционных системах как Windows NT, 2000, и XP. Windows 95 и 98 имеет тенденцию иметь намного лучшую гранулярность, приблизительно 1-5 мс.]

Однако, если Вы звоните timeBeginPeriod(1) в начале Вашей программы (и timeEndPeriod(1) в конце), timeGetTime() будет обычно становиться с точностью до 1-2 миллисекунд и предоставит Вам чрезвычайно точную информацию синхронизации.

Sleep() ведет себя так же; отрезок времени это Sleep() на самом деле сны для идут рука об руку с гранулярностью timeGetTime(), таким образом, после вызова timeBeginPeriod(1) однажды, Sleep(1) будет на самом деле спать для 1-2 миллисекунд,Sleep(2) для 2-3, и так далее (вместо того, чтобы спать в инкрементах целых 10-15 мс).

Для более высокой синхронизации точности (точность подмиллисекунды), Вы, вероятно, захотите избегать использования мнемосхемы блока RDTSC, потому что трудно калибровать; вместо этого, используйте QueryPerformanceFrequency и QueryPerformanceCounter, которые являются с точностью до меньше чем 10 микросекунд (0,00001 секунды).

Для простой синхронизации и timeGetTime и QueryPerformanceCounter работают хорошо, и QueryPerformanceCounter, очевидно, более точен. Однако, если необходимо сделать какой-либо вид "синхронизированных пауз" (таких как необходимые для framerate, ограничивающего), необходимо остерегаться нахождения в вызове цикла QueryPerformanceCounter, ожидающий его для достижения определенного значения; это съест выше на 100% Вашего процессора. Вместо этого рассмотрите гибридную схему, где Вы звоните, Сон (1) (не забывайте timeBeginPeriod (1) сначала!) каждый раз, когда необходимо передать больше чем 1 мс времени и затем только ввести цикл QueryPerformanceCounter 100%-busy для завершения последнего <1/1000-й из секунды задержки, Вам нужно. Это даст Вам ультраточные задержки (с точностью до 10 микросекунд) с очень минимальным использованием ЦП. См. код выше.

12
ответ дан 6 December 2019 в 07:08
поделиться

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

1
ответ дан 6 December 2019 в 07:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: