Я работаю над несколькими проектами msvc, которые хочу также скомпилировать с помощью Visual Studio clang-cl. Проекты msvc компилируются нормально, без ошибок (ошибок Intellisense и т. д.). Изменение набора инструментов платформы на LLVM (clang-cl) приводит к множеству различных ошибок компиляции intellisense и множеству различных отвлекающих факторов в исходном коде Intellisense.
Чтобы сосредоточиться только на самом отвлекающем моменте: clang-cl неправильно отображает макросы для AVX512, хотя он правильно скомпилирует код AVX512. Я публикую пример кода для небольшого проекта, иллюстрирующего проблему.
Если я компилирую с помощью Arch:/SSE2, Arch:/AVX или Arch:/AVX2, intellisense показывает правильные значения макросов, а код компилируется и работает как положено. Если я компилирую с помощью Arch:/AVX512, intellisense показывает INSTRSET = 2 и SIMD_SIZE_SPN = 2, но проект компилируется и работает правильно со значениями AVX512 INSTRSET = 10 и SIMD_SIZE_SPN = 8.
Для командной строки «Дополнительные параметры» я использую либо ничего, либо различные комбинации -mavx512f -mavx512vl -mavx512bw -mavx512dq. Ничто не имеет никакого значения.
Поэтому мой вопрос, сфокусированный на лазере: как мне заставить макросы /arch:AVX512 отображаться должным образом в VS IDE для clang-cl?
Конечно, более важный вопрос: как мне сделать intellisense не такой уж катастрофой в VS IDE для clang-cl?
Я был Гуглил это время от времени в течение недели, но безуспешно. Похоже, что нужно просто добавить один или несколько «дополнительных каталогов включения», но я нигде не могу найти ничего конкретного.
Visual Studio 2022
Platform Toolset LLVM (clang-cl)
Стандарт языка C++ ISO C++20
Версия набора инструментов LLVM 19.1.5
Установщик Visual Studio сообщает мне, что у меня есть «Компилятор C++ Clang для Windows (19.1.5)» и «Поддержка MSBuild для набора инструментов LLVM (clang-cl)».
#include
//#include
#include
#if defined ( __AVX512VL__ ) && defined ( __AVX512BW__ ) && defined ( __AVX512DQ__ ) && defined ( __AVX512CD__ ) && ( __AVX512F__ )
#define INSTRSET 10
#elif defined ( __AVX512F__ ) || defined ( __AVX512__ )
#define INSTRSET 9
#elif defined ( __AVX2__ )
#define INSTRSET 8
#elif defined ( __AVX__ )
#define INSTRSET 7
#elif defined ( __SSE4_2__ )
#define INSTRSET 6
#elif defined ( __SSE4_1__ )
#define INSTRSET 5
#elif defined ( __SSSE3__ )
#define INSTRSET 4
#elif defined ( __SSE3__ )
#define INSTRSET 3
#elif defined ( __SSE2__ ) || defined ( __x86_64__ )
#define INSTRSET 2
#elif defined ( __SSE__ )
#define INSTRSET 1
#elif defined ( _M_IX86_FP ) // Defined in MS compiler. 1: SSE, 2: SSE2
#define INSTRSET _M_IX86_FP
#else
#define INSTRSET 0
#endif // instruction set defines
#if INSTRSET >= 9
#define SIMD_SIZE_SPN 8
#elif INSTRSET >= 7
#define SIMD_SIZE_SPN 4
#else
#define SIMD_SIZE_SPN 2
#endif
int main() {
printf("\nhello ms clang\n");
double xarr[SIMD_SIZE_SPN] = {};
#if SIMD_SIZE_SPN == 8
__m512d vec1, vec2;
vec1 = _mm512_setr_pd(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0);
vec2 = _mm512_setr_pd(8.0, 7.0, 6.0, 5.0, 4.0, 3.0, 2.0, 1.0);
vec1 = _mm512_mul_pd(vec1, vec2); //8, 14, 18, 20, 20, 18, 14, 8
_mm512_storeu_pd(xarr, vec1);
#elif SIMD_SIZE_SPN == 4
__m256d vec1, vec2;
vec1 = _mm256_setr_pd(1.0, 2.0, 3.0, 4.0);
vec2 = _mm256_setr_pd(4.0, 3.0, 2.0, 1.0);
vec1 = _mm256_mul_pd(vec1, vec2); //4, 6, 6, 4
_mm256_storeu_pd(xarr, vec1);
#else
__m128d vec1, vec2;
vec1 = _mm_setr_pd(1.0, 2.0);
vec2 = _mm_setr_pd(2.0, 1.0);
vec1 = _mm_mul_pd(vec1, vec2); //2, 2
_mm_storeu_pd(xarr, vec1);
#endif
printf("\ninstrset = %i \n", INSTRSET);
printf("\nvec_size = %i \n", SIMD_SIZE_SPN); //8, 4, 2
printf("\nlast = %8.2f \n", xarr[SIMD_SIZE_SPN - 1]); //8, 4, 2
printf("\nsizeof(long) = %i \n", sizeof(long));
return 0;
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... -visual-st
Как мне заставить intellisense работать, хотя бы минимально, для clang-cl в Visual Studio 2022? ⇐ C++
Программы на C++. Форум разработчиков
1760025580
Anonymous
Я работаю над несколькими проектами msvc, которые хочу также скомпилировать с помощью Visual Studio clang-cl. Проекты msvc компилируются нормально, без ошибок (ошибок Intellisense и т. д.). Изменение набора инструментов платформы на LLVM (clang-cl) приводит к множеству различных ошибок компиляции intellisense и множеству различных отвлекающих факторов в исходном коде Intellisense.
Чтобы сосредоточиться только на самом отвлекающем моменте: clang-cl неправильно отображает макросы для AVX512, хотя он правильно скомпилирует код AVX512. Я публикую пример кода для небольшого проекта, иллюстрирующего проблему.
Если я компилирую с помощью Arch:/SSE2, Arch:/AVX или Arch:/AVX2, intellisense показывает правильные значения макросов, а код компилируется и работает как положено. Если я компилирую с помощью Arch:/AVX512, intellisense показывает INSTRSET = 2 и SIMD_SIZE_SPN = 2, но проект компилируется и работает правильно со значениями AVX512 INSTRSET = 10 и SIMD_SIZE_SPN = 8.
Для командной строки «Дополнительные параметры» я использую либо ничего, либо различные комбинации -mavx512f -mavx512vl -mavx512bw -mavx512dq. Ничто не имеет никакого значения.
Поэтому мой вопрос, сфокусированный на лазере: как мне заставить макросы /arch:AVX512 отображаться должным образом в VS IDE для clang-cl?
Конечно, более важный вопрос: как мне сделать intellisense не такой уж катастрофой в VS IDE для clang-cl?
Я был Гуглил это время от времени в течение недели, но безуспешно. Похоже, что нужно просто добавить один или несколько «дополнительных каталогов включения», но я нигде не могу найти ничего конкретного.
Visual Studio 2022
Platform Toolset LLVM (clang-cl)
Стандарт языка C++ ISO C++20
Версия набора инструментов LLVM 19.1.5
Установщик Visual Studio сообщает мне, что у меня есть «Компилятор C++ Clang для Windows (19.1.5)» и «Поддержка MSBuild для набора инструментов LLVM (clang-cl)».
#include
//#include
#include
#if defined ( __AVX512VL__ ) && defined ( __AVX512BW__ ) && defined ( __AVX512DQ__ ) && defined ( __AVX512CD__ ) && ( __AVX512F__ )
#define INSTRSET 10
#elif defined ( __AVX512F__ ) || defined ( __AVX512__ )
#define INSTRSET 9
#elif defined ( __AVX2__ )
#define INSTRSET 8
#elif defined ( __AVX__ )
#define INSTRSET 7
#elif defined ( __SSE4_2__ )
#define INSTRSET 6
#elif defined ( __SSE4_1__ )
#define INSTRSET 5
#elif defined ( __SSSE3__ )
#define INSTRSET 4
#elif defined ( __SSE3__ )
#define INSTRSET 3
#elif defined ( __SSE2__ ) || defined ( __x86_64__ )
#define INSTRSET 2
#elif defined ( __SSE__ )
#define INSTRSET 1
#elif defined ( _M_IX86_FP ) // Defined in MS compiler. 1: SSE, 2: SSE2
#define INSTRSET _M_IX86_FP
#else
#define INSTRSET 0
#endif // instruction set defines
#if INSTRSET >= 9
#define SIMD_SIZE_SPN 8
#elif INSTRSET >= 7
#define SIMD_SIZE_SPN 4
#else
#define SIMD_SIZE_SPN 2
#endif
int main() {
printf("\nhello ms clang\n");
double xarr[SIMD_SIZE_SPN] = {};
#if SIMD_SIZE_SPN == 8
__m512d vec1, vec2;
vec1 = _mm512_setr_pd(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0);
vec2 = _mm512_setr_pd(8.0, 7.0, 6.0, 5.0, 4.0, 3.0, 2.0, 1.0);
vec1 = _mm512_mul_pd(vec1, vec2); //8, 14, 18, 20, 20, 18, 14, 8
_mm512_storeu_pd(xarr, vec1);
#elif SIMD_SIZE_SPN == 4
__m256d vec1, vec2;
vec1 = _mm256_setr_pd(1.0, 2.0, 3.0, 4.0);
vec2 = _mm256_setr_pd(4.0, 3.0, 2.0, 1.0);
vec1 = _mm256_mul_pd(vec1, vec2); //4, 6, 6, 4
_mm256_storeu_pd(xarr, vec1);
#else
__m128d vec1, vec2;
vec1 = _mm_setr_pd(1.0, 2.0);
vec2 = _mm_setr_pd(2.0, 1.0);
vec1 = _mm_mul_pd(vec1, vec2); //2, 2
_mm_storeu_pd(xarr, vec1);
#endif
printf("\ninstrset = %i \n", INSTRSET);
printf("\nvec_size = %i \n", SIMD_SIZE_SPN); //8, 4, 2
printf("\nlast = %8.2f \n", xarr[SIMD_SIZE_SPN - 1]); //8, 4, 2
printf("\nsizeof(long) = %i \n", sizeof(long));
return 0;
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79786621/how-do-i-get-intellisense-working-at-least-minimally-for-clang-cl-in-visual-st[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия