117 / 101 / 53
Регистрация: 13.04.2014
Сообщений: 233
|
|
1 | |
Выжать из процессора максимум03.03.2018, 11:02. Показов 2833. Ответов 16
Метки нет (Все метки)
Здравствуйте.
Необходимо написать одноразовую вычислительную программу (До безобразия просто: операции с целыми положительными числами размера 8 байт; два цикла: один вложен в другой; три переменных, не считая временных). Но объём данных очень большой, поэтому хочется задействовать процессор полностью (Все переменные по возможности регистровые и т.д.). В Assembler новичок, поэтому сразу возникает много вопросов: 1) Процессор AMD Phenom(tm) II P820 Triple-Core Processor 1.79 GHz ОС Windows 7 x64 Какой компилятор и среду разработки выбрать(MASM, FASM, TASM, GAS и т.д.)? 2) Какого прироста производительности можно ожидать(По сравнению с реализацией на ЯВУ типа c++)? 3) Необходимо увеличивать счётчик цикла до кв. корня из переменной("потолка"). Какая реализация на Assembler быстрее: на каждой итерации (их будет более 10^10) сравнивать квадрат счётчика с "потолком" или перед циклом высчитать корень из "потолка"(8 байтного целого числа) и на каждой итерации сравнивать с ним (если второй вариант быстрее, то как его реализовать эффективнее?) 4) Необходимо выполнять условный переход, если одно значение делится(без остатка) на другое. Как эффективно реализовать? (Все числа нечётные: не делятся на 2) 5) В процессоре 3 ядра, как их все задействовать? Если просто запустить 3 одинаковых программы одновременно(с разным набором данных), то можно ли ожидать увеличения общей производительности в 3 раза? 6) Насколько замедляет ОС действие программ? (т.е. если запустить ту же программу без ОС, то во сколько раз она будет быстрее работать?) Добавлено через 10 минут И какую литературу и/или прочие материалы вы посоветовали бы почитать?
0
|
03.03.2018, 11:02 | |
Ответы с готовыми решениями:
16
Выжать максимум с sape Выжать максимум из бесплатного продвижения Выжать максимум из 90 тысяч на сегодняшний день :( Выжать максимум с платы ECS C19-A |
Прощай, Мир!
1672 / 830 / 253
Регистрация: 26.05.2012
Сообщений: 3,056
|
|
03.03.2018, 11:38 | 2 |
orAnd, дождитесь модератора.. у него сегодня выходной.. он обычно все переришивает в конце недели..
3
|
117 / 101 / 53
Регистрация: 13.04.2014
Сообщений: 233
|
|
03.03.2018, 11:44 [ТС] | 3 |
proc3nt, спасибо за позитивный настрой!
0
|
Прощай, Мир!
1672 / 830 / 253
Регистрация: 26.05.2012
Сообщений: 3,056
|
|
03.03.2018, 11:54 | 4 |
а пока пьете просмотрите Библиографический список
2
|
Модератор
|
|
03.03.2018, 12:13 | 5 |
orAnd, обычно прирост производительности дают алгоритмы, а переписывание на ассемблер эффект, конечно же, имеет, но уже не столь значительный.
Значительного эффекта при переходе к ассемблеру можно добиться при использовании специфических команд процессора (наборы SIMD, наборы инструкций обработки бит, инструкции для исключения условных переходов при сравнениях). 1) FASM или MASM64 и пробовать создать программу под x64 2) если не использовать инструкции SIMD, то прироста скорости почти не будет 3) нужно поискать в интернете алгоритмы целочисленного извлечения квадратного корня и попробовать преобразовать их к командам SIMD. Помимо классических (итерации по Ньютону, сумма нечётных) существуют и быстрые с использованием магических чисел - на Хабрахабре видел описание такого в пределах 2017 года. 4) выполняйте переход, кто же запрещает? 5) средствами ОС. Тут нечего сказать не могу, т.к. не интересовался и не знаю. Читал, что для распараллеливания математических расчётов применяют библиотеку OpenMP. 6) сложно сказать. Конечно замедляется, но и в DOS происходят немаскируемые прерывания, меняющие результаты замеров. Остаётся ощущение о задаче поиска простых чисел. Если нужно не факторизовывать числа, а только проверять на простоту - можно воспользоваться вероятностными критериями простоты. А если факторизовывать - то почитать об алгоритмах факторизации. Как всегда - первичны алгоритмы. К задаче поиска простых чисел примыкают задачи криптографии. Поэтому сразу предупреждаю - обсуждение взлома на форуме запрещено.
1
|
117 / 101 / 53
Регистрация: 13.04.2014
Сообщений: 233
|
|
03.03.2018, 12:35 [ТС] | 6 |
Спасибо.
Действительно, можно подумать почитав мои вопросы, но простые числа я искать не собираюсь. Нет, я о таком и не думал. А где можно почитать про специфические команды?
0
|
642 / 151 / 60
Регистрация: 08.04.2015
Сообщений: 390
|
|
03.03.2018, 14:55 | 7 |
2) Зависит от алгоритма и от использованного компилятора ЯВУ. Примерный рост будет в 1,2-1,5 раза, больше вряд ли.
3) Конечно же, извлечь 1 раз квадратный корень до входа в цикл быстрее, чем умножать в каждом цикле. И об эффективности этого разового действия можно не заботиться, т. к. даже при неэффективной реализации влияние на общий итог будет абсолютно мизерным. 5, 6) Да, 3 копии дадут прирост почти в 3 раза. Естественно, ОС забирает некоторую часть процессорного времени, но это единицы процентов. Можно внутри одной программы создать несколько потоков, по производительности будет примерно то же, как несколько однопоточных копий, но в реализации сложнее. Не совсем в тему. Если вычисления можно распараллелить, то современные видеокарты позволяют выполнять их в сотни и тысячи раз быстрее, чем CPU. И код для GPU можно писать на ЯВУ, ассемблер осваивать не обязательно.
1
|
1624 / 806 / 146
Регистрация: 13.06.2015
Сообщений: 3,266
|
|
03.03.2018, 17:23 | 8 |
О, у нас тут ФСБ снова решила расшифровать RSA.
0
|
Asm/C++/Delphi/Py/PHP/VBA
|
|
03.03.2018, 23:27 | 9 |
FASM возьмите или С/С++ (компилятор GCC).
Всё зависит от прямоты рук и знания C++ и ассемблера. Поэтому может быть как прирост, так и замедление. Если знать и то, и другое достаточно хорошо, разница вряд ли будет больше 5-10%, ИМХО (а трудоёмкость может отличаться в разы). Те же SIMD инструкции можно реализовать и в C++, там же есть интринсики, с помощью которых можно фактически любую инструкцию выполнить. А как вы думаете, что быстрее: выполнять умножение + сравнение на каждом цикле или только сравнение? Корень не настолько трудоёмкая операция, чтобы 10^10 умножений выполнялись быстрее... С этим вопросом лучше в раздел алгоритмы. Почти наверняка самый быстрый алгоритм поиска НОД будет медленнее деления. Прямо в 3 – вряд ли, но около того – да. Такие вопросы задаёте, что неудобно отвечать... даже © Существенного прироста без ОС не получите, ИМХО. Можно дать максимальный приоритет процессу и потоку и всё будет нормально (ну если, конечно, у вас не будет запущен рендер двигающегося 3D-изображения) А вы всё же подумайте
2
|
117 / 101 / 53
Регистрация: 13.04.2014
Сообщений: 233
|
|
03.03.2018, 23:51 [ТС] | 10 |
Ясно, ожидать сильного ускорения простыми средствами не стоит.
Не могли бы вы дать немножко ссылок для мягкого старта? На чём лучше писать (C и OpenCL, C++ AMP и т.д.)? Какого ускорения можно ожидать при задействовании AMD Radeon HD 6500M/5600/5700 Series? Заранее спасибо.
0
|
Asm/C++/Delphi/Py/PHP/VBA
|
|
04.03.2018, 00:05 | 11 |
Вы реально хотите найти тут людей, которые специально вычисляли скорость математических операций на "AMD Phenom(tm) II P820 Triple-Core Processor 1.79 GHz" и на "AMD Radeon HD 6500M/5600/5700 Series" и получить какой-то коэффициент прироста?
Я вам могу только посоветовать что-то типа такого (для сравнения процессоров): http://www.cpubenchmark.net/CPU_mega_page.html К тому же, про какое ускорение вы спрашиваете: ускорение чего? Где алгоритм вашей программы? Как можно сравнивать на разных ЯП, архитектурах и пр. то, не знаю что? Какой-то гипотетический код. Да и вы же не думаете, что на процессоре X любой код будет выполняться всегда в N раз быстрее или медленнее, чем на процессоре Y ? Вне зависимости от того, что там написано... CUDA ещё посмотрите. Вот ссылка, куда смотреть Или вот: https://habrahabr.ru/post/96122/ (всё легко находится в Я)
1
|
117 / 101 / 53
Регистрация: 13.04.2014
Сообщений: 233
|
|
04.03.2018, 00:22 [ТС] | 12 |
Там будет написано приблизительно это:
Циклы очень большие ~1020 Я же не прошу точного значения N мне бы лишь порядок... Хотя это больше из любопытства. Возможно я ошибаюсь, но CUDA же только для NVIDIA?
0
|
1624 / 806 / 146
Регистрация: 13.06.2015
Сообщений: 3,266
|
|
04.03.2018, 00:28 | 13 |
Так нам господин orAnd в итоге скажет, зачем он собрался факторизовывать RSA-64?
Обыграть онлайн-казино, расковыряв последовательность рулетки? Распаковать архив с голыми фотками бывшей, который она коварно зашифровала? Где вообще сегодня может использоваться ключ, вскрытый ещё 15 лет назад?
0
|
117 / 101 / 53
Регистрация: 13.04.2014
Сообщений: 233
|
|
04.03.2018, 00:34 [ТС] | 14 |
Kukuxumushu, уверяю вас, я не собираюсь ничего факторизовывать, взламывать или расшифровывать.
0
|
1624 / 806 / 146
Регистрация: 13.06.2015
Сообщений: 3,266
|
|
04.03.2018, 00:43 | 15 |
У вас в первом посте стоит задача факторизации, которая используется фактически только в алгоритме дешифровки RSA.
И я сейчас за 10 минут накидал ваш код для 8-байтного числа - оно у меня на 1 ядре i3 M370 полностью перебралось секунд за 10 с выдачей ответа. А вам-то чего надо? За 0,01 сек, чтобы пачками сразу факторизовывать?
0
|
6770 / 2739 / 384
Регистрация: 17.02.2013
Сообщений: 4,047
|
|
04.03.2018, 02:23 | 16 |
Так в разделе "криптография" только этим и занимаются.
Добавлено через 13 минут Так порядок Вы и сами можете прикинуть. Компьютер типично перебирает миллион вариантов чего-нибудь в секунду. Распараллеливание в GPU даст прирост ну может на пару-тройку порядков. После прикидывается Х к Н и вычисляется по порядку величины сколько миллионов лет потребуется. Грубо говоря у вас 20-й порядок. Скинули 9 порядков, чтобы получить секунды. Скинули 7 порядков, чтобы получить года. Убедились, что столько не живут. Добавлено через 2 минуты В общем оптимизация не в ассемблере, оптимизация в алгоритме. Придумайте алгоритм в котором на порядки меньше надо было бы перебирать и все ништяки Ваши.
0
|
Asm/C++/Delphi/Py/PHP/VBA
|
|
04.03.2018, 08:07 | 17 |
Я думаю, раз в 10, 100 или 1000 (приблизительно)
Всё сильно зависит от производительности видеокарты и ЦП. Поищите, например, инфу о производительности в GFlops'ах ваших процессоров CPU и GPU. И сравните. Получите порядок. А ну да, у вас же AMD. Ну тогда OpenCL, наверное. Примерно так и есть "Скинули 9 порядков" – это если у вас 1 операция занимает наносекунду, т.е. выполняется 1 млрд операций в секунду. Покупайте какой-нибудь GeForce GTX 1080 Ti и сэкономите больше времени
1
|
04.03.2018, 08:07 | |
04.03.2018, 08:07 | |
Помогаю со студенческими работами здесь
17
Апгрейд ПК или как выжать максимум из своей системы Выжать максимум из железа: core 2 duo E6850,2*1024 PC6400 micron d9gmh,geforce 8800 gtx Даны действительные числа х, у, z Вычислить максимум (x.y) + максимум (y.z) + максимум (х z) Апгрейд выжать до максимума Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |