No.81019 作者:liufengzhong 邮件:l_fz@sina.com ID:149522 登陆:12次 文章数:695篇 最后登陆IP:183.13.93.245 最后登陆:2015/6/16 17:02:27 注册:2014/7/29 21:51:15 财富:3671 发帖时间:2014/9/7 15:06:09 发贴者IP:111.221.200.181 标题:liufengzhong:[转帖]如何并行SDRAM服务器 摘要:No.81019[转帖]如何并行SDRAM服务器 亲爱的朋友们, 我尝试使用SDRAM内存条是我自己的SDRAM服务器和工作非常接近的SDRAM片项目。该数据被读取来自每一1.6us,我通过XS1-L8A-64-TQ128-C5的32位端口采样。这工作得很好,如果我用的是内部SRAM。然而,这是不幸太小所以决定为SDRAM切片的文档中的描述使用SDRAM中。我设计我自己的董事会,并成立XtimeComposer项目基于SDRAM的模块。í并行化我的应用程序,SDRAM的服务器,也需要进行数据交换快速的UART模块: par { sdram_server(sdram_c, ports); meas_TX(sdram_c,uart_c); uart_tx_fast(p_tx, uart_c, tics); } 数据被写入到通过sdram_buffer_write函数附带了模块的SDRAM。存储一个整数 sdram_buffer_write (c_server, bank, row, 1, writebuff); //Wait until idle, i.e. the sdram had completed writing. sdram_wait_until_idle(c_server, writebuff); 大约需要1.7us(用示波器测量),因此是太长了。所以我决定收集128整数和一步到位,这需要(与sdram_buffer_write或sdram_full_row_write)左右为10us,但当然只发生每205us写出来。所以应该有足够的时间。不幸的是,sdram_wait_until_idle功能停止测量线程10我们,所以我错过了一些传入的数据点 - 即使我融入这个函数的功能,直接写程序。这一点,我不明白:在我看来,线程并行化应确保存储在不同的核心进行同时测量螺纹继续工作。 我的问题是: 1, 如何避免,该函数sdram_wait_until_idle遗址的表现?我尝试了很多东西(比如我在循环移动的sdram_wait_until_idle功能的写命令之前,以减少等待时间。好了,性能的提高,但遗憾的是不够好),并阅读了大量文档,但现在经过一个星期,我有我自己没有什么更多的想法。 2, 我可以加速通过c_server流chanend的表现?这些应该更快,并且不需要使用之后被关闭。 3, 是否有可能让在多个内核上的SDRAM的服务器上运行?我已经看到了这一点,在基准测试程序,但我不知道这是否会有所帮助。这是特别真实的,因为在基准测试的性能确实不随所用的核心数。 我明白任何形式的帮助,并希望尽快得到您阅读。 托尔斯滕 回答: 托尔斯滕, 我有好消息告诉你 - 这是绝对有可能的。我刚刚做了一个非常类似的事情与实施音频延迟我的DSP项目,该项目是将更多的数据到SDRAM,并以更快的速度比你的需要。有几个不同的方法来实现这一目标。我用C和XC的混合物线程之间共享内存,并降低数据移动在渠道的数量,但你可能只做到了越野通过拆分成两个线程是这样的: read_thread(chanend c_data) { int buffer[128]; while(1) { for(int i = 0; i < 128; i++) { read data into buffer } for(int i = 0; i < 128; i++) { c_data <: buffer[i]; } } } write_thread(chanend c_data, chanend c_sdram_server) { int buffer[128]; while(1) { for(int i = 0; i < 128; i++) { c_data :> buffer[i]; } sdram_write() sdram_wait_idle(); } } 我认为,你想要做什么,应该足够快。如果这还不够快,或者如果我不明白你的问题吧,让我知道,我会看看我能不能解释一下C语言的共享内存的方法 回复: 你好,谢谢你的回答。我实现的代码,并想通了,第二for循环(为(int i = 0; I <128;我+ +){C_DATA <:缓冲区由[i];}})在read_thread现在需要大约20US,从而战利品性能(如wait_until_idle功能做之前)。现在,我有以下意见/问题: - 我需要使用异步信道传输,它应该可以通过“交易”通道。然而,这些都必须恰好与一个chanend定义,所以我不能包括SDRAM,chanends。所以,你也许忘记了“奴隶”,“大师”,或“交易” - 命令? - 在您的建议,您使用的SDRAM通道服务器和写程序。不过,我还需要获得该数据从SDRAM服务器返回到它传送到PC上。由于chanend只能在两个并行的线程中使用,我需要一个新的解决方案,在这里也。 - 我需要的时钟在每1.6us(微秒)的数据 - 而不是毫秒。既然你提到一个音频项目(我联想到毫秒时间),也许你误解了我的要求吗?正如你可能已经意识到,我是相当新手,那么请道歉,如果我监 ......
>>返回讨论的主题
|