小编ein*_*ica的帖子

在OpenCL中,mem_fence()做什么,而不是barrier()?

barrier()(我认为我理解)不同,mem_fence()不会影响工作组中的所有项目.OpenCL规范说(第6.11.10节),用于mem_fence():

订单执行内核的工作项的加载和存储.

(因此它适用于单个工作项).

但是,与此同时,在第3.3.1节中,它说:

在工作项内存中具有加载/存储一致性.

所以工作项中内存是一致的.

那么什么样的东西mem_fence()有用呢?它不适用于项目,但在项目中不需要......

请注意,我没有使用原子操作(第9.5节等).mem_fence()与这些想法一起使用的想法是什么?如果是这样,我很乐意看到一个例子.

谢谢.

规格,供参考.

更新:我可以看到使用时,它是如何有效使用 barrier()(隐式,由于阻挡调用mem_fence()) -但肯定必须有更多,因为它单独存在?

gpgpu memory-fences opencl memory-barriers barrier

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

nVIDIA CC 2.1 GPU warp调度程序如何一次发出2条指令进行扭曲?

注意:此问题特定于nVIDIA Compute Capability 2.1设备.以下信息可从CUDA编程指南v4.1获得:

在计算能力2.1设备中,每个SM具有48个SP(核心),用于整数和浮点运算.每个warp由32个连续的线程组成.每个SM都有2个warp调度程序.在每个指令发布时,一个warp调度程序选择一个准备好的线程warp并发出2个内核上的warp 指令.

我的疑惑:

  • 一个线程将在一个核心上执行.如何在单个时钟周期或单个多周期操作中向线程发出2条指令?
  • 这是否意味着2条指令应该相互独立?
  • 2个指令可以在核心上并行执行,也许是因为它们在核心中使用不同的执行单元?这是否也意味着只有在2条指令完成执行后或者在其中一条指令执行完之后,warp才会准备就绪?

cuda gpu gpu-warp

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

'using'语句使用g ++编译,无法使用clang进行编译

我有以下结构的代码(实际上当然要复杂得多,特别是"Base"是一个三线程,但我试图捕捉它的要点):

template <class T>
class A {};

template <class T>
class B {
public:
    B(){};
};

template <class T>
class C : public B<A<T>> {
public:
    using Base = B<A<T>>;
    using Base::B;
};

static const C<int> c{};
Run Code Online (Sandbox Code Playgroud)

代码用g ++编译好

g++ -c test.cpp -std=c++11
Run Code Online (Sandbox Code Playgroud)

但是,使用clang ++我收到一条错误消息,我真的不明白

clang++ -c test.cpp -std=c++11
Run Code Online (Sandbox Code Playgroud)

test.cpp:14:14:错误:依赖使用声明解析为使用Base :: B键入不带'typename';

我的代码有什么问题或者这是clang中的错误吗?

注意:在编写using B<A<T>>::B;它时,编译器编译很好,但这不是我的问题的真正解决方案.

编辑:clang版本是3.5.0,gcc版本是4.9.2

c++ compilation g++ clang

11
推荐指数
2
解决办法
950
查看次数

如何让nvcc CUDA编译器进行更多优化?

使用C或C++编译器时,如果我们通过-O3交换机,执行会变得更快.在CUDA中,有没有相同的东西?

我正在使用该命令编译我的代码nvcc filename.cu.之后我执行./a.out.

cuda nvcc compiler-options

11
推荐指数
2
解决办法
9290
查看次数

使用 CMake + make 只运行一个测试

如果我的项目有一堆测试,我可以运行它们 - 在cmakeing 和makeing 构建、构建之后 - 使用make test.

但是,如果我只想运行其中一项测试怎么办?也就是说,我add_test()在测试中拥有的项目之一CMakeFile.txt

testing cmake

11
推荐指数
2
解决办法
9899
查看次数

在const上的结构化绑定

以下代码应该编译吗?

#include <type_traits>

void foo() {
  const std::pair<int, int> x = {1, 2};

  auto [a, b] = x;

  static_assert(std::is_const_v<decltype(a)>);
  static_assert(std::is_const_v<decltype(b)>);
}
Run Code Online (Sandbox Code Playgroud)

那么,这是MSVC错误吗?

该标准是不是直接在这里(我有一个快速浏览一下),但考虑规则auto,我想,a并且b应该被复制丢弃CV-预选赛

c++ c++17 structured-bindings

11
推荐指数
2
解决办法
370
查看次数

如何在C ++ 20中传递范围而不是迭代器对?

我听说C ++ 20将支持作用于范围,而不仅仅是begin + end迭代器对。这是否意味着在C ++ 20中,我将能够编写:

std::vector<int> vec = get_vector_from_somewhere();
std::sort(vec);
std::vector<float> halves; 
halves.reserve(vec.size());
std::transform(
    vec, std::back_inserter(halves),
    [](int x) { return x * 0.5; }
);
Run Code Online (Sandbox Code Playgroud)

c++ range c++20

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

我们能用 C++20 构造带有视图的容器吗?

范围将随着 C++20 标准版本进入 C++。

我的问题:我们是否能够构建(现有)任何范围的标准库容器?更重要的是,具有范围视图?

例如,这会不会:

#include <vector>
#include <iostream>
#include <ranges>

int main() {
    auto sq = [](int x) { return x * x; };
    std::vector<int> vec { 3, 4, 5 };
    std::vector<int> squares { std::ranges::views::transform(vec, sq) };
    for(auto i : squares) { std::cout << i << ' '; }
    std::cout << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

是一个打印的有效程序9 16 25

与 range-v3 库一起编译,这是值得的。

c++ range-v3 c++20

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

CLion/PyCharm/IntelliJ 无法启动,显示“IDE 尚未初始化”

当我尝试启动我的 CLion IDE(或另一个 JetBrains IDE,如 PyCharm、IntelliJ IDEA 等)时,它失败了,我在控制台上收到以下消息:

IDE has not been initialized yet
Run Code Online (Sandbox Code Playgroud)

(在通常的 JVM 警告之后,我总是收到并且并没有阻止 IDE 启动。)

为什么会这样?我该怎么办?

笔记:

ide jvm intellij-idea pycharm clion

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

find_package 用于静态库而不是共享库

当使用 CMake 构建我的项目时,我希望它静态链接到库(如果可用)。现在,.dll.a无论文件是否存在,它都会查找.a文件。

例如,在一个小示例项目中链接到 libpng:

cmake_minimum_required(VERSION 3.15)
project(Test)

add_executable(Test main.cpp)

find_package(PNG REQUIRED)
message(${PNG_LIBRARIES})
target_link_libraries(Test PRIVATE ${PNG_LIBRARIES})
Run Code Online (Sandbox Code Playgroud)

对于message,它输出

C:/msys64/mingw64/lib/libpng.dll.aC:/msys64/mingw64/lib/libz.dll.a

libpng.alibz.a文件也可以在同一目录中使用。我如何告诉 CMake 链接.a文件?

我在 Windows 10 上使用 MinGW-w64 和 msys64,但更喜欢跨平台的解决方案。

cmake static-linking

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