小编Seb*_*ler的帖子

"multiset"和"multimap" - 有什么意义?

正如问题所述......我不明白multisets/multimaps的观点.

那么,目的是什么?

c++ containers stl multimap multiset

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

如何使用getnameinfo而不是gethostbyname?

在代码中:

if ((host = (struct hostent*) gethostbyname(address) ) == 0) // address is a string
Run Code Online (Sandbox Code Playgroud)

在4.5.x gcc上进行交叉编译(通用arm架构)时,我收到了警告:

(.text+0x1558): warning: gethostbyname is obsolescent, use getnameinfo() instead.
Run Code Online (Sandbox Code Playgroud)

getnameinfo是:

int WSAAPI getnameinfo(
  __in   const struct sockaddr FAR *sa,
  __in   socklen_t salen,
  __out  char FAR *host,
  __in   DWORD hostlen,
  __out  char FAR *serv,
  __in   DWORD servlen,
  __in   int flags
);
Run Code Online (Sandbox Code Playgroud)

它有更多参数......而且我对它感到困惑,我只需要它就像gethostbyname工作一样.传递什么参数以保持简单愚蠢与gethostbyname一样?

最后这是我的尝试:

struct sockaddr_in servAddr;
struct hostent *host;        /* Structure containing host information */

/* open socket */
if ((handle = socket(PF_INET, SOCK_STREAM, …
Run Code Online (Sandbox Code Playgroud)

c++ sockets gcc warnings cross-compiling

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

如何在C++中使用数组演示内存错误

我正在尝试使用Arrays和C++来演示一种难以检测的内存错误的方法.目的是激励STL vector <>与迭代器结合使用.

编辑:接受的答案是我用来解释优点/缺点的答案.我也用过:这个

c++ arrays memory-leaks

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

CUDA并发内核执行,每个流有多个内核

为CUDA内核使用不同的流使得并发内核执行成为可能.因此n,n如果它们适合硬件,理论上可以同时运行流上的内核,对吧?

现在我面临着以下问题:有没有n不同的内核,但n*m其中m的内核需要顺序执行.例如n=2,m=3将导致以下带流的执行方案:

Stream 1: <<<Kernel 0.1>>> <<<Kernel 1.1>>> <<<Kernel 2.1>>>
Stream 2: <<<Kernel 0.2>>> <<<Kernel 1.2>>> <<<Kernel 2.2>>>
Run Code Online (Sandbox Code Playgroud)

我天真的假设是内核x.0和y.1应该同时执行(从理论的角度来看)或者至少不是连续的(从实际的角度来看).但是我的测量表明我并非如此,似乎连续执行(即K0.0,K1.0,K2.0,K0.1,K1.1,K2.1).内核本身非常小,因此并发执行应该不是问题.

现在我的方法是完成一种调度,以确保内核以交错方式排列到GPU上的调度程序中.但是当处理大量流/内核时,这可能弊大于利.

好吧,直截了当地说:解决这种情况的适当(或至少是不同的)方法是什么?

编辑:使用CUDA事件完成测量.我已经测量了完全解决计算所需的时间,即GPU必须计算所有n * m内核.假设是:在完全并发的内核执行时,执行时间大致(理想地)1/n是按顺序执行所有内核所需时间的两倍,从而必须可以同时执行两个或更多内核.我现在只使用两个不同的流来确保这一点.

我可以测量使用所描述的流和调度内核交错之间的执行时间的明显差异,即:

Loop: i = 0 to m
    EnqueueKernel(Kernel i.1, Stream 1)
    EnqueueKernel(Kernel i.2, Stream 2)
Run Code Online (Sandbox Code Playgroud)

Loop: i = 1 to n
    Loop: j = 0 to m
        EnqueueKernel(Kernel j.i, Stream i)
Run Code Online (Sandbox Code Playgroud)

后者导致更长的运行时间.

编辑#2:将流编号更改为1(而不是0,请参阅下面的注释).

编辑#3:硬件是NVIDIA …

concurrency cuda

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

C++类的虚函数表存储在哪里?

我试图找到 C++ 类的虚函数表的确切存储位置。我找到了一些答案,比如它是“函数指针的静态数组”,那么它会存储在数据段只读存储器中吗?(初始化一)

c++

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

移动NSView直到它到达边框

在一个基于Cocoa的应用程序中,我有一个绘图画布,继承自NSView,以及一个矩形,也从NSView继承.在画布内部拖动矩形是没有问题的:

-(void)mouseDragged:(NSEvent *)theEvent {
  NSPoint myOrigin = self.frame.origin;

  [self setFrameOrigin:NSMakePoint(myOrigin.x + [theEvent deltaX], 
                                   myOrigin.y - [theEvent deltaY])];
}
Run Code Online (Sandbox Code Playgroud)

奇迹般有效.我现在遇到的问题:如何防止矩形移动到画布外?

所以,首先我想解决这个问题只是针对左边框,然后调整其他边缘.我的第一个想法是:"检查矩形的x原点是否为负".但是:一旦它是负的,矩形就不能再被移动(自然).我通过在else-branch中将矩形移动到零x偏移来解决这个问题.这有效,但它......丑陋.

所以我对这个,任何暗示都很困惑?绝对是解决方案非常接近和简单.这很容易,我无法弄明白(一如既往的简单解决方案;).

问候

苹果电脑

cocoa objective-c draggable nsview

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

内核高内存

在操作系统设计中,内核最常映射到高虚拟内存地址,从而获得对高端内存部分的控制.下面留下的空间用于在用户空间中运行的应用程序,如" Linux 3/1虚拟地址拆分 " 中的出色方式所述.

我想知道的是,为什么要做出这个设计决策或为什么内核不使用内存的下半部分?这对我来说并不是很清楚,或者我可能已经监督了一些事情.

编辑:此问题涉及虚拟地址而非物理地址.

operating-system kernel

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

在循环中使用Thrust优化CUDA

给出以下代码片段,使用推力生成一种带CUDA的代码字典(CUDA的C++模板库):

thrust::device_vector<float> dCodes(codes->begin(), codes->end());
thrust::device_vector<int> dCounts(counts->begin(), counts->end());
thrust::device_vector<int> newCounts(counts->size());

for (int i = 0; i < dCodes.size(); i++) {
    float code = dCodes[i];
    int count = thrust::count(dCodes.begin(), dCodes.end(), code);

    newCounts[i] = dCounts[i] + count;

    //Had we already a count in one of the last runs?
    if (dCounts[i] > 0) {
        newCounts[i]--;
    }

    //Remove
    thrust::detail::normal_iterator<thrust::device_ptr<float> > newEnd = thrust::remove(dCodes.begin()+i+1, dCodes.end(), code);
    int dist = thrust::distance(dCodes.begin(), newEnd);
    dCodes.resize(dist);
    newCounts.resize(dist);
}

codes->resize(dCodes.size());
counts->resize(newCounts.size());

thrust::copy(dCodes.begin(), dCodes.end(), codes->begin());
thrust::copy(newCounts.begin(), newCounts.end(), counts->begin());
Run Code Online (Sandbox Code Playgroud)

问题是,通过使用CUDA视觉分析器,我注意到4个字节的多个副本.IMO这是由生成的

  1. 循环计数器i
  2. float代码 …

c++ for-loop cuda thrust

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

VHDL - 如何检测std_logic_vector上的更改?

我有一个std_logic_vector,我需要知道它何时发生了一些变化.到目前为止我写了这个:

process (cp, l1)
begin
    if rising_edge(cp) then
        rL1 <= l1;
    end if;
end process;
tickL1 <= rL1 xor l1;
Run Code Online (Sandbox Code Playgroud)

rL1是l1的延迟版本,l1是我正在检查更改的std_logic_vector.问题是xor返回std_logic_vector,但我只需要0或1.我怎么能得到它?

vhdl

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

具有相同签名的功能

我想在主机和设备端有一个类的相同成员函数的两个版本.让我们说

class A {  
public:  
    double stdinvcdf(float x) {  
        static normal boostnormal(0, 1);  
        return boost::math::cdf(boostnormal,x);  
    }

    __device__ double stdinvcdf(float x) {  
        return normcdfinvf(x);
    }  
};
Run Code Online (Sandbox Code Playgroud)

但是当我使用nvcc编译此代码时,它会中止function redefinition错误.

cuda overloading nvcc

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

在Swift中重载运算符

我正在尝试在Swift中实现Comparable协议,但编译器不喜欢我尝试重载<运算符.我检查了Apple文档和所有SO帖子,但它们都没有编译.Xcode给了我这个警告:

一行上的连续声明必须用';'分隔

并且它一直建议我在小于符号后插入分号.对我所做错的任何见解都表示赞赏.

class SomeClass: NSObject, Equatable, Comparable{

    var number: UInt32!

    override init()
    {
        super.init()
        self.number = arc4random()
    }

    func == (lhs: SomeClass, rhs: SomeClass) -> Bool
    {
        return true
    }

    func < (lhs: SomeClass, rhs: SomeClass) -> Bool
    {
        return true
    }

}
Run Code Online (Sandbox Code Playgroud)

operator-overloading swift

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

C++中字符串索引的问题

如何在C++中访问字符串索引?例如:如果我有字符串变量名称测试,我想从索引号5到9访问它.我怎么能用C++做到这一点?

string test;
cout<<test[5:9];
Run Code Online (Sandbox Code Playgroud)

我尝试了上面的方法,但它不起作用.有什么建议?谢谢.

c++

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