小编A.n*_*chi的帖子

intel内在函数的问题

大家好,我正在尝试使用像这样的英特尔内在函数

void test()
{
    uint16_t n1 = 5;
    uint16_t n2 = 2;
    __m64 vec1, vec2, res;

    vec1 = _mm_set_pi16(n1, n1, n1, n1);
    vec2 = _mm_set_pi16(n2, n2, n2, n2);

    res = _mm_add_pi16(vec1, vec2);

    printf("%u %u %u %u \n", vec1[0], vec1[1], vec1[2], vec1[3]);
    printf("%u %u %u %u \n", vec2[0], vec2[1], vec2[2], vec2[3]);
    printf("%u %u %u %u \n", res[0], res[1], res[2], res[3]);
}   
Run Code Online (Sandbox Code Playgroud)

但是我得到的结果很奇怪:

327685 327685 131074 131074 
131074 131074 458759 458759 
458759 458759 327685 327685 
Run Code Online (Sandbox Code Playgroud)

我正在使用eclipse Mars ......我包括mmintrin.h, xmmintrin.h, …

c intel intrinsics

5
推荐指数
1
解决办法
204
查看次数

__m256类型的intel内在函数问题

我正在尝试测试一些英特尔内部函数,看看它们是如何工作的.所以,我创建了一个函数来为我做这个,这是代码:

void test_intel_256()
{
__m256 res,vec1,vec2;

__M256_MM_SET_PS(vec1, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0, 7.0);
__M256_MM_SET_PS(vec1, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0);

__M256_MM_ADD_PS(res,vec1,vec2);

if (res[0] ==9 && res[1] ==9 && res[2] ==9 && res[3] ==9 
  && res[4] ==9 && res[5] ==9 && res[6] ==9 && res[7] ==9 )
    printf("Addition : OK!\n");
else
    printf("Addition : FAILED!\n");
}
Run Code Online (Sandbox Code Playgroud)

但后来我收到了这些错误:

error: unknown type name ‘__m256’
error: subscripted value is neither array nor pointer nor vector
error: subscripted value is neither array …
Run Code Online (Sandbox Code Playgroud)

c c++ intel intrinsics avx

5
推荐指数
1
解决办法
3256
查看次数

英特尔/ ARM内在函数等价

我有一个使用英特尔内在函数的C应用程序,如:

__m128 _mm_add_ps (__m128 a, __m128 b)
__m128 _mm_sub_ps (__m128 a, __m128 b)
__m128 _mm_mul_ps (__m128 a, __m128 b)
__m128 _mm_set_ps (float e3, float e2, float e1, float e0)
void _mm_store_ps (float* mem_addr, __m128 a)
__m128 _mm_load_ps (float const* mem_addr)
Run Code Online (Sandbox Code Playgroud)

现在,我正在尝试修改我的应用程序,以便使用名为Gem5的模拟器使其在ARMv8上运行.所以,我开始寻找ARM内在函数,我发现了这个手册ARM®NEON™内在函数参考

好吧,我找到了算术内在函数,但是我对设置,存储和加载指令有点失落.

有ARM内在函数经验的人可以告诉我正确的内在函数吗?

c arm intrinsics neon gem5

2
推荐指数
1
解决办法
938
查看次数

无法使用 ARM NEON 内在函数设置 4 个 floatx32 的向量

我想从表中加载一些值并将它们设置为一个向量: 在第一种情况下,将向量的四个值设置为一个:

float32x4_t dest = vdupq_n_f32(a);
Run Code Online (Sandbox Code Playgroud)

当我阅读内在手册时,这一点非常明显。

在第二种情况下,将向量的四个值设置为表中的不同值。这有点棘手,因为没有相关说明,因此我执行了以下操作:

float32x4_t dest = {a3,a2,a1,a0};
Run Code Online (Sandbox Code Playgroud)

它不是内在的,但是基于网络上的其他出版物和论坛,它是我唯一的解决方案。可悲的是,我收到此错误:

error: expected expression before ‘{’ token
Run Code Online (Sandbox Code Playgroud)

任何人都可以为此提供帮助或有其他选择吗?

c arm simd neon

2
推荐指数
1
解决办法
2197
查看次数

多线程程序正在阻塞

嗨,我正在尝试在C中编写一个多线程程序,我使用4个线程来处理浮点数组的某些计算.所以,我开始只创建4个线程并使用一些参数来定义线程将在哪个数组部分工作.那时程序运行正常.

现在,我尝试仅使用加载和存储指令(256位Intel内在函数).然后,程序永远不会完成,虽然看起来线程例程正在完成他们的工作.

void *routine(void *thread_info)
{
   int n;
   unsigned t_start,t_stop;
   unsigned ind1, ind2, ind3;
   float *arr_in , *arr_out;
   struct thread_data *mydata;

   mydata = (struct thread_data*) thread_info;
   t_start = mydata->start;
   t_stop  = mydata->stop;
   arr_in  = mydata->input;
   arr_out = mydata->output;

   for (n = t_start; n < t_stop; n += 8)
   {  
      ind1 = 256 + n;
      ind2 = 512 + n;

      vec_a = _mm256_load_ps((float *) (&arr_in[n   ]) );
      vec_b = _mm256_load_ps((float *) (&arr_in[ind1]) );
      vec_c = _mm256_load_ps((float *) (&arr_in[ind2]) );

      _mm256_store_ps((float *) …
Run Code Online (Sandbox Code Playgroud)

c multithreading

0
推荐指数
1
解决办法
75
查看次数

标签 统计

c ×5

intrinsics ×3

arm ×2

intel ×2

neon ×2

avx ×1

c++ ×1

gem5 ×1

multithreading ×1

simd ×1