Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
553 / 25 / 7
Регистрация: 12.11.2013
Сообщений: 52

AVX инструкции с использованием хидера imminitrin.h

19.09.2017, 23:36. Показов 3785. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!
Есть простенький код, который проверят 28 бит регистра RCX (ECX не использую, т.к. сборка 64 битная, а в 32 битной можно не париться с asm-файлом и просто использовать _asm{})

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
.code
 
AVX proc
    mov rax, 1
    cpuid
    xor rax, rax
    bt rcx, 28
    adc rax, rax
    ret
AVX endp
 
end
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
 
extern "C" bool AVX();
 
int main() {
    if (AVX()) std::cout << "AVX support" << std::endl;
    else std::cout << "AVX not support" << std::endl;
 
    std::cin.get();
    return 0;
}
в проекте соответственно выставлена Зависимость сборки на masm.

Можно ли эту проверку на AVX сделать через специальные интеловские хидеры без использования ассемблера?
Что-то такого плана (пример с сайта Intel)
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void saxpy(float a, const float* x, const float* y, float* __restrict z, size_t len) {
    size_t i = 0;
    __m256 a_ = _mm256_set1_ps(a);
 
    for (int len16_ = len & -16; i + 16 <= len16_; i += 16) {
        __m256 x1_ = _mm256_loadu_ps(x + i);
        __m256 x2_ = _mm256_loadu_ps(x + i + 8);
        __m256 y1_ = _mm256_loadu_ps(y + i);
        __m256 y2_ = _mm256_loadu_ps(y + i + 8);
        x1_ = _mm256_mul_ps(x1_, a_);
        x2_ = _mm256_mul_ps(x2_, a_);
        x1_ = _mm256_add_ps(x1_, y1_);
        x2_ = _mm256_add_ps(x2_, y2_);
        _mm256_storeu_ps(z + i, x1_);
        _mm256_storeu_ps(z + i + 8, x2_);
    }
 
    for (; i < len; ++i)
        z[i] = x[i] * a + y[i];
}

Я так понимаю все эти mov и прочие ассемблеровские команды уже определены такими структурами как _mm256_movehdup_ps и прочее.
1
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.09.2017, 23:36
Ответы с готовыми решениями:

SSE, AVX как включить?
Добрый день! Подскажите пожалуйста как дать компилятору команду компилировать код с инструкциями SSE / AVX? Что-то не могу найти в...

Проект не видит хидера
Есть проект, в нем есть файл *.h и два *.cpp файла, в которых он используется. В обоих он подключен инклудом. При попытке откомпилировать...

Использование переменной одного хидера в других
доброе утро, день, вечер. у меня вопрос следующий. имеется 3 хидера. Form1.h, analyse.h, tabs.h. последние 2 включены в первый. имеется...

6
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
20.09.2017, 09:38
Цитата Сообщение от cloo Посмотреть сообщение
Можно ли эту проверку на AVX сделать через специальные интеловские хидеры без использования ассемблера?
См. тут:
https://msdn.microsoft.com/ru-... dteyh.aspx
1
553 / 25 / 7
Регистрация: 12.11.2013
Сообщений: 52
20.09.2017, 10:12  [ТС]
DrOffset, этот пример я видел, и это не то о чем спрашиваю я.
Я хочу понять, можно ли код на ассемблере, который я написал выше переписать на "спецификаторы" __m256 ?
Вот что я хочу понять - можно ли сделать так
C++
1
2
3
4
5
6
_mm256_movehdup_ps(...); //  mov rax, 1
__cpuid(...); // cpuid
_mm256_xor_ps(...); // xor rax, rax
_mm256_bitset_ps(...); // bt rcx, 28
_mm256_adc_ps(...); // adc rax, rax
return; // ret
я в этих "спецификаторах" не особо разбираюсь и поэтому спрашиваю можно ли сделать что-то подобное.
1
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
20.09.2017, 10:29
Лучший ответ Сообщение было отмечено cloo как решение

Решение

Цитата Сообщение от cloo Посмотреть сообщение
Я хочу понять, можно ли код на ассемблере, который я написал выше переписать на "спецификаторы" __m256 ?
Зачем переписывать один в один, если интринсик __cpuid сделал почти всю работу, которую ты хочешь расписать явно?
Тебе достаточно только проверить результат:
C++
1
2
3
4
    int cpuInfo[4];
    __cpuid(cpuInfo, 1);
     bool cpuAVXSuport = cpuInfo[2] & (1 << 28) ;
    // или cpuAVXSuport = _bittest(cpuInfo + 2, 28); // bt
1
553 / 25 / 7
Регистрация: 12.11.2013
Сообщений: 52
20.09.2017, 10:42  [ТС]
Лучший ответ Сообщение было отмечено _lunar_ как решение

Решение

Цитата Сообщение от DrOffset Посмотреть сообщение
Зачем переписывать один в один, если интринсик __cpuid сделал почти всю работу, которую ты хочешь расписать явно?
Это понятно, но вопрос в другом.
Нужно использовать функции __mm256...
Сможете переписать эти 5 строк, чтобы получилось примерно так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <imminitrin.h>
 
bool AVX(...){
    _mm256_movehdup_ps(...); //  mov rax, 1
    __cpuid(...); // cpuid
    _mm256_xor_ps(...); // xor rax, rax
    _mm256_bittest_ps(...); // bt rcx, 28
    _mm256_adc_ps(...); // adc rax, rax
    return; // ret
}
 
int main() {
    if (AVX()) std::cout << "AVX support" << std::endl;
    else std::cout << "AVX not support" << std::endl;
 
    std::cin.get();
    return 0;
}
1
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
20.09.2017, 10:52
Цитата Сообщение от cloo Посмотреть сообщение
Нужно использовать функции __mm256...
Так не получится.

Цитата Сообщение от cloo Посмотреть сообщение
вопрос в другом.
И вообще, тебе шашечки или ехать?
1
553 / 25 / 7
Регистрация: 12.11.2013
Сообщений: 52
20.09.2017, 11:20  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
Так не получится.
Вот наконец ответ которого я ждал.
Всё, вопрос закрыт, спасибо.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.09.2017, 11:20
Помогаю со студенческими работами здесь

Выполнить задания с использованием инструкции выбора if и с использованием условного оператора
Выполнить задания с использованием инструкции выбора if и с использованием условного оператора ? (если он присутствует в языке...

Про инклюды (не могу подключить хидера)
Привет! Есть две папки &quot;classes&quot; и &quot;functions&quot; в папке &quot;incl&quot;. Мне нужно подключить хидера из &quot;classes&quot; в хидера из...

Как возможно выйти в инструкции switch в начало самой инструкции при нажатии "не правильной" кнопки
В целом у меня вопрос такой: Как возможно выйти в инструкции switch в начало самой инструкции при нажатии не правильной кнопки. Вот...

Нужно засунуть код инструкции в 4 char'a так, чтобы в памяти это был код инструкции.
Доброго времени суток. Есть дизассемблированный код. Нужно засунуть код иструкции в 4 чара так, чтобы в памяти это был код инструкции. Как...

Что такое блоки и инструкции, вложенные инструкции и главные инструкции?
Что это такое?


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru