Анализ зависимости данных между функциями с callgraph с помощью vagrind

Я пытаюсь сделать многопоточное программирование для многоядерного процессора ARM. Я использую valgrind для профилирования. Я могу видеть из callgraph вызовов функций под главной функцией. Как интерпретировать зависимость данных между функциями? Две из моих функций ветвятся от основной функции, и я предположил, что это означает, что между ними нет зависимости данных и может работать параллельно, но это не так. Может ли кто-то объяснить на примере или где об этом знать?

1 ответ

  1. Callgrind (и его инструмент визуализации kcachegrind) не показывают, какая часть вашей программы может выполняться параллельно.
    Callgrind-это профилировщик: он показывает, какая часть вашей программы потребляет
    CPU, или делает много пропусков кэша, или …
    kcachegrind визуализирует график вызовов для отображения этого потребления.
    Если вы видите стрелку между главной и другими функциями, это просто означает, что
    main вызвала эти функции.

    Я не знаю инструмент, который анализирует программу и определяет, что может работать
    параллельно.

    Valgrind, однако, имеет 2 инструмента, которые могут определить условия гонки в многопоточном
    программа. После распараллеливания алгоритма эти инструменты могут обнаруживать ошибки (например, незащищенный доступ к общим переменным).