Надо было сделать бенчмарк для расчёта 256-точечного ДПФ на интеловском процессоре (сейчас у меня пень-4 3200 МГц с ГТ).
Взял Intel IPP v4.1 либу и на основе её примера сделал этот бенчмарк.
Для ДПФ использовал функцию ippsDFTFwd_RToPerm_16s_Sfs.
Бенчмарк заключается в измерении времени выполнения 10000 вызовов вышеназванной функции (в цикле).
Измерение времени я сначала сделал с использованием функций QueryPerformanceFrequency (выдаёт частоту проца в Герцах) и QueryPerformanceCounter (читает текущее значение внутреннего таймера-счётчика процессора). Последнюю функцию соответственно вызываю до цикла и после, потом считаю разницу и делю на частоту - получаю время выполнения.
В итоге получил время выполнения одного 256-точечного ДПФ = около 2 мкс.
Бенчмарк "пролетал" можно сказать мгновенно (ну, т.е. около 20 мс).
Потом в доке на либу наткнулся на аналогичные (как я сначала подумал) функции, которые можно было использовать тоже для измерения времени.
Это функции ippGetCpuFreqMhz и ippCoreGetCpuClocks. Алгоритм измерения оставил тот же самый (отличие только в формате вызовов этих функций).
В итоге запустив бенчмарк оказалось, что он выполняется где-то 2 секунды (вместо 20 мс)!!! Я охренел и заподозрил Интел в нехорошем.
Оказалось время съедается вызовами самих этих функций (скорее только ippCoreGetCpuClocks). Но при этом расчётное время выполнения одного 256-точечного ДПФ такое же. Получается, если я буду использовать эти фукции во многих местах, то могу лечь спать пока программа не закончится.
Что за х..ню Интел подсунул?
Кто-нибудь такое замечал?
Или ippCoreGetCpuClocks вовсе не эквивалент (по реализации) QueryPerformanceCounter?