2011英特尔®线程挑战赛(入门级)
第三阶段问题
流水数字
计算机系统使用 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
流水数字
计算机系统使用 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
...全文
相关推荐
英特尔®可信执行技术(TXT)软件开发指南.pdf
英特尔®可信执行技术(Intel®TXT)是一种由英特尔开发的安全技术,它的设计目的是为了增强计算机系统的安全性,特别是在操作系统启动和运行阶段提供安全防护。
英特尔® X79 高速芯片组数据表
英特尔产品不设计和不打算用于可能导致人身伤害或死亡的应用中。除非事先与英特尔以书面形式达成协议,否则英特尔不承担任何责任。
Intel® Advanced Vector Extensions Programming Reference.pdf
超线程技术(Hyper-Threading Technology):手册中提到超线程技术需要配备支持超线程技术的英特尔处理器、启用HT技术的芯片组、BIOS和操作系统。
Intel® 64 and IA-32 Architectures - Basic Architecture
- Intel® 超线程技术(Hyper-Threading Technology)需要计算机系统具备支持此技术的英特尔处理器、启用超线程技术的芯片组、BIOS 和操作系统。
Intel® Graphics Media Accelerator 3150 Win7 32/64驱动程序
Intel® Graphics Media Accelerator 3150(GMA 3150)是一款由英特尔公司推出的集成显卡,主要用于入门级和中低端的笔记本电脑和平板电脑。


