Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
1 / 1 / 0
Регистрация: 27.01.2011
Сообщений: 91

Немного из архитектуры ЭВМ

29.04.2011, 15:52. Показов 3289. Ответов 30
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пусть заданы две квадратных матрицы A и B размером NxN.
Они созданы с помощью двух подходов:

1 подход:
C++
1
2
3
4
int **A;
A = new int*[N];
for(int i=0;i<N;i++)
A[i] = new int[N];
Доступ к элементу: A[i][j]

2 подход:
C++
1
2
int *A;
A = new int[N*N];
Доступ к элементу: A[i*N+j]

Необходимо сложить эти матрицы и сравнить время вычисления. Нужны выводы по этим подходам: количество обращений к памяти,
вычислений, теоретические оценки времени вычислений (можно считать, что
матрицы не загружаются в кэш, время доступа к одному элементу в памяти 10
тактов, арифметическая операция 2 такта), реальное время вычисления.

Кто свободен, может поможите?.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.04.2011, 15:52
Ответы с готовыми решениями:

Из архитектуры ЭВМ
Здравствуйте! Хотел бы попросить помочь вот с каким вопросом: описать механизм выбора банков памяти и мультиплексирования. Сам уже...

Первая ЭВМ сеть, то есть первое соединение ЭВМ было электротехническим (радиотехническим) или электронным?
Первая ЭВМ сеть, то есть первое соединение ЭВМ было электротехническим (радиотехническим) или электронным?

Структура "ЭВМ". Определить какая ЭВМ имеет минимальное отношение стоимость/быстродействие
Даны 3 ЭВМ , известны объемы памяти, цена и быстродействие. Определить какая ЭВМ имеет минимальное отношение стоимости/быстродействию и...

30
1 / 1 / 0
Регистрация: 27.01.2011
Сообщений: 91
29.04.2011, 18:54  [ТС]
Студворк — интернет-сервис помощи студентам
вот это libname.lib ?
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
29.04.2011, 18:56
Ну, как я и написал "С некоторой долей уверенности"... Поэтому, доверяй, но проверяй!
1
1 / 1 / 0
Регистрация: 27.01.2011
Сообщений: 91
29.04.2011, 19:48  [ТС]
спасибо Вам всем. Но что-то до меня мало что дошло. Код я поняла, но не пойму почему не работает.
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
30.04.2011, 10:26
Цитата Сообщение от KuKu Посмотреть сообщение
12979 и 7427
Да как так вообще??? У тебя Спектрум что ли? У меня даже под отладчиком получилось 150 миллисекунд. И первый вариант чуть быстрее (как я и ожидал).
В любом случае, на таком коде проводить сравнение не корректно, т.к. компилятор может чего-нить на оптимизировать и результат будет искажённым. (это исходя из того, что релизная версия отработала за 100 миллисекунд. Малая разница в производительности настораживает)
0
1 / 1 / 0
Регистрация: 27.01.2011
Сообщений: 91
30.04.2011, 17:51  [ТС]
Слушайте, вот че я думаю. Количество обращений к памяти (запрос на чтение из памяти, запись в память или поиск в памяти заданной информации) = 3. Это обращение к массиву С, В и А.
Кол-во вычислений = 1. Только сложение.
Т.к. за один обход цикла обращений к памяти 3, то число тактов обращений 30. Число тактов вычислений - 2. Всего 32 такта за один обход цикла.
N*N*32 - число тактов за весь цикл.

Это правильно?

Добавлено через 1 час 16 минут
хотя вот в принципе вроде прога.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include "stdafx.h"
#include "stdio.h"
#include "conio.h"
#include "windows.h"
#define N 1024
 
 
void main(){
    LARGE_INTEGER b_start,b_stop,b_time,freq;
    QueryPerformanceFrequency(&freq);
    printf("t/sec=%lf*10^9\n\n",(double)(freq.QuadPart)/1000000000);
 
    //Первый подход
    int **A1;
    A1 = new int*[N];
    for(int i=0;i<N;i++){
        A1[i] = new int[N];
        for(int j=0;j<N;j++)
            A1[i][j]=j*N+i;
    }
    int **B1;
    B1 = new int*[N];
    for(int i=0;i<N;i++){
        B1[i] = new int[N];
        for(int j=0;j<N;j++)
            B1[i][j]=j*N+i;
    }
    int **C1;
    C1 = new int*[N];
    for(int i=0;i<N;i++)
        C1[i] = new int[N];
 
    QueryPerformanceCounter(&b_start);
    for(int i=0;i<N;i++){
        for(int j=0;j<N;j++){
            C1[i][j]=A1[i][j]+B1[i][j];
        }
    }
    QueryPerformanceCounter(&b_stop);
    b_time.QuadPart = b_stop.QuadPart - b_start.QuadPart;
 
    printf("t=%lf\n",(double)(b_time.QuadPart));
    printf("time= \t%lfms\n", (double)(b_time.QuadPart)*1000.0/(double)(freq.QuadPart));
 
 
 
    //Второй подход
    int *A;
    A = new int[N*N];
    for(int i=0;i<N;i++)
        for(int j=0;j<N;j++)
            A[i*N+j]=i*N+j;
    int *B;
    B = new int[N*N];
    for(int i=0;i<N;i++)
        for(int j=0;j<N;j++)
            B[i*N+j]=j*N+i;
    int *C;
    C = new int[N*N];
 
    
    QueryPerformanceCounter(&b_start);
    for(int i=0;i<N*N;i++){
        C[i]=A[i]+B[i];
    }
    QueryPerformanceCounter(&b_stop);
    b_time.QuadPart = b_stop.QuadPart - b_start.QuadPart;
 
    printf("t=%lf\n",(double)(b_time.QuadPart));
    printf("time= \t%lfms\n\n", (double)(b_time.QuadPart)*1000.0/(double)(freq.QuadPart));
 
    _getch();
}
 Комментарий модератора 
Используйте теги форматирования кода!
0
Программист
 Аватар для prZzZ
119 / 97 / 11
Регистрация: 22.03.2011
Сообщений: 244
30.04.2011, 18:19
Цитата Сообщение от oksanaBM Посмотреть сообщение
QueryPerformanceCounter
Кто так время измеряет? Или у вас Pentium II? Про счетчик меток реального времени никогда не слышали?
C++
1
2
3
4
unsigned __int64 GetCycleCount()
{
    _asm rdtsc
}
Правда его надо градуировать под каждый камень. Очень уж тут всё аппаратно зависимо
0
1 / 1 / 0
Регистрация: 27.01.2011
Сообщений: 91
30.04.2011, 18:25  [ТС]
по учебной программе нужно использовать QueryPerformanceCounter
0
Программист
 Аватар для prZzZ
119 / 97 / 11
Регистрация: 22.03.2011
Сообщений: 244
30.04.2011, 18:39
Точности большой тогда у вас не будет. Её и с вышеописанным методом не будет т.к. Windows НЕ является системой реального времени, но такты процессора (над этим, кстати, здесь смеялись) посчитать получилось бы. Извините...
0
1 / 1 / 0
Регистрация: 27.01.2011
Сообщений: 91
30.04.2011, 18:41  [ТС]
получается программа неверная?
0
Программист
 Аватар для prZzZ
119 / 97 / 11
Регистрация: 22.03.2011
Сообщений: 244
30.04.2011, 18:49
Да, нет... Теоретически верно...
А практически:
1)погрешность операционной системы (тут, увы, мы ничего сделать не можем)
2)погрешность компилятора (на уровень ассемблера опускаться тоже не входит в ваши планы)
3)погрешность инструментальных средств (описанных выше)

Всё поплюсуем... Истины добиться очень не просто...
1
30.04.2011, 19:01
 Комментарий модератора 
Поскольку от ТСа поступила информация о том, что на все интересующие его вопросы ответы получены - тему закрываю.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.04.2011, 19:01

В наушник попало немного воды и он стал немного тише играть
В наушник попало немного воды и он стал немного тише играть. Это практически не заметно, но всё же раздражает. Так это пройдет со временем...

Статья 1280. Свободное воспроизведение программ для ЭВМ и баз данных. Декомпилирование программ для ЭВМ
И так уважаемая Администрация. Я вам могу сказать: Обсуждение реверса не является незаконным ;) Добавлено через 3 минуты Не...

Проектирование ОО архитектуры
Интересно мнение публики. &quot;Программирование в терминах интерфейсов&quot; Вопрос такой: как правильно конструировать едино-образный интерфейс? ...

Архитектуры процессоров
Здравствуйте, у меня есть один вопрос. Есть такие архитектуры, как CISC, RISC, MISC, VLIW etc. И как я понимаю это только их малая...

Реализация архитектуры
Задача такая. Есть класс строк ( десятичная , символьная и т.п.) и операции к ним. Я собрал архитектуру, и с помощью класса SWITCH я...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
31
Закрытая тема Создать тему
Новые блоги и статьи
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store. И так: 1. Скачиваем с. . .
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге). Задача: Программно добавить префикс в нумерацию документов. Решение: В модуле объекта. . .
После закрытия оутлука продолжает висеть процесс в диспетчере задач
Maks 27.10.2026
С недавнего времени в продакшене возникла проблема: при закрытии оутлука в диспетчере задач продолжал висеть процесс outlook. exe. Проблема возникла после установки MS Office 2021 LTSC на машинах, под. . .
Baragoz - DPS/HPS бот для WoW 3.3.5a, многоязычный
AmbA 26.10.2026
Хотите ещё ботов? У меня есть один! А я пока отдохну от него. https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=12062&stc=1&d=1793007952 Инструкция внутри. https:/ / youtu. be/ VpfFZSUDGnQ. . .
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru