2011英特尔®线程挑战赛(入门级)

向上一区 2011-06-12 05:21:05
第三阶段问题
流水数字
计算机系统使用 8 位字节(BYTE),16 位字(WORD) 和 32 位双字(DWORD)等基本数字类型。 每种数字类型都是由字节组成,在通信过程中接收双字时是一个字节一个字节地接收。这意味着内存中的每个缓冲区都可以视为任意原始数字类型的集合。编译器自 动将一个 16 字节的数组转换为 4 个双字的数组,如下所示:
16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
FEDC BA98 7654 3210
问题描述
编写一段代码,接收 16 个字节大小的数据并让其经过若干轮循环,直到所有字节为 0 或恢复为初始输入的字节。此程序的每次循环将向每个字节单独添加一个值。在第 37 次循环时,缓冲区中的字节流转换成四个双字,然后这四个双字再逐个添加到双字缓冲区中。在第 38 次循环中,双字转回 16 个字节,并继续增加值,开始下一个 37 次循环。由于增加固定大小的值本身就是一个循环过程,所以在经过足够的循环次数后,数组的值将恢复为初始值或每个都变为 0。这段代码的目标是计算让所有字节都达到 0 值,或恢复为初始输入值所需的循环次数。
输入描述
输入内容通过三个命令行参数传递给程序,每个参数是一个十六进制数字集合。各个参数用空格隔开。第一个参数是将添加数据的源缓冲区。第二个参数是添加的字节值,该值在每次循环中以字节形式添加到源缓冲区。第三个参数是添加的双字值,该值在第 37 次循环添加到源缓冲区。
输出描述该程序只需输出让源缓冲区中的所有字节都变为 0 值或恢复为初始输入值所经过的循环次数。
程序预演
为演示此问题,我们使用两个将在第 3 次循环转换为字的字节。
源数字为:字节 A:0x40、字节 B:0x10
字节加载序列为:字节 A:0x01、字节 B:0x20
字加载序列为:0x1133
起点:A = 0x40, B = 0x10
第 1 次循环:A = A + 0x01, B = B + 0x20 完成时:A = 0x41, B = 0x30
第 2 次循环:A = A + 0x01, B = B + 0x20 完成时:A = 0x42, B = 0x50
在第 3 次循环前:BA 的字组合值为 0x5042
第 3 次循环:BA = BA + 0x1133 完成时:BA = 0x6175
在第 4 次循环前:字节值 A = 0x75、B = 0x61
第 4 次循环:A = A + 0x01、B = B + 0x20 完成时: A = 0x76、B = 0x95
当 A 和 B 均为零或恢复为初始值时,此流程将停止。
程序演示
MyApp.exe 1BFC91544B9CBF9E5B93FFCAB7273070 38040301052B0163A103400502060501 05ED2F440000B17B0000000100000036
源数字为:1BFC91544B9CBF9E5B93FFCAB7273070
字节加载序列为:38040301052B0163A103400502060501
双字加载序列为:05ED2F440000B17B0000000100000036
输入源的第一个字节是 0x70,第二个是 0x30,依此类推。转换为双字时,输入源的第一个双字是 0xB7273070。
例如,如果我们从最低位字节开始处理,那么程序流将从 0x70 开始,并在每次循环中添加 0x01,直到循环 37 次。在第 37 次循环中,缓冲区中的字节流将转换为双字集合,直接添加 0x00000036 而不是一个字节一个字节地添加。当循环次数为37的倍数时,使用双字而不是字节。
上述输入内容的输出结果应为 4774 次循环。
测试输入内容
以下输入内容可用于较长的真实场景测试:
6DDEFED46602FB0E9B671E1A05B1FE10
38040301052B0163A103400502060501
05ED2F440000B17B0000000100000036
输出结果应为 574395734
计分
程序的输出结果必须正确。将根据处理时间进行计分。建议在输入内容已准备就绪可供处理时开始计时,并在输出结果准备就绪可供打印时停止计时。打印算出的时间以获得准确的分数。否则将按程序的总执行时间进行计分。


http://software.intel.com/zh-cn/contests/Intel-Threading-Challenge-Students-2011/codecontest.php
...全文
116 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

566

社区成员

发帖
与我相关
我的任务
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
  • 英特尔技术社区
  • shere_lin
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧