1

Тема: Як визначити, скільки часу потребує якась операція?

Хай. Зара в універі у нас читають курс про якесь розподілення і т.д.
Задали лабу - порівняти простий цикл for і його паралельну версію Parallel.For.
Так от, написав купу кода, він працює, але не вірно, тому що я просто напросто не можу вірно порахувати кількість отих тактів, чи що воно таке.
Для прикладу, написав от таку штучку

int num = 0;
            while (true)
            {
                Console.WriteLine("Iteration number: "+num+"\n");
                num++;

                int time1 = Environment.TickCount;

                for (int i = 0; i < 100; i++)
                {
                    int a = 100*100;
                }

                Console.WriteLine("time1: " + (Environment.TickCount - time1));

                int time2 = Environment.TickCount;

                Parallel.For(0, 100, i => { int a = 100*100; });

                Console.WriteLine("time2: " + (Environment.TickCount - time2));

                Console.ReadLine();
            }

Виводить

Прихований текст

http://не-дійсний-домен/bJ8OO/442f05d21c.png

ЩО ЗА ЛАЙНО? Як підрахувати час, котрий потрібен на виконання циклів?

2

Re: Як визначити, скільки часу потребує якась операція?

Розібрався вже, Stopwatch рулює!

3

Re: Як визначити, скільки часу потребує якась операція?

ееее, нєєє, знову дурня якась.
От як на 100 операцій 100*100 може піти 5 тіків?

Прихований текст

http://не-дійсний-домен/bJc0H/97c4ffedc2.png

4

Re: Як визначити, скільки часу потребує якась операція?

Ви про оптимізацію щось чули? Сучасні компілятори вміють зрозуміти, що

for (int i = 0; i < 100; i++)
{
  int a = 100*100;
}

повністю еквівалентне

{}

бо нічого насправді там не робиться - значення змінних a та i нікуди далі не йде, і виводу немає.

Ну і вимірювати на 10000 операцій час роботи сучасних процесорів - себе не любити. Хоча б в 1000 разів більше зробіть.

5 Востаннє редагувалося FakiNyan (22.09.2014 20:52:50)

Re: Як визначити, скільки часу потребує якась операція?

koala написав:

Ви про оптимізацію щось чули? Сучасні компілятори вміють зрозуміти, що

for (int i = 0; i < 100; i++)
{
  int a = 100*100;
}

повністю еквівалентне

{}

бо нічого насправді там не робиться - значення змінних a та i нікуди далі не йде, і виводу немає.

Ну і вимірювати на 10000 операцій час роботи сучасних процесорів - себе не любити. Хоча б в 1000 разів більше зробіть.

Вав, оце так!
Ну, насправді, в мене прога множить дві матриці, спочатку простим фором, а потім Parallel.For'ом.
І от, чомусь звичайних фор завжди швидЧе паралельного, хоча так не має бути!?

6 Востаннє редагувалося koala (22.09.2014 20:54:47)

Re: Як визначити, скільки часу потребує якась операція?

Кількість операцій яка? Створення потоку - повільна операція (коли ми вчилися, нам казали ~1000 тактів), бо суперскалярні процесори мають синхронізувати всі операції, і, зокрема, кеш, щоб почати новий поток. Тому крутити менш ніж мільйон циклів в треді не варто.

7

Re: Як визначити, скільки часу потребує якась операція?

koala написав:

Кількість операцій яка? Створення потоку - повільна операція (коли ми вчилися, нам казали ~1000 тактів), бо суперскалярні процесори мають синхронізувати всі операції, і, зокрема, кеш, щоб почати новий поток. Тому крутити менш ніж мільйон циклів в треді не варто.

там залежить від розмірів матриці. Я пробував і 1000 на 1000 множити.
А це значить, еее... ((N+N-1)*N)*N операцій множення і додавання разом, де N-розмір матриці, ну для 1000х1000 це буде 1000
Ну, ну множення двух матриць.

8

Re: Як визначити, скільки часу потребує якась операція?

от дивіться на швидкість

Прихований текст

http://не-дійсний-домен/bJDYP/65c20a0258.png

9 Востаннє редагувалося VTrim (23.09.2014 09:14:52)

Re: Як визначити, скільки часу потребує якась операція?

del

10

Re: Як визначити, скільки часу потребує якась операція?

VTrim написав:

del

Прихований текст

може досить писати фігню, а потім делетати?

11

Re: Як визначити, скільки часу потребує якась операція?

FakiNyan написав:
VTrim написав:

del

Прихований текст

може досить писати фігню, а потім делетати?

Та я зкинув php версію,де написав визначення часу який,потрібен для кожної операції з точністю до мсек.,думав може цим якось допоможу (сам алгоритм),але перечитав умову,то наврядче..

12

Re: Як визначити, скільки часу потребує якась операція?

VTrim написав:
FakiNyan написав:
VTrim написав:

del

Прихований текст

може досить писати фігню, а потім делетати?

Та я зкинув php версію,де написав визначення часу який,потрібен для кожної операції з точністю до мсек.,думав може цим якось допоможу (сам алгоритм),але перечитав умову,то наврядче..

Причому тут умова???
http://не-дійсний-домен/bKeNR/f747180624.png

13 Востаннє редагувалося VTrim (23.09.2014 08:25:13)

Re: Як визначити, скільки часу потребує якась операція?

В тому,що в тебе мова йде про якісь такти.
Ну тримай

Post's attachments

time.zip 1011 b, 312 downloads since 2014-09-23