python код на порядок быстрее, чем скомпилированный C код для простого оператора импорта - PullRequest
0 голосов
/ 18 апреля 2020

Я озадачен разницей в производительности следующих двух семантически эквивалентных (?) Программ.

Python:

#test.py
import time
starttime=time.time()
import tensorflow 
print(f"Import took: {time.time() - starttime}")

C с использованием CPython

//test.c
#include <Python.h>
#include <stdio.h> 
#include <time.h> 
int main(int argc, char *argv[])
{
    Py_Initialize();
    clock_t t = clock();
    PyObject* pModule = PyImport_ImportModule("tensorflow");
    double time_taken = ((double)clock() - t)/CLOCKS_PER_SEC;
    printf("Import took:  %f\n", time_taken);
    return 0;
}

Теперь сравните их:

cl.exe /I"C:\Program Files\Python37\include" test.c
link test.obj python37.lib /LIBPATH:"C:\Program Files\Python37\libs"
.\test.exe

2020-04-17 13: 00: 51.598550: W tensflowflow / stream_executor / platform / default / dso_loader. cc: 55] Не удалось загрузить динамическую c библиотеку 'cudart64_100.dll'; dlerror: cudart64_100.dll не найден.

Импорт занял: 23.160523891448975

python test.py

2020-04-17 13: 01: 19.525648: W tenorflow / stream_executor / platform / default /dso_loader.cc:55] Не удалось загрузить Dynami c библиотека 'cudart64_100.dll'; dlerror: cudart64_100.dll не найден.

Импорт занял: 2.3172824382781982

Не то, чтобы это имело большое значение, но моя версия тензорного потока равна 1.15 Почему код виртуальной машины python намного быстрее, чем скомпилированный CPython код? python vm добавляет магию c, которую PyImport_ImportModule не делает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...