我想创建一个非常简单的事件总线,它允许任何客户端订阅特定类型的事件,当任何发布者使用EventBus.PushEvent()
方法在总线上推送事件时,只有订阅该特定事件类型的客户端才能获得该事件.
我正在使用C#和.NET 2.0.
我完全理解32或64位系统的含义.所以基本上所有寄存器或字长都是32位或64位.
为简单起见,让我们采用一个32位系统并说我在C中编写一个程序,如果我声明一个int类型说"int a = 5;" 然后为var a保留一个字长的存储位置.因此,当我想要访问它时,我可以使用字地址为该内存位置.
但是说我有4个字符"char a,b,c,d;" 因为它是一个字节,每个都放在一个字中,所以如果我只想访问char b,我该怎么办?(说内存是字节可寻址的)现在说b是字中的第三个字节...那怎么来公共汽车?总线的第3个字节硬连接到第17到第24行?那么当只有b被访问时,其他24行会发生什么?
我们有一个基于Atom Z510/Intel SCH US15W Q7卡(运行Debian Linux)的系统.我们需要从低引脚数总线上的设备传输数据块.据我所知,这个芯片组不提供DMA设备,这意味着处理器必须在软件循环中一次读取一个字节的数据.(设备驱动程序实际上是使用"rep insb"x86指令实现的,所以如果我理解正确的话,循环实际上是由CPU实现的.)
这远非最佳,但应该可以达到14Mb/s的传输速率.相反,我们几乎无法管理4Mb/s,总线上的事务间隔不超过2us,即使每次对从设备的读取都是在560ns内完成.我不相信公共汽车上的其他交通是罪魁祸首,但我仍在调查.
我的问题是:
有没有人知道SCH上是否有可能影响LPC总线时序的配置寄存器?
我在英特尔网站上的设备上找不到任何有用的信息,也没有在Linux内核代码中发现任何看起来像是在摆弄任何这样的寄存器的东西(但是当涉及到Linux内核的东西时我就是一个菜鸟.)
我不是x86专家,因此任何可能发挥作用的其他因素或任何其他与此设备相关的"战争故事"都会很好地了解.
编辑:我找到了数据表.我没有看到解释这种行为的任何内容,但我正在研究将我们的设备映射为固件设备的可能性,因为固件总线周期似乎没有遭受相同的延迟.
我是Azure Service Bus的新手,已经创建了用于创建主题的成功poc和用于接收其消息的单独订阅者应用程序.
基于这篇文章,我引用: "一个主题最多可以有2,000个与之关联的订阅,每个订阅都会获得发送到该主题的所有消息的独立副本.一个或多个订阅者可以独立订阅订阅并竞争来自它."
http://convective.wordpress.com/2011/06/08/windows-azure-appfabric-service-bus-queues-and-topics/
我有兴趣做的是为多个应用程序扩展它以独立订阅相同的主题,但不竞争它们.
我目前的poc有一个发件人和两个单独的应用程序订阅了相同的主题和订阅.我看到的行为是,如果我从发件人发布一条消息,则两个正在运行的订阅应用程序中的任何一个都会收到它; 但不是另一个.
我的问题是,多个独立的应用程序是否可以接收相同的主题消息?任何建议将不胜感激!
我有一个表,其中表的每一行包含状态(寄存器).有逻辑选择一个特定的行.只有一行接收"选定"信号.然后访问该选定行的状态.状态的一部分作为输出连接到模块的IO,或者IO的一部分用作输入以更新状态.
如果我用电路实现这个,我会使用传递门.所选信号将导通一组传输门,这将把行的寄存器连接到总线.然后总线将连接到IO捆绑包.这是快速,小面积和低能量.
在Chisel中有一种直接的实现方法.它将所选行编码为二进制数,然后将该数字应用于传统多路复用器的选择输入.不幸的是,对于具有20到50行的表以及数百位的状态,这种实现可能非常慢,并且在面积和能量上浪费.
这个问题有两个部分:1)有没有办法在Chisel中指定总线,这样你就有传输门或传统的三态驱动器都挂在总线上?
2)如果不这样做,Chisel中有一个快速,小面积,低能量的方式吗?
谢谢
我用cudaMemcpy()
一次将1GB的数据准确复制到设备上.这需要5.9秒.反过来需要5.1s.这是正常的吗?
在复制之前,函数本身是否有这么多开销?理论上,PCIe总线的吞吐量至少应为4GB/s.
没有内存传输重叠,因为特斯拉C870不支持它.任何提示?
编辑2:我的测试程序+更新的时间; 我希望阅读不是太多!
该cutCreateTimer()
功能不会编译我:"错误:标识符'cutCreateTimer’不确定" -这可能与安装在计算机上的旧版本的CUDA(2.0)
__host__ void time_int(int print){
static struct timeval t1; /* var for previous time stamp */
static struct timeval t2; /* var of current time stamp */
double time;
if(gettimeofday(&t2, 0) == -1) return;
if(print != 0){
time = (double) (t2.tv_sec - t1.tv_sec) + ((double) (t2.tv_usec - t1.tv_usec)) / 1000000.0;
printf(...);
}
t1 = t2;
}
main:
time(0);
void *x;
cudaMallocHost(&x,1073741824);
void *y;
cudaMalloc(&y, 1073741824);
time(1);
cudaMemcpy(y,x,1073741824, cudaMemcpyHostToDevice);
time(1);
cudaMemcpy(x,y,1073741824, …
Run Code Online (Sandbox Code Playgroud) 有人可以简单地指出计算机体系结构中内存总线和地址总线之间的差异吗?另外当你说内存总线的时候暗示你指的是数据总线?
我有一个最近的12核Intel CPU(Haswell架构),它有4个内存通道.机器可以并行执行多少次DRAM内存访问?
例如,如果我有一个使用12个线程的程序,这些线程位于紧密循环中,从一个范围太大而无法容纳缓存的随机存储器地址读取单个字节.我希望所有12个线程将花费几乎所有时间等待内存提取.
线程是否必须轮流使用DRAM总线?
注意:假设我使用的是1 GB的VM页面大小,因此没有TLB缓存未命中.
我不断地以窥视模式接收消息,如果处理失败(不是传递),我会放弃它们。但是,该消息会立即再次变得可用并被再次接收以进行处理。它再次快速失败,并且在最大交付量之后它是死信的。
有没有办法配置主题/订阅在消息被放弃后在发布之前等待?优选以指数方式。
当然,我也愿意通过代码提出建议。