Pergunta

Eu tento medir os cyles relógio necessários para executar um pedaço de código no TMS32064x + DSP que vem com o OMAP ZOOM 3430 MDK. Eu olho para o "Guia do Programador" do chip DSP e ele diz que o DSP suporta a função de relógio ().

O que faço é muito simples, eu só faço

start = clock();
for (i=0;i<100;i++){
    /* do something here */
}
stop = clock();
total = stop - start;

e, em seguida, colocar os valores de "start", "stop" e "total" de uma memória compartilhada previamente alocado com o processador ARM. Então, eu simplesmente imprimi-lo para a tela ao lado da ARM.

O problema é que em meus primeiros executa, eu sempre chegar ao mesmo valor "total", e depois nas minhas próximas corridas Eu sempre obter 0! O "start" e valores "Stop" ir junto com o valor "total".

A coisa mais estranha é que eles parecem seguir um padrão de bits! Eu coloquei a saída abaixo:

# ./sampleapp
Total = 63744
Start clock() value = 0x000000f9
Stop  clock() value = 0x0000f9f9
# ./sampleapp 
Total = 4177526784
Start clock() value = 0x00f9f9f9
Stop  clock() value = 0xf9f9f9f9
# ./sampleapp
Total clock cyles = 0
Start clock() value = 0xf9f9f9f9
Stop  clock() value = 0xf9f9f9f9

Aparentemente, relógio () não está funcionando bem, mas eu não tenho certeza se isso é por causa de algo que eu faço errado ou porque este tipo de coisa não é compatível com o hardware que eu tenho. Alguma idéia por que isso pode estar acontecendo?

Foi útil?

Solução

De lendo as perguntas até agora, eu diria que o poster original tem substancialmente mais conhecimento sobre este assunto do que os contribuintes até agora, e que a suspeita de que o relógio () é quebrado (ou não suportado, e retorna um indefinido resultado) na DSP parece bastante provável.

Outras dicas

Curiosamente, Por que você precisar de um previamente alocado memória compartilhada . Por que não tentar com uma variável de pilha normal? Existe alguma coisa que eu estou ausente?

Talvez você precisa para inicializar o relógio pela primeira vez.

Como você imprimi-lo? talvez o problema é realmente com exibindo o resultado?

na maioria das plataformas clock_t é um longo tempo. Se você estiver usando printf com% d que você pode obter resultados variáveis ??que é o que você está vendo.

Assumindo o início e variável final são do tipo 'clock_t', e sua memória compartilhada assume o mesmo na interpretação da outra extremidade dos números passados, então o problema não é com a chamada para o relógio, e seu handleing da diferença entre o fim dos tempos final da partida.

Eu acredito que o problema está na memória compartilhada entre os dois. Você pode por favor código postal para mostrar como você está memória partilha entre dois processadores separados?

Talvez você poderia usar alguma linha de montagem para acessar registros de contador do CPU diretamente.

O TMS320C64x + tem um registo de 64 bits timestamp em TsCl, tsch. O contador não está habilitado no reset, você deve primeiro gravação para o registro para iniciar o contador (talvez este é o problema com clock?). Leitura do registo não é bastante trivial como cada metade deve ser lido com uma instrução separada (e você pode obter interrupções ...).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top