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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Ругается на неоднозначный вызов перегруженной функции http://www.cyberforum.ru/cpp-beginners/thread1140365.html
Делаю все по примерам не могу понять в чем ошибка. Уверен что ошибка элементарная. Ругается на неоднозначный вызов перегруженной функции. Причем на все функции( #include <iostream> #include <cmath> using namespace std; #define Pi 3.14 int main() { int T; double P; int r,t,Y,R,A; cout<<"T = "; cin>>T;
C++ Удаление элемента списка и всего списка Компилируется, но не работает. Что и как исправить? #include <cstdlib> #include <iostream> #include <cstring> #define M 5 using namespace std; struct A { char key ; http://www.cyberforum.ru/cpp-beginners/thread1140351.html
предлоги C++
помогите пожалуйста! Есть предложение в нем надо подсчитать кол-во предлогов! Как это сделать, и что для этого надо почитать
C++ Запуск подпрограмм
Только начал изучать, сильно не пинайте. Запускаю много разных исходников, приходиться каждый раз создавать новый проект, либо все стирать в старом и писать/вставлять новый. Причем IDE не позволяют видеть боьше 1 проекта (Visual2010 & DevCpp) :no: Хочется просто открыть новую вкладку IDE и писать/запускать, не теряя из виду содержимое изначальной вкладки. Пока решил оформлять новые задачи в...
C++ Найти все числа в массиве которые заканчиваются на число 47 http://www.cyberforum.ru/cpp-beginners/thread1140306.html
Помогите пожалуйста решить задачу: Неоходимо найти все числа в массиве (диапазон случайных чисел от 200 до -200) которые заканчиваются на 47 (как я понял вариантов будет не много. -47 47 -147 147) и вывести эти числа с ихними индексами в массиве. Пример: Число -47 | Ряд 2 | Строка 7 Число 147 | Ряд 4 | Строка 8 Знакомый сказал что можно реализовать это задание следующим способом. От...
C++ Метод перебора Пожалуйста помогите решить задачу за оптимальное время МИНИМАЛЬНОЕ ПОКРЫТИЕ УСЛОВИЕ. Заданы набор С подмножеств конечного множества S, положительное целое число K<=C. ВОПРОС. Верно ли, что С содержит покрытие мощности не более K Иными словами, существует ли такое подмножество C1 из C, что |С1|<=K( и любой элемент из S принадлежит по крайней мере одному подмножеству из С1? Комментарий.... подробнее

Показать сообщение отдельно
mat_for_c
 Аватар для mat_for_c
117 / 112 / 20
Регистрация: 26.04.2013
Сообщений: 591
Завершенные тесты: 2
10.04.2014, 19:59  [ТС]     Обнулить элементы вектора через __asm
Цитата Сообщение от DrOffset Посмотреть сообщение
Visual Studio
VS 2010 professional

Добавлено через 43 секунды
я тогда щас похожий код настрочу...

Добавлено через 31 минуту
вот та минимальная часть кода:
Кликните здесь для просмотра всего текста
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
#include <vector>
#include <iostream>
#include <algorithm>
#include <time.h>
 
using namespace std;
 
int main() {
   vector <int> vec(50000, 10);
   vector <int> zero_position;
 
   int i;
   for (i = 3; i < 45000; ++i)
      zero_position.push_back(i);
   int size_ZPos = zero_position.size();
    
   clock_t begin = clock();
   for (int j = 0; j < 400000; ++j) {
      for (i = 0; i < size_ZPos; ++i)
         vec[zero_position[i]] = 0;
   }
   cout << "for " << (clock() - begin)/1000.0 << endl;
 
   fill(vec.begin(), vec.end(), 10); // вернем исходное значение
 
   // далее __asm
 
   vector <int> :: iterator ptr_ZPos = zero_position.begin();
   // он мне нужен, т.к. zero_position берется из vector<vector<int>>
   // чтобы знать смещение от начала (грубо говоря)
   clock_t asm_begin = clock();
   for (int j = 0; j < 400000; ++j) {
      __asm {
         mov ecx, size_ZPos
         mov eax, vec
         mov ebx, ptr_ZPos
cycle:
         mov edx, [ebx] // получили номер обнуляющей позиции
         shl edx, 2 // смещение для int кратно 4, делаю сдвиг
         mov dword ptr [eax + edx], 0
         add ebx, 4
         loop cycle
         mov edx, [ebx]
         shl edx, 2
         mov dword ptr [eax + edx], 0
      }
   }
   cout << "asm " << (clock() - asm_begin)/1000.0 << endl;
}
 
Текущее время: 22:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru