![]() |
Скорость вызова DLL
Зависит ли от количества функций в DLL и насколько зависит?
|
Ответ: Скорость вызова DLL
Зависит на сто процентнов.
А если серьёзно, то попробуй описать возникшую проблему, вместо таких абстрактных вопросов. |
Ответ: Скорость вызова DLL
Ну, дело обстоит таким образом. Мне нужно быстрое вычисление площади многоугольников. Начал копать в сторону вычислений на шейдерах. Нашел на PureBasic отличную библиотеку GPUCalc, да и на CUDA там есть примеры. Всё понятно, всё по полочкам (в отличие от того же PyOpenCL на питоне, в котором еще разбираться надо пол года). Хочу собрать это всё в DLL и подцепить к блицу. Ну и заодно вычисления на double запихать в эту либу. (Потестил double в х64 PureBasic на возведениях в степени и извлечение корней - в 10 раз быстрее, чем в блице, это еще я один поток задействовал, сейчас разбираюсь с остальными 7-ю). Так вот собственно не хотелось бы терять производительность на обмене с DLL.
- Получается, чем меньше функций в одной DLL, тем лучше? То есть лучше их разбить на несколько или всё в одну DLL запихать? - Что быстрее decls или CallDll? Или без разницы? - Если я DLL из ОЗУ буду считывать, будет сокращение задержек на чтение? или SSD в принципе не является узким местом? |
Ответ: Скорость вызова DLL
дллка загружается в адресное пространство приложения и следовательно скорость загрузки зависит от количества функций
upd. скорость вызова функций не зависит от их количества в длл |
Ответ: Скорость вызова DLL
Цитата:
|
Ответ: Скорость вызова DLL
Не при первом вызове, а при вызове LoadLibrary WinAPI. Либо при загрузке виндой экзешника с прилинкованной дллкой. Деклсы блица это и есть неявный вызов LoadLibrary c кучей GetProcAddress. CallDLL скорее всего позволяет делать все ручками.
|
Ответ: Скорость вызова DLL
Загрузка DLL может быть статической, а может - динамической.
Статическая (она же "неявное подключение"): загрузка dll происходит при загрузке exe; для сборки приложения компоновщику необходима библиотека импорта. (Аналог в блитце - decls-файл.) (например, так реализуется работа с MAT-файлами.) Динамическая: для загрузки нужна только dll; используются API-функции ОС (типа, LoadLibrary, GetProcAddress, FreeLibrary); загрузка происходит с использованием имён функций. (Аналог в блитце - CallDLL.) В зависимости от ситуации, удобно то одно, то другое. Ну, в общем, это mr.DIMAS и сказал. |
Ответ: Скорость вызова DLL
Удобно то понятно. Потери скорости где меньше?
Тут оказывается даже если вынести код в функцию (в блице), уже теряется 4% производительности на вызов этой функции. А если функция обращается к другой функции, то уже 8% ... и тд. Сколько будет теряться на DLL? Вот это: d# = Exp(0.37*Log(d#)) на 4% быстрее, чем вот это: Код:
d# = sqrt#(d#, 0.37) А в PB извлечение корня по модулю: Pow(d.d, 0.37) наоборот в 1.5 - 2 раза быстрее, чем Exp(0.37*Log(d.d)). Ну и в 10 раз быстрее, чем в блице. Ну и точность double. Боюсь предположить, насколько быстр Intel® Fortran Composer XE. Поговаривают, он обходит GCC (С/C++) процентов на 40. И в Cern ПО для обработки данных с коллайдера на фортране. |
Ответ: Скорость вызова DLL
Вот поэтому критические по скорости приложения и пишут на C\C++
|
Ответ: Скорость вызова DLL
Мда... FreeBasic быстрее, чем PureBasic в 4 раза, то есть в 40 раз быстрее, чем блиц. В папке с FreeBasic лежит gcc.exe, но в википедии написано, что у него свой компилятор. Скоро до Фортрана доберусь... Вот чем мне нравятся бейсики: открыл, написал, даже не заглядывая в хелп и запустилось, минут 15 у меня ушло на освоение нового бейсика - тупо чтоб найти функцию системного времени. На питон 2 дня только пытался установить модуль. Кстати, надо на нем тоже потестировать, но имхо он медленный. Цитата:
|
Ответ: Скорость вызова DLL
|
Ответ: Скорость вызова DLL
C# медленный, .net же, не могу представить, для чего он мне. Кстати, PB на хабре называют "си-подобным бейсиком". Зная PB, можно перейти на С. Но опять же на PB я уже почти разобрался с вычислениями на GLSL и мне всего лишь надо всё оформить. А вычисления на CPU в PB, конечно, чуть медленнее, чем на C, но FreeBasic в 4 раза быстрее PB, а значит где-то на уровне GCC С++. И потоки на FB тоже из коробки и удобно реализованы. Вставки Си, вставки Asm, строки Си, библиотеки Си - всё это есть на FB. То есть смысл сейчас заморачиваться и разбираться в Сях, для того, чтобы написать библиотеку на 100 строчек, когда всё уже готово и разжевано? Когда-нибудь в другой раз, когда задача будет посерьезнее. :)
И да, сообщество FB реально озабочено производительностью, поэтому он не может быть медленным. У них подход следующий: многие быстрые функции стырены из библиотеки Си (например, возведение в степень поэтому такое быстрое), потом сообщество пилят на ASM'e свои функции в попытках обогнать Си, получается, конечно, редко, но всё же. Я его и отрыл то, когда гуглил быстрые строковые алгоритмы. ![]() |
Ответ: Скорость вызова DLL
Ocaml такой крутой что в 1 рейтинге занял 1 и 3 позицию одновременно? Вот это он молодец!
|
Ответ: Скорость вызова DLL
Ocaml из коробки предлагает на выбор, что делать с кодом:
a) интерпретировать b) компилировать в машинный код c) компилировать в байт-код d) выкинуть нахер и забыть как страшный сон Очевидно, что на первом месте компилятор, на третьем - интерпретатор. http://www.ibm.com/developerworks/ru...8_2/index.html |
Ответ: Скорость вызова DLL
Это был намек на то что данный рейтинг херня полная.
Java и Scala оба компилируются в байткод jvm, и оптимизации к ним потом применяются абсолютно одинаковые. JIT компилятор jvm (java/scala) надо "прогреть", только тогда будут применены оптимизации. Сравнивать скорость языков/платформ по сраному рекурсивному фибоначи может только конченный рукожоп. |
Часовой пояс GMT +4, время: 01:20. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot