Форум программистов, компьютерный форум CyberForum.ru

Обнулить элементы вектора через __asm - C++

Восстановить пароль Регистрация
 
 
mat_for_c
 Аватар для mat_for_c
115 / 110 / 19
Регистрация: 26.04.2013
Сообщений: 585
Завершенные тесты: 2
06.04.2014, 15:06     Обнулить элементы вектора через __asm #1
Хочу обнулить элементы вектора через __asm

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
#include <vector>
#include <iostream>
 
using namespace std;
 
void main() {
   vector<vector<int>> v(2, vector <int> (3, 1));
 
   __asm {
      mov ecx, 2
      mov edi, v
      mov eax, dword ptr [edi + 16]
      mov edi, [edi][1]
        
      //mov dword ptr [edi + 8], 0
   cycl:
      mov dword ptr [edi + ecx*4], 0
      //add eax, 4
      loop cycl
   }
     
   for (int i = 0; i < 2; ++i) {
      for (int j = 0; j < 3; ++j)
         cout << v[i][j] << " ";
      cout << endl;
   }
}
Сам вопрос: eax и edi имеют разные значения, причем в eax лежит правильный результат. Я же хочу получить доступ ко 2-й строке через индексацию [1]. Как это реализовать?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
mat_for_c
 Аватар для mat_for_c
115 / 110 / 19
Регистрация: 26.04.2013
Сообщений: 585
Завершенные тесты: 2
10.04.2014, 21:54  [ТС]     Обнулить элементы вектора через __asm #21
Цитата Сообщение от DrOffset Посмотреть сообщение
VS делает свои оптимизации с заточкой на Intel платформу
чтобы в этом убедиться, надо построить проект на AMD, а потом запустить на Intel
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DrOffset
6428 / 3802 / 882
Регистрация: 30.01.2014
Сообщений: 6,601
10.04.2014, 22:19     Обнулить элементы вектора через __asm #22
Цитата Сообщение от mat_for_c Посмотреть сообщение
чтобы в этом убедиться, надо построить проект на AMD
Это не поможет. Не важно на какой платформе строить. Просто у Microsoft c Intel партнерство и их компилятор заточен под Intel лучше. Нужно найти компилятор, с оптимизациями для AMD и строить проект на нем.
mat_for_c
 Аватар для mat_for_c
115 / 110 / 19
Регистрация: 26.04.2013
Сообщений: 585
Завершенные тесты: 2
11.04.2014, 14:14  [ТС]     Обнулить элементы вектора через __asm #23
Цитата Сообщение от DrOffset Посмотреть сообщение
Это не поможет
посмотрел что имеется в папке VC/lib, увидел, что там еще лежит папка AMD. может, если через нее собирать проект, то на AMD нормально по скорости получится?
DrOffset
6428 / 3802 / 882
Регистрация: 30.01.2014
Сообщений: 6,601
11.04.2014, 14:50     Обнулить элементы вектора через __asm #24
Цитата Сообщение от mat_for_c Посмотреть сообщение
лежит папка AMD. может, если через нее собирать проект, то на AMD нормально по скорости получится?
Возможно, не могу точно сказать. Но попробовать стоит.
Может быть еще это поможет.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.04.2014, 22:16     Обнулить элементы вектора через __asm
Еще ссылки по теме:

C++ Заменить первых 2 нулевые элементы заданного вектора соответственно на первых 2 не нулевые элементы этого вектора
STL. Функция, которая будет искать элементы большее среднего арифметического вектора и удалять их из вектора C++
C++ Массивы. Обнулить элементы столбцов

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

Или воспользуйтесь поиском по форуму:
mat_for_c
 Аватар для mat_for_c
115 / 110 / 19
Регистрация: 26.04.2013
Сообщений: 585
Завершенные тесты: 2
11.04.2014, 22:16  [ТС]     Обнулить элементы вектора через __asm #25
Цитата Сообщение от DrOffset Посмотреть сообщение
. После работы обоих алгоритмов векторы не равны между собой (я сохранил результата работы первого алгоритма и сравнил с результатом второго, векторы не равны). Это значит, что асм делает заполнение как-то иначе. И это - проблема.
мой косяк. ошибся в расчетах итераций цикла. последние 3 строчки во вставке не нужно было писать.
Yandex
Объявления
11.04.2014, 22:16     Обнулить элементы вектора через __asm
Ответ Создать тему
Опции темы

Текущее время: 22:04. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru