Compare commits
2
Commits
cfdf11ac7c
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5cb0ad82bd
|
||
|
|
948d16d378 |
No files matched your search
@@ -1,3 +1,5 @@
|
|||||||
myexp
|
myexp
|
||||||
|
test_auto_vectorize
|
||||||
|
**/*.s
|
||||||
**/*.o
|
**/*.o
|
||||||
**/*.swp
|
**/*.swp
|
||||||
Binary file not shown.
+3
-3
@@ -64,7 +64,7 @@ void clampedExpVector(float *values, int *exponents, float *output, int N)
|
|||||||
float *tmp = new float[VECTOR_WIDTH];
|
float *tmp = new float[VECTOR_WIDTH];
|
||||||
for (int j = 0; i + j < N; j++)
|
for (int j = 0; i + j < N; j++)
|
||||||
tmp[j] = values[i+j];
|
tmp[j] = values[i+j];
|
||||||
for (int j = N; j < i + VECTOR_WIDTH; j++)
|
for (int j = N % VECTOR_WIDTH; j < VECTOR_WIDTH; j++)
|
||||||
tmp[j] = 0;
|
tmp[j] = 0;
|
||||||
_pp_vload_float(x, tmp, maskAll);
|
_pp_vload_float(x, tmp, maskAll);
|
||||||
delete []tmp;
|
delete []tmp;
|
||||||
@@ -76,7 +76,7 @@ void clampedExpVector(float *values, int *exponents, float *output, int N)
|
|||||||
int *tmp = new int[VECTOR_WIDTH];
|
int *tmp = new int[VECTOR_WIDTH];
|
||||||
for (int j = 0; i + j < N; j++)
|
for (int j = 0; i + j < N; j++)
|
||||||
tmp[j] = exponents[i+j];
|
tmp[j] = exponents[i+j];
|
||||||
for (int j = N; j < i + VECTOR_WIDTH; j++)
|
for (int j = N % VECTOR_WIDTH; j < VECTOR_WIDTH; j++)
|
||||||
tmp[j] = 0;
|
tmp[j] = 0;
|
||||||
_pp_vload_int(y, tmp, maskAll);
|
_pp_vload_int(y, tmp, maskAll);
|
||||||
delete []tmp;
|
delete []tmp;
|
||||||
@@ -99,7 +99,7 @@ void clampedExpVector(float *values, int *exponents, float *output, int N)
|
|||||||
|
|
||||||
if (i + VECTOR_WIDTH > N) {
|
if (i + VECTOR_WIDTH > N) {
|
||||||
float *tmp = new float[VECTOR_WIDTH];
|
float *tmp = new float[VECTOR_WIDTH];
|
||||||
_pp_vstore_float(output + i, result, maskAll);
|
_pp_vstore_float(tmp, result, maskAll);
|
||||||
for (int j = 0; i + j < N; j++)
|
for (int j = 0; i + j < N; j++)
|
||||||
output[i+j] = tmp[j];
|
output[i+j] = tmp[j];
|
||||||
delete []tmp;
|
delete []tmp;
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
RUNS=${1:-5}
|
||||||
|
median() { sort -n | awk '{a[NR]=$1} END{print (NR%2)?a[(NR+1)/2]:(a[NR/2]+a[NR/2+1])/2}'; }
|
||||||
|
for cfg in "novec:" "vec:VECTORIZE=1" "avx2:VECTORIZE=1 AVX2=1"; do
|
||||||
|
name=${cfg%%:*}; flags=${cfg#*:}
|
||||||
|
make -s clean; make -s $flags >/dev/null 2>&1 || { echo "build $name failed"; exit 1; }
|
||||||
|
t=$(for r in $(seq $RUNS); do ./test_auto_vectorize -t 1 | grep -oE '^[0-9.]+'; done | median)
|
||||||
|
echo "$name $t"; eval "T_$name=$t"
|
||||||
|
done
|
||||||
|
awk -v n=$T_novec -v v=$T_vec -v a=$T_avx2 'BEGIN{printf "vec/novec speedup: %.2fx\navx2/vec speedup: %.2fx\navx2/novec speedup: %.2fx\n", n/v, v/a, n/a}'
|
||||||
+4
-1
@@ -1,7 +1,10 @@
|
|||||||
#include "test.h"
|
#include "test.h"
|
||||||
|
|
||||||
void test1(float *a, float *b, float *c, int N) {
|
void test1(float *__restrict a, float *__restrict b, float *__restrict c, int N) {
|
||||||
__builtin_assume(N == 1024);
|
__builtin_assume(N == 1024);
|
||||||
|
a = (float *)__builtin_assume_aligned(a, 32);
|
||||||
|
b = (float *)__builtin_assume_aligned(b, 32);
|
||||||
|
c = (float *)__builtin_assume_aligned(c, 32);
|
||||||
|
|
||||||
for (int i=0; i<I; i++) {
|
for (int i=0; i<I; i++) {
|
||||||
for (int j=0; j<N; j++) {
|
for (int j=0; j<N; j++) {
|
||||||
|
|||||||
+2
-3
@@ -11,9 +11,8 @@ void test2(float *__restrict a, float *__restrict b, float *__restrict c, int N)
|
|||||||
for (int j = 0; j < N; j++)
|
for (int j = 0; j < N; j++)
|
||||||
{
|
{
|
||||||
/* max() */
|
/* max() */
|
||||||
c[j] = a[j];
|
if (b[j] > a[j]) c[j] = b[j];
|
||||||
if (b[j] > a[j])
|
else c[j] = a[j];
|
||||||
c[j] = b[j];
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
#include "test.h"
|
||||||
|
|
||||||
|
void test2(float *__restrict a, float *__restrict b, float *__restrict c, int N)
|
||||||
|
{
|
||||||
|
__builtin_assume(N == 1024);
|
||||||
|
a = (float *)__builtin_assume_aligned(a, 16);
|
||||||
|
b = (float *)__builtin_assume_aligned(b, 16);
|
||||||
|
|
||||||
|
for (int i = 0; i < I; i++)
|
||||||
|
{
|
||||||
|
for (int j = 0; j < N; j++)
|
||||||
|
{
|
||||||
|
/* max() */
|
||||||
|
c[j] = a[j];
|
||||||
|
if (b[j] > a[j])
|
||||||
|
c[j] = b[j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in new issue
Block a user