)))) 크기 변수의 값을 변경하는 데 탐닉하는 것뿐입니다. 즉, ArraySize를 사용 하는 명목상의 첫 번째 방법이 이기는 것입니다.
위에 추가했습니다. 이러한 간단한 코드는 단순히 측정으로 테스트되지 않습니다. 많은 요인이 있습니다. 코드는 크기가 작습니다. 모두 프로세서 캐시에 들어가고, 코드는 프로세서에서 병렬 마이크로 명령으로 잘 분할되어야 합니다. 프로세서 파이프라인, 즉 레지스터는 데이터 프리페치에 의해 빠르게 로드됩니다.
글쎄, 아마도 rand()도 어딘가에 잘 캐시되기 시작했을 것입니다.
일반적으로 디버거 없이 여기에서 테스트하는 방법을 모릅니다. 적어도 여기에서는 명령의 실행 시간을 사이클 단위로 볼 수 있습니다.
Внешние функции, определенные в другом модуле, должны быть явно описаны. Описание включает в себя тип возвращаемого значения, имя функции и набор входных параметров с их типами. Отсутствие такого описания может привести к ошибкам при компиляции, компоновке или выполнении программы. При описании внешнего объекта используйте ключевое слово С...
루프 본문에서 배열의 크기를 변경하면 즉석 최적화가 더 이상 작동하지 않습니다.
따라서 코드를 변경하십시오.
)))) 크기 변수의 값을 변경하는 데 탐닉하는 것뿐입니다. 즉, ArraySize를 사용 하는 명목상의 첫 번째 방법이 이기는 것입니다.
글쎄, IMHO에 대해 나는 아무 말도 할 수 없습니다.
매우 큰 리플레이에서 승리는 첫 번째와 두 번째 방법에서 무작위가 되었습니다. 아마도 현재 순간의 프로세서 캐시와 총 부하에 따라 달라질 것입니다.
문제는 주기에 관한 것이 아니라 기능 해제에 관한 것이었습니다. 예를 들어 ArraySize
좋다) 고급 언어의 완성도는 편리한 표기가 편하지 않은 만큼 저렴하지만 처음에는 저렴할 때 드러난다. 이것이 항상 그런 것은 아니며 신규 이민자에 대한 도움이 항상 전혀 그렇지 않다는 것은 유감입니다 ..... 질문이 없을 것입니다)))
루프 본문에서 배열의 크기를 변경하면 즉석 최적화가 더 이상 작동하지 않습니다.
따라서 코드를 변경하십시오.
초과하지 않는다
런타임 최적화가 주도할 것입니다.
프로파일러 없이는 이러한 간단한 기계 명령을 테스트할 수 없습니다. 일반적으로 루프에서 원하는 대로 작성할 수 있습니다. 옵션으로 테스터에서 테스트할 수 있습니다. 속도가 중요합니다.
주기에 관한 것이 아니라 컴파일러가 함수를 어떻게 래핑하는지 ..... 뭐, 일반적으로.
나는 당신을 떠날 것입니다
)))) 크기 변수의 값을 변경하는 데 탐닉하는 것뿐입니다. 즉, ArraySize를 사용 하는 명목상의 첫 번째 방법이 이기는 것입니다.
위에 추가했습니다. 이러한 간단한 코드는 단순히 측정으로 테스트되지 않습니다. 많은 요인이 있습니다. 코드는 크기가 작습니다. 모두 프로세서 캐시에 들어가고, 코드는 프로세서에서 병렬 마이크로 명령으로 잘 분할되어야 합니다. 프로세서 파이프라인, 즉 레지스터는 데이터 프리페치에 의해 빠르게 로드됩니다.
글쎄, 아마도 rand()도 어딘가에 잘 캐시되기 시작했을 것입니다.
일반적으로 디버거 없이 여기에서 테스트하는 방법을 모릅니다. 적어도 여기에서는 명령의 실행 시간을 사이클 단위로 볼 수 있습니다.
그렇지 않으면 나를 증명해
그런 다음 내 테스트에서 어떤 이유로 든 동일합니다.
내 게시물을 변경했습니다.
반대로 ArraySize 는 이제 cnt 변수보다 빠르게 수행됩니다.
이전에는 그 반대였습니다. 아마도 증분 cnt-- 영향을 미치고 주기의 본체가 다르며 아마도 로드에 대해 다른 것이 발명되어야 할 것입니다.
뭔가 이상한.
루프 조건에서 ArraySize (arr)를 사용하면 cnt 변수를 사용하는 것보다 시간이 더 적게 표시됩니다.
예전에는 반대였습니다. 이것이 실수일 수 있습니까? 그러면 안됩니다.
당신은 당신의 가치가 될 당신의 코드에서 아무 것도 섞지 않았습니다.
cnt
첫 번째 옵션에서 발생하는 대로 변경
어떤 방법이 더 빠른지 500r(검증 없음)에 대한 질문입니다. 상위 메소드에서 얼마나 많은 외부 함수가 호출되는지 확인
테스트 옵션으로 - 각 테스트에 고유한 배열만 넣을 수도 있습니다(예: arr1, arr2 ..).
저것들. tst1_arr1[],tst1_arr2[] .... 및 tst2_arr1[],tst2_arr2[]가 됩니다.
더 정직한 테스트가 될 것입니다
나 꺼져있어 너무 산만 해 - IMHO, 편리해, 그것을 사용
일반적으로 디버거 없이 여기에서 테스트하는 방법을 모릅니다. 적어도 여기에서는 명령의 실행 시간을 사이클 단위로 볼 수 있습니다.
네, 디버거가 어디에도 없습니다. 그리고 거기 비트에서 ...
뭔가 이상한.
루프 조건에서 ArraySize (arr)를 사용하면 cnt 변수를 사용하는 것보다 시간이 더 적게 표시됩니다.
예전에는 반대였습니다. 이것이 실수일 수 있습니까? 그러면 안됩니다.
무작위 결과입니다. 컴파일할 때 배열 크기의 값으로 메모리 셀에 대한 접근이 풀리고 배열이 형성될 때 배열이 동적이더라도 배열의 크기를 미리 획득하여 메모리 셀에 배치합니다. 배열 크기와 변수 값이 있는 셀은 액세스 시간이 동일합니다.
글쎄, 컴퓨터 과학의 3-4 과정에서 컴파일러가하는 일이라는 문구로 판단하면 ... 일반적으로 충분히 필요한 수준의 인력이 MCL 환경에서 매우 긴장하지 않기를 바랍니다.