Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
Dinkin
654 / 451 / 118
Регистрация: 31.05.2013
Сообщений: 2,361
Записей в блоге: 3
1

X32-VS-X64-VS-Clang

14.04.2016, 18:08. Просмотров 508. Ответов 22
Метки нет (Все метки)

Добрый день.
Форум поддержки RadStudio, утверждает ,что компилятор CLANG в XE10, отлично оптимизирует, что приводит к ускорению выполнения кода, как под 32 приложение . Ниже я привел несколько тестов, которые не на что не претендуют и носят сугубо публицистки характер (все было протестировано на одной машине x64):

Тест 1 (Простой код побайтового шифрования и дешифрования). В тесте участвует текст около 1 млн символов.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  std::auto_ptr<TStringList> lst(new TStringList);
 
  for(int i=0;i<500;++i)
    lst->Add(Memo2->Text);
 
  AnsiString st ="5";
  TByteDynArray  P =st.BytesOf();
  TByteDynArray  Z=lst->Text.BytesOf();
 
  //Шифруем
  DWORD t=GetTickCount();
  for(int i1=0;i1<Z.Length;++i1)  Z[i1]^=P[0];
 
  //Делаем расшифровку
  for(int i1=0;i1<Z.Length;++i1)  Z[i1]^=P[0];
 
  Memo1->Lines->Add(GetTickCount()-t);
Тест 2 Работа с текстом, простая автозамена текста. Около 300 тыщ символов.

C++
1
2
3
4
5
6
7
8
  std::auto_ptr<TStringList> lst(new TStringList);
 
  for(int i=0;i<4;++i)
    lst->Add(Memo2->Text);
 
  DWORD t=GetTickCount();
  StringReplace(lst->Text,"a","b",TReplaceFlags()<<rfReplaceAll);
  Memo1->Lines->Add(GetTickCount()-t);
Тест 3 На математические вычисления, с форума взял темы вычисления площади фигуры

C++
1
2
3
4
5
double f(double x)
{
 
        return - x*x * sin(x + 2) * exp(x*x);
}
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
        DWORD t=GetTickCount();
 
        double x_left = -1;
        double x_right = 1;
        double y_bottom = -3;
        double y_top = 3;
        double fSpar = (x_right - x_left) * (y_top-y_bottom); // площадь прямоугольника
        // количество случайных точек
        int N = 1000000;
        // количество точек, попавших под график функции
        int K = 0;
        randomize();
 
        // вычисляем кол-во точек, попадающие под график функции
        for ( int i = 0; i < N; i++ )
        {
                double x = x_left + (x_right-x_left) * (1.0 * rand() / RAND_MAX); // случайная точка на оси x
                double y = y_bottom + (y_top-y_bottom) * (1.0 * rand() / RAND_MAX); // случайная точка на оси y
 
                if ( y < f(x) ) K++;
        }
        double fS = fSpar * K / N; // площадь, найденная геометрическим методом Монте-Карло
 
 
        Memo1->Lines->Add(GetTickCount()-t);

PS .Может я и неверно замерял...ниже график сравнений
1
Миниатюры
X32-VS-X64-VS-Clang  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.04.2016, 18:08
Ответы с готовыми решениями:

clang начал поддерживать С++14
Привет! Вот такая новость :) Все, что реализовано можно посмотреть здесь (там...

[SFINAE] GCC/Clang - success. CL - failed
добрый вечер. следующий код успешно собирают gcc/clang но не может собрать...

Unresolved external '__InitExceptBlockLDTC' после перехода на CLANG
Имеется большой проект, успешно собирается на Seattle с использованием...

Можно ли дополнительно к установленной Windows 7 x32 установить Windows 7 x64, а затем удалить Windows 7 x32?
Хочу перейти на x64. Но сносить сразу Win 7 x32 не хочу. Хочу постепенно...

Пытаемся прикрутить Clang к QtCreator под Windows7 x64 посредством MSYS2
По мотивам этой темы: DrOffset, а как?

22
gumi250
431 / 398 / 57
Регистрация: 06.02.2012
Сообщений: 1,373
15.04.2016, 00:57 2
1. У меня ХЕ7. В ней два компилятора х32 и х64. Это которые из ваших трех компиляторов? х32 и х64 Classic?
2. В ХЕ10 добавили третий компилятор?
3. Числа на графике это время выполнения?

Меня заинтересовал результат теста 3. Никогда я не видел чтобы х64 считал много медленнее х32. Как правило или одинаково или х64 быстрее, причем бывает значительно быстрее (в разы).
Я сделал ваш тест 3. Но взял 1Е8 точек. Результат: х64 -6240мс, х32-37207мс. Т.е. х64 в 5 раз быстрее. Я даже удивлен почему х64 это считал. Т.к. результат счета нигде не используется компилятор мог банально его просто откинуть и тогда время выполнения было бы 0.
0
Dinkin
654 / 451 / 118
Регистрация: 31.05.2013
Сообщений: 2,361
Записей в блоге: 3
15.04.2016, 09:28  [ТС] 3
1-2) В XE10 добавили c++11 для X32? а для 64 тип нет =)
3) Да время выполнения.

Так вот по суте x64 должен быстрее считать x32, и бытует мнение, что в последней версии среды, не совсем на совесть поработали со всеми компиляторами = ).
0
gumi250
431 / 398 / 57
Регистрация: 06.02.2012
Сообщений: 1,373
15.04.2016, 10:10 4
Цитата Сообщение от Dinkin Посмотреть сообщение
Так вот по суте x64 должен быстрее считать x32, и бытует мнение, что в последней версии среды, не совсем на совесть поработали со всеми компиляторами = ).
Вы хотите сказать, что в XE7 x64 обгоняет х32 в 5 раз (мой тест3), а в XE10 x64 отстает от х32 в 15 раз (ваш тест 3)? Т.е. в XE10 x64 стал медленнее в 45 раз. Слабо верится. У вас проц не от АМД или может древний какой?

А CodeGuard поддерживается в новом компиляторе с++11?
0
Dinkin
654 / 451 / 118
Регистрация: 31.05.2013
Сообщений: 2,361
Записей в блоге: 3
15.04.2016, 12:41  [ТС] 5
у меня тоже рабочая XE7, а на тестовом(слабом ПК) стоит XE10)
Ну конечно можно не верить,может и я не верно что то замерял...но тесты делал с десяток разов для каждого компилятора)
PS мне тоже стало подозрительно что X32 обгоняет X64 =)

Цитата Сообщение от gumi250 Посмотреть сообщение
А CodeGuard
пишут что да.
0
gumi250
431 / 398 / 57
Регистрация: 06.02.2012
Сообщений: 1,373
15.04.2016, 13:28 6
Цитата Сообщение от Dinkin Посмотреть сообщение
у меня тоже рабочая XE7, а на тестовом(слабом ПК) стоит XE10)
Может дело в вашем компе? Не может х64 вдруг стать в 45 раза медленнее. Попробуйте скомпилировать тесты в ХЕ10 и запустить их на другой машине. Можете скомпилить их в ХЕ7 и запустить на вашем "слабом ПК". Можете выложить сюда скомпилированные в ХЕ10, я тоже их запущу.
1
Dinkin
654 / 451 / 118
Регистрация: 31.05.2013
Сообщений: 2,361
Записей в блоге: 3
15.04.2016, 13:54  [ТС] 7
gumi250, Хорошая идея!! в архиве 3 сборки (64,32 и 32 с++11), со браные на XE10 =)
0
Вложения
Тип файла: 7z TestForum.7z (2.31 Мб, 3 просмотров)
Dinkin
654 / 451 / 118
Регистрация: 31.05.2013
Сообщений: 2,361
Записей в блоге: 3
15.04.2016, 13:56  [ТС] 8
PS. Замечу, что до Update1, собраные сборки через Clang, могли работать только x32 машинах, и не запускались на x64.
0
gumi250
431 / 398 / 57
Регистрация: 06.02.2012
Сообщений: 1,373
15.04.2016, 14:44 9
Сделайте итераций раз в 100 больше или в едит. А то менее 100 мс получается точность маленькая.
0
Dinkin
654 / 451 / 118
Регистрация: 31.05.2013
Сообщений: 2,361
Записей в блоге: 3
15.04.2016, 15:33  [ТС] 10
прошу прощения,мог я изначально это предусмотреть
0
Вложения
Тип файла: 7z TestForum2.7z (2.40 Мб, 2 просмотров)
gumi250
431 / 398 / 57
Регистрация: 06.02.2012
Сообщений: 1,373
15.04.2016, 16:21 11
В картинке ошибка ХЕ6, а не ХЕ7. Вот так получилось. В скобках указано кол-во тестов. Не знаю почему у меня раньше в тесте3 в ХЕ6 x64 был в 5 раз быстрее х32 (артифакт наверно). Вообщем сейчас так. Однако х32 они подтянули, а в х64 просели.
1
Миниатюры
X32-VS-X64-VS-Clang  
Dinkin
654 / 451 / 118
Регистрация: 31.05.2013
Сообщений: 2,361
Записей в блоге: 3
15.04.2016, 16:25  [ТС] 12
Цитата Сообщение от gumi250 Посмотреть сообщение
Вообщем сейчас так. Однако х32 они подтянули, а в х64 просели
Еще один жирный минус в сторону XE10
0
gumi250
431 / 398 / 57
Регистрация: 06.02.2012
Сообщений: 1,373
15.04.2016, 16:44 13
Прошу прощение, крайне не удобно, но стал делать тесты на втором компе и нашел еще одну ошибку, перепутал CLang и x64.
Последняя версия такая. Вообщем в ХЕ10 все стало быстрее, а особенно х32.
1
Миниатюры
X32-VS-X64-VS-Clang  
gumi250
431 / 398 / 57
Регистрация: 06.02.2012
Сообщений: 1,373
15.04.2016, 16:48 14
А что у вас за комп? Что то наши результаты сильно разняться.
0
Dinkin
654 / 451 / 118
Регистрация: 31.05.2013
Сообщений: 2,361
Записей в блоге: 3
15.04.2016, 16:50  [ТС] 15
а тестировал на слабеньком подопытном компе на котором i3-4150 3,ГГц. =)))
Ну то есть архитектура процессора тоже получается играет важную роль =))
0
gumi250
431 / 398 / 57
Регистрация: 06.02.2012
Сообщений: 1,373
15.04.2016, 17:01 16
Не такой он и старенький. Да и архитектуры у них похожи. Вы бы еще раз проверили. Не может х64 так сильно проигрывать х32 как у вас в тесте.
0
Dinkin
654 / 451 / 118
Регистрация: 31.05.2013
Сообщений: 2,361
Записей в блоге: 3
15.04.2016, 20:56  [ТС] 17
В общем протестировал на i7-4770 и следующий результат (только текст для первого теста выставлял 500, остальное как у Вас). Чет на каждом ПК что то выигрывает свое, и что то проигрывает, и везде поразомну =)
0
Миниатюры
X32-VS-X64-VS-Clang  
Avazart
Эксперт С++
7722 / 5631 / 549
Регистрация: 10.12.2010
Сообщений: 25,401
Записей в блоге: 17
16.04.2016, 00:22 18
Чет я не понял ваших обозначений....
Старый компилятор bcb был только под x32.
Потом добавили clang x64, а теперь и clang x32.
Откуда вы взяли "классик" x64?

Не по теме:

И надеюсь тестируете в release сборке.

0
Dinkin
654 / 451 / 118
Регистрация: 31.05.2013
Сообщений: 2,361
Записей в блоге: 3
16.04.2016, 00:40  [ТС] 19
Под x64 Classic, я понимал Clang в XE10 (так как его не отключить, и он по умолчанию). Думал так понятнее будет, а оказалось-нет.
А для 32 XE10 позволяет отключить или отключить (ниже скрин).
Только в Reles, выше архив уже с собранными exe.

PS.Не исключено что что то недопонял в Clang и делаю не верно.
0
Миниатюры
X32-VS-X64-VS-Clang  
Avazart
Эксперт С++
7722 / 5631 / 549
Регистрация: 10.12.2010
Сообщений: 25,401
Записей в блоге: 17
16.04.2016, 01:00 20
Цитата Сообщение от Dinkin Посмотреть сообщение
так как его не отключить
Потому что старого борландского компилятора под x32 не было никогда, не на что переключаться.
А если говорят классик обычно понимают старый компилятор...

Цитата Сообщение от Dinkin Посмотреть сообщение
Думал так понятнее будет, а оказалось-нет.
Не тем думали, что мешало писать по нормальному <название_компилятора>_<битность> ?
1
16.04.2016, 01:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.04.2016, 01:00

x32 // x64 - ? Подскажите
В общем если переходишь на x64 (Win 8), ничего если использовать тот же софт...

X32 или x64?
Здравствуйте! Добрался до своего старого ПК. Лазал по свойствам, и увидел, что...

X32, X86, X64
У меня сейчас установлена винда 7 х32, хочу установить windows8. Я смогу...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru