小编pau*_*lAl的帖子

内存映射IO - 它是如何完成的?

我已经了解了端口映射IO和内存映射IO之间的区别,但我无法弄清楚在现代操作系统(windows或linux)中如何实现内存映射Io

我所知道的是,物理内存的一部分被保留用于与硬件通信,并且有一个MMIO单元参与处理总线通信和其他与内存相关的东西

驱动程序如何与底层硬件通信?驱动程序将使用哪些功能?在使用它们之前,与视频卡通信的地址是固定的还是某种"协议"?

我还是很困惑

operating-system kernel device-driver linux-kernel

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

新手asm:通话代码在哪里?

我写了这个简单的内核模块:

#include <linux/module.h>        // for printk() 

int init( void ) 
{ 
    printk( "n  Kello, everybody! nn" ); 

    return    0; 
} 

void exit( void ) 
{ 
    printk( "n  Goodbye now... nn" ); 
} 

MODULE_LICENSE("GPL"); 
module_init(init); 
module_exit(exit); 
Run Code Online (Sandbox Code Playgroud)

我试图理解代码是如何被转换为asm的,所以我对它进行了反思:

root@ubuntu:/home/alex/Desktop/KModule# objdump -D kmodule.ko 

kmodule.ko:    file format elf64-x86-64 


Disassembly of section .note.gnu.build-id: 

0000000000000000 <.note.gnu.build-id>: 
  0:    04 00                    add    $0x0,%al 
  2:    00 00                    add    %al,(%rax) 
  4:    14 00                    adc    $0x0,%al 
  6:    00 00                    add    %al,(%rax) 
  8:    03 00                    add    (%rax),%eax 
  a:    00 00                    add    %al,(%rax) …
Run Code Online (Sandbox Code Playgroud)

c linux assembly linux-kernel att

15
推荐指数
1
解决办法
9614
查看次数

CUDA小内核2d卷积 - 怎么做

我一直在试验CUDA内核几天来在500x500图像之间执行快速2D卷积(但我也可以改变尺寸)和一个非常小的2D内核(laplacian 2d内核,所以它是一个3x3内核..太小了使用所有cuda线程获得巨大优势).

我创建了一个CPU经典实现(两个for循环,就像你想象的那样简单),然后我开始创建CUDA内核.

经过一些令人失望的尝试来执行更快的卷积后,我最终得到了这个代码:http: //www.evl.uic.edu/sjames/cs525/final.html(参见共享内存部分),它基本上让16x16线程阻止加载共享内存中所需的所有卷积数据,然后执行卷积.

没什么,CPU仍然快得多.我没有尝试FFT方法,因为CUDA SDK声明它对于大内核大小是有效的.

无论你是否阅读我写的所有内容,我的问题是:

如何使用CUDA在相对较大的图像和非常小的内核(3x3)之间执行快速2D卷积?

c++ cuda image image-processing convolution

13
推荐指数
1
解决办法
9173
查看次数

LLVM builder::GetInsertBlock,这个函数的用途是什么?

我试图了解IRBuilderLLVM 中以下方法的用途

BasicBlock *GetInsertBlock() const { return BB; }
BasicBlock::iterator GetInsertPoint() const { return InsertPt; }
Run Code Online (Sandbox Code Playgroud)

没有针对它们的 doxygen 文档。例如,如果我第一次使用会发生什么mybuilder.GetInsertBlock()

c++ llvm

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

列出我从未见过的'i for j in'的迭代

我试图了解以下python代码的作用

plain_list = [ j for i in arguments for j in i ]
Run Code Online (Sandbox Code Playgroud)

我从未见过这样的语法,有人可以帮助我吗?

python

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

尽管可见,但未设置静态变量

我有三个文件,一个主.cpp文件:

#include <stdio.h>
#include "myClass.h"



int main()
{

    myClass mvar;

    tryVar = 23; // why does this not work?

    printf("%d ", mvar.readTryVar()); // This writes out 0, why??

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

一个myClass.cpp文件

#include "myClass.h"


myClass::myClass(void)
{
}


myClass::~myClass(void)
{
}

void myClass::setTryVar()
{
    tryVar = 23334;
}

int myClass::readTryVar()
{
    return tryVar;
}
Run Code Online (Sandbox Code Playgroud)

和myClass.h文件

#pragma once

static int tryVar;

class myClass
{
public:
    myClass(void);
    ~myClass(void);


    void setTryVar();

    int readTryVar();
};
Run Code Online (Sandbox Code Playgroud)

它们是非常简单的文件,但我无法理解为什么静态变量不在main函数中设置,我需要通过myClass函数设置它.

我认为我不太清楚如何创建"翻译单元",我知道"include"指令只是在实际编译之前将头文件的内容复制到.cpp文件中..那么为什么不是'静态变量可见吗?

c++ oop static class object

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