0

ARM プロセッサでアプリケーションのプロファイリングを行いたいと考えています。oprofile が機能しないことがわかりました。数年前、誰かが次のコードを使用してテストしました。巡回カウンターは機能しますが、パフォーマンス モニター カウンターはまだ機能しません。もう一度テストしましたが、同じです。次のコードでは、サイクル カウント: 2109、パフォーマンス モニター カウント: 0 を取得しました。Google で検索しましたが、これまでのところ、解決策が見つかりませんでした。誰かがこの問題を修正しましたか?

    uint32_t value = 0
    uint32_t count = 0;
    struct timeval tv;
    struct timezone tz;

    // enable all counters
    __asm__ __volatile__ ("mcr p15, 0, %0, c9, c12, 1" ::"r" (0x8000000f));

    // select counter 0,
    __asm__ __volatile__("mcr p15, 0, %0, c9, c12, 5" ::"r" (0x0));
    // select event
    __asm__ __volatile__ ("mcr p15, 0, %0, c9, c13, 1" ::"r"(0x57));

    // reset all counters to ero and enable all counters
    __asm__ __volatile__ ("mrc p15, 0, %0, c9, c12, 0" : "=r" (value));
    value |= 0xF;
    __asm__ __volatile__ ("mcr p15, 0, %0, c9, c12, 0" :: "r" (value));

    gettimeofday(&tv, &tz);

    __asm__ __volatile__("mrc p15, 0, %0, c9, c13, 0" : "=r" (count));
    printf("cycle count: %d", count);

    __asm__ __volatile__ ("mrc P15, 0, %0, c9, c13, 2": "=r" (count));
    printf("performance monitor count: %d", count);
4

1 に答える 1