Как стать автором
Поиск
Написать публикацию
Обновить

Комментарии 1

По всему видно у Вас хороший компилятор, т.к. мой даже не стал векторизовать начальный код :) Да и интринсики у меня тоже не работают :) Пришлось мне Ваш итоговый код набрать ассемблером

unsigned int task_1_vector_fast(unsigned int n) {
	unsigned int sum;
	n--;
	    asm volatile("vsetivli x0, 3, e32, m1");
	   	asm volatile("vmv.v.x v3,  %0 ;" ::"r"(n)); // v3=n-1
		asm volatile("vle32.v v1, (%0);" ::"r"(c)); // v1  = c
		asm volatile("vmul.vv v4,v3,v1 ;"); // v4 = klm = (n-1)*c
		asm volatile("vle32.v v2, (%0);" ::"r"(d)); // v2 = d
		asm volatile("vsrl.vi v4,v4,16;");  // klm>>=16
		asm volatile("vmv.v.i v8, 0");      // sum=0
		asm volatile("vadd.vi v5,v4,1 ;");  // v5=klm+1
		asm volatile("vmul.vv v6,v4,v5 ;"); // v6 = klm*(klm+1)
		asm volatile("vmul.vv v6,v6,v2 ;"); // v6 = d * klm*(klm+1)
		asm volatile("vsra.vi v6,v6,1;");   // v6 = d * klm*(klm+1)/2
		asm volatile("vredsum.vs  v8, v6, v8");
		asm volatile("vmv.x.s %0, v8" : "=r"(sum) :);  // return = sum

	return sum;
}

Скалярный вариант исполнился за 19 тактов, а векторный за 26. Итого 0.73 У Вас 0.69. Практически одинаковое "ускорение" от векторизации :)

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации