MEX'i kullanarak derledikten sonra MATLAB olarak adlandırdığım C kodunu yazdım. Cı-kod içinde, aşağıdaki kodu kullanarak bir hesaplama parçası süresinin ölçülmesi:MATLAB'ın tic-toc & C'nin saat tutarsızlığı
clock_t begin, end;
double time_elapsed;
begin = clock();
/* do stuff... */
end = clock();
time_elapsed = (double) ((double) (end - begin)/(double) CLOCKS_PER_SEC);
Geçen zaman saniye cinsinden uygulama süresi olmalıdır.
Daha sonra time_elapsed
değerini MATLAB olarak çıkarıyorum (düzgün şekilde dışa aktarılır; kontrol ettim). Daha sonra MATLAB tarafı bu C işlevini (MEX'i kullanarak derledikten sonra) ve ben tic
ve toc
kullanarak yürütme süresini ölçüyorum. Tam bir saçmalık olduğu ortaya çıkınca, tc ve toc kullanarak hesapladığım zamanın 0.0011s (ortalama 500 çalışma, st. Dev 1.4e-4) iken, C kodu tarafından döndürülen süre 0.037'dir. ortalama 500 çalışma, st. dev. 0.0016).
- bütün fonksiyon için yürütme zamanı kodunun bir kısmı için yürütme zamanından daha düşüktür: İşte bir iki çok garip gerçekleri fark edebilirsiniz. Bu nedenle, MATLAB veya C ölçümleri kesinlikle yanlıştır.
- C kodunda ölçülen yürütme süreleri çok dağınık ve çok yüksek st. sapma (tik-toc için sadece% 13'e kıyasla varyasyon katsayısı% 44).
Bu zamanlayıcılarla neler oluyor?
Saatin çözünürlüğü nedir? 'Begin = clock()' ın, bir saat tiksinin gerçekleşmesinden hemen mı yoksa hemen mı sonra yürütüldüğünü nasıl bilebiliriz? Bu sonucu etkiler mi? Muhtemelen. –
@BoPersson Yani, 'clock() 'en çok bir kenarı kaçırabilir? –
Yani bir kene, sonucu etkileyecek kadar büyük olabilir. 18 ms. –