小编Ale*_*lex的帖子

在x86/x86_64处理器上使用LFENCE指令是否有意义?

通常在互联网上我发现LFENCE在处理器x86中没有任何意义,即它什么都不做,所以相反MFENCE我们可以绝对无痛地使用SFENCE,因为MFENCE= SFENCE+ LFENCE= SFENCE+ NOP= SFENCE.

但是如果LFENCE没有意义,那么为什么我们有四种方法在x86/x86_64中建立顺序一致性:

  1. LOAD(没有围栏)和STORE+MFENCE
  2. LOAD (没有围栏)和 LOCK XCHG
  3. MFENCE+ LOADSTORE(没有围栏)
  4. LOCK XADD(0)和STORE(没有围栏)

取自这里:http://www.cl.cam.ac.uk/~pes20/cpp/cpp0xmappings.html

以及Herb Sutter在第34页底部的表演:https://skydrive.live.com/view.aspx?status = 4E86B0CF20EF15AD!24884&app = WordPdf&wdo = 2&authkey =!AMtj_EflYn2507c

如果LFENCE没有做任何事情,那么方法(3)将具有以下含义:SFENCE + LOAD and STORE (without fence)但是SFENCE之前没有任何意义LOAD.即如果LFENCE什么都不做,方法(3)没有意义.

LFENCE在处理器x86/x86_64中是否有任何意义上的指令?

回答:

1. …

x86 assembly x86-64 atomic memory-barriers

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

我可以为TCP使用广播或多播吗?

对于Internet协议(IP),我可以使用多播:

另外,在示例中,对于UDP,我可以使用:

  • broadcast - 将数据包发送到地址范围
  • multicast - 将数据包发送到指定地址列表

但是我可以将这些内容用于TCP吗?

ip udp tcp multicast broadcast

28
推荐指数
2
解决办法
3万
查看次数

处理器x86/x86_64中使用物理或虚拟寻址在L1,L2和L3中进行缓存?

处理器x86/x86_64中使用哪种寻址在L1,L2和L3(LLC)中进行缓存 - 物理或虚拟(使用PT/PTE和TLB)以及PAT(页面属性表)对它有何影响?

在这种情况下,驱动程序(内核空间)和应用程序(用户空间)之间是否存在差异?


简短回答 - 英特尔使用虚拟索引,物理标记(VIPT)L1缓存:线程之间的数据交换将用于在具有HT的一个Core上执行什么?

  • L1 - 虚拟寻址(在8-way用于定义的高速缓存中Set需要低12 bits,这在virt和phys中是相同的)
  • L2 - 物理寻址(需要访问Virt-2-Phys的TLB)
  • L3 - 物理寻址(需要访问Virt-2-Phys的TLB)

x86 caching virtual-memory virtual-address-space tlb

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

为什么旋转不变神经网络不会用于热门竞赛的获胜者?

众所周知,现代最流行的CNN(卷积神经网络):VGG/ResNet(FasterRCNN),SSD,Yolo,Yolo v2,DenseBox,DetectNet - 不是旋转不变的:现代CNN(卷积神经网络)是否像DetectNet一样旋转不变?

还知道,有几个神经网络具有旋转不变对象检测:

  1. Rotation-Invariant Neoperceptron 2006(PDF):https://www.researchgate.net/publication/224649475_Rotation-Invariant_Neoperceptron

  2. 学习用于纹理分类的旋转不变卷积滤波器2016(PDF):https://arxiv.org/abs/1604.06720

  3. RIFD-CNN:用于物体检测的旋转不变和Fisher判别卷积神经网络2016(PDF):http://www.cv-foundation.org/openaccess/content_cvpr_2016/html/Cheng_RIFD-CNN_Rotation-Invariant_and_CVPR_2016_paper.html

  4. 卷积神经网络中的编码不变性2014(PDF)

  5. 用于星系形态预测的旋转不变卷积神经网络(PDF):https://arxiv.org/abs/1503.07077

  6. 学习旋转不变卷积神经网络用于VHR光学遥感图像中的物体检测2016:http://ieeexplore.ieee.org/document/7560644/

我们知道,在这样的图像检测竞赛中:IMAGE-NET,MSCOCO,PASCAL VOC - 使用的网络集合(同时是一些神经网络).或网络集成在单网中,如ResNet(残留网络表现得像相对浅网络的集合)

但是在像MSRA这样的获胜者中使用旋转不变的网络集合,如果没有,那么为什么呢?为什么在整体中额外的旋转不变网络不会增加精确度以检测某些物体,例如飞机物体 - 哪些图像是在不同的旋转角度下完成的?

有可能:

  • 从地面拍摄的飞机物体 在此输入图像描述

  • 或从空中拍摄的地面物体 在此输入图像描述

为什么旋转不变神经网络不会用于流行的对象检测竞赛的获胜者?

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

27
推荐指数
3
解决办法
2万
查看次数

如何在提交中提供我已更改的某些文件?

我使用TortoiseGit 1.8.3.我更改了其中一个文件:Makefile,但我不想在Git Commit中每次都提交给我.我将它添加到"删除并添加到忽略列表",但它没有帮助.如何在提交中提供我已更改的某些文件?

我想,Makefile在远程存储库中是只读的,我可以在本地编辑它,然后TortoiseGit不提供给我提交它.

我想要Git-bash:https://www.kernel.org/pub/software/scm/git/docs/git-update-index.html

tortoisegit

25
推荐指数
3
解决办法
1万
查看次数

为什么我们可以分配1 PB(10 ^ 15)数组并访问最后一个元素,但是不能释放它?

众所周知:http://linux.die.net/man/3/malloc

默认情况下,Linux遵循乐观的内存分配策略.这意味着当malloc()返回非NULL时,无法保证内存确实可用.如果事实证明系统内存不足,那么一个或多个进程将被OOM杀手杀死.

和我们能够成功地通过使用分配1个拍字节VMA(虚拟存储区)的malloc(petabyte);:http://ideone.com/1yskmB

#include <stdio.h>
#include <stdlib.h>

int main(void) {

    long long int petabyte = 1024LL * 1024LL * 1024LL * 1024LL * 1024LL;    // 2^50
    printf("petabyte %lld \n", petabyte);

    volatile char *ptr = (volatile char *)malloc(petabyte);
    printf("malloc() - success, ptr = %p \n", ptr);

    ptr[petabyte - 1LL] = 10;
    printf("ptr[petabyte - 1] = 10; - success \n");

    printf("ptr[petabyte - 1] = %d \n", (int)(ptr[petabyte - 1LL]));

    free((void*)ptr);   // why the error is here? …
Run Code Online (Sandbox Code Playgroud)

c linux malloc mmap virtual-address-space

19
推荐指数
2
解决办法
1891
查看次数

标准C++ 11是否保证`volatile atomic <T>`具有语义(volatile + atomic)?

众所周知,std::atomic并且volatile是不同的事情.

有两个主要区别:

  1. 两个优化可以是std::atomic<int> a;,但不能是volatile int a;:

    • 融合操作:a = 1; a = 2;可以由编译器替换a = 2;
    • 常量传播:a = 1; local = a;可以由编译器替换a = 1; local = 1;
  2. 跨原子/易失性操作重新排序普通读/写:

    • 对于volatile int a;任何易失性读/写操作都不能重新排序.但附近的普通读/写仍然可以在易失性读/写周围重新排序.
    • 用于std::atomic a;对基于用于原子操作的存储器屏障限制的附近普通读/写的重新排序a.load(std::memory_order_...);

volatile不介绍内存栅栏,但std::atomic可以做到.

正如文章中所描述的那样:

例如,std::atomic应该用于并发多线程程序(CPU-Core < - > CPU-Core),但volatile …

c++ concurrency multithreading volatile c++11

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

为什么我们需要使用boost :: asio :: io_service :: work?

有一个使用boost :: asio的例子.

  1. 为什么这个例子使用boost :: asio :: io_service :: work?
  2. 为什么srv.run ();没有调用在线程中执行任务?
int main()
{
    boost::asio::io_service srv;
    boost::asio::io_service::work work(srv);
    boost::thread_group thr_grp;
    thr_grp.create_thread(boost::bind(&boost::asio::io_service::run, &srv));
    thr_grp.create_thread(boost::bind(&boost::asio::io_service::run, &srv));

    srv.post(boost::bind(f1, 123));
    srv.post(boost::bind(f1, 321));
    //sync

    srv.post(boost::bind(f2, 456));
    srv.post(boost::bind(f2, 654));
    //sync

    srv.stop();
    thr_grp.join();
}
Run Code Online (Sandbox Code Playgroud)

更新: 在没有io_service :: work的情况下使用io_service时,poll和run之间有什么区别?

int main()
{
    boost::asio::io_service srv;
    //boost::asio::io_service::work work(srv);
    std::vector<boost::thread> thr_grp;

    srv.post(boost::bind(f1, 123));
    srv.post(boost::bind(f1, 321));
    //sync

    srv.post(boost::bind(f2, 456));
    srv.post(boost::bind(f2, 654));
    //sync

    // What is the difference between the poll and run, when io_service without work?
    thr_grp.emplace_back(boost::bind(&boost::asio::io_service::poll, &srv));// poll …
Run Code Online (Sandbox Code Playgroud)

c++ boost-asio

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

在x86中有加速SHA(SHA1/2/256/512)编码的任何指令吗?

例如,在x86中是指令集到硬件加速AES.但是在x86中是否有任何加速SHA(SHA1/2/256/512)编码的指令,以及在x86上编码SHA的紧固库是什么?

c c++ x86 cryptography sha

17
推荐指数
3
解决办法
7986
查看次数

标准C++ 11是否保证high_resolution_clock能够测量实时(非CPU周期)?

如已知clock()可能显示小于或大于实时值 - 两种情况都显示在以下示例1和2中.

为了在C++ 11中高精度测量时间,我们可以使用:

  • std::chrono::high_resolution_clock::now(); - 保证高精度
  • std::chrono::steady_clock::now(); - 保证实时测量
  • clock(); - 保证高精度,但测量CPU周期而不是时间
  • time(&t_start); - 不是高精度,而是实时测量

1-例如:http://ideone.com/SudWTM

#include <stdio.h>
#include <time.h>
#include <thread>
#include <iostream>
#include <chrono>

int main(void) {

    std::cout << "sleep(3) took: \n\n";

    clock_t c_start, c_end;
    time_t t_start, t_end;
    std::chrono::high_resolution_clock::time_point h_start, h_end;
    std::chrono::steady_clock::time_point steady_start, steady_end;

    time(&t_start);  // less precise than clock() but always get the real actual time
    c_start = clock(); // clock() get only CPU-time, it can be more than …
Run Code Online (Sandbox Code Playgroud)

c++ performance multithreading performance-testing c++11

17
推荐指数
2
解决办法
4441
查看次数