小编sun*_*cho的帖子

为什么scala的reduce()和reduceLeft()以同样的方式减少值的序列?

如果我运行:

List(1, 4, 3, 9).reduce {(a, b) => println(s"$a + $b"); a + b}
Run Code Online (Sandbox Code Playgroud)

结果是:

1 + 4
5 + 3
8 + 9
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用reduceLeft而不是reduce,它还会打印:

1 + 4
5 + 3
8 + 9
Run Code Online (Sandbox Code Playgroud)

我认为reduce以这种方式减少值的序列:

(1+4) + (3+9)
(5) + (12)
(17)
Run Code Online (Sandbox Code Playgroud)

reduceLeft和之间的真正区别是什么reduce

collections scala

7
推荐指数
1
解决办法
1846
查看次数

向量容量显示为0,即使已保留

我有一个具有向量作为成员变量之一的类。在构造函数中,向量容量是保留的(类VecUser使用'Test'对象):

class Test {
public:  
  Test(uint32_t size) {
    this->v.reserve(size);
    std::cout << v.capacity() << std::endl; // this prints 'size'
  }
  vector<uint32_t>& getV() { return v; }
private:
  vector<uint32_t> v;
};

class VecUser {
public:
  VecUser() {}
private:
  void func() {
    Test* test = new Test(32); // This prints '32' 

    vector<uint32_t> v = test->getV();
    std::cout << v.capacity() << std::endl; // This prints '0'
  }
};
Run Code Online (Sandbox Code Playgroud)

我认为,coutfunc()函数打印“32”,而不是“0”。

但是,运行它后,它显示0。

为什么保留向量显示其容量为0?

c++ vector

6
推荐指数
2
解决办法
152
查看次数

工作结束后,是否可以使线程加入“ parallel for”区域?

我有两项工作需要首先同时运行:

1)for可以并行化的循环

2)可以用一个线程完成的功能

现在,让我描述一下我想做什么。

如果存在8个可用线程,

job(1)和job(2)必须首先分别使用7个线程和1个线程同时运行。

在job(2)完成之后,应该将job(2)使用的线程分配给job(1),它是并行的for循环。

我正在使用omp_get_thread_num来计算每个区域中活动的线程数。我希望完成job(1)时线程数增加1 job(2)

下面介绍了可能是错误或确定的解决方案:

  omp_set_nested(1);
  #pragma omp parallel
  {
    #pragma omp sections
    {
      #pragma omp section // job(2)
      { // 'printf' is not real job. It is just used for simplicity.
        printf("i'm single: %d\n", omp_get_thread_num());
      }
      #pragma omp section // job(1)
      {
        #pragma omp parallel for schedule(dynamic, 32)
        for (int i = 0 ; i < 10000000; ++i) {
          // 'printf' is not real job. …
Run Code Online (Sandbox Code Playgroud)

c c++ multithreading openmp

6
推荐指数
1
解决办法
174
查看次数

有没有办法简单地连接多个向量?

目前存在将两个向量与一个函数连接或合并的方法.

但是,似乎没有办法将一个函数连接或合并三个以上的向量.

例如,

vector<string> a = {"a", "b"};
vector<string> b = {"c", "d"};
vector<string> c = {"e", "f"};
vector<string> d = {"g", "h"};

// newVector has to include {"a", "b", "c", "d", "e", "f", "g", "h"}
vector<string> newVector = function(a, b, c, d);
Run Code Online (Sandbox Code Playgroud)

如果没有,似乎可以使用variadic模板实现.

但是,我无法想象它是如何通过可变参数模板实现的.

有什么解决方案吗?

c++ stl

4
推荐指数
1
解决办法
210
查看次数

如果类数组中的向量是动态推入后退的,内存将如何工作?

假设我们有以下课程:

class Test {
public:
   Test() {}
   std::vector<int>& getIntList() {
      return intList;
   }
private:
   std::vector<int> intList;
};
Run Code Online (Sandbox Code Playgroud)

同样,我们在main函数中有以下代码来声明类数组:

int main(void) {
   Test* test[20];

   for (int i = 0; i < 20; ++i) {
      test[i] = new Test();
   }
}
Run Code Online (Sandbox Code Playgroud)

在这些情况下,将实例化测试对象。

现在,如果我在每个类中的向量中随机添加多个项目,

在调整其内存大小的同时,可能会碰撞每个类中每个向量的内存地址范围。

在这种情况下,是否将整个“测试”对象复制到其他存储区中,并调整矢量的大小?或者,向量STL是仅在类引用向量时才复制到其他存储区并调整大小吗?

完全地,这样编码不是一个好主意吗?

c++ class vector memory-reallocation

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

为什么cuda中二级缓存命中率约为93%,但二级缓存利用率却很低?

我正在使用 cuda 进行实验。

我认为如果二级缓存命中率高,性能就会提高。

然而,从nvprof来看,尽管L2缓存命中率约为93%,但L2缓存利用率较低。

为什么会出现这种情况?有没有例子可以实现这一点?

caching cuda gpu

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

什么是 libcublasLt.so(不是 libcublas.so)?

我正在使用 pgf95(Fortran 编译器)编译源代码。

如果我使用 cuda 10.0,它会成功编译源代码。

但是,如果我使用 cuda 10.1,则无法显示“找不到 libcublasLt.so”。

当我扫描目录 cuda-10.0/lib64、cuda-10.1/lib64 时,两者都没有以“libcublasLt”开头的文件。

我该如何解决这个问题?

cuda nvidia

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