1 Востаннє редагувалося cheappi386 (31.05.2020 12:28:02)

Тема: Швидкість AVX2

Чи я правильно її вимірюю, чи може я щось не так зрозумів ?

#include <immintrin.h>
#include <iostream>
#include <conio.h>
#include <Windows.h>

void AVX2performance()
{
    __m256 evens = _mm256_set_ps(2.0, 4.0, 6.0, 8.0, 10.0, 12.0, 14.0, 16.0);
    __m256 odds = _mm256_set_ps(1.0, 3.0, 5.0, 7.0, 9.0, 11.0, 13.0, 15.0);

    __m256 result;
    LARGE_INTEGER start = { 0 }, end = { 0 }, freq = { 0 };
    QueryPerformanceCounter(&start);
    for (unsigned int i = 0; i < 0xFFFFFFFF; i++)
    {
        result = _mm256_sub_ps(evens, odds);
    }
    QueryPerformanceCounter(&end);
    QueryPerformanceFrequency(&freq);
    printf("time seconds: %lf\n", (end.QuadPart - start.QuadPart)/(double)freq.QuadPart);
}
int main()
{
    for (int i = 0; i < 10; i++)
    {
        printf("taking sample: %d,", i + 1);
        AVX2performance();
        printf("\n");
    }
    _getch();
}

vs2019, x64, підтримка AVX2 у кодегенерації увімкнута.

Подякували: ostap34PHP, leofun012

2

Re: Швидкість AVX2

як мінімум conio windows і getch зайві.
Нащо тобі функція, що нічого не повертає?

3 Востаннє редагувалося koala (31.05.2020 15:56:42)

Re: Швидкість AVX2

О, фахівець з оператора enum намалювався.

ur_naz написав:

як мінімум conio windows і getch зайві.

Звісно, ви спробували скомпілювати код, перед тим як робити такі безапеляційні заяви? Гадаю, ні, бо інакше б помітили, що QueryPerformanceCounter - функція з <windows.h>

ur_naz написав:

Нащо тобі функція, що нічого не повертає?

Знаєте, ціле ключове слово придумали для таких функцій - void. І нащо? Мабуть, просто тупі були розробники мови C. Не те, що наші форумські генії. Якщо хочете буквальну відповідь на ваше питання - то для вимірювання швидкості AVX2, і це можна прочитати прямо в питанні.
-----------------------
cheappi386, я не бачу особливих проблем. Єдине що QueryPerformanceCounter повертає поточний системний час, а не час процесу. При невеликому сторонньому навантаженні це не дуже важливо, але точність все одно дещо падає, а якщо точність падає - то чи не варто скористатися GetProcessTimes? Так, це буде в мілісекундах, зате кожна мілісекунда належить вашому процесу.

Подякували: ostap34PHP, ExPy, /KIT\, poklvo4

4

Re: Швидкість AVX2

windows це збірка посилань на профільні заголовки. Я дивлюсь вам дуже весело, не боїтесь за своє нахабство свої привілеї втратити...

5

Re: Швидкість AVX2

Офіційна вимога Microsoft для використання QueryPerformanceCounter: include Windows.h.

Подякували: leofun01, poklvo2

6

Re: Швидкість AVX2

там написано, що  Windows.h містить profileapi.h який містить QueryPerformanceCounter function

7 Востаннє редагувалося ExPy (01.06.2020 20:25:12)

Re: Швидкість AVX2

ur_naz написав:

там написано, що  Windows.h містить profileapi.h який містить QueryPerformanceCounter function

А LARGE_INTEGER де знаходиться?
Можна написати #define WIN32_LEAN_AND_MEAN  , якщо так хочеться економити код i такти.. але це дурниця повна.
Я вже мовчу, що profileapi.h в старiшiй студїї може i не бути.

Подякували: leofun01, poklvo2

8

Re: Швидкість AVX2

ExPy написав:

А LARGE_INTEGER де знаходиться?

Де б не знаходився, він буде у заголовках файлу з визначенням QueryPerformanceCounter, інакше того не можна було визначити (насправді можна, але нормальні розробники таким не займаються).

ExPy написав:

Можна написати #define WIN32_LEAN_AND_MEAN  , якщо так хочеться економити код i такти.. але це дурниця повна.

Це не зекономить ані код, ані такти. Принаймні, часу виконання. Компіляцію - так, пришвидшить.

ExPy написав:

Я вже мовчу, що profileapi.h в старiшiй студїї може i не бути.

Може не бути й у новішій. Microsoft гарантує працездатність лише за наведеної умови (include windows.h).

Подякували: ExPy, leofun01, poklvo3

9

Re: Швидкість AVX2

koala написав:

Знаєте, ціле ключове слово придумали для таких функцій - void.

Чи не тому Бьерне викинув С на смітник?

Чому void це погано? Тому що це милиця. функція повинна повертати результат. навіть якщо аргументи передають за посиланням. Чому? Думайте те самі, форумні генії.

10

Re: Швидкість AVX2

ur_naz написав:
koala написав:

Знаєте, ціле ключове слово придумали для таких функцій - void.

Чи не тому Бьерне викинув С на смітник?

Не викинув, а взяв за основу і розширив.

ur_naz написав:

Чому void це погано? Тому що це милиця. функція повинна повертати результат. навіть якщо аргументи передають за посиланням.

Це ви почули на лекції з функціонального програмування ?
Компютери зпроектовані як автомати (зі станами) і іноді буває потреба змінити стан системи "без зайвих рухів" (без записування значень в регістри). Тобто існують задачі, де void необхідний.

11

Re: Швидкість AVX2

ви не в темі, тож краще не ганьбіть себе. якби бьерне хотів роз ширити він не створював би с++. Бо навіть хелловорлд кардинально відрізняється в с та с++

12

Re: Швидкість AVX2

ur_naz написав:

ви не в темі ... навіть хелловорлд кардинально відрізняється в с та с++

Але чомусь хелловорлд написаний на C без проблем компілюється на C++. І в C++ теж є void.

13

Re: Швидкість AVX2

ur_naz написав:

ви не в темі, тож краще не ганьбіть себе. якби бьерне хотів роз ширити він не створював би с++. Бо навіть хелловорлд кардинально відрізняється в с та с++

С++ спотворили саме комітети, створивши монстра з "розумними вказівниками" та лямбдами, а так - перші версіі плюсів транслювались в Сі і збирались сішним компілером. Учіть мат часть..

14

Re: Швидкість AVX2

ну, спробуйте компілятору с++ дати такий код

void main () {}

15

Re: Швидкість AVX2

Скрін для ur_naz

https://replace.org.ua/misc.php?action=pun_attachment&amp;item=2053

https://replace.org.ua/misc.php?action=pun_attachment&amp;item=2054

Post's attachments

file-explorer-cut.png 14.42 kb, 5 downloads since 2020-06-02 

vs-cpp-compile.gif 226.14 kb, 4 downloads since 2020-06-02 

Подякували: koala1

16

Re: Швидкість AVX2

в студії і не таке може бути, бо майкрософт не дотримується стандарту с++

Подякували: leofun011

17

Re: Швидкість AVX2

Основна перевага C++ - це не просто багатопарадигмальність, а й ненав'язливість. Хочете писати функціональщину? Ну, не так, щоб ідеально, але будь ласка. Хочете процедурний pascal-style? void до ваших послуг. Треба повний ООП, як у Java? Тільки пальці об virtual не збийте. Імперативний C-код? З коробки. Макроси? Негігієнічні, але прошу. Узагальнений код? Контроль типів дещо багатослівний, але є. Хочете все це змішати? Та скільки завгодно, під вашу відповідальність.

Подякували: leofun01, poklvo2

18 Востаннє редагувалося wander (02.06.2020 10:41:49)

Re: Швидкість AVX2

ur_naz написав:

Чому void це погано? Тому що це милиця. функція повинна повертати результат. навіть якщо аргументи передають за посиланням. Чому? Думайте те самі, форумні генії.

Відкрию вам невеличку таємницю, кожна функція насправді щось повертає, а void - якщо так хочете можете назвати синтаксичним-цукром. Але тсс, нікому!

ExPy написав:

С++ спотворили саме комітети, створивши монстра з "розумними вказівниками" та лямбдами, а так - перші версіі плюсів транслювались в Сі і збирались сішним компілером. Учіть мат часть..

Просто <no comments>.

ur_naz написав:

бо майкрософт не дотримується стандарту с++

Гаразд, відкрию ще один секрет, на цей раз останній. Жоден з сучасних компіляторів не дотримується на 100% стандарту )

19

Re: Швидкість AVX2

Справа не в паскаль-стайл. а в тому, що функція повинна повертати результат операції. наприклад, функція CopyFile  повертає нуль, якщо не вдалось провести операцію копіювання. А функція main повертає нуль, якщо програма завершилась "без помилок". Це можна відслідкувати в терміналі. Що повертає системі програма на С void main () {}?
коли пишуть
 

/*...*/
menu();
/*...
чи
...
*/
AVX2performance();

То що меню? Що я потрібен зрозуміти? Написання коду триває лише 5-10% часу розробки програми. Як залишитись гуманним, читаючи подібний код?

20

Re: Швидкість AVX2

Швидко проглянув зразки вашого коду на форумі.
Ніде не знайшов, щоб ви десь обробляли результати printf, та й std::ostream::operator << далеко не завжди. Будь ласка, повиправляйте, а то про чужий код питаєте, "як залишитись гуманним", а власний так само пишете.

Подякували: leofun01, poklvo2