Pull to refresh

Comments 6

А отличия в картинке - смотрите сами, сможете их разглядеть?

О
О

Отличия и вправду минимальные. Особенно если учесть, что это изображение показывающее разность между картинками сдлано ярче в 2,5 раза. (Для визуального определения мест, где отличия есть).

Ага, спасибо.
Я особо вьедливо не сравнивал картинки, потому что в обоих случаях это искусственно привнесённый шум (а не например lossless против lossy-сжатия).

Попытался собрать над тем, что было под рукой. Под рукой был телефон. Собирал в termux.

:~/Src/CardRaytracerSIMD$ gcc -o trace  ./CardMain.cpp
./CardMain.cpp:25:10: fatal error: 'conio.h' file not found
#include <conio.h>
         ^~~~~~~~~
1 error generated.

:~/Src/CardRaytracerSIMD$ vim ./CardMain.cpp

:~/Src/CardRaytracerSIMD$ gcc -o trace  ./CardMain.cpp
In file included from ./CardMain.cpp:28:
/data/data/com.termux/files/usr/lib/clang/14.0.6/include/immintrin.h:14:2: error: "This header is only meant to be used on x86 and x64 architecture"
#error "This header is only meant to be used on x86 and x64 architecture"
 ^

сначала ругнулся на conio.h. странно что этот инклуд в коде есть. Говорит что трейсер под linux даже не собирался. В linux этого хедера нет.

Ну а дальше выругалось на то, что у меня не x86/x64.

GCC в termux, если что, это clang

:~/Src/CardRaytracerSIMD$ file `which gcc`
/data/data/com.termux/files/usr/bin/gcc: symbolic link to clang-14
:~/Src/CardRaytracerSIMD$ gcc --version
clang version 14.0.6
Target: aarch64-unknown-linux-android24
Thread model: posix
InstalledDir: /data/data/com.termux/files/usr/bin

Изначально собиралось под Линукс, в исходном архиве есть бенчмарки, но похоже я по незнанию попортил кроссплатформеность.
Сейчас заменил getch на getchar, immintrin.h перенёс внутрь vExt_proc.
Для экзотических платформ нужно задать vExt_proc 0 и tracerProc tracer3, чтобы собрать автовекторизованную версию вместо векторных расширений, которые местами используют интринсики.

Когда твой проект выкапывают даже из вебархива =)

Насколько помню, компиляторы тех времен, не справлялись с автовекторизацией. И даже были казусы, когда мелкие изменения приводили к кратному замедлению.

У меня основной код был написан давно, в 2017-2018. Всё никак не мог статью дописать, хотелось именно статью, а не просто выложить на форуме. Дотянул до того, что форума уж нет...
И я помню, что например Clang 5 справлялся с векторизацией. А, ну есть же godbolt, можно точно сказать:
https://gcc.godbolt.org/z/ra5MTnfzb
Clang 3.3 и gcc 5.1 нужны для векторизации, 2013-2015 годы.
Но действительно, неустойчиво оно тогда работало, вот этот вариант - уже Clang 3.9 и gcc 4.7
https://gcc.godbolt.org/z/s3bPEzsrr
В том и смысл статьи, показать, что современные компиляторы менее капризны и при грамотном тюнинге кода многое делают сами.

Sign up to leave a comment.

Articles