| Issue 5: | Выяснить, что быстрее: вызов функции через call или без него. | |
| 1 person starred this issue and may be notified of changes. | Back to list |
|
По результатам "исследования" выяснилось, что вызов без call ужасно медленный. Пример: усреднение через call 300*60000 занимает примерно 63-68 мсек\усреднение, а без него массив 300*6000 усредняет по 3.2 секунды.
Oct 19, 2011
Project Member
#1
valentin...@gmail.com
Cc:
lart...@gmail.com kainov.o...@gmail.com
Oct 21, 2011
Ну что сказать... Наверное, параллельная таки быстрее, потому что она параллельная. По памяти одинаково, т.к. задача одна и та же (Без call памяти больше, думаю, по тем же причинам, что и время). А насчет вызова без call написано тут http://software.intel.com/ru-ru/blogs/2011/09/22/array-building-blocks-2/ Вкратце: >Таким образом, если в приложении встречается вызов arbb::call(), ArBB берет на себя контроль над вычислениями, а по завершении контроль возвращается к самому приложению. Дальше идет специфика. «Фишка» ArBB наличии собственной среды исполнения, которая осуществляет динамическую компиляцию с оптимизацией под текущую платформу во время исполнения. Таким образом, первая фаза компиляции - это собственно компиляция С++ кода в исполняемый файл, а вторая - во время работы приложения. Для этого в составе ArBB runtime есть JIT (Just In Time) компилятор, генерирующий бинарный код для исполнения конкретной операции с учетом количества ядер, поддерживаемых процессором SIMD инструкций (SSE, AVX) и т.д.
Nov 18, 2011
Вставил новые результаты, точь-в-точь не сошлись, н отеперь отклонение не такое страшное. |
||||||||||