나는 이것에 관해 읽고 있었으며 그 숫자는 합쳐지지 않았습니다.std :: chrono가 정확한 클럭 해상도/주파수를 제공하지 않는 것 같습니다.
LARGE_INTEGER largeInt; // Basically a struct/union containing a long long
QueryPerformanceFrequency(&largeInt);
// largeInt now holds the frequency of my system's clock, it's 3903987
// This ends up being a resolution of about 256 nanoseconds
모든 좋은,하지만 지금은 같은 세부 사항을 확인하기 위해 표준 : 크로노를 사용하려면 : 내 운영 체제 (Windows)에서,이 같은 시스템 클럭의 해상도를 확인할 수 있습니다. cppreference.com과이 사이트에 대한 대중적인 대답에 따르면 std :: chrono 시계의 기간은 틱 사이에 몇 초가 있는지를 지정하는 분자와 분모로 구성된 컴파일 시간 비율입니다.
cppreference.com :
기간 : 틱 기간 ( 틱 당 초 iethe 수)
그리고 스택 오버플로 대답에서를 나타내는 표준 : 비율 :
최소 표시 가능 시간은 high_resolution_clock :: period :: num/입니다.high_resolution_clock :: period :: den 초. 당신은 다음과 같이 인쇄 할 수 있습니다 :
std::cout <<
(double)std::chrono::high_resolution_clock::period::num/
std::chrono::high_resolution_clock::period::den;
그래서 내가 시도 :
// On Windows the result is typedeffed as intmax_t, which is a typedef for a long long
intmax_t numerator = std::chrono::high_resolution_clock::period::num;
intmax_t denominator = std::chrono::high_resolution_clock::period::den;
// numerator is 1 and denominator is one billion, which would suggest a
// tick period of one nanosecond?
을 내 시스템의 시계가 하나 나노초 해결 할 수 설명 있었는지에 따르면? OS가 그렇게 생각하지 않는 것 같습니다. 나는 또한 내 시스템의 클록 주파수가 3903987이라는 것을 뒷받침하는 다른 도구를 시도해 보았 기 때문에 그보다 정밀한 해상도를 관리하는 방법을 알지 못했다.
high_resolution_clock :: is_steady 결과가 true이더라도 주파수가 CPU 전원 설정/부스트 모드로 변경되는지 여부는 확실하지 않습니다. 내 컴퓨터를 두 번 다시 시작하고 3903994 및 3903991의 빈도 카운터를 얻었으므로이 번호를 부팅 할 때마다 변경된 것으로 보입니다. 프로그램을 실행하기 시작하는 것과는 대조적으로 컴파일 타임에 시계를 계산하는 것이 이상적이지는 않습니다.
그래서 표준 해상도로 시스템 클럭의 실제 해상도/주파수를 얻는 방법이 있습니다 : : chrono?
이것은 프로세서 제조업체의 매뉴얼에서 읽어야하는 것으로, 소프트웨어를 통해 합리적인 정확성을 테스트 할 수있는 것은 아닙니다. 또한 현대 프로세서는 항상 빈도를 변경하므로 가치도 커집니다. – nwp
@nwp 그래서 안정적으로 일관된 시계 같은 건 없습니까? 나는 프로세서가 다른 속도로 작동한다는 것을 알고 있지만 계시 시스템에 관한 한 동일한 결과를주는 하드웨어 사이에는 표준이 없다는 것을 알고 있습니까? – Zebrafish
시계는 놀랍도록 복잡한 짐승입니다. 현재 시간을 정밀도로 얻을 수는 있지만 결과는 즉시 잘못됩니다. 당신은 실제로 무엇을 성취하고 싶습니까? 마이크로 벤치 마크? – nwp