Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 3 из 7 ПерваяПервая 1 2 3 4 5 ... ПоследняяПоследняя
Показано с 21 по 30 из 68
  1. #21
    Аватар для alfazlo
    Пользователь

    Статус
    Оффлайн
    Регистрация
    21.06.2014
    Сообщений
    16
    Репутация:
    1 ±
    достаточно во первых просто применить sizeof arrayname чтобы убедиться, и достаточно просто в цикле посчитывать значения чтобы убедиться в том что производительность присутствует.

    enum pInfo {
    id[1000],
    money[1000]
    }

    new array1[pInfo];
    new array2[1000];
    new array3[1000][15];

    printf("%d",sizeof array1); //2000
    printf("%d",sizeof array2); //1000
    printf("%d %d",sizeof array3, sizeof array3[]); //1000 //15

    любой двухмерный массив в любом случае можно представить одномерным с расчетом индекса, но компилятор в павн не всегда использует самые оптимизируемые варианты доступа особенно с массивами.
    Последний раз редактировалось alfazlo; 24.03.2015 в 18:31.

  2. #22
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Копирование строк.

    Старый способ, с использованием нативной функции strcat:
    PHP код:
    new src[] = "Sample text";
    new 
    dest[sizeof(src)];
    dest[0] = EOSstrcat(destsrc); 
    Новый способ, без нативных функций:
    PHP код:
    new src[] = "Sample text";
    new 
    dest[sizeof(src)];
    for(new 
    0; (dest[i] = src[i]) != EOS; ++i) {} 
    Новый способ, как и написано выше, лучше тем, что не использует нативных функций, что хорошо скажется на производительности, особенно при использовании JIT.
    Внимание! Размер dest должен быть не меньше, чем у src, иначе может произойти выход за пределы массива.

    P.S.: Для тех, кому лень много печатать, вот сокращённый вариант:
    PHP код:
    for(new i;(dest[i]=src[i++]);){} 
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  3. Пользователь сказал cпасибо:
    $continue$ (03.07.2015)
  4. #23
    Аватар для NewGreen
    Пользователь

    Статус
    Оффлайн
    Регистрация
    29.09.2014
    Сообщений
    61
    Репутация:
    44 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Копирование строк.
    ... что хорошо скажется на производительности, особенно при использовании JIT.
    Ни чем "новый способ" не лучше, даже наоборот, strcat работает в разы быстрее. Что касается JIT, при его подключении, скорее всего скорость работы "нового способа" и strcat - станет одинаковой - но это, не факт, длина строки тоже играет не последнюю роль.
    Последний раз редактировалось NewGreen; 03.07.2015 в 18:04. Причина: убрал [/php] в цитате

  5. Пользователь сказал cпасибо:
    $continue$ (03.07.2015)
  6. #24
    Аватар для $continue$
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    Cкорее всего я не правильно провожу тест, ибо метод от Стаса ой как без JIT Compiler`a проигрывает, подправьте код да затестите :)
    На большое количество текста (2457):
    PHP код:
    #define    PROFILING_ITERS    1_000_000
    new _str_[2500],
        
    string_to_strcar[2500];
    main()
    {
        new 
    time 0;
        static    const    
    fmt_str[] = "test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|\
                                        test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|\
                                        test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|\
                                        test|test|test|test|test|test|test|test|test|test|tes"
    ;

        static const 
    fmt_str_1[] =         "test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|\
                                        test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|\
                                        test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|\
                                        test|test|test|test|test|test|test|test|test|test|tes"
    ;

        static const 
    fmt_str_2[] =         "test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|\
                                        test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|\
                                        test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|\
                                        test|test|test|test|test|test|test|test|test|test|tes"
    ;

        static const 
    fmt_str_3[] =         "test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|\
                                        test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|\
                                        test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|\
                                        test|test|test|test|test|test|test|test|test|test|tes"
    ;

        static const 
    fmt_str_4[] =         "test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|\
                                        test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|\
                                        test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|\
                                        test|test|test|test|test|test|test|test|test|test|tes"
    ;

        static const 
    fmt_str_5[] =         "test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|\
                                        test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|\
                                        test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|\
                                        test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test|test"
    ;
        
    format(_str_sizeof(_str_), "%s%s%s%s%s%s"fmt_strfmt_str_1fmt_str_2fmt_str_3fmt_str_4fmt_str_5);
        
    time GetTickCount();
        
    printf("Запускаю цикл на %d итераторов | Нативный вызов функций | С JIT-компиляцией"PROFILING_ITERS);
        for(new 
    0PROFILING_ITERSi++)
        {
            
    strcat(string_to_strcar_str_);
        }
        
    printf("Время выполнение кода: %d"GetTickCount()-time);

        new 
    dest[sizeof(_str_)];
        
    time GetTickCount();
         
    printf("Запускаю цикл на %d итераторов | Метод от Стаса (Daniel_Cortez'a) | С JIT-компиляцией"PROFILING_ITERS);
        for(new 
    0PROFILING_ITERS++)
        {
            for(new 
    0; (dest[z] = _str_[z]) != EOS; ++z) {}
        }
        
    printf("Время выполнение кода: %d"GetTickCount()-time);

    PHP код:
    [17:58:52Запускаю цикл на 1000000 итераторов Нативный вызов функций С JIT-компиляцией
    [17:58:54Время выполнение кода2512
    [17:58:54Запускаю цикл на 1000000 итераторов Метод от Стаса (Daniel_Cortez'a) | С JIT-компиляцией
    [17:59:04] Время выполнение кода: 9927 
    А пока без JIT - компиляцией выводились логи я успел за печенкой сходить xD (Но это наверное моя ошибка)
    PHP код:
    [18:02:20Запускаю цикл на 1000000 итераторов Метод от Стаса (Daniel_Cortez'a) | Без JIT-компиляцией
    [18:05:08] Время выполнение кода: 168233
    [18:05:08] Number of vehicle models: 3 
    На маленький текст (Взял 30)
    PHP код:
    #define    PROFILING_ITERS    1_000_000
    new
        
    string_to_strcar[30];
    main()
    {
        new 
    time 0;
        static    const    
    fmt_str[] = "test|test|test|test|test|test|";
        
    time GetTickCount();
        
    printf("Запускаю цикл на %d итераторов | Нативный вызов функций | С JIT-компиляцией"PROFILING_ITERS);
        for(new 
    0PROFILING_ITERSi++)
        {
            
    strcat(string_to_strcarfmt_str);
        }
        
    printf("Время выполнение кода: %d"GetTickCount()-time);

        new 
    dest[sizeof(fmt_str)];
        
    time GetTickCount();
         
    printf("Запускаю цикл на %d итераторов | Метод от Стаса (Daniel_Cortez'a) | С JIT-компиляцией"PROFILING_ITERS);
        for(new 
    0PROFILING_ITERS++)
        {
            for(new 
    0; (dest[z] = fmt_str[z]) != EOS; ++z) {}
        }
        
    printf("Время выполнение кода: %d"GetTickCount()-time);

    Без джита:
    PHP код:
    [18:09:30Запускаю цикл на 1000000 итераторов Нативный вызов функций Без JIT-компиляцией
    [18:09:30Время выполнение кода161
    [18:09:30Запускаю цикл на 1000000 итераторов Метод от Стаса (Daniel_Cortez'a) | Без JIT-компиляцией
    [18:09:33] Время выполнение кода: 2396
    [18:09:33] Number of vehicle models: 3 
    C джитом:
    PHP код:
    [18:10:24Запускаю цикл на 1000000 итераторов Нативный вызов функций С JIT-компиляцией
    [18:10:25Время выполнение кода108
    [18:10:25Запускаю цикл на 1000000 итераторов Метод от Стаса (Daniel_Cortez'a) | С JIT-компиляцией
    [18:10:25] Время выполнение кода: 153 
    P.S: Разорвите меня в пух и прах, что тут не так! :)

  7. #25
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Чёрд, и ведь правда, на длинных строках работает медленнее =p
    Я тестировал на строке из 24 символов (25 с учётом EOS):
    PHP код:
    #include <a_samp>

    #define PROFILE_ITERS_MAJOR 1000000
    #define PROFILE_ITERS_MINOR 100


    main()
    {
        new 
    src[] = "1234567890""1234567890""1234";
        new 
    dest[sizeof(src)];
        new 
    tt0 0t1 0;
        print(
    "\nProfiling, please wait...");
        for(new 
    i=0,j!= PROFILE_ITERS_MAJOR; ++i)
        {
            
    GetTickCount();
            for(
    j=0!= PROFILE_ITERS_MINOR; ++j)
                
    dest[0] = EOSstrcat(destsrc);
            
    t0 += GetTickCount()-t;
            
    GetTickCount();
            for(
    j=0!= PROFILE_ITERS_MINOR; ++j)
                for(new 
    0; (dest[x] = src[x]) != EOS; ++x){}
            
    t1 += GetTickCount()-t;
        }
        
    printf("strcat:\t%d"t0);
        
    printf("for:\t%d"t1);

    Проверял с включенным JIT и параметром компилятора -O1, результаты следующие:
    Код HTML:
    Profiling, please wait...
    strcat: 12454
    for:    11377
    Отсюда вывод, что у моего метода будет преимущество, если например нужно скопировать ник игрока.
    Однако, как было замечено выше, с более длинными строками strcat начинает работать быстрее.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  8. Пользователь сказал cпасибо:
    $continue$ (03.07.2015)
  9. #26
    Аватар для $continue$
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    Что, за параметр "-O1"? :)

  10. #27
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от Bublik_Public Посмотреть сообщение
    Что, за параметр "-O1"? :)
    Оптимизация генерируемого кода, указывается в pawn.cfg
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  11. Пользователь сказал cпасибо:
    $continue$ (03.07.2015)
  12. #28
    Аватар для NewGreen
    Пользователь

    Статус
    Оффлайн
    Регистрация
    29.09.2014
    Сообщений
    61
    Репутация:
    44 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Проверял с включенным JIT и параметром компилятора -O1, результаты следующие:
    Код HTML:
    Profiling, please wait...
    strcat: 12454
    for:    11377
    Отсюда вывод, что у моего метода будет преимущество, если например нужно скопировать ник игрока.
    Однако, как было замечено выше, с более длинными строками strcat начинает работать быстрее.
    Ради интереса проверил у себя, используя Ваш код теста выше:
    Вот результат:
    С JIT и параметром -O1
    Код HTML:
    Profiling, please wait...
    strcat: 4775
    for: 6789
    Без подключения JIT
    Код HTML:
    Profiling, please wait...
    strcat: 7102
    for: 64421

  13. #29
    Аватар для $continue$
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    Цитата Сообщение от NewGreen Посмотреть сообщение
    Ради интереса проверил у себя, используя Ваш код теста выше:
    Вот результат:
    С JIT и параметром -O1
    Код HTML:
    Profiling, please wait...
    strcat: 4775
    for: 6789
    Без подключения JIT
    Код HTML:
    Profiling, please wait...
    strcat: 7102
    for: 64421
    Ну тут тоже зависит вроде как от процессора. Сейчас у себя затестирую :)

    C JIT и параметром компилятора -O1:
    PHP код:
    Profilingplease wait...
    [
    15:27:48strcat:    9945
    [15:27:48] for:    12787 
    Без JIT и без параметра компилятора -O1:
    PHP код:
    Profilingplease wait...
    [
    15:33:16strcat:    18811
    [15:33:16] for:    189713 
    Процессор Intel Core I7 - 2630QM с частотой 2.0

    ________________________________________________

    Так же затестировал на хостинге от game-server.ru (Не пиар, думаю многий знают о этом хостиге, он же игрохост")
    Там установлена OS Linux.
    C JIT и параметром компилятора -O1:
    PHP код:
    Profilingplease wait...
    [
    15:42:34strcat:    19892
    [15:42:34] for:    14060 
    Без JIT и без параметра компилятора -O1:
    PHP код:
    Profilingplease wait...
    [
    15:47:01strcat:    20715
    [15:47:01] for:    92858 
    Последний раз редактировалось $continue$; 04.07.2015 в 16:48.

  14. Пользователь сказал cпасибо:
    NewGreen (04.07.2015)
  15. #30
    Аватар для NewGreen
    Пользователь

    Статус
    Оффлайн
    Регистрация
    29.09.2014
    Сообщений
    61
    Репутация:
    44 ±
    Цитата Сообщение от Bublik_Public Посмотреть сообщение
    Ну тут тоже зависит вроде как от процессора. Сейчас у себя затестирую :)
    И не только от процессора еще от ОСи на ПК/сервере.
    На сервере, обычно это GNU/Linux, на линуксе время теста может еще больше склониться в пользу нативной функции strcat.

 

 
Страница 3 из 7 ПерваяПервая 1 2 3 4 5 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 2 (пользователей: 0 , гостей: 2)

Ваши права

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