Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Общие темы > Болтовня

Болтовня Разговоры на любые темы (думайте, о чем пишите)

Ответ
 
Опции темы
Старый 15.11.2016, 17:44   #1
DarkInside
Разработчик
 
Аватар для DarkInside
 
Регистрация: 08.08.2011
Сообщений: 505
Написано 191 полезных сообщений
(для 369 пользователей)
Скорость вызова DLL

Зависит ли от количества функций в DLL и насколько зависит?
(Offline)
 
Ответить с цитированием
Старый 15.11.2016, 21:44   #2
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,355
Написано 2,471 полезных сообщений
(для 6,852 пользователей)
Ответ: Скорость вызова DLL

Зависит на сто процентнов.

А если серьёзно, то попробуй описать возникшую проблему, вместо таких абстрактных вопросов.
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
(Offline)
 
Ответить с цитированием
Старый 15.11.2016, 21:55   #3
DarkInside
Разработчик
 
Аватар для DarkInside
 
Регистрация: 08.08.2011
Сообщений: 505
Написано 191 полезных сообщений
(для 369 пользователей)
Ответ: Скорость вызова DLL

Ну, дело обстоит таким образом. Мне нужно быстрое вычисление площади многоугольников. Начал копать в сторону вычислений на шейдерах. Нашел на PureBasic отличную библиотеку GPUCalc, да и на CUDA там есть примеры. Всё понятно, всё по полочкам (в отличие от того же PyOpenCL на питоне, в котором еще разбираться надо пол года). Хочу собрать это всё в DLL и подцепить к блицу. Ну и заодно вычисления на double запихать в эту либу. (Потестил double в х64 PureBasic на возведениях в степени и извлечение корней - в 10 раз быстрее, чем в блице, это еще я один поток задействовал, сейчас разбираюсь с остальными 7-ю). Так вот собственно не хотелось бы терять производительность на обмене с DLL.
- Получается, чем меньше функций в одной DLL, тем лучше? То есть лучше их разбить на несколько или всё в одну DLL запихать?
- Что быстрее decls или CallDll? Или без разницы?
- Если я DLL из ОЗУ буду считывать, будет сокращение задержек на чтение? или SSD в принципе не является узким местом?
(Offline)
 
Ответить с цитированием
Старый 15.11.2016, 21:57   #4
mr.DIMAS
Дэвелопер
 
Аватар для mr.DIMAS
 
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений
(для 1,540 пользователей)
Ответ: Скорость вызова DLL

дллка загружается в адресное пространство приложения и следовательно скорость загрузки зависит от количества функций

upd. скорость вызова функций не зависит от их количества в длл
__________________

(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
DarkInside (15.11.2016)
Старый 15.11.2016, 22:31   #5
DarkInside
Разработчик
 
Аватар для DarkInside
 
Регистрация: 08.08.2011
Сообщений: 505
Написано 191 полезных сообщений
(для 369 пользователей)
Ответ: Скорость вызова DLL

дллка загружается в адресное пространство приложения
То есть она польностью загружается при первом вызове любой функции? Это через decls? А через CallDLL что меняется? То есть нет смысла её сначала грузить в ОЗУ и потом оттуда считывать функции? Я просто думал при каждом вызове функции прога обращается к файлу DLL.
(Offline)
 
Ответить с цитированием
Старый 15.11.2016, 22:43   #6
mr.DIMAS
Дэвелопер
 
Аватар для mr.DIMAS
 
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений
(для 1,540 пользователей)
Ответ: Скорость вызова DLL

Не при первом вызове, а при вызове LoadLibrary WinAPI. Либо при загрузке виндой экзешника с прилинкованной дллкой. Деклсы блица это и есть неявный вызов LoadLibrary c кучей GetProcAddress. CallDLL скорее всего позволяет делать все ручками.
__________________

(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
DarkInside (15.11.2016)
Старый 15.11.2016, 23:35   #7
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: Скорость вызова DLL

Загрузка DLL может быть статической, а может - динамической.
Статическая (она же "неявное подключение"): загрузка dll происходит при загрузке exe; для сборки приложения компоновщику необходима библиотека импорта. (Аналог в блитце - decls-файл.) (например, так реализуется работа с MAT-файлами.)
Динамическая: для загрузки нужна только dll; используются API-функции ОС (типа, LoadLibrary, GetProcAddress, FreeLibrary); загрузка происходит с использованием имён функций. (Аналог в блитце - CallDLL.)

В зависимости от ситуации, удобно то одно, то другое.

Ну, в общем, это mr.DIMAS и сказал.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
DarkInside (15.11.2016)
Старый 15.11.2016, 23:45   #8
DarkInside
Разработчик
 
Аватар для DarkInside
 
Регистрация: 08.08.2011
Сообщений: 505
Написано 191 полезных сообщений
(для 369 пользователей)
Ответ: Скорость вызова DLL

Удобно то понятно. Потери скорости где меньше?

Тут оказывается даже если вынести код в функцию (в блице), уже теряется 4% производительности на вызов этой функции. А если функция обращается к другой функции, то уже 8% ... и тд. Сколько будет теряться на DLL?

Вот это: d# = Exp(0.37*Log(d#)) на 4% быстрее, чем вот это:

d# = sqrt#(d#, 0.37)

Function sqrt#(a#, n#)
	Return Exp(n#*Log(a#))
End Function
Кстати, такое извлечение корня у меня на 10% быстрее, чем d# = 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 ПО для обработки данных с коллайдера на фортране.
(Offline)
 
Ответить с цитированием
Старый 16.11.2016, 00:13   #9
mr.DIMAS
Дэвелопер
 
Аватар для mr.DIMAS
 
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений
(для 1,540 пользователей)
Ответ: Скорость вызова DLL

Вот поэтому критические по скорости приложения и пишут на C\C++
__________________

(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
impersonalis (16.11.2016)
Старый 16.11.2016, 00:21   #10
DarkInside
Разработчик
 
Аватар для DarkInside
 
Регистрация: 08.08.2011
Сообщений: 505
Написано 191 полезных сообщений
(для 369 пользователей)
Ответ: Скорость вызова DLL

Да, но пока я выучу и напишу программу на С\C++, программа на PB уже всё посчитает. Да и не думаю, что PB сильно отстает от C, ну может раза в 2. Тут тоже компилятор х64 хорошо оптимизирован.

Например, вот такие вещи он не будет обрабатывать:

For i = 1 to 10000000
v.d = Pow(v.d, 2)
v.d = Pow(v.d, 0.5)
Next
Тк понимает, что это обратная операция и ни к чему она не приведет.

Производительность - это не к языку вопрос, а к компилятору.


Мда... FreeBasic быстрее, чем PureBasic в 4 раза, то есть в 40 раз быстрее, чем блиц. В папке с FreeBasic лежит gcc.exe, но в википедии написано, что у него свой компилятор.

Скоро до Фортрана доберусь...

Вот чем мне нравятся бейсики: открыл, написал, даже не заглядывая в хелп и запустилось, минут 15 у меня ушло на освоение нового бейсика - тупо чтоб найти функцию системного времени. На питон 2 дня только пытался установить модуль. Кстати, надо на нем тоже потестировать, но имхо он медленный.

Dim TimerStart As Single = Timer()

Dim d As Double = 3324325235.534534

For i As Integer = 0 To 100000000
d = d ^ 0.37
Next

Print Timer() - TimerStart
Sleep
(Offline)
 
Ответить с цитированием
Старый 16.11.2016, 06:33   #11
Nex
Гигант индустрии
 
Аватар для Nex
 
Регистрация: 13.09.2008
Сообщений: 2,893
Написано 1,185 полезных сообщений
(для 3,298 пользователей)
Ответ: Скорость вызова DLL

Сообщение от DarkInside Посмотреть сообщение
Вот чем мне нравятся бейсики: открыл, написал, даже не заглядывая в хелп и запустилось
Открой уже VS с C#. Тот же бейсик если не использовать всякие ооп штуки. Можно даже в дань традициям написать всё в одном главном файле на массивах. И скорость работы будет больше, меньше вопросов по уже не актуальным ЯП и в интернете будут ответы на все вопросы.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Кирпи4 (16.11.2016)
Старый 16.11.2016, 07:41   #12
DarkInside
Разработчик
 
Аватар для DarkInside
 
Регистрация: 08.08.2011
Сообщений: 505
Написано 191 полезных сообщений
(для 369 пользователей)
Ответ: Скорость вызова DLL

C# медленный, .net же, не могу представить, для чего он мне. Кстати, PB на хабре называют "си-подобным бейсиком". Зная PB, можно перейти на С. Но опять же на PB я уже почти разобрался с вычислениями на GLSL и мне всего лишь надо всё оформить. А вычисления на CPU в PB, конечно, чуть медленнее, чем на C, но FreeBasic в 4 раза быстрее PB, а значит где-то на уровне GCC С++. И потоки на FB тоже из коробки и удобно реализованы. Вставки Си, вставки Asm, строки Си, библиотеки Си - всё это есть на FB. То есть смысл сейчас заморачиваться и разбираться в Сях, для того, чтобы написать библиотеку на 100 строчек, когда всё уже готово и разжевано? Когда-нибудь в другой раз, когда задача будет посерьезнее.

И да, сообщество FB реально озабочено производительностью, поэтому он не может быть медленным. У них подход следующий: многие быстрые функции стырены из библиотеки Си (например, возведение в степень поэтому такое быстрое), потом сообщество пилят на ASM'e свои функции в попытках обогнать Си, получается, конечно, редко, но всё же. Я его и отрыл то, когда гуглил быстрые строковые алгоритмы.

Sub ONE(param As Any Ptr)
Dim a As Integer
Do
a+=1
View Print 1 To 2
Print "thread One, a=";a
Sleep(70)
If a=100 Then Exit Do
Loop
Print "Thread ONE ended "
End Sub
Sub TWO(param As Any Ptr)
Dim a As Integer
Do
a+=1
View Print 3 To 4
Print "thread TWO, a=";a
Sleep(50)
If a=100 Then Exit Do
Loop
View Print 3 To 4
Print "Thread TWO ended "
End Sub

Threadcreate(@ONE())
Threadcreate(@TWO())
Sleep


(Offline)
 
Ответить с цитированием
Старый 16.11.2016, 21:37   #13
h1dd3n
Бывалый
 
Аватар для h1dd3n
 
Регистрация: 19.06.2008
Сообщений: 679
Написано 264 полезных сообщений
(для 450 пользователей)
Ответ: Скорость вызова DLL

Ocaml такой крутой что в 1 рейтинге занял 1 и 3 позицию одновременно? Вот это он молодец!
__________________
(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо h1dd3n за это полезное сообщение:
Кирпи4 (19.11.2016), Randomize (16.11.2016), St_AnGer (17.11.2016)
Старый 17.11.2016, 01:54   #14
DarkInside
Разработчик
 
Аватар для DarkInside
 
Регистрация: 08.08.2011
Сообщений: 505
Написано 191 полезных сообщений
(для 369 пользователей)
Ответ: Скорость вызова DLL

Ocaml из коробки предлагает на выбор, что делать с кодом:
a) интерпретировать
b) компилировать в машинный код
c) компилировать в байт-код
d) выкинуть нахер и забыть как страшный сон

Очевидно, что на первом месте компилятор, на третьем - интерпретатор. http://www.ibm.com/developerworks/ru...8_2/index.html
(Offline)
 
Ответить с цитированием
Старый 17.11.2016, 20:15   #15
h1dd3n
Бывалый
 
Аватар для h1dd3n
 
Регистрация: 19.06.2008
Сообщений: 679
Написано 264 полезных сообщений
(для 450 пользователей)
Ответ: Скорость вызова DLL

Это был намек на то что данный рейтинг херня полная.
Java и Scala оба компилируются в байткод jvm, и оптимизации к ним потом применяются абсолютно одинаковые. JIT компилятор jvm (java/scala) надо "прогреть", только тогда будут применены оптимизации. Сравнивать скорость языков/платформ по сраному рекурсивному фибоначи может только конченный рукожоп.
__________________
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 20:47.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com