小编abd*_*leb的帖子

Simd Matmul程序给出不同的数值结果

我正在尝试使用simd内部函数在C中编程矩阵乘法。我非常确定自己的实现,但是执行时,我会从所得矩阵系数的第5位开始出现一些数字错误。

REAL_T只是具有typedef的浮点数

/* This is my matmul Version with simd, using floating simple precision*/
void matmul(int n, REAL_T *A, REAL_T *B, REAL_T *C){
  int i,j,k;
  __m256 vA, vB, vC, vRes;
  for (i=0; i<n; i++){
    for (j=0; j<n; j++){  
      for (k=0; k<n; k= k+8){
        vA = _mm256_load_ps(&A[i*n+k]);
        vB = _mm256_loadu_ps(&B[k*n+j]);
        vC = _mm256_mul_ps(vA, vB);
        vC = _mm256_hadd_ps(vC, vC);
        vC = _mm256_hadd_ps(vC, vC);
        /*To get the resulting coefficient, after doing 2 hadds,
        I have to get the first and the last element …
Run Code Online (Sandbox Code Playgroud)

c floating-point simd vectorization avx

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

在多线程上下文中,随机生成器的替代方案与 erand48() 一样快?

我有一个多线程程序,其中每个线程调用函数 erand48() 来生成随机数。每个线程都有自己的私有随机种子,因此种子不会共享。但是,erand48()正如规范中所述,它不是线程安全的。

我尝试erand48()random()线程安全的替换,但它要慢得多,而且性能是我首先关心的问题。

我还要指出,我事先不知道生成的值的数量,因此我无法像其他博客建议的那样预先生成所有值

erand48() 是否有任何替代方案可以像它一样快并且是线程安全的?

c random multithreading thread-safety

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