小编use*_*695的帖子

了解流式多处理器 (SM) 和流式处理器 (SP)

我试图了解 GPU 的基本架构。我已经阅读了很多材料,包括这个非常好的 SO 答案。但我仍然很困惑,无法得到一张好的照片。

我的理解:

  • 一个 GPU 包含两个或多个流式多处理器 (SM),具体取决于计算能力值。
  • 每个 SM 由流处理器 (SP) 组成,它们实际上负责指令的执行。
  • 每个块都由 SP 以扭曲(32 个线程)的形式处理。
  • 每个块都可以访问共享内存。不同的块无法访问其他块的共享内存的数据。

困惑:

在下图中,我无法理解哪个是流式多处理器 (SM),哪个是 SP。我认为Multiprocessor-1代表单个 SM,而Processor-1(最多 M)代表单个 SP。但我不确定这一点,因为我可以看到每个处理器(蓝色)都提供了一个寄存器,但据我所知,一个寄存器提供给线程单元。

如果你能提供一些关于这张图片或任何其他图片的基本概述,这对我会很有帮助。

图片

cuda gpu

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

Visual Studio中的静态和动态链接

我理解静态和动态链接的概念.众所周知,在Windows平台上,.dll是动态库,.lib是静态库.

我的困惑:我做了一个项目,我必须使用OpenCV库.基本上,我不得不使用以下5个OpenCV库:

-lopencv_core
-lopencv_highgui
-lopencv_imgcodecs
-lopencv_imgproc
-lopencv_videoio
Run Code Online (Sandbox Code Playgroud)

为此,在项目的属性中,我必须告诉编译器Additional Library Directory VS 2012 中的库的路径,我还必须告诉链接器.lib我想要用于项目的库.该项目编译没有任何错误.但是,当我尝试运行该项目时,它表示videoio.dll缺少(其余库也出现相同的错误).一旦我将.dll文件复制到存在的文件夹中.exe,项目运行正常.

问题:为什么.dll我已经链接静态库(.lib)时必须复制文件?

进一步的问题:当我在Mac OS或Linux上使用Eclipse时,我只需要告诉编译器存在OpenCV库以及链接器我要使用的其他OpenCV库..exe在这种情况下,我从来没有把动态库放到文件夹中.

c++ dll opencv visual-studio-2012

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

OpenCV文档说"uchar"是"无符号整数"数据类型.怎么样?

我对这里提到的openCV文档感到困惑.

根据文档,如果我使用"uchar"创建图像,该图像的像素可以存储无符号整 数值,但如果我使用以下代码创建图像:

Mat image;
image = imread("someImage.jpg" , 0); // Read an image in "UCHAR" form
Run Code Online (Sandbox Code Playgroud)

或通过做

image.create(10, 10, CV_8UC1);
for(int i=0; i<image.rows; i++)
{
    for(int j=o; j<image.cols; j++)
    {
        image.at<uchar>(i,j) = (uchar)255;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,如果我尝试使用打印值

cout<<"  "<<image.at<uchar>(i,j);
Run Code Online (Sandbox Code Playgroud)

然后我在终端得到一些奇怪的结果,但如果我使用以下语句,那么我可以得到0-255之间的值.

cout<<"  "<<(int)image.at<uchar>(i,j); // with TYPECAST
Run Code Online (Sandbox Code Playgroud)

问题:如果图像本身可以存储"无符号整数"值,为什么我需要进行类型转换才能打印0-255范围内的值.

c++ console opencv types output

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

一个类的方法不能访问同一个类的int变量

注意:请停止downvoting ...我尝试了很多,但它只是一个我找不到的错字.

我有一个Node具有某些方法和变量的类.我试图int state从两个方法访问变量,即void setState()int getState(void).第一种方法是能够设置值,state但第二种方法(即int getState(void))给出错误.

Node.h

class Node{
private:
    vector<Wire*> inputs;       
    vector<Wire*> outputs;      
    int state;                  

public:

    void addOutput(Wire *a);                
    void addInput(Wire *a);             


    Node* getInput(unsigned int i);     
    Node* getOutput(unsigned int i);        

    void setState(int st);              
    int  getState(void);            


};
Run Code Online (Sandbox Code Playgroud)

main()

int main(int argc, char *argv[])
{
    Node* b=new Node(INPUT, "B");
    Node* a=new Node(INPUT, "A");
    Node* Cin=new Node(INPUT, "Cin");
    Node* d=new Node(XOR, "D");
    Wire* w=new Wire(a,d);
    d->addInput(w);
    a->addOutput(w);

    vector<Node*> …
Run Code Online (Sandbox Code Playgroud)

c++

-1
推荐指数
1
解决办法
59
查看次数

标签 统计

c++ ×3

opencv ×2

console ×1

cuda ×1

dll ×1

gpu ×1

output ×1

types ×1

visual-studio-2012 ×1