小编Ale*_*lex的帖子

新标准C11(不是C++ 11)中是否有constexpr或未来计划?

在新的语言标准中,C++ 11出现了关键字constexpr.

新标准C11(不是C++ 11)中是否有constexpr或未来计划?

c c11

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

volatile限定符是否取消了对此内存的缓存?

在本文中:http://www.drdobbs.com/parallel/volatile-vs-volatile/212701484? pgno = 2说,我们无法进行任何优化volatile,甚至如(where :) volatile int& v = *(address);:

v = 1;                // C: write to v
local = v;            // D: read from v
Run Code Online (Sandbox Code Playgroud)

无法对此进行优化:

v = 1;                // C: write to v
local = 1;            // D: read from v  // but it can be done for std::atomic<>
Run Code Online (Sandbox Code Playgroud)

这是无法做到的,因为第1行和第2行之间的v值可能会被硬件设备改变(不是CPU不能工作缓存一致性:网络适配器,GPU,FPGA等...)(顺序/并发),映射到此内存位置.但是只有当v不能在CPU缓存L1/2/3中缓存时才有意义,因为对于volatile第一行和第二行之间的通常(非)变量太小的时间并且可能触发缓存.

volatile限定符是否保证不对此内存位置进行缓存?

回答:

  1. 不,volatile 不保证没有缓存此内存位置,并且在C/C++标准或编译器手册中没有任何相关内容.
  2. 使用内存映射区域,当从设备内存映射到CPU内存的内存已标记为WC …

c c++ concurrency caching c++11

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

为什么我不能在函数中使用constexpr值,但我可以在此值的范围内执行相同的操作?

我不能在函数中使用constexpr值,而不是函数外部.

  • 我可以auto ar1 = std::array<int, il.size()>();il定义的范围内使用.

  • 但我不能使用{ return std::array<T, il.size()>();}in constexpr-functionil_to_array()

为什么我不能在函数中使用constexpr值,但我可以在此值的块范围内执行相同的操作?

http://ideone.com/5g0iRE

#include <iostream>
#include <initializer_list>
#include <array>

constexpr size_t size_to_size(size_t v) { return v; }   // 1 - OK

template<typename T>
constexpr size_t il_to_size(std::initializer_list<T> il) { return il.size(); }  // 2 - OK

// 3 - error
template<typename T>
constexpr auto il_to_array(std::initializer_list<T> il) {return std::array<T, il.size()>();}

template<size_t N>
void print_constexpr() { std::cout << N << std::endl; }

int main() { …
Run Code Online (Sandbox Code Playgroud)

c++ compile-time constexpr c++11 c++14

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

标准C++ 11是否保证std :: async(std :: launch :: async,func)在单独的线程中启动func?

标准C++ 11是否保证std::async(std::launch::async, func)在单独的线程中启动功能?

工作草案,编程语言标准C++ 2016-07-12:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/n4606.pdf

1.一方面,C++ 11-Standard表示如果无法创建线程,则会出现错误.这确保了创建新线程(没有错误).

§30.6.8

6

抛出:system_error如果 policy == launch :: async并且实现无法启动新线程.

7错误条件:

(7.1) - resource_unavailable_try_again - 如果 policy == launch :: async且系统无法启动新线程.

文档说:http://en.cppreference.com/w/cpp/thread/launch

std :: launch :: async启动新线程以异步执行任务

2.在另一方面,它被写入该线程可以被潜在地创建.那些,不一定要创建线程.

§30.6.8

1函数模板async提供了一种机制,可以在新线程中启动函数,并在与其共享共享状态的未来对象中提供函数的结果.

这里写的好像在一个新的线程中,它是否意味着在新的单独线程中没有必要?

§30.6.8

(3.1)

- 如果policy&launch :: async非零 - 调用INVOKE(DECAY_COPY(std :: forward(f)),DECAY_COPY(std :: forward(args))...)(20.14.2,30.3.1.2)好像在一个新的执行线程中,由一个线程对象表示调用DECAY_COPY()在调用async的线程中进行评估.任何返回值都作为结果存储在共享状态中.从执行INVOKE(DECAY_COPY(std :: forward(f)),DECAY_COPY(std :: forward(args))...)传播的任何异常都作为异常结果存储在共享状态中.线程对象存储在共享状态中,并影响引用该状态的任何异步返回对象的行为.

使用时std::async(std::launch::async, func) …

c++ multithreading asynchronous c++11 c++14

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

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

x86-SSE指令是否具有自动发布 - 获取订单?

正如我们从C11-memory_order所知道的那样:http://en.cppreference.com/w/c/atomic/memory_order

从C++ 11-std :: memory_order开始:http://en.cppreference.com/w/cpp/atomic/memory_order

在强排序系统(x86,SPARC,IBM大型机)上, 发布 - 获取顺序是自动的.没有为此同步模式发出额外的CPU指令,只会影响某些编译器优化(例如,禁止编译器在原子存储释放之前移动非原子存储或在原子载荷获取之前执行非原子加载)

但这对于x86-SSE指令是否正确(除了[NT] - 非时间,我们总是必须使用L/S/MFENCE)?

这里说,"sse指令......不要求向后兼容性,并且内存顺序未定义".据信,当需要时,严格的可订购性与旧版本的处理器x86兼容,但是新的命令,即SSE(除了[NT]) - 被剥夺了自动释放 - 获取订单,是吗?

x86 sse memory-barriers c++11 c11

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

是否有一个真正有效的例子,它展示了x86_64上ILP(指令级并行)的好处?

正如已知的CPU是管道,如果命令序列彼此独立,它的工作效率最高 - 这称为ILP(指令级并行):http://en.wikipedia.org/wiki/Instruction-level_parallelism

但是有没有一个真正有效的例子,它显示了ILP的好处,至少是同步的例子,对于CPU x86_64(但在两种情况下都是相同数量的cmp/jne)?

我将编写以下示例 - 添加数组的所有元素,但它没有显示ILP的任何优点:http://ideone.com/fork/poWfsm

  • 顺序:
        for(i = 0; i < arr_size; i += 8) {
            result += arr[i+0] + arr[i+1] + 
                    arr[i+2] + arr[i+3] + 
                    arr[i+4] + arr[i+5] +
                    arr[i+6] + arr[i+7];
        }
Run Code Online (Sandbox Code Playgroud)
  • ILP:
        register unsigned int v0, v1, v2, v3;
        v0 = v1 = v2 = v3 = 0;
        for(i = 0; i < arr_size; i += 8) {              
            v0 += arr[i+0] + …
Run Code Online (Sandbox Code Playgroud)

c++ optimization performance x86 assembly

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

IRQ Coalesce之前NAPI有哪些优势?

众所周知,有两种方法可以避免高负载网络中的硬件中断的一些开销,当硬件中断太多时,切换到它们需要花费太多时间.对于程序风格的性能和选择方法非常重要.

  1. NAPI(新API) - 不使用硬件中断,并且每隔一段时间轮询以太网设备.Linux内核默认使用中断驱动模式,只有当传入数据包流量超过某个阈值时才切换到轮询模式.

http://en.wikipedia.org/wiki/New_API 内核可以定期检查传入网络数据包的到达而不会中断,从而消除了中断处理的开销.

  1. 中断合并 - 使用硬件中断,但如果发生中断,则禁用中断并开始轮询,持续一段时间,然后轮询终止并激活中断.

https://en.wikipedia.org/wiki/Interrupt_coalescing一种技术,在这种技术中,通常会触发硬件中断的事件会被阻止,直到一定量的工作挂起或超时计时器触发为止.

两种方法都没有显着的中断成本 - 这是默认中断驱动模式的优势.

但第二种方法 - 中断合并更合理,因为它:

  • 减少延迟 - 一旦程序包到达,立即尝试立即处理它,如果最近发生了中断,则立即轮询它.NAPI对面不会立即处理帧,但会等待一段时间进行下一次轮询.

  • 较少的CPU使用率 - 仅在至少有一个数据包到来时才开始轮询.但即使没有收到框架,也不是徒劳无功,就好像是NAPI一样.

IRQ Coalesce之前NAPI有哪些优势?

linux performance network-programming interrupt linux-kernel

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

是否有任何探测器在GPU上实现并且是缩放/旋转不变的?

正如OpenCV 2.4.9.0中所知,这些特征检测器:SIFT, SURF, BRISK, FREAK, STAR, FAST, ORB.

所有这些都对CPU执行,但只FASTORBGPU上.http://docs.opencv.org/genindex.html

众所周知,有些是缩放/旋转不变的,但有些则不是:对于尺度不变特征提取,是否存在SURF和SIFT的快速替代方案?

这些是规模不变和旋转不变的:

  • 冲浪
  • 轻快
  • 怪物

但这些不是规模不变的,也不是旋转不变的:

  • 快速
  • ORB

是否有任何探测器在GPU上实现并且是缩放/旋转不变的?

或者将在GPU或OpenCL上的OpenCV 3.0中添加?

opencv feature-extraction computer-vision feature-detection orb

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

现代CNN(卷积神经网络)作为DetectNet旋转不变吗?

众所周知,nVidia DetectNet - 用于物体检测的CNN(卷积神经网络)基于Yolo/DenseBox的方法:https://devblogs.nvidia.com/parallelforall/deep-learning-object-detection-digits/

DetectNet是流行的GoogLeNet网络的扩展.扩展类似于Yolo和DenseBox 论文中采用的方法.

如图所示,DetectNet可以检测任何轮换的对象(汽车):https://devblogs.nvidia.com/parallelforall/detectnet-deep-neural-network-object-detection-digits/

在此输入图像描述

现代CNN(卷积神经网络)作为DetectNet旋转不变吗?

我可以使用一个相同的物体旋转角度在数千个不同的图像上训练DetectNet,以检测任何旋转角度的物体吗?

在此输入图像描述

那么旋转不变的是什么:Yolo,Yolo v2,基于DetectNet的DenseBox?

machine-learning computer-vision neural-network deep-learning conv-neural-network

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