小编Ant*_*ine的帖子

从docker容器中使用GPU?

我正在寻找一种从docker容器中使用GPU的方法.

容器将执行任意代码,因此我不想使用特权模式.

有小费吗?

从以前的研究中我了解到run -v和/或LXC cgroup是要走的路,但我不确定如何完全解决这个问题

cuda docker

138
推荐指数
7
解决办法
12万
查看次数

Clang优化级别

海合会,手动解释什么-O3,-Os等转化为在特定的优化参数方面(-funswitch-loops,-fcompare-elim,等)

我正在为clang寻找相同的信息.

我看过网上,man clang其中只提供一般信息(-O2优化更多-O1,-Os优化速度,...),并在此处查看Stack Overflow并发现了这一点,但我没有在引用的源文件中找到任何相关内容.

编辑:我找到了答案,但我仍然感兴趣,如果有人有链接到用户手册记录所有优化传递和选择的传球.目前我刚刚找到了这个通行证列表,但在优化级别上没有任何内容.-Ox

clang compiler-optimization user-manual

86
推荐指数
3
解决办法
7万
查看次数

找出C++对象是否可调用

是否有可能写出一个类型特征,比如说is_callable<T>一个对象是否已operator()定义?如果调用运算符的参数事先已知,则很容易,但在一般情况下则不行.当且仅当至少有一个重载调用运算符被定义时,我希望特征返回true.

这个问题是相关的,并且有一个很好的答案,但它不适用于所有类型(仅限于 - 可int转换类型).此外,std::is_function工作,但只适用于正确的C++函数,而不是函子.我正在寻找更通用的解决方案.

c++ metaprogramming traits type-traits

32
推荐指数
4
解决办法
8144
查看次数

是否有可替代C++位域的替代方案

有许多情况(特别是在低级编程中),其中数据的二进制布局很重要.例如:硬件/驱动程序操作,网络协议等.

在C++中,我可以使用char*和按位操作(掩码和移位)读/写任意二进制结构,但这很乏味且容易出错.显然,我试图限制这些操作的范围并将它们封装在更高级别的API中,但它仍然很痛苦.

C++位域似乎为这个问题提供了一个开发人员友好的解决方案,但不幸的是它们的存储是特定于实现的.

NathanOliver提到std::bitset哪些基本上允许你访问一个整数的单个位,operator[]但是很好但缺少多位字段的访问器.

使用元编程和/或宏,可以抽象库中的按位运算.因为我不想重新发明轮子,所以我正在寻找一个(最好是STL或boost)库.

为了记录,我正在研究这个DNS解析器,但问题及其解决方案应该是通用的.

编辑:简短的回答:事实证明,bitfield的存储在实践中是可靠的(即使它不是标准规定的),因为系统/网络库使用它们,并且在使用主流编译器编译时表现良好的程序.

c++ bit-fields

19
推荐指数
3
解决办法
3567
查看次数

SSE:如果不是零,则为倒数

如何使用SSE指令获取浮点数的倒数(反向),但仅适用于非零值?

背景情况:

我想规范化一个向量数组,以便每个维度具有相同的平均值.在C中,这可以编码为:

float vectors[num * dim]; // input data

// step 1. compute the sum on each dimension
float norm[dim];
memset(norm, 0, dim * sizeof(float));
for(int i = 0; i < num; i++) for(int j = 0; j < dims; j++)
    norm[j] += vectors[i * dims + j];
// step 2. convert sums to reciprocal of average
for(int j = 0; j < dims; j++) if(norm[j]) norm[j] = float(num) / norm[j];
// step 3. normalize the data …
Run Code Online (Sandbox Code Playgroud)

c sse normalization

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

__attribute((const))的gcc行为不一致

我在gcc中遇到了一个非常奇怪的行为,关于运算符和标记的函数__attribute((const)).逻辑和算术运算符导致不同的优化,我不明白为什么.

这不是一个真正的错误,因为__attribute((const))它只是一个暗示并且不能保证其效果,但这仍然是非常令人惊讶的.有人有任何解释吗?

这是代码.所以我定义了一个__attribute((const))函数:

int f(int & counter) __attribute((const));
int f(int & counter) {
    ++counter;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

然后我定义了一个运算符测试宏.这是通过宏而不是模板/仿函数来完成的,以便向编译器提供简单的代码并简化优化:

int global = 0; // forces results to be computed

#define TestOp(OP) \
    { \
        int n = 0; \
        global += (f(n) OP f(n)); \
        std::cout << "op" #OP " calls f " << n << " times" << std::endl; \
    }
Run Code Online (Sandbox Code Playgroud)

最后,我按如下方式测试不同的运算符.注释与输出g++-4.8 -std=c++11 -O2 -Wall -pedantic相同,输出为-O3-Ofast

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

c++ gcc compiler-optimization function-attributes

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

D中的变量函数调用

好的,这就是我需要的:

  • 假设我们有一个字符串变量,例如func有一些值,由用户给出(不是常数)
  • 我们怎么能调用一个名称是值的函数func

更新:

也许我认为我需要的是非常明显的,但是因为我注意到许多downvotes,你在这里:

string func = "myfunc";
Run Code Online (Sandbox Code Playgroud)

我需要一些call(func)会打电话的东西myfunc.像PHP的call_user_func_array()


有任何想法吗?

我看了一下mixins,但这看起来并不像我需要的那样.


PS我标注的问题与cc++太,因为一个通用的解决方案可能是理论上的可能,考虑到语言之间的相似之处.

c c++ d

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

是否在不等待epoll_waiting时监视epoll事件

我对基于事件的编程很陌生。我正在尝试使用epoll边缘模式,该模式显然仅信号通知已准备好进行读/写的文件(而不是级别模式,该信号通知所有就绪文件,无论是否已经就绪或刚刚就绪)。

对我来说还不清楚的是:在边缘模式下,我是否得知我不epoll_wait读书时发生的准备事件?尚未恢复的单发文件事件如何处理?

为了说明我为什么要问这个问题,请考虑以下情形:

  • 已连接10个非阻塞插座
  • 配置epoll_ctl为在边缘模式+ oneshot中准备好读取套接字时做出反应:EPOLLET | EPOLLONESHOT | EPOLLIN
  • epoll_wait 要发生的事情(最多报告10个事件)
  • linux唤醒我的进程并报告套接字#1和#2已准备好
  • read并处理数据套接字#1(直到E_AGAIN
  • read并处理数据套接字2(直到E_AGAIN
  • 在执行此操作时,套接字S接收数据
  • 我处理了所有事件,所以由于oneshot ,我以epoll_ctlin EPOLL_CTL_MOD模式重新触发了文件
  • 我的循环返回到epoll_wait下一批事件

好吧,那么是否epoll_wait 总是会通知套接字S已准备就绪?如果S为#1(即不重新设置),是否会发生事件?

linux epoll event-based-programming epollet

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

两阶段查找:可以轻松地混合继承和模板

简介: C++标准区分了依赖于模板参数的符号名称和不符合模板参数的名称,即所谓的两阶段名称查找(参见此处).定义模板时,将尽快解析非依赖名称.另一方面,从属名称仅在模板实例时解析.

例:

template<class T> struct Base {
    typedef T type;
    static const int n = 3;
    virtual int f() = 0;
    int f(int x) { return x * 2; }
};

// doesn't compile!
template<class T> struct Derived : Base<T> {
    type field;         // The compiler doesn't know Base<T>::type yet!
    int f() { return n; } // the compiler doesn't know n yet, and f(int) is maksed!
};
Run Code Online (Sandbox Code Playgroud)

目前,我所做的是这样定义Derived:

template<class T> struct Derived : Base<T> …
Run Code Online (Sandbox Code Playgroud)

c++ inheritance templates

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