---
title: "Timestamp i millisekunder"
type: "forum-thread"
url: "https://www.webforum.nu/amne/c-cpp/146341-timestamp-i-millisekunder/page2"
topic: "C/C++"
topic_url: "https://www.webforum.nu/amne/c-cpp"
author: "Compusa"
published: "2006-05-02T14:16:11.000Z"
updated: "2006-05-12T05:31:53.000Z"
replies: 28
views: 1890
page: 2
pages: 2
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/c-cpp/146341-timestamp-i-millisekunder"
---

# Timestamp i millisekunder

_Sida 2 av 2._

## #21 — Compusa, 2006-05-07T21:48Z

Jag får följande kompileringsfel när jag försöker med Niklas exempel:
"Undefined reference to "\_rdtsc" samt "collect2: ld returned 1 exit status"

Läste mer om det exempel Niklas visade och det verkar bara gå på Pentium?

Jag kompilerar med ggc under cygwin.

Permalänk: https://www.webforum.nu/p/1811168

## #22 — niklas_s, 2006-05-08T00:06Z

Man måste ange en O-flagga, tex -O2. Annars får man ett fel.
Det är riktigt att det endast fungerar på pentium.

Permalänk: https://www.webforum.nu/p/1811643

## #23 — Compusa, 2006-05-08T07:09Z

Denna fungerar om man ändrar funktionen från extern till static....

```
#include <stdio.h>
#include <time.h>

static __inline__ unsigned long long int rdtsc() {
  unsigned long long int x;
  __asm__ volatile (".byte 0x0f, 0x31" : "=A" (x));
  return x;
}

int main(void) {
  unsigned long long t1, t2;
  t1 = rdtsc(); // Hämta clk från CPU.
  sleep(10); // Vänta 10 sekunder.
  t2 = rdtsc(); // Hämta clk från CPU.
  printf("=== Klockfrekvens: %G MHz ===\n", (double)((t2-t1)/1000)/10000);
}
```

Har dock fått ordning på min andra funktion, återkommer med mitt svar för eventuell förbättring.

Permalänk: https://www.webforum.nu/p/1811667

## #24 — Compusa, 2006-05-08T08:58Z

Så här ser koden ut på den lösning som jag tänkt bygga vidare. Hur tror du denna verkar Sang-drax?   :q 

```
#include <math.h>
#include <stdio.h>
#include <stdlib.h>

/* Assembler directive to execute the instruction
   rdtsc, read Time-Stamp Counter, should work
   in gcc at least. */

#define rdtsc(low,high) \
     __asm__ __volatile__("rdtsc" : "=a" (low), "=d" (high))

/* Start timer by calling timer_start(). Stop timer and get number
   of cycles by calling timer_finish(). */

static unsigned long long starttime = 0;

static inline unsigned long long rdtsc_read(void)
{
  unsigned long high, low;
  rdtsc(low,high);
  return ((unsigned long long)high << 32) | low;
}

void timer_start(void)
{
  starttime = rdtsc_read();
}

unsigned long long timer_finish(void)
{
  return rdtsc_read() - starttime;
}
```

Permalänk: https://www.webforum.nu/p/1811686

## #25 — Sang-drax, 2006-05-09T21:24Z

Jag har ingen aning om varför Niklas hade "extrern" framför metoden. Det verkar skumt.

Som jag sade tidigare bör du köra instruktionen "cpuid" innan varje rdtsc.

Permalänk: https://www.webforum.nu/p/1812705

## #26 — Compusa, 2006-05-09T21:32Z

Hur skulle det se ut i min kod? Osäker på hur man använder den.

Permalänk: https://www.webforum.nu/p/1812706

## #27 — niklas_s, 2006-05-10T12:32Z

Där jag hämtade koden var den "extern". Vill du gå till originalkällan så är det bara söka på "\__inline_\_ unsigned long long int rdtsc" i Google. Jag får 85 träffar på det. Från någon av dem är koden hämtad.

Permalänk: https://www.webforum.nu/p/1812857

## #28 — Sang-drax, 2006-05-11T20:37Z

> **niklas_s skrev:**
>
> Där jag hämtade koden var den "extern".

Saken är den att alla funktioner är "extern" som standard, så extern gör i detta fall ingenting.

Permalänk: https://www.webforum.nu/p/1813360

## #29 — Compusa, 2006-05-12T05:31Z

> **Sang-drax skrev:**
>
> Jag har ingen aning om varför Niklas hade "extrern" framför metoden. Det verkar skumt.
> 
> Som jag sade tidigare bör du köra instruktionen "cpuid" innan varje rdtsc.

Hur ska jag tiilväga för att göra detta i min kod?

Permalänk: https://www.webforum.nu/p/1813449

---

Tråden på webben: https://www.webforum.nu/amne/c-cpp/146341-timestamp-i-millisekunder/page2  
Föregående sida: https://www.webforum.nu/amne/c-cpp/146341-timestamp-i-millisekunder.md
