找回密码
 新注册用户
搜索
查看: 6934|回复: 20

[求助] 如何运行没有输入文件的程序?

[复制链接]
发表于 2009-3-10 16:04:48 | 显示全部楼层 |阅读模式
比如说我有个程序,是计算pi的,它没有输入文件,输出文件就是按照参数输出计算的位数。像这样的程序如何在BOINC里进行分布式运行。我看到文档中说得有个输入文件和输出文件的模板才行。谢谢!
回复

使用道具 举报

发表于 2009-3-10 16:08:06 | 显示全部楼层
BOINC只是平台。具体的运算程序要由项目方自行编写。
回复

使用道具 举报

 楼主| 发表于 2009-3-10 16:36:09 | 显示全部楼层
我正在用BOINC提供的wrapper程序包装我自己的。但是如果项目方自行编制程序的工作量很大的话,BOINC就失去了推广的优势。因为项目方,或者说客户往往想尽可能简单地利用BOINC进行运算,而不要过多的关注其他事情。
回复

使用道具 举报

发表于 2009-3-10 17:06:40 | 显示全部楼层
BOINC的优势在于打破了各个项目的各自为战,并为项目提供了一套网站建立、任务发放等的方案。项目方只需要按照BOINC的标准来编程就可以了。
自行编制程序的工作量很大?我倒是认为这工作不需要由BOINC来作。这是属于各个项目自己的事情。
回复

使用道具 举报

发表于 2009-3-10 17:56:52 | 显示全部楼层
从命令行接收运行参数 改为 从输入文件中接收运行参数,这个完全说不上是啥大改动吧?
回复

使用道具 举报

 楼主| 发表于 2009-3-10 18:53:05 | 显示全部楼层
我建了一个空的文件作为输入文件。命令行参数写在job.xml文件里,如何改成从文件中读呢?
回复

使用道具 举报

 楼主| 发表于 2009-3-10 18:58:20 | 显示全部楼层
刚才尝试运行了一下,的确可以通过BOINC自带的wrapper程序把我自己的程序分发出去。发现我的程序被分成了4部分,一个客户端接收到了1和3,另一个接收到了2和4.但是后面出了错误信息,如下:Tue 10 Mar 2009 05:48:10 PM HKT|superpi|[error] Can't rename output file pi_nodelete_3_0 to projects/10.141.1.202_superpi/pi_nodelete_3_0: Error -1,这是什么意思呢?无法重命名我的输出文件?我运行服务器端的账户是普通的boincadm,客户端是root
回复

使用道具 举报

 楼主| 发表于 2009-3-10 19:08:10 | 显示全部楼层
我刚才试了一下,利用BOINC自带的wrapper程序的确可以把我自己的程序在运行时分割后分发出去。我的程序被分成了4段,一台客户端接收到了1和3,另一台接收到了2和4,但是最后却出现了报错信息,如下: Tue 10 Mar 2009 05:48:10 PM HKT|superpi|[error] Can't rename output file pi_nodelete_3_0 to projects/10.141.1.202_superpi/pi_nodelete_3_0: Error -1,不知道是什么意思。不能重命名?我的服务器端用户是boincadm,客户端是root
回复

使用道具 举报

发表于 2009-3-11 00:30:08 | 显示全部楼层

回复 #8 newalan 的帖子

这个大多数是因为程序产生的问题~~~因为BOINC客户端设计还是比较好的~~~
建议楼主检验一下文件操作是否正确,有没有忘记关闭文件的现象出现~~~
回复

使用道具 举报

 楼主| 发表于 2009-3-11 11:42:32 | 显示全部楼层
我运行的是super pi for Linux: http://shareitem.org/archive/software-super-pi.html, 这个程序里的"pi"可执行程序运行格式为"pi N", N为一个正整数,表示2的N次方,这个数字表示最终计算得到的pi的位数。程序运行结果有2部分输出,一部分在console里,是程序运行本身的一些信息,另一部分是程序运行结束后生成的PI.DAT文件。下面贴出我的输入和输出配置文件:

输入文件:

<file_info>
    <number>0</number>
</file_info>
<workunit>
    <file_ref>
        <file_number>0</file_number>
        <open_name>in</open_name>
        <copy_file/>
    </file_ref>
    <rsc_fpops_bound>1000000000000000000</rsc_fpops_bound>
    <rsc_fpops_est>1000000000000000</rsc_fpops_est>
</workunit>

输出文件:

<file_info>
    <name><OUTFILE_0/></name>
    <generated_locally/>
    <upload_when_present/>
    <max_nbytes>524288000</max_nbytes>
    <url><UPLOAD_URL/></url>
</file_info>
<result>
    <file_ref>
        <file_name><OUTFILE_0/></file_name>
        <open_name>out</open_name>
    </file_ref>
</result>

输出文件我只设置了一个,我不知道这个配置是接收程序两个输出中的哪一个。输入文件在程序运行是本来是不需要的,但因为输入文件参数是一个强制配置,所以我就建立了一个空的in的文件。

下面是我的wrapper程序的配置文件job.xml:

<job_desc>
    <task>
        <application>pi</application>
        <stdin_filename>stdin</stdin_filename>
        <stdout_filename>stdout</stdout_filename>
        <command_line>25</command_line>
    </task>
</job_desc>

command line那行是正整数N的数值,意思是说计算到pi小数点后面的2的25次方位。
回复

使用道具 举报

发表于 2009-3-12 01:22:22 | 显示全部楼层

回复 #10 newalan 的帖子

可以参考一下这个主题:
http://boinc.berkeley.edu/dev/forum_thread.php?id=3055
回复

使用道具 举报

 楼主| 发表于 2009-3-12 15:49:48 | 显示全部楼层
多谢"fwjmath"提供的link,我仔细看了以后,发现如果要使用wrapper的输入和输出文件,则要加上<copy_file/>这一项,但是我改过以后问题还是存在,我的错误貌似是权限问题:Tue 10 Mar 2009 05:48:10 PM HKT|superpi|[error] Can't rename output file pi_nodelete_3_0 to projects/10.141.1.202_superpi/pi_nodelete_3_0: Error -1, 是说不能把文件"pi_nodelete_3_0"重命名或者移动到这里"projects/10.141.1.202_superpi/pi_nodelete_3_0"。我把客户端的BOINC/project路径的属性和服务器端的upload的属性都已经改成777了,但错误重现。下面是我改过的job.xml, pi_wu和pi_result:
job.xml:
<job_desc>
    <task>
        <application>pi</application>
        <stdin_filename>in</stdin_filename>
        <stdout_filename>out</stdout_filename>
        <command_line> 25</command_line>
    </task>
</job_desc>

pi_wu(输入文件):
<file_info>
    <number>0</number>
</file_info>
<workunit>
    <file_ref>
        <file_number>0</file_number>
        <open_name>in</open_name>
        <copy_file/>
    </file_ref>
    <command_line> 25</command_line>
    <rsc_fpops_bound>1000000000000000000</rsc_fpops_bound>
    <rsc_fpops_est>1000000000000000</rsc_fpops_est>
</workunit>

pi_result (输出文件):
<file_info>
    <name><OUTFILE_0/></name>
    <generated_locally/>
    <upload_when_present/>
    <max_nbytes>524288000</max_nbytes>
    <url><UPLOAD_URL/></url>
</file_info>
<file_info>
    <name><OUTFILE_1/></name>
    <generated_locally/>
    <upload_when_present/>
    <max_nbytes>524288000</max_nbytes>
    <url><UPLOAD_URL/></url>
</file_info>
<result>
    <file_ref>
        <file_name><OUTFILE_0/></file_name>
        <open_name>out</open_name>
    </file_ref>
    <file_ref>
        <file_name><OUTFILE_1/></file_name>
        <open_name>PI.DAT</open_name>
        <copy_file/>
    </file_ref>
</result>
回复

使用道具 举报

 楼主| 发表于 2009-3-12 16:01:27 | 显示全部楼层
另一个问题是如果我这个程序本来就不需要输入文件,那么配置文件到底怎么写呢?
回复

使用道具 举报

 楼主| 发表于 2009-3-12 16:20:15 | 显示全部楼层
刚才我又做了一次试验,如果在输出文件里面加上<copy_file/>,那么错误信息就会出现Can't rename...,如果不加<copy_file/>,就只有...absent的log
回复

使用道具 举报

发表于 2009-3-12 17:39:57 | 显示全部楼层

回复 #14 newalan 的帖子

absent的话就很明显了:你程序生成的文件的文件名和BOINC要求的不同。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 新注册用户

本版积分规则

论坛官方淘宝店开业啦~

Archiver|手机版|小黑屋|中国分布式计算总站 ( 沪ICP备05042587号 )

GMT+8, 2024-9-23 22:34

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表