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

Профилирование, C++ и вставки ASM, прошу совета - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Чтение строки http://www.cyberforum.ru/cpp-beginners/thread859681.html
Можно ли прочитать строку например " string x="cout<<\"123\"<<endl;"; " и перевести сразу в код и что бы выдало ответ "123" а не "cout<<"123"<<endl;" ??
C++ подскажите как мне дописать код Вот в чем заключается моя задача Описание классов. Базовый класс "Строки": виртуальные функции вычисления длины и сортировки с выводом результата. Производный класс "Большие буквы": значение строки, конструктор с параметром, виртуальные функции вычисления длины и сортировка по возрастанию с выводом результата. Производный класс "Малые буквы": значение строки, конструктор с параметром,... http://www.cyberforum.ru/cpp-beginners/thread859680.html
std::max segfault C++
Программа пытается найти максимально больше слово в векторе. Не пойму в чём дело: #include <iostream> #include <string> #include <sstream> #include <vector> #include <iterator> #include <algorithm> bool cmp(std::vector<std::string>::iterator first, std::vector<std::string>::iterator second) {
Ошибка в задаче о восьми ферзях C++
Суть задачи заключается в том, что нужно суметь расставить на шахматной доске (8 х 8) восемь ферзей так, чтобы они не находились под боем друг друга (напомню, что ферзь (королева) бьет по прямой и по диагонали). #include <iostream> using namespace std; int arr; void resetQueen(int i,int j){ for(int x=0;x<8;x++){ --arr; --arr; int foo; foo = j-i+x;
C++ Дружественные функции и преоразование http://www.cyberforum.ru/cpp-beginners/thread859676.html
В классе есть конструкторы, 2 дружественные функции, оператор преобразование в long double и 2 метода для вывода и ввода полей класса. В main попытка long double умножить на объект и присвоить другому объекту значение. Вылазит ошибка. Если убрать оператор преобразования long double - все работает. Но не могу понять почему. В дружественных функциях мы указываем 2 объекта класса bMoney. Во время...
C++ Заголовочные файлы и файлы cpp Со временем сложилось представление что при написании программ стоит разделять МЕТА данные и данные, но для лучшего понимания своих действий хотелось бы знать что происходит с подключенными заголовочными файлами. Расскажу на пальцах, имеется foo.h и foo.cpp если: foo.h: #pragma once #include <Windows.h> #include "SuperSolders" int gCOUNTMOUSERBUTTON = 8; int array = {1,2,3,4,5,6}; class... подробнее

Показать сообщение отдельно
S_Gretski
Сообщений: n/a
09.05.2013, 08:41     Профилирование, C++ и вставки 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
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
    int radix=10;
    int n = 1;
    double X=0.0, summ=0.0, a,b,c,d,e;
    #define n 100000
    //int k(1);
    
for (int k = 1; k <= n; k++ )
{
    a = 9.0 *(k * k);
 
b = a - 1.0;
/*  _asm{
        finit
        fild n
        fld a
        fsub 
        fst b
        }*/
    
    c = k * b;
    d = 1.0 / c;
    summ += d;
}
 
QueryPerformanceCounter(&liPerfC1);
 
QueryPerformanceCounter(&liPerfC2);
 
liCount.QuadPart=liPerfC2.QuadPart-liPerfC1.QuadPart;
Count=_ui64toa(liCount.QuadPart, szCounter, radix);
sprintf(szBuffer,"a=%e, Count = %s",a, Count); 
    m_List.AddString(szBuffer); 
 
 
QueryPerformanceCounter(&liPerfC3);
 
liCount.QuadPart=liPerfC3.QuadPart-liPerfC2.QuadPart;
Count=_ui64toa(liCount.QuadPart, szCounter, radix);
sprintf(szBuffer,"b=%e, Count = %s",b, Count); 
    m_List.AddString(szBuffer); 
 
QueryPerformanceCounter(&liPerfC4);
 
liCount.QuadPart=liPerfC4.QuadPart-liPerfC3.QuadPart;
Count=_ui64toa(liCount.QuadPart, szCounter, radix);
sprintf(szBuffer,"c=%e, Count = %s",c, Count); 
    m_List.AddString(szBuffer); 
 
QueryPerformanceCounter(&liPerfC5);
 
liCount.QuadPart=liPerfC5.QuadPart-liPerfC4.QuadPart;
Count=_ui64toa(liCount.QuadPart, szCounter, radix);
sprintf(szBuffer,"d=%e, Count = %s",d, Count); 
    m_List.AddString(szBuffer);
 
QueryPerformanceCounter(&liPerfC6);
 
liCount.QuadPart=liPerfC6.QuadPart-liPerfC6.QuadPart;
Count=_ui64toa(liCount.QuadPart, szCounter, radix);
sprintf(szBuffer,"summ=%.10f, Count = %s",summ, Count); 
    m_List.AddString(szBuffer); 
}
Вот результат выполнения программы:

[IMG]http://s020.***********/i718/1305/a1/09c25d8dfaab.jpg[/IMG]

программа производит вычисления и показывает сколько было потрачено машинного времени на вычисление.
например на получение результата переменной b было потрачено 1157 единиц машинного времени.

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

С ассемблеров я не дружу, но стараюсь, читал форумы (в частности и ваш), искал информацию, но так сказать все равно не понимаю "физику процесса"

Вот я пробую переписать эту простую операцию на ASM
C++
1
2
3
4
5
6
7
8
//b = a - 1.0;
    _asm{
        finit
        fild n
        fld a
        fsub 
        fst b
        }
при отладке программы появляется ошибка:
error C2415: недопустимый тип операнда, (Появляется указатель на против команды fild n)

Подскажите пожалуйста, что я делаю не так и посоветуйте литературу где хорошо описано FPU и есть наглядные примеры.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 03:54. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru