Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » скорость работы с памятью в C++

Ответить
Настройки темы
скорость работы с памятью в C++

Ночной странник


Contributor


Сообщения: 4050
Благодарности: 83


Конфигурация

Профиль | Сайт | Отправить PM | Цитировать


я решил написать несколько тестов для компьютера.
начал я с тестов памяти.

написал несколько простеньких тестов.
и скомпилировал как консольное приложение, потом скомпилировал как .NET консольное приложение.

и вот какие интересные наблюдения я сделал:

скорость работы с одномерным массивом и с указателем на последовательной запист практически одинаковая, но вижуалка умеет оптимизировать работу с массивом при повторном обращении, а с указателем так не получается.

но после перехода на .NET все меняется, скорость работы с массивом падает в 2 раза! а скорость работы с указателем практически не меняется!

-------
можно практически все, но просто мы это еще не знаем.
главный враг програмиста это копипастинг
За хорошее сообщение не забываем нажимать ссылочку "Полезное сообщение"!


Отправлено: 23:59, 14-11-2005

 
pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


Можно код? Какой компилятор (№1)? Какие настройки компилятора? У меня при компиляции с sse2 скорость счёта возрастает в 2-4 раза.
Какое железо? На машине класса P6 (архитектуры IA-32) полезно укладывать доступ к памяти по 16 байт.
Причём (intel P-IV 1600, Windows XP, Metrowerks CodeWarrior 8.0, generic x86, release)
Код: Выделить весь код
for(int i=0; i<100; ++i)
{
     data[i] += 10;
}
Работает быстрее (что вообще-то странно), чем
Код: Выделить весь код
for(data_type *a=data, *b=data+100; a!=b; ++a)
{
     *a += 10;
}
Какой тип данных используется? Если можно, как это откомпилялось на ассемблере.

Отправлено: 12:45, 16-11-2005 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ночной странник


Contributor


Сообщения: 4050
Благодарности: 83

Профиль | Сайт | Отправить PM | Цитировать


PHP код: Выделить весь код

// test.cpp : Defines the entry point for the console application.

//

#include "stdafx.h"

int _tmain(int argc_TCHARargv[])
{
    
int xyz;
    
<< 8;

    
int t;
    
int ji100;

    
intm1 = new int[x*y*z];
    
time(NULL);
    for(
k0i--)
        for(
x*y*-1>=0;j--)
            
m1[j] = 0;

    
time(NULL) - t;
    
std::cout << "\ntest #1.1\n" << "time=" << << "\n" << "speed=" << ((sizeof(int)*((x>>2)*(y>>2)*(z>>2)*k))/(t*1<<14)) << "\n";
    
time(NULL);
    for(
k0i--)
        for(
x*y*-1>=0;j--)
        {
            
m1[j] = m1[j] = 0;
        }
    
time(NULL) - t;
    
std::cout << "\ntest #1.2\n" << "time=" << << "\n" << "speed=" << ((sizeof(int)*((x>>2)*(y>>2)*(z>>2)*k))/(t*1<<14)) << "\n";
    
time(NULL);
    for(
k0i--)
        for(
x*y*-1>=0;j--)
        {
            
m1[j] = 0;
            
m1[j] += 0;
        }
    
time(NULL) - t;
    
std::cout << "\ntest #1.3\n" << "time=" << << "\n" << "speed=" << ((sizeof(int)*((x>>2)*(y>>2)*(z>>2)*k))/(t*1<<14)) << "\n";


    
intm2,* m3,* m4;
    
m3=m1;
    
m3+=x*y*-1;
    
time(NULL);
    for(
k0i--)
        for(
m2=m1m2 <= m3;m2++)
            *
m2 0;
    
time(NULL) - t;
    
std::cout << "\ntest #2.1\n" << "time=" << << "\n" << "speed=" << ((sizeof(int)*((x>>2)*(y>>2)*(z>>2)*k))/(t*1<<14)) << "\n";


    
m3=m1;
    
m3+=x*y*-1;
    
time(NULL);
    for(
k0i--)
        for(
m2=m4=m1m2 <= m3;m2++)
            *
m2 = *m4 0;
    
time(NULL) - t;
    
std::cout << "\ntest #2.2\n" << "time=" << << "\n" << "speed=" << ((sizeof(int)*((x>>2)*(y>>2)*(z>>2)*k))/(t*1<<14)) << "\n";

    
m3=m1;
    
m3+=x*y*-1;
    
time(NULL);
    for(
k0i--)
        for(
m2=m4=m1m2 <= m3;m2++)
        {
            *
m2 0;
            *
m4 += *m2;
        }
    
time(NULL) - t;
    
std::cout << "\ntest #2.3\n" << "time=" << << "\n" << "speed=" << ((sizeof(int)*((x>>2)*(y>>2)*(z>>2)*k))/(t*1<<14)) << "\n";

    
time(NULL);
    for(
k0i--)
        for(
x*y*-1>=0;j--)
            
m1[j] = 0;
    
time(NULL) - t;
    
std::cout << "test #3\n" << "time=" << << "\n" << "speed=" << ((sizeof(int)*((x>>2)*(y>>2)*(z>>2)*k))/(t*1<<14)) << "\n";

    
m3=m1;
    
m3+=x*y*-1;
    
time(NULL);
    for(
k0i--)
        for(
m2=m1m2 <= m3;m2++)
            *
m2 0;
    
time(NULL) - t;
    
std::cout << "test #4\n" << "time=" << << "\n" << "speed=" << ((sizeof(int)*((x>>2)*(y>>2)*(z>>2)*k))/(t*1<<14)) << "\n";

    
delete m1;

    
std::cin >> j;

    return 
0;



-------
можно практически все, но просто мы это еще не знаем.
главный враг програмиста это копипастинг
За хорошее сообщение не забываем нажимать ссылочку "Полезное сообщение"!


Отправлено: 13:27, 16-11-2005 | #3

pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


Код не аналогичный:
Код: Выделить весь код
*m2 = 0; 
*m4 += *m2;
работает медленнее, чем
m[i] = 0;
m[i] += 0;
т.к. во втором случае - обе константы

циклы
for(int i=100; --i>=0; ) {...}
лучше оптимизируются, чем
for(int i=0; i<=100; ++i) {...}
Все эти ньюансы есть у Intel SDK на www.intel.com

Цитата:
оптимизировать работу с массивом при повторном обращении
А если одно и то же действие выполнить?
Код: Выделить весь код
void fillArray(int* mem)
{
    for(int i=0; i<1<<(8*3); ++i)
    {
         mem[i] = 0x12345678;
    }
}

for(int i=0; i<10; ++i)
{
    time1 = GetTickCount();
    fillArray(mem);
    std::cout << (GetTickCount() - time1) << "\n";
}

Отправлено: 09:24, 18-11-2005 | #4



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » скорость работы с памятью в C++

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Проблемы работы Athlon 64 x2 в 64битных ОС с памятью >3Гб powersurge Процесcоры 7 28-07-2009 00:19
Упала скорость работы сети Ultrix Хочу все знать 7 22-12-2008 11:37
Разное - Скорость работы Vista vs. XP - 64 vs. 32 Sev Microsoft Windows Vista 2 13-10-2008 19:15
скорость работы самбы Vlad Drakula Программное обеспечение Linux и FreeBSD 9 11-02-2007 15:06
скорость работы в инет strannic2005 Хочу все знать 6 14-12-2004 01:43




 
Переход